@hotstaq/admin-panel 0.2.12 → 0.3.0

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 (36) hide show
  1. package/build/WebExport.d.ts.map +1 -1
  2. package/build/WebExport.js +4 -3
  3. package/build/WebExport.js.map +1 -1
  4. package/build/components/admin-button.d.ts +8 -0
  5. package/build/components/admin-button.d.ts.map +1 -1
  6. package/build/components/admin-button.js +23 -1
  7. package/build/components/admin-button.js.map +1 -1
  8. package/build/components/admin-dropdown.d.ts +30 -0
  9. package/build/components/admin-dropdown.d.ts.map +1 -0
  10. package/build/components/admin-dropdown.js +89 -0
  11. package/build/components/admin-dropdown.js.map +1 -0
  12. package/build/components/admin-edit.d.ts +23 -6
  13. package/build/components/admin-edit.d.ts.map +1 -1
  14. package/build/components/admin-edit.js +84 -55
  15. package/build/components/admin-edit.js.map +1 -1
  16. package/build/components/admin-table.d.ts +2 -2
  17. package/build/components/admin-table.d.ts.map +1 -1
  18. package/build/components/admin-table.js +10 -8
  19. package/build/components/admin-table.js.map +1 -1
  20. package/build/components/admin-text.d.ts +5 -12
  21. package/build/components/admin-text.d.ts.map +1 -1
  22. package/build/components/admin-text.js +8 -4
  23. package/build/components/admin-text.js.map +1 -1
  24. package/build/index.d.ts +2 -1
  25. package/build/index.d.ts.map +1 -1
  26. package/build/index.js +3 -1
  27. package/build/index.js.map +1 -1
  28. package/build-web/AdminPanelComponents.js +2 -2
  29. package/package.json +1 -1
  30. package/src/WebExport.ts +4 -3
  31. package/src/components/admin-button.ts +37 -1
  32. package/src/components/admin-dropdown.ts +115 -0
  33. package/src/components/admin-edit.ts +118 -71
  34. package/src/components/admin-table.ts +12 -11
  35. package/src/components/admin-text.ts +15 -16
  36. package/src/index.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"admin-table.js","sourceRoot":"","sources":["../../src/components/admin-table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAiF;AAGjF,MAAa,UAAW,SAAQ,sBAAY;IAwE3C,YAAa,IAA4B,EAAE,GAAW;QAErD,KAAK,CAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QA9CnB;;;;;;;;;;;;;WAaG;QACH,gBAAW,GAA+C,EAAE,CAAC;QAkC5D,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG;YACb,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE;SACZ,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,yBAAyB;QACzB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,SAAS,CAAE,iBAA8B;QAExC,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAE,IAAI,CAAC,CAAC;QAEnC,aAAa;QACb,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAE,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAE,iBAAiB,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAE,UAA2B,EAAE,WAAwB;QAEvE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAE,IAAI,CAAC,CAAC;QAEnC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,YAAY,CAAE,SAAiB;QAE9B,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,EAC5C;YACC,IAAI,YAAY,GAAoB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC;YAElF,IAAI,YAAY,IAAI,IAAI;gBACvB,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;SAClC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED;;OAEG;IACG,SAAS,CAAE,WAAwB,EAAE,QAAgB;;YAE1D,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAC9B;gBACC,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ;oBAC3C,IAAI,CAAC,aAAa,GAAyD,IAAI,QAAQ,CAAE,IAAI,CAAC,aAAa,CAAE,CAAC;gBAE/G,IAAI,IAAI,GAAU,IAAI,CAAC;gBAEvB,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,IAAI;oBACrC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;gBAE1C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAEvD,IAAI,MAAM,KAAK,KAAK;oBACnB,OAAO;aACR;YAED,wEAAwE;YACxE,4DAA4D;YAC5D;gBACC,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAAE,IAAI,CAAC,CAAC;gBAE7C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAC7C;oBACC,IAAI,GAAG,GAAwB,IAAI,CAAC,IAAI,CAAC,CAAC;oBAE1C,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAE,eAAe,CAAC,KAAK,IAAI;wBACpD,GAAG,CAAC,SAAS,CAAC,MAAM,CAAE,eAAe,CAAC,CAAC;iBACxC;gBAED,WAAW,CAAC,SAAS,CAAC,GAAG,CAAE,eAAe,CAAC,CAAC;aAC5C;YAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEzB;;;;;;;;;;;;;;;;;;;;;eAqBG;QACJ,CAAC;KAAA;IAED;;OAEG;IACH,WAAW;QAEV,IAAI,KAAK,GAAW,IAAI,CAAC,QAAQ,CAAC;QAElC,IAAI,KAAK,GAAG,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC;QAEf,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH;;;;;;;;;;;OAWG;IAEH;;OAEG;IACH,cAAc;QAEb,IAAI,IAAI,GAAU,EAAE,CAAC;QACrB,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnE,oCAAoC;QACpC,IAAI,UAAU,GAAG,KAAK,CAAC,oBAAoB,CAAE,OAAO,CAAC,CAAC;QAEtD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,EACnD;YACC,IAAI,QAAQ,GAAqB,UAAU,CAAC,IAAI,CAAC,CAAC;YAElD,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,EAC5B;gBACC,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAC7B;oBACC,gCAAgC;oBAChC,IAAI,YAAY,GAAW,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAE,YAAY,CAAC,CAAC;oBAC5F,IAAI,SAAS,GAAY,QAAQ,CAAE,YAAY,CAAC,CAAC;oBAEjD,IAAI,CAAC,IAAI,CAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;iBAC/C;aACD;SACD;QAED,OAAO,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED;;OAEG;IACH,MAAM,CAAE,KAAa;QAEpB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAE,MAAiC;QAExC,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,KAAK,GAAW,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAC5C,IAAI,MAAM,GAAG,iGAAiG,KAAK,MAAM,CAAC;QAE1H,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ;YACtC,IAAI,CAAC,QAAQ,GAAG,iBAAO,CAAC,YAAY,CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YACzB,MAAM,IAAI,sCAAsC,CAAC;QAElD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,EAC9D;YACC,kDAAkD;YAClD,IAAI,GAAG,GAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE9C,IAAI,GAAG,IAAI,IAAI;gBACd,SAAS;YAEV,aAAa;YACb,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,oDAAoD;YACpD,IAAI,QAAQ,GAAa,GAAG,CAAC,KAAK,CAAE,GAAG,CAAC,CAAC;YAEzC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EACvB;gBACC,aAAa;gBACb,IAAI,SAAS,GAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEzC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,EACjD;oBACC,MAAM,IAAI,GAAW,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAEpC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;iBAC5B;gBAED,KAAK,GAAG,SAAS,CAAC;aAClB;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,EACtC;gBACC,kDAAkD;gBAClD,IAAI,SAAS,GAAW,IAAI,CAAC,YAAY,CAAE,GAAG,CAAC,CAAC;gBAEhD,IAAI,SAAS,IAAI,IAAI;oBACpB,SAAS,GAAG,MAAM,CAAC;gBAEpB,IAAI,SAAS,KAAK,QAAQ,EAC1B;oBACC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC1C,IAAI,aAAa,GAAY,IAAI,CAAC;oBAElC,IAAI,QAAQ,IAAI,IAAI,EACpB;wBACC,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,EAC5B;4BACC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,QAAQ;gCACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAwB,IAAI,QAAQ,CAAE,QAAQ,CAAC,OAAO,CAAE,CAAC;4BAE1F,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAE,KAAK,CAAC,CAAC;yBACjC;wBAED,IAAI,QAAQ,CAAC,QAAQ,IAAI,IAAI,EAC7B;4BACC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,QAAQ;gCAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,GAA8C,IAAI,QAAQ,CAAE,QAAQ,CAAC,QAAQ,CAAE,CAAC;4BAElH,aAAa,GAAG,KAAK,CAAC;4BACtB,MAAM,SAAS,GAAW,QAAQ,CAAC,QAAQ,CAAE,KAAK,EAAE,KAAK,CAAC,CAAC;4BAC3D,MAAM,IAAI,SAAS,CAAC;yBACpB;qBACD;oBAED,IAAI,aAAa,KAAK,IAAI;wBACzB,MAAM,IAAI,qBAAqB,KAAK,KAAK,KAAK,OAAO,CAAC;iBACvD;aACD;SACD;QAED,MAAM,IAAI,OAAO,CAAC;QAElB,IAAI,MAAM,GAAG,iBAAO,CAAC,OAAO,CAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAE7C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAE;YACrB,MAAM,EAAE,MAAM;YACd,OAAO,EAAgB,MAAO;SAC9B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACG,SAAS;;YAEd,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAEnE,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;QACtB,CAAC;KAAA;IAED;;OAEG;IACG,WAAW;;YAEhB,IAAI,IAAI,GAAG,IAAI,CAAC;YAEhB,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,EACxB;gBACC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ;oBACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE5C,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;aACrB;iBAED;gBACC,IAAI,OAAO,GAAW,aAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAElD,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE;oBACtB,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;gBAExB,IAAI,GAAG,MAAM,aAAG,CAAC,WAAW,CAAE,OAAO,EAAE;oBACrC,MAAM,EAAE,IAAI,CAAC,MAAM;iBACnB,CAAC,CAAC;aACJ;YAED,IAAI,CAAC,SAAS,EAAG,CAAC;YAElB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,EAC7C;gBACC,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBAExB,IAAI,CAAC,MAAM,CAAE,MAAM,CAAC,CAAC;aACrB;QACF,CAAC;KAAA;IAED;;OAEG;IACH,WAAW,CAAE,iBAA8B,EAAE,WAAwB;QAEpE,UAAU,CAAE,GAAS,EAAE;YAErB,MAAM,IAAI,CAAC,WAAW,EAAG,CAAC;QAC3B,CAAC,CAAA,EAAE,EAAE,CAAC,CAAC;QAER,OAAO,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,MAAM;QAEL,IAAI,mBAAmB,GAAW,EAAE,CAAC;QAErC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YACzB,mBAAmB,GAAG,WAAW,CAAC;QAEnC,OAAO,CAAC;eACK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;SAC7B,IAAI,CAAC,KAAK;;kBAED,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;;;QAGjC,mBAAmB;;;;;;;;SAQlB,CAAC,CAAC;IACV,CAAC;CACD;AA/bD,gCA+bC"}
1
+ {"version":3,"file":"admin-table.js","sourceRoot":"","sources":["../../src/components/admin-table.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,14 @@
1
1
  import { HotStaq, HotAPI, HotComponent, HotComponentOutput } from "hotstaq";
2
2
  export declare class AdminText extends HotComponent {
3
- /**
4
- * The associated database field.
5
- */
6
- field: string;
7
- /**
8
- * The type of field. Can be:
9
- * * text
10
- * * remove
11
- *
12
- * Default: text
13
- */
14
- field_type: string;
15
3
  /**
16
4
  * If set to 1, this will not output the field.
17
5
  */
18
6
  no_output: string;
7
+ /**
8
+ * The classes to set for the input.
9
+ * @default "form-control"
10
+ */
11
+ class: string;
19
12
  constructor(copy: HotComponent | HotStaq, api: HotAPI);
20
13
  /**
21
14
  * Corrects the placement of the text elements for modals.
@@ -1 +1 @@
1
- {"version":3,"file":"admin-text.d.ts","sourceRoot":"","sources":["../../src/components/admin-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAO,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEjF,qBAAa,SAAU,SAAQ,YAAY;IAE1C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;gBAEL,IAAI,EAAE,YAAY,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM;IAUtD;;OAEG;IACH,WAAW,CAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,WAAW;IAmBnF,MAAM,IAAK,MAAM,GAAG,kBAAkB,EAAE;CAcxC"}
1
+ {"version":3,"file":"admin-text.d.ts","sourceRoot":"","sources":["../../src/components/admin-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAO,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEjF,qBAAa,SAAU,SAAQ,YAAY;IAE1C;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;gBAED,IAAI,EAAE,YAAY,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM;IAStD;;OAEG;IACH,WAAW,CAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,GAAG,WAAW;IAmBnF,MAAM,IAAK,MAAM,GAAG,kBAAkB,EAAE;CAqBxC"}
@@ -6,9 +6,8 @@ class AdminText extends hotstaq_1.HotComponent {
6
6
  constructor(copy, api) {
7
7
  super(copy, api);
8
8
  this.tag = "admin-text";
9
- this.field = "";
10
- this.field_type = "text";
11
9
  this.no_output = "0";
10
+ this.class = "form-control";
12
11
  }
13
12
  /**
14
13
  * Corrects the placement of the text elements for modals.
@@ -31,9 +30,14 @@ class AdminText extends hotstaq_1.HotComponent {
31
30
  if (this.value != null)
32
31
  value = this.value;
33
32
  if (this.no_output === "1")
34
- return (`<div><input class="form-control" type = "hidden" value = "${value}" /></div>`);
33
+ return (`<div><input class="${this.class}" type = "hidden" value = "${value}" /></div>`);
34
+ const field = this.htmlElements[0].getAttribute("hot-field");
35
+ let field_type = this.htmlElements[0].getAttribute("hot-field-type");
36
+ if (field_type == null)
37
+ field_type = "text";
35
38
  return (`<div>
36
- <label class="form-label">${this.inner}</label><input class="form-control" type = "text" value = "${value}" />
39
+ <label class="form-label">${this.inner}</label>
40
+ <input class="${this.class}" type = "text" hot-field = "${field}" hot-field-type = "${field_type}" value = "${value}" />
37
41
  </div>`);
38
42
  }
39
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"admin-text.js","sourceRoot":"","sources":["../../src/components/admin-text.ts"],"names":[],"mappings":";;;AAAA,qCAAiF;AAEjF,MAAa,SAAU,SAAQ,sBAAY;IAmB1C,YAAa,IAA4B,EAAE,GAAW;QAErD,KAAK,CAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAElB,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,WAAW,CAAE,iBAA8B,EAAE,WAAwB;QAEpE,IAAI,cAAc,GAAG,iBAAiB,CAAC,gBAAgB,CAAE,8BAA8B,CAAC,CAAC;QAEzF,wEAAwE;QACxE,gDAAgD;QAChD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAC7B;YACC,IAAI,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAClC,iBAAiB,CAAC,WAAW,CAAE,WAAW,CAAC,CAAC;YAC5C,SAAS,CAAC,WAAW,CAAE,WAAW,CAAC,CAAC;YAEpC,aAAa;YACb,iBAAiB,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,aAAa,CAAE,OAAO,CAAC,CAAC;SAC/F;QAED,OAAO,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,MAAM;QAEL,IAAI,KAAK,GAAW,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YACrB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEpB,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG;YACzB,OAAO,CAAC,6DAA6D,KAAK,YAAY,CAAC,CAAC;QAEzF,OAAO,CAAC;+BACqB,IAAI,CAAC,KAAK,8DAA8D,KAAK;SACnG,CAAC,CAAC;IACV,CAAC;CACD;AAjED,8BAiEC"}
1
+ {"version":3,"file":"admin-text.js","sourceRoot":"","sources":["../../src/components/admin-text.ts"],"names":[],"mappings":";;;AAAA,qCAAiF;AAEjF,MAAa,SAAU,SAAQ,sBAAY;IAY1C,YAAa,IAA4B,EAAE,GAAW;QAErD,KAAK,CAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAElB,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,cAAc,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,WAAW,CAAE,iBAA8B,EAAE,WAAwB;QAEpE,IAAI,cAAc,GAAG,iBAAiB,CAAC,gBAAgB,CAAE,8BAA8B,CAAC,CAAC;QAEzF,wEAAwE;QACxE,gDAAgD;QAChD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAC7B;YACC,IAAI,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAClC,iBAAiB,CAAC,WAAW,CAAE,WAAW,CAAC,CAAC;YAC5C,SAAS,CAAC,WAAW,CAAE,WAAW,CAAC,CAAC;YAEpC,aAAa;YACb,iBAAiB,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,aAAa,CAAE,OAAO,CAAC,CAAC;SAC/F;QAED,OAAO,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,MAAM;QAEL,IAAI,KAAK,GAAW,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YACrB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEpB,IAAI,IAAI,CAAC,SAAS,KAAK,GAAG;YACzB,OAAO,CAAC,sBAAsB,IAAI,CAAC,KAAK,8BAA8B,KAAK,YAAY,CAAC,CAAC;QAE1F,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAE,WAAW,CAAC,CAAC;QAC9D,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAE,gBAAgB,CAAC,CAAC;QAEtE,IAAI,UAAU,IAAI,IAAI;YACrB,UAAU,GAAG,MAAM,CAAC;QAErB,OAAO,CAAC;+BACqB,IAAI,CAAC,KAAK;mBACtB,IAAI,CAAC,KAAK,gCAAgC,KAAK,uBAAuB,UAAU,cAAc,KAAK;SAC7G,CAAC,CAAC;IACV,CAAC;CACD;AAhED,8BAgEC"}
package/build/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { AdminButton } from "./components/admin-button";
2
+ import { AdminDropdown } from "./components/admin-dropdown";
2
3
  import { AdminDashboard } from "./components/admin-dashboard";
3
4
  import { AdminEdit } from "./components/admin-edit";
4
5
  import { AdminTable } from "./components/admin-table";
5
6
  import { AdminTableField } from "./components/admin-table-field";
6
7
  import { AdminTableRow } from "./components/admin-table-row";
7
8
  import { AdminText } from "./components/admin-text";
8
- export { AdminButton, AdminDashboard, AdminEdit, AdminTable, AdminTableField, AdminTableRow, AdminText };
9
+ export { AdminButton, AdminDropdown, AdminDashboard, AdminEdit, AdminTable, AdminTableField, AdminTableRow, AdminText };
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EACL,WAAW,EACX,cAAc,EACd,SAAS,EACT,UAAU,EACV,eAAe,EACf,aAAa,EACb,SAAS,EACT,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,SAAS,EACT,UAAU,EACV,eAAe,EACf,aAAa,EACb,SAAS,EACT,CAAC"}
package/build/index.js CHANGED
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AdminText = exports.AdminTableRow = exports.AdminTableField = exports.AdminTable = exports.AdminEdit = exports.AdminDashboard = exports.AdminButton = void 0;
3
+ exports.AdminText = exports.AdminTableRow = exports.AdminTableField = exports.AdminTable = exports.AdminEdit = exports.AdminDashboard = exports.AdminDropdown = exports.AdminButton = void 0;
4
4
  const admin_button_1 = require("./components/admin-button");
5
5
  Object.defineProperty(exports, "AdminButton", { enumerable: true, get: function () { return admin_button_1.AdminButton; } });
6
+ const admin_dropdown_1 = require("./components/admin-dropdown");
7
+ Object.defineProperty(exports, "AdminDropdown", { enumerable: true, get: function () { return admin_dropdown_1.AdminDropdown; } });
6
8
  const admin_dashboard_1 = require("./components/admin-dashboard");
7
9
  Object.defineProperty(exports, "AdminDashboard", { enumerable: true, get: function () { return admin_dashboard_1.AdminDashboard; } });
8
10
  const admin_edit_1 = require("./components/admin-edit");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4DAAwD;AAStD,4FATO,0BAAW,OASP;AARb,kEAA8D;AAS5D,+FATO,gCAAc,OASP;AARhB,wDAAoD;AASlD,0FATO,sBAAS,OASP;AARX,0DAAsD;AASpD,2FATO,wBAAU,OASP;AARZ,sEAAiE;AAS/D,gGATO,mCAAe,OASP;AARjB,kEAA6D;AAS3D,8FATO,+BAAa,OASP;AARf,wDAAoD;AASlD,0FATO,sBAAS,OASP"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,4DAAwD;AAUtD,4FAVO,0BAAW,OAUP;AATb,gEAA4D;AAU1D,8FAVO,8BAAa,OAUP;AATf,kEAA8D;AAU5D,+FAVO,gCAAc,OAUP;AAThB,wDAAoD;AAUlD,0FAVO,sBAAS,OAUP;AATX,0DAAsD;AAUpD,2FAVO,wBAAU,OAUP;AATZ,sEAAiE;AAU/D,gGAVO,mCAAe,OAUP;AATjB,kEAA6D;AAU3D,8FAVO,+BAAa,OAUP;AATf,wDAAoD;AAUlD,0FAVO,sBAAS,OAUP"}
@@ -1,2 +1,2 @@
1
- var AdminPanelComponentsWeb;(()=>{"use strict";var t={176:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function d(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminButton=void 0;const l=n(607);class o extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-button"}buttonClicked(){return i(this,void 0,void 0,(function*(){}))}output(){return`<button id = "${this.htmlElements[0].id}" onclick = "this.buttonClicked ();"></button>`}}e.AdminButton=o},50:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDashboard=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dashboard",this.title="",this.base=""}onPostPlace(t,e){return null==i.Hot.Data.AdminPanel&&(i.Hot.Data.AdminPanel={}),null==i.Hot.Data.AdminPanel.baseUrl&&(i.Hot.Data.AdminPanel.baseUrl=this.base),null==i.Hot.Data.AdminPanel.addUrl&&(i.Hot.Data.AdminPanel.addUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/add`),null==i.Hot.Data.AdminPanel.editUrl&&(i.Hot.Data.AdminPanel.editUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/edit`),null==i.Hot.Data.AdminPanel.removeUrl&&(i.Hot.Data.AdminPanel.removeUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/remove`),null==i.Hot.Data.AdminPanel.listUrl&&(i.Hot.Data.AdminPanel.listUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/list`),null}output(){return`\n\t\t<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">\n\t\t\t<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">\n\t\t\t\t<h1 class="h2">${this.title}</h1>\n\t\t\t\t<div class="btn-toolbar mb-2 mb-md-0">\n\t\t\t\t\t<div class="btn-group me-2">\n\t\t\t\t\t\t<hot-place-here name = "buttons"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<hot-place-here name = "body"></hot-place-here>\n\t\t</main>`}}e.AdminDashboard=l},703:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function d(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}a((i=i.apply(t,e||[])).next())}))},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminEdit=void 0;const o=n(607),s=l(n(685));class d extends o.HotComponent{constructor(t,e){super(t,e),this.onAddClicked=null,this.onEditClicked=null,this.onRemoveClicked=null,this.tag="admin-edit",this.title="",this.button_title="",this.attached_list="",this.schema="",this.fieldElements={},this.modalId="",this.modal=null,this.modalType="add",this.closeOnSave=!0,this.selectedFields=[]}addClicked(){return i(this,void 0,void 0,(function*(){if(null==this.onAddClicked||!1!==(yield this.onAddClicked())){this.modalType="add";for(let t in this.fieldElements)this.fieldElements[t].value="";this.selectedFields=[],s.default.Modal.getInstance(`#${this.modalId}`).show()}}))}editClicked(){return i(this,void 0,void 0,(function*(){if(null!=this.onEditClicked&&!1===(yield this.onEditClicked()))return;this.modalType="edit";let t=document.getElementById(this.attached_list).hotComponent.getSelected();if(null!=t){for(let e in this.fieldElements){let n=this.fieldElements[e];if(null!=n){let i=t[e];n.value=i}}this.selectedFields=[t],s.default.Modal.getInstance(`#${this.modalId}`).show()}}))}removeClicked(){return i(this,void 0,void 0,(function*(){if(null!=this.onRemoveClicked&&!1===(yield this.onRemoveClicked()))return;this.modalType="remove";let t=document.getElementById(this.attached_list).hotComponent,e=t.getCheckedRows(),n=[];if(e.length>0)for(let t=0;t<e.length;t++){let i=e[t];n.push(i)}let i=t.getSelected();if(null!=i&&(n=[i]),n.length>0&&!0===confirm("Are you sure you want to remove this item?")){for(let e=0;e<n.length;e++){let i=n[e];for(let e in i){let n=t.getFieldType(e);null!=n&&"remove"===n&&delete i[e]}let l=o.Hot.Data.AdminPanel.removeUrl;yield o.Hot.jsonRequest(l,{schema:this.schema,whereFields:i})}yield t.refreshList()}}))}onSave(){return i(this,void 0,void 0,(function*(){let t={};for(let e in this.fieldElements){let n=this.fieldElements[e];if(null!=n){let i=n.value;if("remove"===n.parentNode.hotComponent.field_type)continue;t[e]=i}}if("add"===this.modalType){let e=o.Hot.Data.AdminPanel.addUrl;yield o.Hot.jsonRequest(e,{schema:this.schema,fields:t})}if("edit"===this.modalType){if(0===this.selectedFields.length)return void alert("No item(s) selected!");let e=this.selectedFields[0],n={};for(let t in e){let i=this.fieldElements[t],l=e[t];null!=i&&"remove"===i.parentNode.hotComponent.field_type||(n[t]=l)}let i=o.Hot.Data.AdminPanel.editUrl;yield o.Hot.jsonRequest(i,{schema:this.schema,whereFields:n,fields:t})}let e=document.getElementById(this.attached_list).hotComponent;yield e.refreshList(),!0===this.closeOnSave&&s.default.Modal.getInstance(`#${this.modalId}`).hide()}))}onPostPlace(t,e){return this.modal=new s.default.Modal($(`#${this.modalId}`)[0],{backdrop:!0,keyboard:!0,focus:!0}),null}output(){if(""===this.name)throw new Error("You must specify a name for each admin-edit element!");return this.modalId=`${this.name}Modal`,[{html:`\n\t\t\t\x3c!-- ${this.title} Modal Start --\x3e\n\t\t\t<div class="modal fade" id="${this.modalId}" tabindex="-1" aria-labelledby="${this.name}ModalLabel" aria-hidden="true">\n\t\t\t\t<div class="modal-dialog">\n\t\t\t\t\t<div class="modal-content">\n\t\t\t\t\t<div class="modal-header">\n\t\t\t\t\t\t<h5 class="modal-title" id="${this.name}ModalLabel">${this.title}</h5>\n\t\t\t\t\t\t<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-body">\n\t\t\t\t\t\t<hot-place-here name = "modalBody" type = "modal"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-footer">\n\t\t\t\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>\n\t\t\t\t\t\t<button type="button" class="btn btn-primary" onclick = "document.getElementById('${this.modalId}').onSave ();">${this.button_title}</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\x3c!-- ${this.title} Modal End --\x3e`,documentSelector:"body"},{html:`<button id = "${this.modalId}-add-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.addClicked ();">Add</button>`,documentSelector:'hot-place-here[name="buttons"]'},{html:`<button id = "${this.modalId}-edit-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.editClicked ();">Edit</button>`,documentSelector:'hot-place-here[name="buttons"]'},{html:`<button id = "${this.modalId}-remove-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.removeClicked ();">Remove</button>`,documentSelector:'hot-place-here[name="buttons"]'}]}}e.AdminEdit=d},505:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableField=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-field",this.field=0,this.field_type="text",this.no_output="0",this.oninput=null,this.onoutput=null}onPostPlace(t,e){let n=null;return n=null!=t.parentNode.parentNode.hotComponent?t.parentNode.parentNode.hotComponent:t.parentNode.parentNode.parentNode.parentNode.hotComponent,null!=n&&n.addHeaderDataOnly(this,e),null}output(){return"1"===this.no_output?[{html:"<div></div>",placeHereParent:"afterTable"}]:[{html:`<th>${this.inner}</th>`,placeHereParent:"header"}]}}e.AdminTableField=l},412:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableRow=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-row",this.fields=[]}onPostPlace(t,e){return t.parentNode.parentNode.parentNode.hotComponent.rowElements.push({fields:this.fields,element:e}),null}output(){let t="";this.fields.length>0&&(t+='<td><input type = "checkbox" /></td>');for(let e=0;e<this.fields.length;e++){let n=this.fields[e];for(let e in n)t+=`<td>${n[e]}</td>`}return[{html:`<tr>${t}</tr>`,placeHereParent:"results"}]}}e.AdminTableRow=l},952:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function d(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTable=void 0;const l=n(607);class o extends l.HotComponent{constructor(t,e){super(t,e),this.rowElements=[],this.tag="admin-table",this.title="",this.schema="",this.headers={fields:{},elements:{},indicies:[]},this.rowElements=[],this.listdata="",this.listurl="",this.checkbox=!0,this.onselectedrow=null,this.selected=-1}addHeader(t){let e=this.htmlElements[0].getElementsByTagName("thead")[0];this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.hotComponent.field),e.appendChild(t)}addHeaderDataOnly(t,e){this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.field),this.headers.fields[t.field]=t,this.headers.elements[t.field]=e}getFieldType(t){if(null!=this.headers.elements[t]){let e=this.headers.elements[t].hotComponent;if(null!=e)return e.field_type}return null}selectRow(t,e){return i(this,void 0,void 0,(function*(){if(null!=this.onselectedrow){"string"==typeof this.onselectedrow&&(this.onselectedrow=new Function(this.onselectedrow));let t=null;if(null!=this.rowElements[e]&&(t=this.rowElements[e].fields),!1===(yield this.onselectedrow(e,t)))return}{let e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("tr");for(let t=0;t<e.length;t++){let n=e[t];!0===n.classList.contains("table-primary")&&n.classList.remove("table-primary")}t.classList.add("table-primary")}this.selected=e}))}getSelected(){let t=this.selected;return t<0?null:this.rowElements[t].fields}getCheckedRows(){let t=[],e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("input");for(let n=0;n<e.length;n++){let i=e[n];if(null!=i.checked&&!0===i.checked){let e=i.parentElement.parentElement.getAttribute("data-index"),n=parseInt(e);t.push(this.rowElements[n].fields)}}return t}getRow(t){return this.rowElements[t].fields}addRow(t){let e=this.htmlElements[1].getElementsByTagName("tbody")[0],n=this.rowElements.length,i=`<tr onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selectRow (this, ${n});">`;"string"==typeof this.checkbox&&(this.checkbox=l.HotStaq.parseBoolean(this.checkbox)),!0===this.checkbox&&(i+='<td><input type = "checkbox" /></td>');for(let e=0;e<this.headers.indicies.length;e++){let l=this.headers.indicies[e];if(null==l)continue;let o=t[l],s=l.split(".");if(s.length>1){let e=t[s[0]];for(let t=1;t<s.length;t++)e=e[s[t]];o=e}if(null!=this.headers.elements[l]){let t=this.getFieldType(l);if(null==t&&(t="text"),"remove"!==t){const t=this.headers.fields[l];let e=!0;null!=t&&(null!=t.oninput&&("string"==typeof t.oninput&&(this.headers.fields[l].oninput=new Function(t.oninput)),o=t.oninput(o)),null!=t.onoutput)&&("string"==typeof t.onoutput&&(this.headers.fields[l].onoutput=new Function(t.onoutput)),e=!1,i+=t.onoutput(n,o)),!0===e&&(i+=`<td data-index = "${n}">${o}</td>`)}}}i+="</tr>";let o=l.HotStaq.addHtml(e,i);this.rowElements.push({fields:t,element:o})}clearRows(){return i(this,void 0,void 0,(function*(){this.htmlElements[1].getElementsByTagName("tbody")[0].innerHTML=""}))}refreshList(){return i(this,void 0,void 0,(function*(){let t=null;if(""!==this.listdata)"string"==typeof this.listdata&&(this.listdata=JSON.parse(this.listdata)),t=this.listdata;else{let e=l.Hot.Data.AdminPanel.listUrl;""!==this.listurl&&(e=this.listurl),t=yield l.Hot.jsonRequest(e,{schema:this.schema})}this.clearRows();for(let e=0;e<t.length;e++){let n=t[e];this.addRow(n)}}))}onPostPlace(t,e){return setTimeout((()=>i(this,void 0,void 0,(function*(){yield this.refreshList()}))),50),null}output(){let t="";return!0===this.checkbox&&(t="<th></th>"),`\n\t\t<div id = "${this.htmlElements[0].id}">\n\t\t\t<h2>${this.title}</h2>\n\t\t\t<div class="table-responsive">\n\t\t\t<table id = "${this.htmlElements[0].id}Table" class="table table-striped table-sm">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr hot-place-here = "header">\n\t\t\t\t\t\t${t}\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody hot-place-here = "results">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<hot-place-here name = "afterTable"></hot-place-here>\n\t\t\t</div>\n\t\t</div>`}}e.AdminTable=o},80:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminText=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-text",this.field="",this.field_type="text",this.no_output="0"}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e),t.hotComponent.fieldElements[this.field]=e.querySelector("input")}return null}output(){let t="";return null!=this.value&&(t=this.value),"1"===this.no_output?`<div><input class="form-control" type = "hidden" value = "${t}" /></div>`:`<div>\n\t\t\t<label class="form-label">${this.inner}</label><input class="form-control" type = "text" value = "${t}" />\n\t\t</div>`}}e.AdminText=l},607:t=>{t.exports=HotStaqWeb},685:t=>{t.exports=bootstrap}},e={};function n(i){var l=e[i];if(void 0!==l)return l.exports;var o=e[i]={exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}var i={};(()=>{var t=i;Object.defineProperty(t,"__esModule",{value:!0}),t.AdminText=t.AdminTableRow=t.AdminTableField=t.AdminTable=t.AdminEdit=t.AdminDashboard=t.AdminButton=void 0;const e=n(176);Object.defineProperty(t,"AdminButton",{enumerable:!0,get:function(){return e.AdminButton}});const l=n(50);Object.defineProperty(t,"AdminDashboard",{enumerable:!0,get:function(){return l.AdminDashboard}});const o=n(703);Object.defineProperty(t,"AdminEdit",{enumerable:!0,get:function(){return o.AdminEdit}});const s=n(952);Object.defineProperty(t,"AdminTable",{enumerable:!0,get:function(){return s.AdminTable}});const d=n(505);Object.defineProperty(t,"AdminTableField",{enumerable:!0,get:function(){return d.AdminTableField}});const a=n(412);Object.defineProperty(t,"AdminTableRow",{enumerable:!0,get:function(){return a.AdminTableRow}});const r=n(80);Object.defineProperty(t,"AdminText",{enumerable:!0,get:function(){return r.AdminText}})})(),AdminPanelComponentsWeb=i})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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YW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1idXR0b24udHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1kYXNoYm9hcmQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1lZGl0LnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtZmllbGQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS1yb3cudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLXRleHQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvZXh0ZXJuYWwgdmFyIFwiSG90U3RhcVdlYlwiIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViL2V4dGVybmFsIHZhciBcImJvb3RzdHJhcFwiIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5CdXR0b24gZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tYnV0dG9uXCI7XG5cdH1cblxuXHRhc3luYyBidXR0b25DbGlja2VkICgpOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gKGA8YnV0dG9uIGlkID0gXCIke3RoaXMuaHRtbEVsZW1lbnRzWzBdLmlkfVwiIG9uY2xpY2sgPSBcInRoaXMuYnV0dG9uQ2xpY2tlZCAoKTtcIj48L2J1dHRvbj5gKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCB9IGZyb20gXCJob3RzdGFxXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pbkRhc2hib2FyZCBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIHRpdGxlIG9mIHRoaXMgZGFzaGJvYXJkLlxuXHQgKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBiYXNlIHVybCB0byB1c2UgZm9yIHRoaXMgZGFzaGJvYXJkLlxuXHQgKi9cblx0YmFzZTogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLWRhc2hib2FyZFwiO1xuXHRcdHRoaXMudGl0bGUgPSBcIlwiO1xuXHRcdHRoaXMuYmFzZSA9IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoaXMgdGFibGUgZmllbGQgdG8gdGhlIHRhYmxlXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwgPSB7fTtcblxuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybCA9IHRoaXMuYmFzZTtcblxuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsLmFkZFVybCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbC5hZGRVcmwgPSBgJHtIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmx9L3YxL2RhdGEvYWRkYDtcblxuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsLmVkaXRVcmwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwuZWRpdFVybCA9IGAke0hvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybH0vdjEvZGF0YS9lZGl0YDtcblxuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsLnJlbW92ZVVybCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbC5yZW1vdmVVcmwgPSBgJHtIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmx9L3YxL2RhdGEvcmVtb3ZlYDtcblxuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsLmxpc3RVcmwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwubGlzdFVybCA9IGAke0hvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybH0vdjEvZGF0YS9saXN0YDtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIChgXG5cdFx0PG1haW4gY2xhc3M9XCJjb2wtbWQtOSBtcy1zbS1hdXRvIGNvbC1sZy0xMCBweC1tZC00XCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtd3JhcCBmbGV4LW1kLW5vd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgcHQtMyBwYi0yIG1iLTMgYm9yZGVyLWJvdHRvbVwiPlxuXHRcdFx0XHQ8aDEgY2xhc3M9XCJoMlwiPiR7dGhpcy50aXRsZX08L2gxPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXIgbWItMiBtYi1tZC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImJ0bi1ncm91cCBtZS0yXCI+XG5cdFx0XHRcdFx0XHQ8aG90LXBsYWNlLWhlcmUgbmFtZSA9IFwiYnV0dG9uc1wiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8aG90LXBsYWNlLWhlcmUgbmFtZSA9IFwiYm9keVwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0PC9tYWluPmApO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5pbXBvcnQgYm9vdHN0cmFwIGZyb20gXCJib290c3RyYXBcIjtcblxuaW1wb3J0IHsgQWRtaW5UYWJsZSB9IGZyb20gXCIuL2FkbWluLXRhYmxlXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pbkVkaXQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIGVkaXQgbW9kYWwuXG5cdCAqL1xuXHR0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGJ1dHRvbiB0aXRsZS5cblx0ICovXG5cdGJ1dHRvbl90aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIGxpc3QuXG5cdCAqL1xuXHRhdHRhY2hlZF9saXN0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYXR0YWNoZWQgc2NoZW1hLlxuXHQgKi9cblx0c2NoZW1hOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgZmllbGQgZWxlbWVudHMgaW4gdGhlIGVkaXQgbW9kYWwuXG5cdCAqL1xuXHRmaWVsZEVsZW1lbnRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnk7IH07XG5cdC8qKlxuXHQgKiBUaGUgbW9kYWwgaWQuXG5cdCAqL1xuXHRtb2RhbElkOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYm9vdHN0cmFwIG1vZGFsIGluc3RhbmNlLlxuXHQgKi9cblx0bW9kYWw6IGJvb3RzdHJhcC5Nb2RhbDtcblx0LyoqXG5cdCAqIElmIHNldCB0byB0cnVlLCB0aGlzIHdpbGwgY2xvc2UgdGhlIG1vZGFsIHdoZW4gc2F2ZSBpcyBjbGlja2VkLlxuXHQgKi9cblx0Y2xvc2VPblNhdmU6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgdHlwZSBvZiBtb2RhbCB0byBvcGVuLiBDYW4gYmU6XG5cdCAqICogYWRkXG5cdCAqICogZWRpdFxuXHQgKiAqIHJlbW92ZVxuXHQgKi9cblx0cHJvdGVjdGVkIG1vZGFsVHlwZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGVkIGZpZWxkcy5cblx0ICovXG5cdHByb3RlY3RlZCBzZWxlY3RlZEZpZWxkczogYW55W107XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tZWRpdFwiO1xuXHRcdHRoaXMudGl0bGUgPSBcIlwiO1xuXHRcdHRoaXMuYnV0dG9uX3RpdGxlID0gXCJcIjtcblx0XHR0aGlzLmF0dGFjaGVkX2xpc3QgPSBcIlwiO1xuXHRcdHRoaXMuc2NoZW1hID0gXCJcIjtcblxuXHRcdHRoaXMuZmllbGRFbGVtZW50cyA9IHt9O1xuXG5cdFx0dGhpcy5tb2RhbElkID0gXCJcIjtcblx0XHR0aGlzLm1vZGFsID0gbnVsbDtcblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiYWRkXCI7XG5cdFx0dGhpcy5jbG9zZU9uU2F2ZSA9IHRydWU7XG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCB0aGF0IGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUgYWRkIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGFkZCBtb2RhbCBvcGVucy5cblx0ICovXG5cdG9uQWRkQ2xpY2tlZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPiA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIGFkZCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdGFzeW5jIGFkZENsaWNrZWQgKCk6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGlmICh0aGlzLm9uQWRkQ2xpY2tlZCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uQWRkQ2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiYWRkXCI7XG5cblx0XHQvLyBDbGVhciB0aGUgdmFsdWVzIGluIGVhY2ggZmllbGQuXG5cdFx0Zm9yIChsZXQga2V5IGluIHRoaXMuZmllbGRFbGVtZW50cylcblx0XHR7XG5cdFx0XHRsZXQgZmllbGRFbGVtZW50ID0gdGhpcy5maWVsZEVsZW1lbnRzW2tleV07XG5cblx0XHRcdGZpZWxkRWxlbWVudC52YWx1ZSA9IFwiXCI7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IFtdO1xuXG5cdFx0Ym9vdHN0cmFwLk1vZGFsLmdldEluc3RhbmNlIChgIyR7dGhpcy5tb2RhbElkfWApLnNob3cgKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGVkaXQgbW9kYWwgb3BlbnMuXG5cdCAqL1xuXHRvbkVkaXRDbGlja2VkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gbnVsbDtcblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdGFzeW5jIGVkaXRDbGlja2VkICgpOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vbkVkaXRDbGlja2VkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25FZGl0Q2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiZWRpdFwiO1xuXHRcdGxldCBhdHRhY2hlZExpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAodGhpcy5hdHRhY2hlZF9saXN0KTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblx0XHRsZXQgc2VsZWN0ZWRGaWVsZCA9IGhvdENvbXBvbmVudC5nZXRTZWxlY3RlZCAoKTtcblxuXHRcdGlmIChzZWxlY3RlZEZpZWxkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0Zm9yIChsZXQga2V5IGluIHRoaXMuZmllbGRFbGVtZW50cylcblx0XHRcdHtcblx0XHRcdFx0bGV0IGZpZWxkRWxlbWVudCA9IHRoaXMuZmllbGRFbGVtZW50c1trZXldO1xuXG5cdFx0XHRcdGlmIChmaWVsZEVsZW1lbnQgIT0gbnVsbClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRsZXQgdmFsdWUgPSBzZWxlY3RlZEZpZWxkW2tleV07XG5cblx0XHRcdFx0XHRmaWVsZEVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNlbGVjdGVkRmllbGRzID0gW3NlbGVjdGVkRmllbGRdO1xuXG5cdFx0XHRib290c3RyYXAuTW9kYWwuZ2V0SW5zdGFuY2UgKGAjJHt0aGlzLm1vZGFsSWR9YCkuc2hvdyAoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSByZW1vdmUgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgcmVtb3ZlIG1vZGFsIG9wZW5zLlxuXHQgKi9cblx0b25SZW1vdmVDbGlja2VkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gbnVsbDtcblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0YXN5bmMgcmVtb3ZlQ2xpY2tlZCAoKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25SZW1vdmVDbGlja2VkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25SZW1vdmVDbGlja2VkICgpO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubW9kYWxUeXBlID0gXCJyZW1vdmVcIjtcblxuXHRcdGxldCBhdHRhY2hlZExpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAodGhpcy5hdHRhY2hlZF9saXN0KTtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0bGV0IGhvdENvbXBvbmVudDogQWRtaW5UYWJsZSA9IGF0dGFjaGVkTGlzdC5ob3RDb21wb25lbnQ7XG5cdFx0bGV0IGNoZWNrZWRSb3dzID0gaG90Q29tcG9uZW50LmdldENoZWNrZWRSb3dzICgpO1xuXHRcdGxldCB3aGVyZUZpZWxkczogYW55W10gPSBbXTtcblxuXHRcdGlmIChjaGVja2VkUm93cy5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hlY2tlZFJvd3MubGVuZ3RoOyBpKyspXG5cdFx0XHR7XG5cdFx0XHRcdGxldCBjaGVja2VkUm93ID0gY2hlY2tlZFJvd3NbaV07XG5cdFx0XHRcdHdoZXJlRmllbGRzLnB1c2ggKGNoZWNrZWRSb3cpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzZWxlY3RlZEZpZWxkID0gaG90Q29tcG9uZW50LmdldFNlbGVjdGVkICgpO1xuXG5cdFx0aWYgKHNlbGVjdGVkRmllbGQgIT0gbnVsbClcblx0XHRcdHdoZXJlRmllbGRzID0gW3NlbGVjdGVkRmllbGRdO1xuXG5cdFx0aWYgKHdoZXJlRmllbGRzLmxlbmd0aCA+IDApXG5cdFx0e1xuXHRcdFx0Y29uc3QgY29uZmlybWVkOiBib29sZWFuID0gY29uZmlybSAoXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgaXRlbT9cIik7XG5cblx0XHRcdGlmIChjb25maXJtZWQgPT09IHRydWUpXG5cdFx0XHR7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgd2hlcmVGaWVsZHMubGVuZ3RoOyBpKyspXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsZXQgd2hlcmVGaWVsZCA9IHdoZXJlRmllbGRzW2ldO1xuXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGFueSBmaWVsZHMgdGhhdCBhcmUgbWFya2VkIGFzIHJlbW92ZS5cblx0XHRcdFx0XHRmb3IgKGxldCBrZXkgaW4gd2hlcmVGaWVsZClcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsZXQgZmllbGRUeXBlID0gaG90Q29tcG9uZW50LmdldEZpZWxkVHlwZSAoa2V5KTtcblxuXHRcdFx0XHRcdFx0aWYgKGZpZWxkVHlwZSAhPSBudWxsKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpZiAoZmllbGRUeXBlID09PSBcInJlbW92ZVwiKVxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSB3aGVyZUZpZWxkW2tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0bGV0IHJlbW92ZVVybDogc3RyaW5nID0gSG90LkRhdGEuQWRtaW5QYW5lbC5yZW1vdmVVcmw7XG5cblx0XHRcdFx0XHRhd2FpdCBIb3QuanNvblJlcXVlc3QgKHJlbW92ZVVybCwge1xuXHRcdFx0XHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0XHRcdFx0XHR3aGVyZUZpZWxkczogd2hlcmVGaWVsZFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcblx0XHRcdFx0YXdhaXQgaG90Q29tcG9uZW50LnJlZnJlc2hMaXN0ICgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlIHRoaXMgZm9ybS5cblx0ICovXG5cdGFzeW5jIG9uU2F2ZSAoKVxuXHR7XG5cdFx0bGV0IHZhbHVlczogYW55ID0ge307XG5cblx0XHRmb3IgKGxldCBrZXkgaW4gdGhpcy5maWVsZEVsZW1lbnRzKVxuXHRcdHtcblx0XHRcdGxldCBmaWVsZEVsZW1lbnQgPSB0aGlzLmZpZWxkRWxlbWVudHNba2V5XTtcblxuXHRcdFx0aWYgKGZpZWxkRWxlbWVudCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgdmFsdWUgPSBmaWVsZEVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGxldCBmaWVsZFR5cGU6IHN0cmluZyA9IGZpZWxkRWxlbWVudC5wYXJlbnROb2RlLmhvdENvbXBvbmVudC5maWVsZF90eXBlO1xuXG5cdFx0XHRcdGlmIChmaWVsZFR5cGUgPT09IFwicmVtb3ZlXCIpXG5cdFx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdFx0dmFsdWVzW2tleV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5tb2RhbFR5cGUgPT09IFwiYWRkXCIpXG5cdFx0e1xuXHRcdFx0bGV0IGFkZFVybDogc3RyaW5nID0gSG90LkRhdGEuQWRtaW5QYW5lbC5hZGRVcmw7XG5cblx0XHRcdGF3YWl0IEhvdC5qc29uUmVxdWVzdCAoYWRkVXJsLCB7XG5cdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYSxcblx0XHRcdFx0XHRmaWVsZHM6IHZhbHVlc1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5tb2RhbFR5cGUgPT09IFwiZWRpdFwiKVxuXHRcdHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRmllbGRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0YWxlcnQgKFwiTm8gaXRlbShzKSBzZWxlY3RlZCFcIik7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgc2VsZWN0ZWRGaWVsZCA9IHRoaXMuc2VsZWN0ZWRGaWVsZHNbMF07XG5cdFx0XHRsZXQgd2hlcmVGaWVsZHM6IGFueSA9IHt9O1xuXG5cdFx0XHRmb3IgKGxldCBrZXkgaW4gc2VsZWN0ZWRGaWVsZClcblx0XHRcdHtcblx0XHRcdFx0bGV0IGZpZWxkRWxlbWVudCA9IHRoaXMuZmllbGRFbGVtZW50c1trZXldO1xuXHRcdFx0XHRsZXQgdmFsdWUgPSBzZWxlY3RlZEZpZWxkW2tleV07XG5cblx0XHRcdFx0aWYgKGZpZWxkRWxlbWVudCAhPSBudWxsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGV0IGZpZWxkVHlwZTogc3RyaW5nID0gZmllbGRFbGVtZW50LnBhcmVudE5vZGUuaG90Q29tcG9uZW50LmZpZWxkX3R5cGU7XG5cblx0XHRcdFx0XHRpZiAoZmllbGRUeXBlID09PSBcInJlbW92ZVwiKVxuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3aGVyZUZpZWxkc1trZXldID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBlZGl0VXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLmVkaXRVcmw7XG5cblx0XHRcdGF3YWl0IEhvdC5qc29uUmVxdWVzdCAoZWRpdFVybCwge1xuXHRcdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWEsXG5cdFx0XHRcdFx0d2hlcmVGaWVsZHM6IHdoZXJlRmllbGRzLFxuXHRcdFx0XHRcdGZpZWxkczogdmFsdWVzXG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGxldCBhdHRhY2hlZExpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAodGhpcy5hdHRhY2hlZF9saXN0KTtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0bGV0IHRhYmxlOiBBZG1pblRhYmxlID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblxuXHRcdGF3YWl0IHRhYmxlLnJlZnJlc2hMaXN0ICgpO1xuXG5cdFx0aWYgKHRoaXMuY2xvc2VPblNhdmUgPT09IHRydWUpXG5cdFx0e1xuXHRcdFx0Ym9vdHN0cmFwLk1vZGFsLmdldEluc3RhbmNlIChgIyR7dGhpcy5tb2RhbElkfWApLmhpZGUgKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbGlzdCBvZiBkYXRhIGZyb20gdGhlIHNlcnZlci5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHR0aGlzLm1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCAoJChgIyR7dGhpcy5tb2RhbElkfWApWzBdLCB7XG5cdFx0XHRcdFwiYmFja2Ryb3BcIjogdHJ1ZSxcblx0XHRcdFx0XCJrZXlib2FyZFwiOiB0cnVlLFxuXHRcdFx0XHRcImZvY3VzXCI6IHRydWVcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGlmICh0aGlzLm5hbWUgPT09IFwiXCIpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IgKGBZb3UgbXVzdCBzcGVjaWZ5IGEgbmFtZSBmb3IgZWFjaCBhZG1pbi1lZGl0IGVsZW1lbnQhYCk7XG5cblx0XHR0aGlzLm1vZGFsSWQgPSBgJHt0aGlzLm5hbWV9TW9kYWxgO1xuXG5cdFx0cmV0dXJuIChbe1xuXHRcdFx0aHRtbDogYFxuXHRcdFx0PCEtLSAke3RoaXMudGl0bGV9IE1vZGFsIFN0YXJ0IC0tPlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cIiR7dGhpcy5tb2RhbElkfVwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWxhYmVsbGVkYnk9XCIke3RoaXMubmFtZX1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cblx0XHRcdFx0XHRcdDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCIke3RoaXMubmFtZX1Nb2RhbExhYmVsXCI+JHt0aGlzLnRpdGxlfTwvaDU+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cblx0XHRcdFx0XHRcdDxob3QtcGxhY2UtaGVyZSBuYW1lID0gXCJtb2RhbEJvZHlcIiB0eXBlID0gXCJtb2RhbFwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIG9uY2xpY2sgPSBcImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcke3RoaXMubW9kYWxJZH0nKS5vblNhdmUgKCk7XCI+JHt0aGlzLmJ1dHRvbl90aXRsZX08L2J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDwhLS0gJHt0aGlzLnRpdGxlfSBNb2RhbCBFbmQgLS0+YCxcblx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IFwiYm9keVwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRodG1sOiBgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLm1vZGFsSWR9LWFkZC1idG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIG9uY2xpY2sgPSBcInRoaXMuYWRkQ2xpY2tlZCAoKTtcIj5BZGQ8L2J1dHRvbj5gLFxuXHRcdFx0ZG9jdW1lbnRTZWxlY3RvcjogYGhvdC1wbGFjZS1oZXJlW25hbWU9XCJidXR0b25zXCJdYFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aHRtbDogYDxidXR0b24gaWQgPSBcIiR7dGhpcy5tb2RhbElkfS1lZGl0LWJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgb25jbGljayA9IFwidGhpcy5lZGl0Q2xpY2tlZCAoKTtcIj5FZGl0PC9idXR0b24+YCxcblx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IGBob3QtcGxhY2UtaGVyZVtuYW1lPVwiYnV0dG9uc1wiXWBcblx0XHR9LFxuXHRcdHtcblx0XHRcdGh0bWw6IGA8YnV0dG9uIGlkID0gXCIke3RoaXMubW9kYWxJZH0tcmVtb3ZlLWJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgb25jbGljayA9IFwidGhpcy5yZW1vdmVDbGlja2VkICgpO1wiPlJlbW92ZTwvYnV0dG9uPmAsXG5cdFx0XHRkb2N1bWVudFNlbGVjdG9yOiBgaG90LXBsYWNlLWhlcmVbbmFtZT1cImJ1dHRvbnNcIl1gXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZSB9IGZyb20gXCIuL2FkbWluLXRhYmxlXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pblRhYmxlRmllbGQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0YWJsZSBmaWVsZC5cblx0ICovXG5cdGZpZWxkOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBUaGUgdHlwZSBvZiBmaWVsZC4gQ2FuIGJlOlxuXHQgKiAqIHRleHRcblx0ICogKiByZW1vdmVcblx0ICogXG5cdCAqIERlZmF1bHQ6IHRleHRcblx0ICovXG5cdGZpZWxkX3R5cGU6IHN0cmluZztcblx0LyoqXG5cdCAqIElmIHNldCB0byAxLCB0aGlzIHdpbGwgbm90IG91dHB1dCB0aGUgZmllbGQuXG5cdCAqL1xuXHRub19vdXRwdXQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBvbmlucHV0IGV2ZW50IGlzIGZpcmVkIHdoZW4gYW4gaXRlbSBpcyBhYm91dCB0byBiZSBwbGFjZWQgaW50byB0aGUgdGFibGUuXG5cdCAqL1xuXHRvbmlucHV0OiAoaXRlbTogYW55KSA9PiBhbnk7XG5cdC8qKlxuXHQgKiBUaGUgb3V0cHV0IHRvIGRpc3BsYXkuXG5cdCAqL1xuXHRvbm91dHB1dDogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10YWJsZS1maWVsZFwiO1xuXHRcdHRoaXMuZmllbGQgPSAwO1xuXHRcdHRoaXMuZmllbGRfdHlwZSA9IFwidGV4dFwiO1xuXHRcdHRoaXMubm9fb3V0cHV0ID0gXCIwXCI7XG5cdFx0dGhpcy5vbmlucHV0ID0gbnVsbDtcblx0XHR0aGlzLm9ub3V0cHV0ID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhpcyB0YWJsZSBmaWVsZCB0byB0aGUgdGFibGVcblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlID0gbnVsbDtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAocGFyZW50SHRtbEVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGhvdENvbXBvbmVudCA9IHBhcmVudEh0bWxFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQ7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBAdHMtaWdub3JlIC0gbG9vb29sLiBBZGQgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGUgcGFyZW50IEhvdENvbXBvbmVudC5cblx0XHRcdGhvdENvbXBvbmVudCA9IHBhcmVudEh0bWxFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50O1xuXHRcdH1cblxuXHRcdGlmIChob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHRcdGhvdENvbXBvbmVudC5hZGRIZWFkZXJEYXRhT25seSAodGhpcywgaHRtbEVsZW1lbnQpO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGlmICh0aGlzLm5vX291dHB1dCA9PT0gXCIxXCIpXG5cdFx0e1xuXHRcdFx0cmV0dXJuIChbe1xuXHRcdFx0XHRodG1sOiBgPGRpdj48L2Rpdj5gLFxuXHRcdFx0XHRwbGFjZUhlcmVQYXJlbnQ6IFwiYWZ0ZXJUYWJsZVwiXG5cdFx0XHR9XSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChbe1xuXHRcdFx0aHRtbDogYDx0aD4ke3RoaXMuaW5uZXJ9PC90aD5gLFxuXHRcdFx0cGxhY2VIZXJlUGFyZW50OiBcImhlYWRlclwiXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5UYWJsZVJvdyBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIGZpZWxkcyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0ICogXG5cdCAqIEBleGFtcGxlIHsgXCJuYW1lXCI6IFwiSm9obiBTbWl0aFwiLCBcImVtYWlsXCI6IFwiam9obi5zbWl0aEBlbWFpbC5jb21cIiB9XG5cdCAqL1xuXHRmaWVsZHM6IGFueVtdO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRhYmxlLXJvd1wiO1xuXHRcdHRoaXMuZmllbGRzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoaXMgdGFibGUgcm93IHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQucm93RWxlbWVudHMucHVzaCAoeyBmaWVsZHM6IHRoaXMuZmllbGRzLCBlbGVtZW50OiBodG1sRWxlbWVudH0pO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGxldCByb3dIdG1sID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmZpZWxkcy5sZW5ndGggPiAwKVxuXHRcdFx0cm93SHRtbCArPSBgPHRkPjxpbnB1dCB0eXBlID0gXCJjaGVja2JveFwiIC8+PC90ZD5gO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCB0aGlzLmZpZWxkcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgZmllbGRPYmogPSB0aGlzLmZpZWxkc1tpSWR4XTtcblxuXHRcdFx0Zm9yIChsZXQga2V5IGluIGZpZWxkT2JqKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgdmFsdWUgPSBmaWVsZE9ialtrZXldO1xuXG5cdFx0XHRcdHJvd0h0bWwgKz0gYDx0ZD4ke3ZhbHVlfTwvdGQ+YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFt7XG5cdFx0XHRodG1sOiBgPHRyPiR7cm93SHRtbH08L3RyPmAsXG5cdFx0XHRwbGFjZUhlcmVQYXJlbnQ6IFwicmVzdWx0c1wiXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZUZpZWxkIH0gZnJvbSBcIi4vYWRtaW4tdGFibGUtZmllbGRcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGUgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIHRhYmxlLlxuXHQgKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBhdHRhY2hlZCBzY2hlbWEuXG5cdCAqL1xuXHRzY2hlbWE6IHN0cmluZztcblx0aGVhZGVyczoge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBzdG9yZWQgaGVhZGVyIGZpZWxkcy5cblx0XHQgKi9cblx0XHRmaWVsZHM6IHsgW25hbWU6IHN0cmluZ106IEFkbWluVGFibGVGaWVsZDsgfTtcblx0XHQvKipcblx0XHQgKiBUaGUgaGVhZGVycyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0XHQgKiBcblx0XHQgKiBAZXhhbXBsZSB7IFwibmFtZVwiOiBcIjx0aD5OYW1lPC90aD5cIiwgXCJlbWFpbFwiOiBcIjx0aD5FbWFpbDwvdGg+XCIgfVxuXHRcdCAqL1xuXHRcdGVsZW1lbnRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnk7IH07XG5cdFx0LyoqXG5cdFx0ICogVGhlIGhlYWRlciBpbmRpY2llcyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0XHQgKiBcblx0XHQgKiBAZXhhbXBsZSBjb25zb2xlLmxvZyAodGhpcy5oZWFkZXJJbmRpY2llc1tcIm5hbWVcIl0pOyAvLyBPdXRwdXRzIDBcblx0XHQgKi9cblx0XHRpbmRpY2llczogbnVtYmVyW107XG5cdH07XG5cdC8qKlxuXHQgKiBUaGUgcm93IGVsZW1lbnRzIGFyZSBzdG9yZWQgaW4gYW4gYXJyYXkgd2l0aCBrZXkvdmFsdWUgZmllbGRzIGFuZCBpdCdzIGF0dGFjaGVkIGh0bWwgZWxlbWVudC5cblx0ICogXG5cdCAqIEBleGFtcGxlXG5cdCAqIHtcblx0ICogICBcImZpZWxkc1wiOiBbXG5cdCAqICAgICAgIHtcblx0ICogICAgICAgICBcIm5hbWVcIjogXCJKb2huIFNtaXRoXCIsXG5cdCAqICAgICAgICAgXCJlbWFpbFwiOiBcImpvaG4uc21pdGhAdGVzdC5jb21cIlxuXHQgKiAgICAgICB9XG5cdCAqICAgICBdLFxuXHQgKiAgIFwiaHRtbFwiOiBcIjx0cj48dGQ+Sm9obiBTbWl0aDwvdGQ+PHRkPmpvaG4uc21pdGhAdGVzdC5jb208L3RkPjwvdHI+XCJcblx0ICogfVxuXHQgKi9cblx0cm93RWxlbWVudHM6IHsgZmllbGRzOiBhbnlbXTsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IH1bXSA9IFtdO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGVkIHJvdyBpbmRpY2llcy4gRWFjaCBpbmRleCBtYXBzIHRvIHRoZSByb3dFbGVtZW50cyBhcnJheS5cblx0ICogXG5cdCAqIEBmaXhtZSBBZGQgc3VwcG9ydCBmb3IgdGhpcyBpbiB0aGUgZnV0dXJlLlxuXHQgKi9cblx0Ly9wcm90ZWN0ZWQgc2VsZWN0ZWRSb3dzOiBudW1iZXJbXTtcblx0LyoqXG5cdCAqIFRoZSBtb3N0IHJlY2VudGx5IHNlbGVjdGVkIHJvdyBpbmRleC4gVGhlIGluZGV4IG1hcHMgdG8gdGhlIHJvd0VsZW1lbnRzIGFycmF5LlxuXHQgKi9cblx0cHJvdGVjdGVkIHNlbGVjdGVkOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBUaGUgbGlzdCBkYXRhIHRvIHVzZSBmb3IgdGhpcyB0YWJsZS5cblx0ICovXG5cdGxpc3RkYXRhOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgbGlzdCB1cmwgdG8gdXNlIGZvciB0aGlzIHRhYmxlLiBIb3QuRGF0YS5BZG1pblBhbmVsLmxpc3RVcmwgd2lsbCBub3QgYmUgdXNlZCBpbiB0aGlzIGNhc2UuXG5cdCAqL1xuXHRsaXN0dXJsOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgZWFjaCByb3cgd2lsbCBoYXZlIGEgY2hlY2tib3guXG5cdCAqIEBkZWZhdWx0IHRydWVcblx0ICovXG5cdGNoZWNrYm94OiBib29sZWFuO1xuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhpcyBldmVudCB3aGVuIGEgcm93IGlzIHNlbGVjdGVkLiBUaGUgcG90ZW50aWFsIGl0ZW0gdG8gYmUgc2VsZWN0ZWQgXG5cdCAqIHdpbGwgYWxzbyBiZSBwYXNzZWQuIElmIHRoaXMgcmV0dXJucyBmYWxzZSwgdGhlIHJvdyB3aWxsIG5vdCBiZSBzZWxlY3RlZC5cblx0ICovXG5cdG9uc2VsZWN0ZWRyb3c6IChyb3dJbmRleDogbnVtYmVyLCBpdGVtOiBhbnlbXSkgPT4gUHJvbWlzZTxib29sZWFuPjtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10YWJsZVwiO1xuXHRcdHRoaXMudGl0bGUgPSBcIlwiO1xuXHRcdHRoaXMuc2NoZW1hID0gXCJcIjtcblx0XHR0aGlzLmhlYWRlcnMgPSB7XG5cdFx0XHRcdGZpZWxkczoge30sXG5cdFx0XHRcdGVsZW1lbnRzOiB7fSxcblx0XHRcdFx0aW5kaWNpZXM6IFtdXG5cdFx0XHR9O1xuXHRcdHRoaXMucm93RWxlbWVudHMgPSBbXTtcblx0XHQvL3RoaXMuc2VsZWN0ZWRSb3dzID0gW107XG5cdFx0dGhpcy5saXN0ZGF0YSA9IFwiXCI7XG5cdFx0dGhpcy5saXN0dXJsID0gXCJcIjtcblx0XHR0aGlzLmNoZWNrYm94ID0gdHJ1ZTtcblx0XHR0aGlzLm9uc2VsZWN0ZWRyb3cgPSBudWxsO1xuXHRcdHRoaXMuc2VsZWN0ZWQgPSAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBoZWFkZXIgdG8gdGhlIHRhYmxlLlxuXHQgKi9cblx0YWRkSGVhZGVyICh0YWJsZUZpZWxkRWxlbWVudDogSFRNTEVsZW1lbnQpXG5cdHtcblx0XHRsZXQgaGVhZGVyID0gdGhpcy5odG1sRWxlbWVudHNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGhlYWRcIilbMF07XG5cblx0XHRpZiAodGhpcy5oZWFkZXJzLmluZGljaWVzLmxlbmd0aCA8IDEpXG5cdFx0XHR0aGlzLmhlYWRlcnMuaW5kaWNpZXMucHVzaCAobnVsbCk7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0dGhpcy5oZWFkZXJzLmluZGljaWVzLnB1c2ggKHRhYmxlRmllbGRFbGVtZW50LmhvdENvbXBvbmVudC5maWVsZCk7XG5cdFx0aGVhZGVyLmFwcGVuZENoaWxkICh0YWJsZUZpZWxkRWxlbWVudCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgaGVhZGVyIHRvIHRoZSB0YWJsZS5cblx0ICovXG5cdGFkZEhlYWRlckRhdGFPbmx5ICh0YWJsZUZpZWxkOiBBZG1pblRhYmxlRmllbGQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudClcblx0e1xuXHRcdGlmICh0aGlzLmhlYWRlcnMuaW5kaWNpZXMubGVuZ3RoIDwgMSlcblx0XHRcdHRoaXMuaGVhZGVycy5pbmRpY2llcy5wdXNoIChudWxsKTtcblxuXHRcdHRoaXMuaGVhZGVycy5pbmRpY2llcy5wdXNoICh0YWJsZUZpZWxkLmZpZWxkKTtcblx0XHR0aGlzLmhlYWRlcnMuZmllbGRzW3RhYmxlRmllbGQuZmllbGRdID0gdGFibGVGaWVsZDtcblx0XHR0aGlzLmhlYWRlcnMuZWxlbWVudHNbdGFibGVGaWVsZC5maWVsZF0gPSBodG1sRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpZWxkIHR5cGUgb2YgYSBmaWVsZC5cblx0ICovXG5cdGdldEZpZWxkVHlwZSAoZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmdcblx0e1xuXHRcdGlmICh0aGlzLmhlYWRlcnMuZWxlbWVudHNbZmllbGROYW1lXSAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCBob3RDb21wb25lbnQ6IEFkbWluVGFibGVGaWVsZCA9IHRoaXMuaGVhZGVycy5lbGVtZW50c1tmaWVsZE5hbWVdLmhvdENvbXBvbmVudDtcblxuXHRcdFx0aWYgKGhvdENvbXBvbmVudCAhPSBudWxsKVxuXHRcdFx0XHRyZXR1cm4gKGhvdENvbXBvbmVudC5maWVsZF90eXBlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gYSByb3cgaXMgc2VsZWN0ZWQuXG5cdCAqL1xuXHRhc3luYyBzZWxlY3RSb3cgKGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgcm93SW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGlmICh0aGlzLm9uc2VsZWN0ZWRyb3cgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uc2VsZWN0ZWRyb3cpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9uc2VsZWN0ZWRyb3cgPSAoPChyb3dJbmRleDogbnVtYmVyLCBpdGVtOiBhbnlbXSkgPT4gUHJvbWlzZTxib29sZWFuPj5uZXcgRnVuY3Rpb24gKHRoaXMub25zZWxlY3RlZHJvdykpO1xuXG5cdFx0XHRsZXQgaXRlbTogYW55W10gPSBudWxsO1xuXG5cdFx0XHRpZiAodGhpcy5yb3dFbGVtZW50c1tyb3dJbmRleF0gIT0gbnVsbClcblx0XHRcdFx0aXRlbSA9IHRoaXMucm93RWxlbWVudHNbcm93SW5kZXhdLmZpZWxkcztcblxuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25zZWxlY3RlZHJvdyAocm93SW5kZXgsIGl0ZW0pO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEluIHRoZSBmdXR1cmUsIHdlIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSByb3dzIGJlaW5nIHNlbGVjdGVkLiBGb3Igbm93IFxuXHRcdC8vIHRoaXMgd2lsbCBlbnN1cmUgdGhhdCBvbmx5IG9uZSByb3cgaXMgc2VsZWN0ZWQgYXQgYSB0aW1lLlxuXHRcdHtcblx0XHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXHRcdFx0bGV0IHJvd3MgPSB0Ym9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0clwiKTtcblxuXHRcdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCByb3dzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgcm93OiBIVE1MVGFibGVSb3dFbGVtZW50ID0gcm93c1tpSWR4XTtcblxuXHRcdFx0XHRpZiAocm93LmNsYXNzTGlzdC5jb250YWlucyAoXCJ0YWJsZS1wcmltYXJ5XCIpID09PSB0cnVlKVxuXHRcdFx0XHRcdHJvdy5jbGFzc0xpc3QucmVtb3ZlIChcInRhYmxlLXByaW1hcnlcIik7XG5cdFx0XHR9XG5cblx0XHRcdGh0bWxFbGVtZW50LmNsYXNzTGlzdC5hZGQgKFwidGFibGUtcHJpbWFyeVwiKTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkID0gcm93SW5kZXg7XG5cblx0XHQvKnRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG5cdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cblx0XHQvLyBGaW5kIGFsbCB0aGUgY2hlY2tib3hlcyBpbiB0Ym9keS5cblx0XHRsZXQgY2hlY2tib3hlcyA9IHRib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lIChcImlucHV0XCIpO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBjaGVja2JveGVzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBjaGVja2JveDogSFRNTElucHV0RWxlbWVudCA9IGNoZWNrYm94ZXNbaUlkeF07XG5cblx0XHRcdGlmIChjaGVja2JveC5jaGVja2VkICE9IG51bGwpXG5cdFx0XHR7XG5cdFx0XHRcdGlmIChjaGVja2JveC5jaGVja2VkID09PSB0cnVlKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBkYXRhLWluZGV4IGF0dHJpYnV0ZS5cblx0XHRcdFx0XHRsZXQgZGF0YUluZGV4U3RyOiBzdHJpbmcgPSBjaGVja2JveC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlIChcImRhdGEtaW5kZXhcIik7XG5cdFx0XHRcdFx0bGV0IGRhdGFJbmRleDogbnVtYmVyID0gIHBhcnNlSW50IChkYXRhSW5kZXhTdHIpO1xuXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MucHVzaCAoZGF0YUluZGV4KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0qL1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2VsZWN0ZWQgZGF0YS5cblx0ICovXG5cdGdldFNlbGVjdGVkICgpOiBhbnlbXVxuXHR7XG5cdFx0bGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLnNlbGVjdGVkO1xuXG5cdFx0aWYgKGluZGV4IDwgMClcblx0XHRcdHJldHVybiAobnVsbCk7XG5cblx0XHRyZXR1cm4gKHRoaXMucm93RWxlbWVudHNbaW5kZXhdLmZpZWxkcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3RlZCBkYXRhLlxuXHQgKi9cblx0LypnZXRTZWxlY3RlZFJvd3MgKCk6IGFueVtdXG5cdHtcblx0XHRsZXQgcm93czogYW55W10gPSBbXTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLnNlbGVjdGVkUm93c1tpSWR4XTtcblx0XHRcdHJvd3MucHVzaCAodGhpcy5yb3dFbGVtZW50c1tpbmRleF0uZmllbGRzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKHJvd3MpO1xuXHR9Ki9cblxuXHQvKipcblx0ICogR2V0IHRoZSBkYXRhIGZvciBlYWNoIHJvdyB0aGF0IGhhcyBiZWVuIGNoZWNrZWQuXG5cdCAqL1xuXHRnZXRDaGVja2VkUm93cyAoKTogYW55W11cblx0e1xuXHRcdGxldCByb3dzOiBhbnlbXSA9IFtdO1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXG5cdFx0Ly8gRmluZCBhbGwgdGhlIGNoZWNrYm94ZXMgaW4gdGJvZHkuXG5cdFx0bGV0IGNoZWNrYm94ZXMgPSB0Ym9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJpbnB1dFwiKTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgY2hlY2tib3hlcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgY2hlY2tib3g6IEhUTUxJbnB1dEVsZW1lbnQgPSBjaGVja2JveGVzW2lJZHhdO1xuXG5cdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCA9PT0gdHJ1ZSlcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZGF0YS1pbmRleCBhdHRyaWJ1dGUuXG5cdFx0XHRcdFx0bGV0IGRhdGFJbmRleFN0cjogc3RyaW5nID0gY2hlY2tib3gucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSAoXCJkYXRhLWluZGV4XCIpO1xuXHRcdFx0XHRcdGxldCBkYXRhSW5kZXg6IG51bWJlciA9ICBwYXJzZUludCAoZGF0YUluZGV4U3RyKTtcblxuXHRcdFx0XHRcdHJvd3MucHVzaCAodGhpcy5yb3dFbGVtZW50c1tkYXRhSW5kZXhdLmZpZWxkcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKHJvd3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJvdydzIGRhdGEuXG5cdCAqL1xuXHRnZXRSb3cgKGluZGV4OiBudW1iZXIpOiBhbnlbXVxuXHR7XG5cdFx0cmV0dXJuICh0aGlzLnJvd0VsZW1lbnRzW2luZGV4XS5maWVsZHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIHJvdyB0byB0aGUgdGFibGUuXG5cdCAqIFxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgQSBsaXN0IG9mIHZhbHVlcyB0byBhcHBlbmQuXG5cdCAqL1xuXHRhZGRSb3cgKGZpZWxkczogeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXSlcblx0e1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXHRcdGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5yb3dFbGVtZW50cy5sZW5ndGg7XG5cdFx0bGV0IHJvd1N0ciA9IGA8dHIgb25jbGljayA9IFwidGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudC5zZWxlY3RSb3cgKHRoaXMsICR7aW5kZXh9KTtcIj5gO1xuXG5cdFx0aWYgKHR5cGVvZiAodGhpcy5jaGVja2JveCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHR0aGlzLmNoZWNrYm94ID0gSG90U3RhcS5wYXJzZUJvb2xlYW4gKHRoaXMuY2hlY2tib3gpO1xuXG5cdFx0aWYgKHRoaXMuY2hlY2tib3ggPT09IHRydWUpXG5cdFx0XHRyb3dTdHIgKz0gYDx0ZD48aW5wdXQgdHlwZSA9IFwiY2hlY2tib3hcIiAvPjwvdGQ+YDtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgdGhpcy5oZWFkZXJzLmluZGljaWVzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdC8vIEB0cy1pZ25vcmUgLSBAZml4bWUgSSBtZXNzZWQgdGhpcyB1cCwgd2lsbCBmaXguXG5cdFx0XHRsZXQga2V5OiBzdHJpbmcgPSB0aGlzLmhlYWRlcnMuaW5kaWNpZXNbaUlkeF07XG5cblx0XHRcdGlmIChrZXkgPT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGxldCB2YWx1ZSA9IGZpZWxkc1trZXldO1xuXHRcdFx0Ly8gRm9yIGVhY2ggLiBpbiBrZXkgd2UgbmVlZCB0byBnZXQgdGhlIG5leHQgb2JqZWN0LlxuXHRcdFx0bGV0IGtleVBhcnRzOiBzdHJpbmdbXSA9IGtleS5zcGxpdCAoXCIuXCIpO1xuXHRcdFx0XG5cdFx0XHRpZiAoa2V5UGFydHMubGVuZ3RoID4gMSlcblx0XHRcdHtcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRsZXQgdGVtcFZhbHVlOiBhbnkgPSBmaWVsZHNba2V5UGFydHNbMF1dO1xuXG5cdFx0XHRcdGZvciAobGV0IGlJZHggPSAxOyBpSWR4IDwga2V5UGFydHMubGVuZ3RoOyBpSWR4KyspXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBwYXJ0OiBzdHJpbmcgPSBrZXlQYXJ0c1tpSWR4XTtcblxuXHRcdFx0XHRcdHRlbXBWYWx1ZSA9IHRlbXBWYWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhbHVlID0gdGVtcFZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5oZWFkZXJzLmVsZW1lbnRzW2tleV0gIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZSAtIEBmaXhtZSBJIG1lc3NlZCB0aGlzIHVwLCB3aWxsIGZpeC5cblx0XHRcdFx0bGV0IGZpZWxkVHlwZTogc3RyaW5nID0gdGhpcy5nZXRGaWVsZFR5cGUgKGtleSk7XG5cblx0XHRcdFx0aWYgKGZpZWxkVHlwZSA9PSBudWxsKVxuXHRcdFx0XHRcdGZpZWxkVHlwZSA9IFwidGV4dFwiO1xuXG5cdFx0XHRcdGlmIChmaWVsZFR5cGUgIT09IFwicmVtb3ZlXCIpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBvcmdGaWVsZCA9IHRoaXMuaGVhZGVycy5maWVsZHNba2V5XTtcblx0XHRcdFx0XHRsZXQgZGVmYXVsdE91dHB1dDogYm9vbGVhbiA9IHRydWU7XG5cblx0XHRcdFx0XHRpZiAob3JnRmllbGQgIT0gbnVsbClcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZiAob3JnRmllbGQub25pbnB1dCAhPSBudWxsKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIChvcmdGaWVsZC5vbmlucHV0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmhlYWRlcnMuZmllbGRzW2tleV0ub25pbnB1dCA9ICg8KGl0ZW06IGFueSkgPT4gYW55Pm5ldyBGdW5jdGlvbiAob3JnRmllbGQub25pbnB1dCkpO1xuXG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gb3JnRmllbGQub25pbnB1dCAodmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAob3JnRmllbGQub25vdXRwdXQgIT0gbnVsbClcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiAob3JnRmllbGQub25vdXRwdXQpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuaGVhZGVycy5maWVsZHNba2V5XS5vbm91dHB1dCA9ICg8KGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZz5uZXcgRnVuY3Rpb24gKG9yZ0ZpZWxkLm9ub3V0cHV0KSk7XG5cblx0XHRcdFx0XHRcdFx0ZGVmYXVsdE91dHB1dCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBuZXdPdXRwdXQ6IHN0cmluZyA9IG9yZ0ZpZWxkLm9ub3V0cHV0IChpbmRleCwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRyb3dTdHIgKz0gbmV3T3V0cHV0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkZWZhdWx0T3V0cHV0ID09PSB0cnVlKVxuXHRcdFx0XHRcdFx0cm93U3RyICs9IGA8dGQgZGF0YS1pbmRleCA9IFwiJHtpbmRleH1cIj4ke3ZhbHVlfTwvdGQ+YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJvd1N0ciArPSBcIjwvdHI+XCI7XG5cblx0XHRsZXQgbmV3T2JqID0gSG90U3RhcS5hZGRIdG1sICh0Ym9keSwgcm93U3RyKTtcblxuXHRcdHRoaXMucm93RWxlbWVudHMucHVzaCAoe1xuXHRcdFx0XHRmaWVsZHM6IGZpZWxkcyxcblx0XHRcdFx0ZWxlbWVudDogKDxIVE1MRWxlbWVudD5uZXdPYmopXG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciB0aGUgbGlzdCBvZiByb3dzLlxuXHQgKi9cblx0YXN5bmMgY2xlYXJSb3dzICgpXG5cdHtcblx0XHRsZXQgdGJvZHkgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0Ym9keVwiKVswXTtcblxuXHRcdHRib2R5LmlubmVySFRNTCA9IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaCB0aGUgbGlzdC5cblx0ICovXG5cdGFzeW5jIHJlZnJlc2hMaXN0ICgpXG5cdHtcblx0XHRsZXQgbGlzdCA9IG51bGw7XG5cblx0XHRpZiAodGhpcy5saXN0ZGF0YSAhPT0gXCJcIilcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLmxpc3RkYXRhKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5saXN0ZGF0YSA9IEpTT04ucGFyc2UgKHRoaXMubGlzdGRhdGEpO1xuXG5cdFx0XHRsaXN0ID0gdGhpcy5saXN0ZGF0YTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGxldCBsaXN0VXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLmxpc3RVcmw7XG5cblx0XHRcdGlmICh0aGlzLmxpc3R1cmwgIT09IFwiXCIpXG5cdFx0XHRcdGxpc3RVcmwgPSB0aGlzLmxpc3R1cmw7XG5cblx0XHRcdGxpc3QgPSBhd2FpdCBIb3QuanNvblJlcXVlc3QgKGxpc3RVcmwsIHtcblx0XHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hXG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRoaXMuY2xlYXJSb3dzICgpO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBsaXN0Lmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBmaWVsZHMgPSBsaXN0W2lJZHhdO1xuXG5cdFx0XHR0aGlzLmFkZFJvdyAoZmllbGRzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBsaXN0IG9mIGRhdGEgZnJvbSB0aGUgc2VydmVyLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdHNldFRpbWVvdXQgKGFzeW5jICgpID0+XG5cdFx0XHR7XG5cdFx0XHRcdGF3YWl0IHRoaXMucmVmcmVzaExpc3QgKCk7XG5cdFx0XHR9LCA1MCk7XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmcgfCBIb3RDb21wb25lbnRPdXRwdXRbXVxuXHR7XG5cdFx0bGV0IGVtcHR5Q2hlY2tib3hIZWFkZXI6IHN0cmluZyA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5jaGVja2JveCA9PT0gdHJ1ZSlcblx0XHRcdGVtcHR5Q2hlY2tib3hIZWFkZXIgPSBcIjx0aD48L3RoPlwiO1xuXG5cdFx0cmV0dXJuIChgXG5cdFx0PGRpdiBpZCA9IFwiJHt0aGlzLmh0bWxFbGVtZW50c1swXS5pZH1cIj5cblx0XHRcdDxoMj4ke3RoaXMudGl0bGV9PC9oMj5cblx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG5cdFx0XHQ8dGFibGUgaWQgPSBcIiR7dGhpcy5odG1sRWxlbWVudHNbMF0uaWR9VGFibGVcIiBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtc21cIj5cblx0XHRcdFx0PHRoZWFkPlxuXHRcdFx0XHRcdDx0ciBob3QtcGxhY2UtaGVyZSA9IFwiaGVhZGVyXCI+XG5cdFx0XHRcdFx0XHQke2VtcHR5Q2hlY2tib3hIZWFkZXJ9XG5cdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0PHRib2R5IGhvdC1wbGFjZS1oZXJlID0gXCJyZXN1bHRzXCI+XG5cdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHQ8L3RhYmxlPlxuXHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcImFmdGVyVGFibGVcIj48L2hvdC1wbGFjZS1oZXJlPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQsIEhvdENvbXBvbmVudE91dHB1dCB9IGZyb20gXCJob3RzdGFxXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pblRleHQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSBhc3NvY2lhdGVkIGRhdGFiYXNlIGZpZWxkLlxuXHQgKi9cblx0ZmllbGQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSB0eXBlIG9mIGZpZWxkLiBDYW4gYmU6XG5cdCAqICogdGV4dFxuXHQgKiAqIHJlbW92ZVxuXHQgKiBcblx0ICogRGVmYXVsdDogdGV4dFxuXHQgKi9cblx0ZmllbGRfdHlwZTogc3RyaW5nO1xuXHQvKipcblx0ICogSWYgc2V0IHRvIDEsIHRoaXMgd2lsbCBub3Qgb3V0cHV0IHRoZSBmaWVsZC5cblx0ICovXG5cdG5vX291dHB1dDogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRleHRcIjtcblx0XHR0aGlzLmZpZWxkID0gXCJcIjtcblx0XHR0aGlzLmZpZWxkX3R5cGUgPSBcInRleHRcIjtcblx0XHR0aGlzLm5vX291dHB1dCA9IFwiMFwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvcnJlY3RzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHRleHQgZWxlbWVudHMgZm9yIG1vZGFscy5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgcGxhY2VIZXJlQXJyYXkgPSBwYXJlbnRIdG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsIChgaG90LXBsYWNlLWhlcmVbdHlwZT1cIm1vZGFsXCJdYCk7XG5cblx0XHQvLyBTZWFyY2ggZm9yIHRoZSBpbnB1dCBib3ggaW4gdGhlIG1vZGFsIHdlIGF0dGFjaGVkIHRvLCB0aGVuIHN0b3JlIHRoZSBcblx0XHQvLyBmb3VuZCBpbnB1dCBib3ggaW50byB0aGUgZmllbGRFbGVtZW50cyBhcnJheS5cblx0XHRpZiAocGxhY2VIZXJlQXJyYXkubGVuZ3RoID4gMClcblx0XHR7XG5cdFx0XHRsZXQgcGxhY2VIZXJlID0gcGxhY2VIZXJlQXJyYXlbMF07XG5cdFx0XHRwYXJlbnRIdG1sRWxlbWVudC5yZW1vdmVDaGlsZCAoaHRtbEVsZW1lbnQpO1xuXHRcdFx0cGxhY2VIZXJlLmFwcGVuZENoaWxkIChodG1sRWxlbWVudCk7XG5cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LmhvdENvbXBvbmVudC5maWVsZEVsZW1lbnRzW3RoaXMuZmllbGRdID0gaHRtbEVsZW1lbnQucXVlcnlTZWxlY3RvciAoXCJpbnB1dFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmcgfCBIb3RDb21wb25lbnRPdXRwdXRbXVxuXHR7XG5cdFx0bGV0IHZhbHVlOiBzdHJpbmcgPSBcIlwiO1xuXG5cdFx0aWYgKHRoaXMudmFsdWUgIT0gbnVsbClcblx0XHRcdHZhbHVlID0gdGhpcy52YWx1ZTtcblxuXHRcdGlmICh0aGlzLm5vX291dHB1dCA9PT0gXCIxXCIpXG5cdFx0XHRyZXR1cm4gKGA8ZGl2PjxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGUgPSBcImhpZGRlblwiIHZhbHVlID0gXCIke3ZhbHVlfVwiIC8+PC9kaXY+YCk7XG5cblx0XHRyZXR1cm4gKGA8ZGl2PlxuXHRcdFx0PGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPiR7dGhpcy5pbm5lcn08L2xhYmVsPjxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGUgPSBcInRleHRcIiB2YWx1ZSA9IFwiJHt2YWx1ZX1cIiAvPlxuXHRcdDwvZGl2PmApO1xuXHR9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IEhvdFN0YXFXZWI7IiwibW9kdWxlLmV4cG9ydHMgPSBib290c3RyYXA7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsImltcG9ydCB7IEFkbWluQnV0dG9uIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1idXR0b25cIjtcbmltcG9ydCB7IEFkbWluRGFzaGJvYXJkIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1kYXNoYm9hcmRcIjtcbmltcG9ydCB7IEFkbWluRWRpdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tZWRpdFwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZSB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGFibGVcIjtcbmltcG9ydCB7IEFkbWluVGFibGVGaWVsZCB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtZmllbGRcIjtcbmltcG9ydCB7IEFkbWluVGFibGVSb3cgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLXRhYmxlLXJvd1wiO1xuaW1wb3J0IHsgQWRtaW5UZXh0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10ZXh0XCI7XG5cbmV4cG9ydCB7XG5cdFx0QWRtaW5CdXR0b24sXG5cdFx0QWRtaW5EYXNoYm9hcmQsXG5cdFx0QWRtaW5FZGl0LFxuXHRcdEFkbWluVGFibGUsXG5cdFx0QWRtaW5UYWJsZUZpZWxkLFxuXHRcdEFkbWluVGFibGVSb3csXG5cdFx0QWRtaW5UZXh0XG5cdH07Il0sIm5hbWVzIjpbIkFkbWluQnV0dG9uIiwiSG90Q29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJjb3B5IiwiYXBpIiwic3VwZXIiLCJ0aGlzIiwidGFnIiwiYnV0dG9uQ2xpY2tlZCIsIm91dHB1dCIsImh0bWxFbGVtZW50cyIsImlkIiwiQWRtaW5EYXNoYm9hcmQiLCJ0aXRsZSIsImJhc2UiLCJvblBvc3RQbGFjZSIsInBhcmVudEh0bWxFbGVtZW50IiwiaHRtbEVsZW1lbnQiLCJIb3QiLCJEYXRhIiwiQWRtaW5QYW5lbCIsImJhc2VVcmwiLCJhZGRVcmwiLCJlZGl0VXJsIiwicmVtb3ZlVXJsIiwibGlzdFVybCIsIkFkbWluRWRpdCIsIm9uQWRkQ2xpY2tlZCIsIm9uRWRpdENsaWNrZWQiLCJvblJlbW92ZUNsaWNrZWQiLCJidXR0b25fdGl0bGUiLCJhdHRhY2hlZF9saXN0Iiwic2NoZW1hIiwiZmllbGRFbGVtZW50cyIsIm1vZGFsSWQiLCJtb2RhbCIsIm1vZGFsVHlwZSIsImNsb3NlT25TYXZlIiwic2VsZWN0ZWRGaWVsZHMiLCJhZGRDbGlja2VkIiwia2V5IiwidmFsdWUiLCJNb2RhbCIsImdldEluc3RhbmNlIiwic2hvdyIsImVkaXRDbGlja2VkIiwic2VsZWN0ZWRGaWVsZCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJob3RDb21wb25lbnQiLCJnZXRTZWxlY3RlZCIsImZpZWxkRWxlbWVudCIsInJlbW92ZUNsaWNrZWQiLCJjaGVja2VkUm93cyIsImdldENoZWNrZWRSb3dzIiwid2hlcmVGaWVsZHMiLCJsZW5ndGgiLCJpIiwiY2hlY2tlZFJvdyIsInB1c2giLCJjb25maXJtIiwid2hlcmVGaWVsZCIsImZpZWxkVHlwZSIsImdldEZpZWxkVHlwZSIsImpzb25SZXF1ZXN0IiwicmVmcmVzaExpc3QiLCJvblNhdmUiLCJ2YWx1ZXMiLCJwYXJlbnROb2RlIiwiZmllbGRfdHlwZSIsImZpZWxkcyIsImFsZXJ0IiwidGFibGUiLCJoaWRlIiwiJCIsIm5hbWUiLCJFcnJvciIsImh0bWwiLCJkb2N1bWVudFNlbGVjdG9yIiwiQWRtaW5UYWJsZUZpZWxkIiwiZmllbGQiLCJub19vdXRwdXQiLCJvbmlucHV0Iiwib25vdXRwdXQiLCJhZGRIZWFkZXJEYXRhT25seSIsInBsYWNlSGVyZVBhcmVudCIsImlubmVyIiwiQWRtaW5UYWJsZVJvdyIsInJvd0VsZW1lbnRzIiwiZWxlbWVudCIsInJvd0h0bWwiLCJpSWR4IiwiZmllbGRPYmoiLCJBZG1pblRhYmxlIiwiaGVhZGVycyIsImVsZW1lbnRzIiwiaW5kaWNpZXMiLCJsaXN0ZGF0YSIsImxpc3R1cmwiLCJjaGVja2JveCIsIm9uc2VsZWN0ZWRyb3ciLCJzZWxlY3RlZCIsImFkZEhlYWRlciIsInRhYmxlRmllbGRFbGVtZW50IiwiaGVhZGVyIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhcHBlbmRDaGlsZCIsInRhYmxlRmllbGQiLCJmaWVsZE5hbWUiLCJzZWxlY3RSb3ciLCJyb3dJbmRleCIsIkZ1bmN0aW9uIiwiaXRlbSIsInJvd3MiLCJyb3ciLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInJlbW92ZSIsImFkZCIsImluZGV4IiwiY2hlY2tib3hlcyIsImNoZWNrZWQiLCJkYXRhSW5kZXhTdHIiLCJwYXJlbnRFbGVtZW50IiwiZ2V0QXR0cmlidXRlIiwiZGF0YUluZGV4IiwicGFyc2VJbnQiLCJnZXRSb3ciLCJhZGRSb3ciLCJ0Ym9keSIsInJvd1N0ciIsIkhvdFN0YXEiLCJwYXJzZUJvb2xlYW4iLCJrZXlQYXJ0cyIsInNwbGl0IiwidGVtcFZhbHVlIiwib3JnRmllbGQiLCJkZWZhdWx0T3V0cHV0IiwibmV3T2JqIiwiYWRkSHRtbCIsImNsZWFyUm93cyIsImlubmVySFRNTCIsImxpc3QiLCJKU09OIiwicGFyc2UiLCJzZXRUaW1lb3V0IiwiZW1wdHlDaGVja2JveEhlYWRlciIsIkFkbWluVGV4dCIsInBsYWNlSGVyZUFycmF5IiwicXVlcnlTZWxlY3RvckFsbCIsInBsYWNlSGVyZSIsInJlbW92ZUNoaWxkIiwicXVlcnlTZWxlY3RvciIsIm1vZHVsZSIsImV4cG9ydHMiLCJIb3RTdGFxV2ViIiwiYm9vdHN0cmFwIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwidW5kZWZpbmVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImNhbGwiXSwic291cmNlUm9vdCI6IiJ9
1
+ var AdminPanelComponentsWeb;(()=>{"use strict";var t={176:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function d(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminButton=void 0;const l=n(607);class o extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-button",this.onclick=null}buttonClicked(){return i(this,void 0,void 0,(function*(){}))}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e),t.hotComponent.fieldElements[this.field]=e}return null!=this.onclick&&("string"==typeof this.onclick&&(this.onclick=new Function(this.onclick)),e.addEventListener("click",this.onclick)),null}output(){return`<button id = "${this.htmlElements[0].id}" onclick = "this.buttonClicked ();">${this.inner}</button>`}}e.AdminButton=o},50:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDashboard=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dashboard",this.title="",this.base=""}onPostPlace(t,e){return null==i.Hot.Data.AdminPanel&&(i.Hot.Data.AdminPanel={}),null==i.Hot.Data.AdminPanel.baseUrl&&(i.Hot.Data.AdminPanel.baseUrl=this.base),null==i.Hot.Data.AdminPanel.addUrl&&(i.Hot.Data.AdminPanel.addUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/add`),null==i.Hot.Data.AdminPanel.editUrl&&(i.Hot.Data.AdminPanel.editUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/edit`),null==i.Hot.Data.AdminPanel.removeUrl&&(i.Hot.Data.AdminPanel.removeUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/remove`),null==i.Hot.Data.AdminPanel.listUrl&&(i.Hot.Data.AdminPanel.listUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/list`),null}output(){return`\n\t\t<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">\n\t\t\t<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">\n\t\t\t\t<h1 class="h2">${this.title}</h1>\n\t\t\t\t<div class="btn-toolbar mb-2 mb-md-0">\n\t\t\t\t\t<div class="btn-group me-2">\n\t\t\t\t\t\t<hot-place-here name = "buttons"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<hot-place-here name = "body"></hot-place-here>\n\t\t</main>`}}e.AdminDashboard=l},988:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function d(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDropdown=void 0;const l=n(607);class o extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dropdown",this.placeholder="Search",this.onsearch=null,this.onselect=null}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e),t.hotComponent.fieldElements[this.field]=e}return null!=this.onsearch&&("string"==typeof this.onsearch&&(this.onsearch=new Function(this.onsearch)),e.querySelector("input").addEventListener("keyup",(t=>i(this,void 0,void 0,(function*(){const e=t.currentTarget.value;let n=yield this.onsearch(e,t),i=$(this.htmlElements[1]).find(".searchResults");i.empty();for(let t=0;t<n.length;t++){const e=n[t];let l=e.url,o=e.value,s=e.text;i.append($(`<li><a class="dropdown-item" href="${l}" data-value = "${o}" onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selected (${t});">${s}</a></li>`))}}))))),null}selected(t){return i(this,void 0,void 0,(function*(){if(null!=this.onselect){"string"==typeof this.onselect&&(this.onselect=new Function(this.onselect));const e=this.htmlElements[1].querySelectorAll("a")[t].getAttribute("href"),n=this.htmlElements[1].querySelectorAll("a")[t].getAttribute("data-value"),i=this.htmlElements[1].querySelectorAll("a")[t].innerHTML;yield this.onselect(e,n,i)}}))}output(){return`<div class="dropdown">\n\t\t<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">\n\t\t ${this.inner}\n\t\t</button>\n\t\t<ul class="dropdown-menu">\n\t\t\t<li>\n\t\t\t\t<div class = "input-group">\n\t\t\t\t\t<input type = "text" class = "form-control" placeholder = "${this.placeholder}" value = "" />\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t\t<div class = "searchResults">\n\t\t\t</div>\n\t\t</ul>\n\t</div>`}}e.AdminDropdown=o},703:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function d(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}a((i=i.apply(t,e||[])).next())}))},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminEdit=void 0;const o=n(607),s=l(n(685));class d extends o.HotComponent{constructor(t,e){super(t,e),this.onAddClicked=null,this.onEditClicked=null,this.onRemoveClicked=null,this.tag="admin-edit",this.title="",this.button_title="",this.attached_list="",this.schema="",this.modalId="",this.class="",this.modal=null,this.modalType="add",this.closeOnSave=!0,this.selectedFields=[],this.onsave=null,this.onedit=null,this.ondelete=null}processHotFields(t){return i(this,void 0,void 0,(function*(){const e=this.htmlElements[1].querySelectorAll("[hot-field]");for(let n=0;n<e.length;n++){const i=e[n],l=$(i).attr("hot-field");let o=$(i).attr("hot-field-type");null!=o&&""!==o||(o="text"),i.fieldType=o,yield t(i,{name:l,type:o})}}))}addClicked(){return i(this,void 0,void 0,(function*(){null!=this.onAddClicked&&!1===(yield this.onAddClicked())||(this.modalType="add",yield this.processHotFields(((t,e)=>i(this,void 0,void 0,(function*(){$(t).val("")})))),this.selectedFields=[],s.default.Modal.getInstance(`#${this.modalId}`).show())}))}editClicked(){return i(this,void 0,void 0,(function*(){if(null!=this.onEditClicked&&!1===(yield this.onEditClicked()))return;this.modalType="edit";let t=document.getElementById(this.attached_list).hotComponent.getSelected();if(null!=t){if(yield this.processHotFields(((e,n)=>i(this,void 0,void 0,(function*(){const i=t[n.name];null!=i&&$(e).val(i)})))),this.selectedFields=[t],null!=this.onedit){"string"==typeof this.onedit&&(this.onedit=new Function(this.onedit));let t=yield this.onedit(this.modalType,this.selectedFields);if(null!=t&&!1===t)return}s.default.Modal.getInstance(`#${this.modalId}`).show()}}))}removeClicked(){return i(this,void 0,void 0,(function*(){if(null!=this.onRemoveClicked&&!1===(yield this.onRemoveClicked()))return;this.modalType="remove";let t=document.getElementById(this.attached_list).hotComponent,e=t.getCheckedRows(),n=[];if(e.length>0)for(let t=0;t<e.length;t++){let i=e[t];n.push(i)}let i=t.getSelected();if(null!=i&&(n=[i]),n.length>0&&!0===confirm("Are you sure you want to remove this item?")){for(let e=0;e<n.length;e++){let i=n[e];for(let e in i){let n=t.getFieldType(e);null!=n&&"remove"===n&&delete i[e]}if(null!=this.ondelete)"string"==typeof this.ondelete&&(this.ondelete=new Function(this.ondelete)),yield this.ondelete(i);else{let t=o.Hot.Data.AdminPanel.removeUrl;yield o.Hot.jsonRequest(t,{schema:this.schema,whereFields:i})}}yield t.refreshList()}}))}onSave(){return i(this,void 0,void 0,(function*(){let t={};if(yield this.processHotFields(((e,n)=>i(this,void 0,void 0,(function*(){"remove"!==n.type&&(t[n.name]=$(e).val())})))),null!=this.onsave)"string"==typeof this.onsave&&(this.onsave=new Function(this.onsave)),yield this.onsave(this.modalType,t,this.selectedFields);else{if("add"===this.modalType){let e=o.Hot.Data.AdminPanel.addUrl;yield o.Hot.jsonRequest(e,{schema:this.schema,fields:t})}if("edit"===this.modalType){if(0===this.selectedFields.length)return void alert("No item(s) selected!");let e={};yield this.processHotFields(((t,n)=>i(this,void 0,void 0,(function*(){"remove"!==n.type&&(e[n.name]=$(t).val())}))));let n=o.Hot.Data.AdminPanel.editUrl;yield o.Hot.jsonRequest(n,{schema:this.schema,whereFields:e,fields:t})}}let e=document.getElementById(this.attached_list).hotComponent;yield e.refreshList(),!0===this.closeOnSave&&s.default.Modal.getInstance(`#${this.modalId}`).hide()}))}onPostPlace(t,e){return this.modal=new s.default.Modal($(`#${this.modalId}`)[0],{backdrop:!0,keyboard:!0,focus:!0}),null}output(){if(""===this.name)throw new Error("You must specify a name for each admin-edit element!");return this.modalId=`${this.name}Modal`,[{html:`\n\t\t\t\x3c!-- ${this.title} Modal Start --\x3e\n\t\t\t<div class="modal fade ${this.class}" id="${this.modalId}" tabindex="-1" aria-labelledby="${this.name}ModalLabel" aria-hidden="true">\n\t\t\t\t<div class="modal-dialog">\n\t\t\t\t\t<div class="modal-content">\n\t\t\t\t\t<div class="modal-header">\n\t\t\t\t\t\t<h5 class="modal-title" id="${this.name}ModalLabel">${this.title}</h5>\n\t\t\t\t\t\t<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-body">\n\t\t\t\t\t\t<hot-place-here name = "modalBody" type = "modal"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-footer">\n\t\t\t\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>\n\t\t\t\t\t\t<button type="button" class="btn btn-primary" onclick = "document.getElementById('${this.modalId}').onSave ();">${this.button_title}</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\x3c!-- ${this.title} Modal End --\x3e`,documentSelector:"body"},{html:`<button id = "${this.modalId}-add-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.addClicked ();">Add</button>`,documentSelector:'hot-place-here[name="buttons"]'},{html:`<button id = "${this.modalId}-edit-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.editClicked ();">Edit</button>`,documentSelector:'hot-place-here[name="buttons"]'},{html:`<button id = "${this.modalId}-remove-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.removeClicked ();">Remove</button>`,documentSelector:'hot-place-here[name="buttons"]'}]}}e.AdminEdit=d},505:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableField=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-field",this.field=0,this.field_type="text",this.no_output="0",this.oninput=null,this.onoutput=null}onPostPlace(t,e){let n=null;return n=null!=t.parentNode.parentNode.hotComponent?t.parentNode.parentNode.hotComponent:t.parentNode.parentNode.parentNode.parentNode.hotComponent,null!=n&&n.addHeaderDataOnly(this,e),null}output(){return"1"===this.no_output?[{html:"<div></div>",placeHereParent:"afterTable"}]:[{html:`<th>${this.inner}</th>`,placeHereParent:"header"}]}}e.AdminTableField=l},412:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableRow=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-row",this.fields=[]}onPostPlace(t,e){return t.parentNode.parentNode.parentNode.hotComponent.rowElements.push({fields:this.fields,element:e}),null}output(){let t="";this.fields.length>0&&(t+='<td><input type = "checkbox" /></td>');for(let e=0;e<this.fields.length;e++){let n=this.fields[e];for(let e in n)t+=`<td>${n[e]}</td>`}return[{html:`<tr>${t}</tr>`,placeHereParent:"results"}]}}e.AdminTableRow=l},952:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,o){function s(t){try{a(i.next(t))}catch(t){o(t)}}function d(t){try{a(i.throw(t))}catch(t){o(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(s,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTable=void 0;const l=n(607);class o extends l.HotComponent{constructor(t,e){super(t,e),this.rowElements=[],this.tag="admin-table",this.title="",this.schema="",this.headers={fields:{},elements:{},indicies:[]},this.rowElements=[],this.onlist=null,this.listurl="",this.checkbox=!0,this.onselectedrow=null,this.selected=-1}addHeader(t){let e=this.htmlElements[0].getElementsByTagName("thead")[0];this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.hotComponent.field),e.appendChild(t)}addHeaderDataOnly(t,e){this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.field),this.headers.fields[t.field]=t,this.headers.elements[t.field]=e}getFieldType(t){if(null!=this.headers.elements[t]){let e=this.headers.elements[t].hotComponent;if(null!=e)return e.field_type}return null}selectRow(t,e){return i(this,void 0,void 0,(function*(){if(null!=this.onselectedrow){"string"==typeof this.onselectedrow&&(this.onselectedrow=new Function(this.onselectedrow));let t=null;if(null!=this.rowElements[e]&&(t=this.rowElements[e].fields),!1===(yield this.onselectedrow(e,t)))return}{let e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("tr");for(let t=0;t<e.length;t++){let n=e[t];!0===n.classList.contains("table-primary")&&n.classList.remove("table-primary")}t.classList.add("table-primary")}this.selected=e}))}getSelected(){let t=this.selected;return t<0?null:this.rowElements[t].fields}getCheckedRows(){let t=[],e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("input");for(let n=0;n<e.length;n++){let i=e[n];if(null!=i.checked&&!0===i.checked){let e=i.parentElement.parentElement.getAttribute("data-index"),n=parseInt(e);t.push(this.rowElements[n].fields)}}return t}getRow(t){return this.rowElements[t].fields}addRow(t){let e=this.htmlElements[1].getElementsByTagName("tbody")[0],n=this.rowElements.length,i=`<tr onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selectRow (this, ${n});">`;"string"==typeof this.checkbox&&(this.checkbox=l.HotStaq.parseBoolean(this.checkbox)),!0===this.checkbox?i+='<td><input type = "checkbox" /></td>':i+="<td></td>";for(let e=0;e<this.headers.indicies.length;e++){let l=this.headers.indicies[e];if(null==l)continue;let o=t[l],s=l.split(".");if(s.length>1){let e=t[s[0]];for(let t=1;t<s.length;t++)e=e[s[t]];o=e}if(null!=this.headers.elements[l]){let t=this.getFieldType(l);if(null==t&&(t="text"),"remove"!==t){const t=this.headers.fields[l];let e=!0;null!=t&&(null!=t.oninput&&("string"==typeof t.oninput&&(this.headers.fields[l].oninput=new Function(t.oninput)),o=t.oninput(o)),null!=t.onoutput)&&("string"==typeof t.onoutput&&(this.headers.fields[l].onoutput=new Function(t.onoutput)),e=!1,i+=t.onoutput(n,o)),!0===e&&(i+=`<td data-index = "${n}">${o}</td>`)}}}i+="</tr>";let o=l.HotStaq.addHtml(e,i);this.rowElements.push({fields:t,element:o})}clearRows(){return i(this,void 0,void 0,(function*(){this.rowElements=[],this.htmlElements[1].getElementsByTagName("tbody")[0].innerHTML=""}))}refreshList(){return i(this,void 0,void 0,(function*(){let t=null;if(null!=this.onlist)"string"==typeof this.onlist&&(this.onlist=new Function(this.onlist)),t=yield this.onlist();else{let e=l.Hot.Data.AdminPanel.listUrl;""!==this.listurl&&(e=this.listurl),t=yield l.Hot.jsonRequest(e,{schema:this.schema})}this.clearRows();for(let e=0;e<t.length;e++){let n=t[e];this.addRow(n)}}))}onPostPlace(t,e){return setTimeout((()=>i(this,void 0,void 0,(function*(){yield this.refreshList()}))),50),null}output(){return`\n\t\t<div id = "${this.htmlElements[0].id}">\n\t\t\t<h2>${this.title}</h2>\n\t\t\t<div class="table-responsive">\n\t\t\t<table id = "${this.htmlElements[0].id}Table" class="table table-striped table-sm">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr hot-place-here = "header">\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody hot-place-here = "results">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<hot-place-here name = "afterTable"></hot-place-here>\n\t\t\t</div>\n\t\t</div>`}}e.AdminTable=o},80:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminText=void 0;const i=n(607);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-text",this.no_output="0",this.class="form-control"}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e),t.hotComponent.fieldElements[this.field]=e.querySelector("input")}return null}output(){let t="";if(null!=this.value&&(t=this.value),"1"===this.no_output)return`<div><input class="${this.class}" type = "hidden" value = "${t}" /></div>`;const e=this.htmlElements[0].getAttribute("hot-field");let n=this.htmlElements[0].getAttribute("hot-field-type");return null==n&&(n="text"),`<div>\n\t\t\t<label class="form-label">${this.inner}</label>\n\t\t\t<input class="${this.class}" type = "text" hot-field = "${e}" hot-field-type = "${n}" value = "${t}" />\n\t\t</div>`}}e.AdminText=l},607:t=>{t.exports=HotStaqWeb},685:t=>{t.exports=bootstrap}},e={};function n(i){var l=e[i];if(void 0!==l)return l.exports;var o=e[i]={exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}var i={};(()=>{var t=i;Object.defineProperty(t,"__esModule",{value:!0}),t.AdminText=t.AdminTableRow=t.AdminTableField=t.AdminTable=t.AdminEdit=t.AdminDashboard=t.AdminDropdown=t.AdminButton=void 0;const e=n(176);Object.defineProperty(t,"AdminButton",{enumerable:!0,get:function(){return e.AdminButton}});const l=n(988);Object.defineProperty(t,"AdminDropdown",{enumerable:!0,get:function(){return l.AdminDropdown}});const o=n(50);Object.defineProperty(t,"AdminDashboard",{enumerable:!0,get:function(){return o.AdminDashboard}});const s=n(703);Object.defineProperty(t,"AdminEdit",{enumerable:!0,get:function(){return s.AdminEdit}});const d=n(952);Object.defineProperty(t,"AdminTable",{enumerable:!0,get:function(){return d.AdminTable}});const a=n(505);Object.defineProperty(t,"AdminTableField",{enumerable:!0,get:function(){return a.AdminTableField}});const r=n(412);Object.defineProperty(t,"AdminTableRow",{enumerable:!0,get:function(){return r.AdminTableRow}});const h=n(80);Object.defineProperty(t,"AdminText",{enumerable:!0,get:function(){return h.AdminText}})})(),AdminPanelComponentsWeb=i})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFhLFFBRVAsMENBQ3NCakgsS0FBS3FCLHNDQUNqQnJCLEtBQUtnRSxxQ0FBcUNqRCx3QkFBNEJrRyxlQUF3QnhFLG1CQUVoSCxFQS9ERCxhLFVDRkFrSSxFQUFPQyxRQUFVQyxVLFVDQWpCRixFQUFPQyxRQUFVRSxTLEdDQ2JDLEVBQTJCLENBQUMsRUFHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQkUsSUFBakJELEVBQ0gsT0FBT0EsRUFBYU4sUUFHckIsSUFBSUQsRUFBU0ksRUFBeUJFLEdBQVksQ0FHakRMLFFBQVMsQ0FBQyxHQU9YLE9BSEFRLEVBQW9CSCxHQUFVSSxLQUFLVixFQUFPQyxRQUFTRCxFQUFRQSxFQUFPQyxRQUFTSSxHQUdwRUwsRUFBT0MsT0FDZixDLHFNQ3RCQSxlQVVFLDJFQVZPLEVBQUFsTCxXQUFXLElBQ3BCLGVBVUUsNkVBVk8sRUFBQXVDLGFBQWEsSUFDdEIsY0FVRSw4RUFWTyxFQUFBWCxjQUFjLElBQ3ZCLGVBVUUseUVBVk8sRUFBQWtDLFNBQVMsSUFDbEIsZUFVRSwwRUFWTyxFQUFBcUUsVUFBVSxJQUNuQixlQVVFLCtFQVZPLEVBQUFiLGVBQWUsSUFDeEIsZUFVRSw2RUFWTyxFQUFBUSxhQUFhLElBQ3RCLGNBVUUseUVBVk8sRUFBQWtELFNBQVMsRyIsInNvdXJjZXMiOlsid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tYnV0dG9uLnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tZGFzaGJvYXJkLnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1lZGl0LnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtZmllbGQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS1yb3cudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLXRleHQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvZXh0ZXJuYWwgdmFyIFwiSG90U3RhcVdlYlwiIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViL2V4dGVybmFsIHZhciBcImJvb3RzdHJhcFwiIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5CdXR0b24gZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0b25jbGljazogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBQcm9taXNlPGFueT47XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tYnV0dG9uXCI7XG5cdFx0dGhpcy5vbmNsaWNrID0gbnVsbDtcblx0fVxuXG5cdGFzeW5jIGJ1dHRvbkNsaWNrZWQgKCk6IFByb21pc2U8dm9pZD5cblx0e1xuXHR9XG5cblx0LyoqXG5cdCAqIENvcnJlY3RzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHRleHQgZWxlbWVudHMgZm9yIG1vZGFscy5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgcGxhY2VIZXJlQXJyYXkgPSBwYXJlbnRIdG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsIChgaG90LXBsYWNlLWhlcmVbdHlwZT1cIm1vZGFsXCJdYCk7XG5cblx0XHQvLyBTZWFyY2ggZm9yIHRoZSBpbnB1dCBib3ggaW4gdGhlIG1vZGFsIHdlIGF0dGFjaGVkIHRvLCB0aGVuIHN0b3JlIHRoZSBcblx0XHQvLyBmb3VuZCBpbnB1dCBib3ggaW50byB0aGUgZmllbGRFbGVtZW50cyBhcnJheS5cblx0XHRpZiAocGxhY2VIZXJlQXJyYXkubGVuZ3RoID4gMClcblx0XHR7XG5cdFx0XHRsZXQgcGxhY2VIZXJlID0gcGxhY2VIZXJlQXJyYXlbMF07XG5cdFx0XHRwYXJlbnRIdG1sRWxlbWVudC5yZW1vdmVDaGlsZCAoaHRtbEVsZW1lbnQpO1xuXHRcdFx0cGxhY2VIZXJlLmFwcGVuZENoaWxkIChodG1sRWxlbWVudCk7XG5cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LmhvdENvbXBvbmVudC5maWVsZEVsZW1lbnRzW3RoaXMuZmllbGRdID0gaHRtbEVsZW1lbnQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub25jbGljayAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25jbGljaykgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25jbGljayA9ICg8KGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBQcm9taXNlPGFueT4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uY2xpY2spKTtcblxuXHRcdFx0aHRtbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAoXCJjbGlja1wiLCB0aGlzLm9uY2xpY2spO1xuXHRcdH1cblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIChgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLmh0bWxFbGVtZW50c1swXS5pZH1cIiBvbmNsaWNrID0gXCJ0aGlzLmJ1dHRvbkNsaWNrZWQgKCk7XCI+JHt0aGlzLmlubmVyfTwvYnV0dG9uPmApO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluRGFzaGJvYXJkIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgdGl0bGUgb2YgdGhpcyBkYXNoYm9hcmQuXG5cdCAqL1xuXHR0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGJhc2UgdXJsIHRvIHVzZSBmb3IgdGhpcyBkYXNoYm9hcmQuXG5cdCAqL1xuXHRiYXNlOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tZGFzaGJvYXJkXCI7XG5cdFx0dGhpcy50aXRsZSA9IFwiXCI7XG5cdFx0dGhpcy5iYXNlID0gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhpcyB0YWJsZSBmaWVsZCB0byB0aGUgdGFibGVcblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbCA9IHt9O1xuXG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsID0gdGhpcy5iYXNlO1xuXG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwuYWRkVXJsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsLmFkZFVybCA9IGAke0hvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybH0vdjEvZGF0YS9hZGRgO1xuXG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwuZWRpdFVybCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbC5lZGl0VXJsID0gYCR7SG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsfS92MS9kYXRhL2VkaXRgO1xuXG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwucmVtb3ZlVXJsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsLnJlbW92ZVVybCA9IGAke0hvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybH0vdjEvZGF0YS9yZW1vdmVgO1xuXG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwubGlzdFVybCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbC5saXN0VXJsID0gYCR7SG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsfS92MS9kYXRhL2xpc3RgO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gKGBcblx0XHQ8bWFpbiBjbGFzcz1cImNvbC1tZC05IG1zLXNtLWF1dG8gY29sLWxnLTEwIHB4LW1kLTRcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC13cmFwIGZsZXgtbWQtbm93cmFwIGFsaWduLWl0ZW1zLWNlbnRlciBwdC0zIHBiLTIgbWItMyBib3JkZXItYm90dG9tXCI+XG5cdFx0XHRcdDxoMSBjbGFzcz1cImgyXCI+JHt0aGlzLnRpdGxlfTwvaDE+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tdG9vbGJhciBtYi0yIG1iLW1kLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIG1lLTJcIj5cblx0XHRcdFx0XHRcdDxob3QtcGxhY2UtaGVyZSBuYW1lID0gXCJidXR0b25zXCI+PC9ob3QtcGxhY2UtaGVyZT5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxob3QtcGxhY2UtaGVyZSBuYW1lID0gXCJib2R5XCI+PC9ob3QtcGxhY2UtaGVyZT5cblx0XHQ8L21haW4+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5Ecm9wZG93biBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIHNlYXJjaCBzdHJpbmcgcGxhY2Vob2xkZXIgdG8gc2hvdy5cblx0ICovXG5cdHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB3aGVuIHRoZSBrZXlib2FyZCB1cCBidXR0b24gaXMgdHJpZ2dlcmVkLlxuXHQgKi9cblx0b25zZWFyY2g6IChzZWFyY2hUZXh0OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBQcm9taXNlPHsgdXJsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgfVtdPjtcblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gYW4gc2VhcmNoIHJlc3VsdCBoYXMgYmVlbiBzZWxlY3RlZC5cblx0ICovXG5cdG9uc2VsZWN0OiAodXJsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi1kcm9wZG93blwiO1xuXHRcdHRoaXMucGxhY2Vob2xkZXIgPSBcIlNlYXJjaFwiO1xuXHRcdHRoaXMub25zZWFyY2ggPSBudWxsO1xuXHRcdHRoaXMub25zZWxlY3QgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvcnJlY3RzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHRleHQgZWxlbWVudHMgZm9yIG1vZGFscy5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgcGxhY2VIZXJlQXJyYXkgPSBwYXJlbnRIdG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsIChgaG90LXBsYWNlLWhlcmVbdHlwZT1cIm1vZGFsXCJdYCk7XG5cblx0XHQvLyBTZWFyY2ggZm9yIHRoZSBpbnB1dCBib3ggaW4gdGhlIG1vZGFsIHdlIGF0dGFjaGVkIHRvLCB0aGVuIHN0b3JlIHRoZSBcblx0XHQvLyBmb3VuZCBpbnB1dCBib3ggaW50byB0aGUgZmllbGRFbGVtZW50cyBhcnJheS5cblx0XHRpZiAocGxhY2VIZXJlQXJyYXkubGVuZ3RoID4gMClcblx0XHR7XG5cdFx0XHRsZXQgcGxhY2VIZXJlID0gcGxhY2VIZXJlQXJyYXlbMF07XG5cdFx0XHRwYXJlbnRIdG1sRWxlbWVudC5yZW1vdmVDaGlsZCAoaHRtbEVsZW1lbnQpO1xuXHRcdFx0cGxhY2VIZXJlLmFwcGVuZENoaWxkIChodG1sRWxlbWVudCk7XG5cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LmhvdENvbXBvbmVudC5maWVsZEVsZW1lbnRzW3RoaXMuZmllbGRdID0gaHRtbEVsZW1lbnQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub25zZWFyY2ggIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uc2VhcmNoKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbnNlYXJjaCA9ICg8KHNlYXJjaFRleHQ6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IFByb21pc2U8eyB1cmw6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgdGV4dDogc3RyaW5nOyB9W10+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbnNlYXJjaCkpO1xuXG5cdFx0XHRodG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yIChcImlucHV0XCIpLmFkZEV2ZW50TGlzdGVuZXIgKFwia2V5dXBcIiwgXG5cdFx0XHRcdGFzeW5jIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZTtcblxuXHRcdFx0XHRcdGxldCByZXN1bHRzID0gYXdhaXQgdGhpcy5vbnNlYXJjaCAoc2VhcmNoVGV4dCwgZXZlbnQpO1xuXG5cdFx0XHRcdFx0bGV0IHNlYXJjaFJlc3VsdHNEaXYgPSAkKHRoaXMuaHRtbEVsZW1lbnRzWzFdKS5maW5kIChcIi5zZWFyY2hSZXN1bHRzXCIpO1xuXG5cdFx0XHRcdFx0c2VhcmNoUmVzdWx0c0Rpdi5lbXB0eSAoKTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgcmVzdWx0cy5sZW5ndGg7IGlJZHgrKylcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSByZXN1bHRzW2lJZHhdO1xuXHRcdFx0XHRcdFx0bGV0IHVybDogc3RyaW5nID0gcmVzdWx0LnVybDtcblx0XHRcdFx0XHRcdGxldCB2YWx1ZTogc3RyaW5nID0gcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdFx0bGV0IHRleHQ6IHN0cmluZyA9IHJlc3VsdC50ZXh0O1xuXG5cdFx0XHRcdFx0XHRzZWFyY2hSZXN1bHRzRGl2LmFwcGVuZCAoJChgPGxpPjxhIGNsYXNzPVxcXCJkcm9wZG93bi1pdGVtXFxcIiBocmVmPVxcXCIke3VybH1cXFwiIGRhdGEtdmFsdWUgPSBcIiR7dmFsdWV9XCIgb25jbGljayA9IFxcXCJ0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50LnNlbGVjdGVkICgke2lJZHh9KTtcXFwiPiR7dGV4dH08L2E+PC9saT5gKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZC5cblx0ICovXG5cdGFzeW5jIHNlbGVjdGVkIChpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25zZWxlY3QgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uc2VsZWN0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbnNlbGVjdCA9ICg8KHVybDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uc2VsZWN0KSk7XG5cblx0XHRcdGNvbnN0IHVybCA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLnF1ZXJ5U2VsZWN0b3JBbGwgKFwiYVwiKVtpbmRleF0uZ2V0QXR0cmlidXRlIChcImhyZWZcIik7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLnF1ZXJ5U2VsZWN0b3JBbGwgKFwiYVwiKVtpbmRleF0uZ2V0QXR0cmlidXRlIChcImRhdGEtdmFsdWVcIik7XG5cdFx0XHRjb25zdCB0ZXh0ID0gdGhpcy5odG1sRWxlbWVudHNbMV0ucXVlcnlTZWxlY3RvckFsbCAoXCJhXCIpW2luZGV4XS5pbm5lckhUTUw7XG5cblx0XHRcdGF3YWl0IHRoaXMub25zZWxlY3QgKHVybCwgdmFsdWUsIHRleHQpO1xuXHRcdH1cblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gKFxuXHRgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCI+XG5cdFx0PGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBkcm9wZG93bi10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxuXHRcdCAgJHt0aGlzLmlubmVyfVxuXHRcdDwvYnV0dG9uPlxuXHRcdDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cblx0XHRcdDxsaT5cblx0XHRcdFx0PGRpdiBjbGFzcyA9IFwiaW5wdXQtZ3JvdXBcIj5cblx0XHRcdFx0XHQ8aW5wdXQgdHlwZSA9IFwidGV4dFwiIGNsYXNzID0gXCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlciA9IFwiJHt0aGlzLnBsYWNlaG9sZGVyfVwiIHZhbHVlID0gXCJcIiAvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvbGk+XG5cdFx0XHQ8ZGl2IGNsYXNzID0gXCJzZWFyY2hSZXN1bHRzXCI+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L3VsPlxuXHQ8L2Rpdj5gKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCwgSG90Q29tcG9uZW50T3V0cHV0IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuaW1wb3J0IGJvb3RzdHJhcCBmcm9tIFwiYm9vdHN0cmFwXCI7XG5cbmltcG9ydCB7IEFkbWluVGFibGUgfSBmcm9tIFwiLi9hZG1pbi10YWJsZVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5FZGl0IGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgdGl0bGUgb2YgdGhpcyBlZGl0IG1vZGFsLlxuXHQgKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBidXR0b24gdGl0bGUuXG5cdCAqL1xuXHRidXR0b25fdGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBhdHRhY2hlZCBsaXN0LlxuXHQgKi9cblx0YXR0YWNoZWRfbGlzdDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIHNjaGVtYS5cblx0ICovXG5cdHNjaGVtYTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIG1vZGFsIGlkLlxuXHQgKi9cblx0bW9kYWxJZDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGhvdC1jbGFzcyBhdHRyaWJ1dGUgdG8gcGFzcyB0byBhZGQgdG8gdGhlIG1vZGFsJ3MgY2xhc3Nlcy5cblx0ICovXG5cdGNsYXNzOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYm9vdHN0cmFwIG1vZGFsIGluc3RhbmNlLlxuXHQgKi9cblx0bW9kYWw6IGJvb3RzdHJhcC5Nb2RhbDtcblx0LyoqXG5cdCAqIElmIHNldCB0byB0cnVlLCB0aGlzIHdpbGwgY2xvc2UgdGhlIG1vZGFsIHdoZW4gc2F2ZSBpcyBjbGlja2VkLlxuXHQgKi9cblx0Y2xvc2VPblNhdmU6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBUaGUgdHlwZSBvZiBtb2RhbCB0byBvcGVuLiBDYW4gYmU6XG5cdCAqICogYWRkXG5cdCAqICogZWRpdFxuXHQgKiAqIHJlbW92ZVxuXHQgKi9cblx0cHJvdGVjdGVkIG1vZGFsVHlwZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGVkIGZpZWxkcy5cblx0ICovXG5cdHByb3RlY3RlZCBzZWxlY3RlZEZpZWxkczogYW55W107XG5cdC8qKlxuXHQgKiBXaGF0IHRvIGV4ZWN1dGUgd2hlbiB0aGUgc2F2ZSBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdG9uc2F2ZTogKG1vZGFsVHlwZTogc3RyaW5nLCB2YWx1ZXM6IGFueSwgc2VsZWN0ZWRGaWVsZHM6IGFueVtdKSA9PiBQcm9taXNlPHZvaWQ+O1xuXHQvKipcblx0ICogV2hhdCB0byBleGVjdXRlIHdoZW4gdGhlIGVkaXQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRvbmVkaXQ6IChtb2RhbFR5cGU6IHN0cmluZywgc2VsZWN0ZWRGaWVsZHM6IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXHQvKipcblx0ICogV2hhdCB0byBleGVjdXRlIHdoZW4gdGhlIGRlbGV0ZSBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdG9uZGVsZXRlOiAoc2VsZWN0ZWRGaWVsZDogYW55KSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLWVkaXRcIjtcblx0XHR0aGlzLnRpdGxlID0gXCJcIjtcblx0XHR0aGlzLmJ1dHRvbl90aXRsZSA9IFwiXCI7XG5cdFx0dGhpcy5hdHRhY2hlZF9saXN0ID0gXCJcIjtcblx0XHR0aGlzLnNjaGVtYSA9IFwiXCI7XG5cblx0XHR0aGlzLm1vZGFsSWQgPSBcIlwiO1xuXHRcdHRoaXMuY2xhc3MgPSBcIlwiO1xuXHRcdHRoaXMubW9kYWwgPSBudWxsO1xuXHRcdHRoaXMubW9kYWxUeXBlID0gXCJhZGRcIjtcblx0XHR0aGlzLmNsb3NlT25TYXZlID0gdHJ1ZTtcblx0XHR0aGlzLnNlbGVjdGVkRmllbGRzID0gW107XG5cdFx0dGhpcy5vbnNhdmUgPSBudWxsO1xuXHRcdHRoaXMub25lZGl0ID0gbnVsbDtcblx0XHR0aGlzLm9uZGVsZXRlID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzIHRoZSBob3QgZmllbGRzLlxuXHQgKi9cblx0YXN5bmMgcHJvY2Vzc0hvdEZpZWxkcyAob25GaWVsZDogKGh0bWxFbGVtZW50OiBFbGVtZW50LCBmaWVsZDogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgfSkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGNvbnN0IGVsbXMgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5xdWVyeVNlbGVjdG9yQWxsIChcIltob3QtZmllbGRdXCIpO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBlbG1zLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGNvbnN0IGVsbSA9IGVsbXNbaUlkeF07XG5cdFx0XHRjb25zdCBmaWVsZCA9ICQoZWxtKS5hdHRyIChcImhvdC1maWVsZFwiKTtcblx0XHRcdGxldCBmaWVsZFR5cGUgPSAkKGVsbSkuYXR0ciAoXCJob3QtZmllbGQtdHlwZVwiKTtcblxuXHRcdFx0aWYgKChmaWVsZFR5cGUgPT0gbnVsbCkgfHwgKGZpZWxkVHlwZSA9PT0gXCJcIikpXG5cdFx0XHRcdGZpZWxkVHlwZSA9IFwidGV4dFwiO1xuXG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRlbG0uZmllbGRUeXBlID0gZmllbGRUeXBlO1xuXG5cdFx0XHRhd2FpdCBvbkZpZWxkIChlbG0sIHsgbmFtZTogZmllbGQsIHR5cGU6IGZpZWxkVHlwZSB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBhZGQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgYWRkIG1vZGFsIG9wZW5zLlxuXHQgKi9cblx0b25BZGRDbGlja2VkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gbnVsbDtcblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgYWRkIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0YXN5bmMgYWRkQ2xpY2tlZCAoKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25BZGRDbGlja2VkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25BZGRDbGlja2VkICgpO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubW9kYWxUeXBlID0gXCJhZGRcIjtcblxuXHRcdGF3YWl0IHRoaXMucHJvY2Vzc0hvdEZpZWxkcyAoYXN5bmMgKGh0bWxFbGVtZW50OiBFbGVtZW50LCBmaWVsZDogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgfSkgPT5cblx0XHRcdHtcblx0XHRcdFx0JChodG1sRWxlbWVudCkudmFsIChcIlwiKTtcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IFtdO1xuXG5cdFx0Ym9vdHN0cmFwLk1vZGFsLmdldEluc3RhbmNlIChgIyR7dGhpcy5tb2RhbElkfWApLnNob3cgKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGVkaXQgbW9kYWwgb3BlbnMuXG5cdCAqL1xuXHRvbkVkaXRDbGlja2VkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gbnVsbDtcblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdGFzeW5jIGVkaXRDbGlja2VkICgpOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vbkVkaXRDbGlja2VkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25FZGl0Q2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiZWRpdFwiO1xuXHRcdGxldCBhdHRhY2hlZExpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAodGhpcy5hdHRhY2hlZF9saXN0KTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblx0XHRsZXQgc2VsZWN0ZWRGaWVsZCA9IGhvdENvbXBvbmVudC5nZXRTZWxlY3RlZCAoKTtcblxuXHRcdGlmIChzZWxlY3RlZEZpZWxkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0YXdhaXQgdGhpcy5wcm9jZXNzSG90RmllbGRzIChhc3luYyAoaHRtbEVsZW1lbnQ6IEVsZW1lbnQsIGZpZWxkOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB9KSA9PlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gc2VsZWN0ZWRGaWVsZFtmaWVsZC5uYW1lXTtcblxuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKVxuXHRcdFx0XHRcdFx0JChodG1sRWxlbWVudCkudmFsICh2YWx1ZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnNlbGVjdGVkRmllbGRzID0gW3NlbGVjdGVkRmllbGRdO1xuXG5cdFx0XHRpZiAodGhpcy5vbmVkaXQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmVkaXQpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHRcdHRoaXMub25lZGl0ID0gKDwobW9kYWxUeXBlOiBzdHJpbmcsIHNlbGVjdGVkRmllbGRzOiBhbnlbXSkgPT4gUHJvbWlzZTxib29sZWFuPj5uZXcgRnVuY3Rpb24gKHRoaXMub25lZGl0KSk7XG5cblx0XHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25lZGl0ICh0aGlzLm1vZGFsVHlwZSwgdGhpcy5zZWxlY3RlZEZpZWxkcyk7XG5cblx0XHRcdFx0aWYgKHJlc3VsdCAhPSBudWxsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ym9vdHN0cmFwLk1vZGFsLmdldEluc3RhbmNlIChgIyR7dGhpcy5tb2RhbElkfWApLnNob3cgKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCB0aGF0IGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHJlbW92ZSBtb2RhbCBvcGVucy5cblx0ICovXG5cdG9uUmVtb3ZlQ2xpY2tlZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPiA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIHJlbW92ZSBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdGFzeW5jIHJlbW92ZUNsaWNrZWQgKCk6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGlmICh0aGlzLm9uUmVtb3ZlQ2xpY2tlZCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uUmVtb3ZlQ2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwicmVtb3ZlXCI7XG5cblx0XHRsZXQgYXR0YWNoZWRMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKHRoaXMuYXR0YWNoZWRfbGlzdCk7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGxldCBob3RDb21wb25lbnQ6IEFkbWluVGFibGUgPSBhdHRhY2hlZExpc3QuaG90Q29tcG9uZW50O1xuXHRcdGxldCBjaGVja2VkUm93cyA9IGhvdENvbXBvbmVudC5nZXRDaGVja2VkUm93cyAoKTtcblx0XHRsZXQgd2hlcmVGaWVsZHM6IGFueVtdID0gW107XG5cblx0XHRpZiAoY2hlY2tlZFJvd3MubGVuZ3RoID4gMClcblx0XHR7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNoZWNrZWRSb3dzLmxlbmd0aDsgaSsrKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgY2hlY2tlZFJvdyA9IGNoZWNrZWRSb3dzW2ldO1xuXHRcdFx0XHR3aGVyZUZpZWxkcy5wdXNoIChjaGVja2VkUm93KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc2VsZWN0ZWRGaWVsZCA9IGhvdENvbXBvbmVudC5nZXRTZWxlY3RlZCAoKTtcblxuXHRcdGlmIChzZWxlY3RlZEZpZWxkICE9IG51bGwpXG5cdFx0XHR3aGVyZUZpZWxkcyA9IFtzZWxlY3RlZEZpZWxkXTtcblxuXHRcdGlmICh3aGVyZUZpZWxkcy5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdGNvbnN0IGNvbmZpcm1lZDogYm9vbGVhbiA9IGNvbmZpcm0gKFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGl0ZW0/XCIpO1xuXG5cdFx0XHRpZiAoY29uZmlybWVkID09PSB0cnVlKVxuXHRcdFx0e1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHdoZXJlRmllbGRzLmxlbmd0aDsgaSsrKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGV0IHdoZXJlRmllbGQgPSB3aGVyZUZpZWxkc1tpXTtcblxuXHRcdFx0XHRcdC8vIFJlbW92ZSBhbnkgZmllbGRzIHRoYXQgYXJlIG1hcmtlZCBhcyByZW1vdmUuXG5cdFx0XHRcdFx0Zm9yIChsZXQga2V5IGluIHdoZXJlRmllbGQpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGV0IGZpZWxkVHlwZSA9IGhvdENvbXBvbmVudC5nZXRGaWVsZFR5cGUgKGtleSk7XG5cblx0XHRcdFx0XHRcdGlmIChmaWVsZFR5cGUgIT0gbnVsbClcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkVHlwZSA9PT0gXCJyZW1vdmVcIilcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgd2hlcmVGaWVsZFtrZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICh0aGlzLm9uZGVsZXRlICE9IG51bGwpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmRlbGV0ZSkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdFx0XHRcdHRoaXMub25kZWxldGUgPSAoPChzZWxlY3RlZEZpZWxkOiBhbnkpID0+IFByb21pc2U8dm9pZD4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uZGVsZXRlKSk7XG5cblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMub25kZWxldGUgKHdoZXJlRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGV0IHJlbW92ZVVybDogc3RyaW5nID0gSG90LkRhdGEuQWRtaW5QYW5lbC5yZW1vdmVVcmw7XG5cblx0XHRcdFx0XHRcdGF3YWl0IEhvdC5qc29uUmVxdWVzdCAocmVtb3ZlVXJsLCB7XG5cdFx0XHRcdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYSxcblx0XHRcdFx0XHRcdFx0XHR3aGVyZUZpZWxkczogd2hlcmVGaWVsZFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcblx0XHRcdFx0YXdhaXQgaG90Q29tcG9uZW50LnJlZnJlc2hMaXN0ICgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlIHRoaXMgZm9ybS5cblx0ICovXG5cdGFzeW5jIG9uU2F2ZSAoKVxuXHR7XG5cdFx0bGV0IHZhbHVlczogYW55ID0ge307XG5cblx0XHRhd2FpdCB0aGlzLnByb2Nlc3NIb3RGaWVsZHMgKGFzeW5jIChodG1sRWxlbWVudDogRWxlbWVudCwgZmllbGQ6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IH0pID0+XG5cdFx0XHR7XG5cdFx0XHRcdGlmIChmaWVsZC50eXBlID09PSBcInJlbW92ZVwiKVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHR2YWx1ZXNbZmllbGQubmFtZV0gPSAkKGh0bWxFbGVtZW50KS52YWwgKCk7XG5cdFx0XHR9KTtcblxuXHRcdGlmICh0aGlzLm9uc2F2ZSAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25zYXZlKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbnNhdmUgPSAoPChtb2RhbFR5cGU6IHN0cmluZywgdmFsdWVzOiBhbnksIHNlbGVjdGVkRmllbGRzOiBhbnlbXSkgPT4gUHJvbWlzZTx2b2lkPj5uZXcgRnVuY3Rpb24gKHRoaXMub25zYXZlKSk7XG5cblx0XHRcdGF3YWl0IHRoaXMub25zYXZlICh0aGlzLm1vZGFsVHlwZSwgdmFsdWVzLCB0aGlzLnNlbGVjdGVkRmllbGRzKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGlmICh0aGlzLm1vZGFsVHlwZSA9PT0gXCJhZGRcIilcblx0XHRcdHtcblx0XHRcdFx0bGV0IGFkZFVybDogc3RyaW5nID0gSG90LkRhdGEuQWRtaW5QYW5lbC5hZGRVcmw7XG5cblx0XHRcdFx0YXdhaXQgSG90Lmpzb25SZXF1ZXN0IChhZGRVcmwsIHtcblx0XHRcdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWEsXG5cdFx0XHRcdFx0XHRmaWVsZHM6IHZhbHVlc1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5tb2RhbFR5cGUgPT09IFwiZWRpdFwiKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3RlZEZpZWxkcy5sZW5ndGggPT09IDApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRhbGVydCAoXCJObyBpdGVtKHMpIHNlbGVjdGVkIVwiKTtcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCB3aGVyZUZpZWxkczogYW55ID0ge307XG5cblx0XHRcdFx0YXdhaXQgdGhpcy5wcm9jZXNzSG90RmllbGRzIChhc3luYyAoaHRtbEVsZW1lbnQ6IEVsZW1lbnQsIGZpZWxkOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB9KSA9PlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGlmIChmaWVsZC50eXBlID09PSBcInJlbW92ZVwiKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdFx0XHRcdHdoZXJlRmllbGRzW2ZpZWxkLm5hbWVdID0gJChodG1sRWxlbWVudCkudmFsICgpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGxldCBlZGl0VXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLmVkaXRVcmw7XG5cblx0XHRcdFx0YXdhaXQgSG90Lmpzb25SZXF1ZXN0IChlZGl0VXJsLCB7XG5cdFx0XHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0XHRcdFx0d2hlcmVGaWVsZHM6IHdoZXJlRmllbGRzLFxuXHRcdFx0XHRcdFx0ZmllbGRzOiB2YWx1ZXNcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYXR0YWNoZWRMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKHRoaXMuYXR0YWNoZWRfbGlzdCk7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGxldCB0YWJsZTogQWRtaW5UYWJsZSA9IGF0dGFjaGVkTGlzdC5ob3RDb21wb25lbnQ7XG5cblx0XHRhd2FpdCB0YWJsZS5yZWZyZXNoTGlzdCAoKTtcblxuXHRcdGlmICh0aGlzLmNsb3NlT25TYXZlID09PSB0cnVlKVxuXHRcdHtcblx0XHRcdGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZSAoYCMke3RoaXMubW9kYWxJZH1gKS5oaWRlICgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0dGhpcy5tb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwgKCQoYCMke3RoaXMubW9kYWxJZH1gKVswXSwge1xuXHRcdFx0XHRcImJhY2tkcm9wXCI6IHRydWUsXG5cdFx0XHRcdFwia2V5Ym9hcmRcIjogdHJ1ZSxcblx0XHRcdFx0XCJmb2N1c1wiOiB0cnVlXG5cdFx0XHR9KTtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZyB8IEhvdENvbXBvbmVudE91dHB1dFtdXG5cdHtcblx0XHRpZiAodGhpcy5uYW1lID09PSBcIlwiKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yIChgWW91IG11c3Qgc3BlY2lmeSBhIG5hbWUgZm9yIGVhY2ggYWRtaW4tZWRpdCBlbGVtZW50IWApO1xuXG5cdFx0dGhpcy5tb2RhbElkID0gYCR7dGhpcy5uYW1lfU1vZGFsYDtcblxuXHRcdHJldHVybiAoW3tcblx0XHRcdGh0bWw6IGBcblx0XHRcdDwhLS0gJHt0aGlzLnRpdGxlfSBNb2RhbCBTdGFydCAtLT5cblx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbCBmYWRlICR7dGhpcy5jbGFzc31cIiBpZD1cIiR7dGhpcy5tb2RhbElkfVwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWxhYmVsbGVkYnk9XCIke3RoaXMubmFtZX1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cblx0XHRcdFx0XHRcdDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCIke3RoaXMubmFtZX1Nb2RhbExhYmVsXCI+JHt0aGlzLnRpdGxlfTwvaDU+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cblx0XHRcdFx0XHRcdDxob3QtcGxhY2UtaGVyZSBuYW1lID0gXCJtb2RhbEJvZHlcIiB0eXBlID0gXCJtb2RhbFwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIG9uY2xpY2sgPSBcImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcke3RoaXMubW9kYWxJZH0nKS5vblNhdmUgKCk7XCI+JHt0aGlzLmJ1dHRvbl90aXRsZX08L2J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDwhLS0gJHt0aGlzLnRpdGxlfSBNb2RhbCBFbmQgLS0+YCxcblx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IFwiYm9keVwiXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRodG1sOiBgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLm1vZGFsSWR9LWFkZC1idG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIG9uY2xpY2sgPSBcInRoaXMuYWRkQ2xpY2tlZCAoKTtcIj5BZGQ8L2J1dHRvbj5gLFxuXHRcdFx0ZG9jdW1lbnRTZWxlY3RvcjogYGhvdC1wbGFjZS1oZXJlW25hbWU9XCJidXR0b25zXCJdYFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aHRtbDogYDxidXR0b24gaWQgPSBcIiR7dGhpcy5tb2RhbElkfS1lZGl0LWJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgb25jbGljayA9IFwidGhpcy5lZGl0Q2xpY2tlZCAoKTtcIj5FZGl0PC9idXR0b24+YCxcblx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IGBob3QtcGxhY2UtaGVyZVtuYW1lPVwiYnV0dG9uc1wiXWBcblx0XHR9LFxuXHRcdHtcblx0XHRcdGh0bWw6IGA8YnV0dG9uIGlkID0gXCIke3RoaXMubW9kYWxJZH0tcmVtb3ZlLWJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgb25jbGljayA9IFwidGhpcy5yZW1vdmVDbGlja2VkICgpO1wiPlJlbW92ZTwvYnV0dG9uPmAsXG5cdFx0XHRkb2N1bWVudFNlbGVjdG9yOiBgaG90LXBsYWNlLWhlcmVbbmFtZT1cImJ1dHRvbnNcIl1gXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZSB9IGZyb20gXCIuL2FkbWluLXRhYmxlXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pblRhYmxlRmllbGQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0YWJsZSBmaWVsZC5cblx0ICovXG5cdGZpZWxkOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBUaGUgdHlwZSBvZiBmaWVsZC4gQ2FuIGJlOlxuXHQgKiAqIHRleHRcblx0ICogKiByZW1vdmVcblx0ICogXG5cdCAqIERlZmF1bHQ6IHRleHRcblx0ICovXG5cdGZpZWxkX3R5cGU6IHN0cmluZztcblx0LyoqXG5cdCAqIElmIHNldCB0byAxLCB0aGlzIHdpbGwgbm90IG91dHB1dCB0aGUgZmllbGQuXG5cdCAqL1xuXHRub19vdXRwdXQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBvbmlucHV0IGV2ZW50IGlzIGZpcmVkIHdoZW4gYW4gaXRlbSBpcyBhYm91dCB0byBiZSBwbGFjZWQgaW50byB0aGUgdGFibGUuXG5cdCAqL1xuXHRvbmlucHV0OiAoaXRlbTogYW55KSA9PiBhbnk7XG5cdC8qKlxuXHQgKiBUaGUgb3V0cHV0IHRvIGRpc3BsYXkuXG5cdCAqL1xuXHRvbm91dHB1dDogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10YWJsZS1maWVsZFwiO1xuXHRcdHRoaXMuZmllbGQgPSAwO1xuXHRcdHRoaXMuZmllbGRfdHlwZSA9IFwidGV4dFwiO1xuXHRcdHRoaXMubm9fb3V0cHV0ID0gXCIwXCI7XG5cdFx0dGhpcy5vbmlucHV0ID0gbnVsbDtcblx0XHR0aGlzLm9ub3V0cHV0ID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhpcyB0YWJsZSBmaWVsZCB0byB0aGUgdGFibGVcblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlID0gbnVsbDtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAocGFyZW50SHRtbEVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGhvdENvbXBvbmVudCA9IHBhcmVudEh0bWxFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQ7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHQvLyBAdHMtaWdub3JlIC0gbG9vb29sLiBBZGQgYSBiZXR0ZXIgd2F5IHRvIGdldCB0aGUgcGFyZW50IEhvdENvbXBvbmVudC5cblx0XHRcdGhvdENvbXBvbmVudCA9IHBhcmVudEh0bWxFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50O1xuXHRcdH1cblxuXHRcdGlmIChob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHRcdGhvdENvbXBvbmVudC5hZGRIZWFkZXJEYXRhT25seSAodGhpcywgaHRtbEVsZW1lbnQpO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGlmICh0aGlzLm5vX291dHB1dCA9PT0gXCIxXCIpXG5cdFx0e1xuXHRcdFx0cmV0dXJuIChbe1xuXHRcdFx0XHRodG1sOiBgPGRpdj48L2Rpdj5gLFxuXHRcdFx0XHRwbGFjZUhlcmVQYXJlbnQ6IFwiYWZ0ZXJUYWJsZVwiXG5cdFx0XHR9XSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChbe1xuXHRcdFx0aHRtbDogYDx0aD4ke3RoaXMuaW5uZXJ9PC90aD5gLFxuXHRcdFx0cGxhY2VIZXJlUGFyZW50OiBcImhlYWRlclwiXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5UYWJsZVJvdyBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIGZpZWxkcyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0ICogXG5cdCAqIEBleGFtcGxlIHsgXCJuYW1lXCI6IFwiSm9obiBTbWl0aFwiLCBcImVtYWlsXCI6IFwiam9obi5zbWl0aEBlbWFpbC5jb21cIiB9XG5cdCAqL1xuXHRmaWVsZHM6IGFueVtdO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRhYmxlLXJvd1wiO1xuXHRcdHRoaXMuZmllbGRzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoaXMgdGFibGUgcm93IHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQucm93RWxlbWVudHMucHVzaCAoeyBmaWVsZHM6IHRoaXMuZmllbGRzLCBlbGVtZW50OiBodG1sRWxlbWVudH0pO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGxldCByb3dIdG1sID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmZpZWxkcy5sZW5ndGggPiAwKVxuXHRcdFx0cm93SHRtbCArPSBgPHRkPjxpbnB1dCB0eXBlID0gXCJjaGVja2JveFwiIC8+PC90ZD5gO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCB0aGlzLmZpZWxkcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgZmllbGRPYmogPSB0aGlzLmZpZWxkc1tpSWR4XTtcblxuXHRcdFx0Zm9yIChsZXQga2V5IGluIGZpZWxkT2JqKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgdmFsdWUgPSBmaWVsZE9ialtrZXldO1xuXG5cdFx0XHRcdHJvd0h0bWwgKz0gYDx0ZD4ke3ZhbHVlfTwvdGQ+YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFt7XG5cdFx0XHRodG1sOiBgPHRyPiR7cm93SHRtbH08L3RyPmAsXG5cdFx0XHRwbGFjZUhlcmVQYXJlbnQ6IFwicmVzdWx0c1wiXG5cdFx0fV0pO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZUZpZWxkIH0gZnJvbSBcIi4vYWRtaW4tdGFibGUtZmllbGRcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGUgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIHRhYmxlLlxuXHQgKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBhdHRhY2hlZCBzY2hlbWEuXG5cdCAqL1xuXHRzY2hlbWE6IHN0cmluZztcblx0aGVhZGVyczoge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBzdG9yZWQgaGVhZGVyIGZpZWxkcy5cblx0XHQgKi9cblx0XHRmaWVsZHM6IHsgW25hbWU6IHN0cmluZ106IEFkbWluVGFibGVGaWVsZDsgfTtcblx0XHQvKipcblx0XHQgKiBUaGUgaGVhZGVycyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0XHQgKiBcblx0XHQgKiBAZXhhbXBsZSB7IFwibmFtZVwiOiBcIjx0aD5OYW1lPC90aD5cIiwgXCJlbWFpbFwiOiBcIjx0aD5FbWFpbDwvdGg+XCIgfVxuXHRcdCAqL1xuXHRcdGVsZW1lbnRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnk7IH07XG5cdFx0LyoqXG5cdFx0ICogVGhlIGhlYWRlciBpbmRpY2llcyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0XHQgKiBcblx0XHQgKiBAZXhhbXBsZSBjb25zb2xlLmxvZyAodGhpcy5oZWFkZXJJbmRpY2llc1tcIm5hbWVcIl0pOyAvLyBPdXRwdXRzIDBcblx0XHQgKi9cblx0XHRpbmRpY2llczogbnVtYmVyW107XG5cdH07XG5cdC8qKlxuXHQgKiBUaGUgcm93IGVsZW1lbnRzIGFyZSBzdG9yZWQgaW4gYW4gYXJyYXkgd2l0aCBrZXkvdmFsdWUgZmllbGRzIGFuZCBpdCdzIGF0dGFjaGVkIGh0bWwgZWxlbWVudC5cblx0ICogXG5cdCAqIEBleGFtcGxlXG5cdCAqIHtcblx0ICogICBcImZpZWxkc1wiOiBbXG5cdCAqICAgICAgIHtcblx0ICogICAgICAgICBcIm5hbWVcIjogXCJKb2huIFNtaXRoXCIsXG5cdCAqICAgICAgICAgXCJlbWFpbFwiOiBcImpvaG4uc21pdGhAdGVzdC5jb21cIlxuXHQgKiAgICAgICB9XG5cdCAqICAgICBdLFxuXHQgKiAgIFwiaHRtbFwiOiBcIjx0cj48dGQ+Sm9obiBTbWl0aDwvdGQ+PHRkPmpvaG4uc21pdGhAdGVzdC5jb208L3RkPjwvdHI+XCJcblx0ICogfVxuXHQgKi9cblx0cm93RWxlbWVudHM6IHsgZmllbGRzOiBhbnlbXTsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IH1bXSA9IFtdO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGVkIHJvdyBpbmRpY2llcy4gRWFjaCBpbmRleCBtYXBzIHRvIHRoZSByb3dFbGVtZW50cyBhcnJheS5cblx0ICogXG5cdCAqIEBmaXhtZSBBZGQgc3VwcG9ydCBmb3IgdGhpcyBpbiB0aGUgZnV0dXJlLlxuXHQgKi9cblx0Ly9wcm90ZWN0ZWQgc2VsZWN0ZWRSb3dzOiBudW1iZXJbXTtcblx0LyoqXG5cdCAqIFRoZSBtb3N0IHJlY2VudGx5IHNlbGVjdGVkIHJvdyBpbmRleC4gVGhlIGluZGV4IG1hcHMgdG8gdGhlIHJvd0VsZW1lbnRzIGFycmF5LlxuXHQgKi9cblx0cHJvdGVjdGVkIHNlbGVjdGVkOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBUaGUgbGlzdCBmdW5jdGlvbiB0byBleGVjdXRlIHRvIHJldHJpZXZlIGRhdGEuXG5cdCAqL1xuXHRvbmxpc3Q6ICgpID0+IFByb21pc2U8YW55W10+Oztcblx0LyoqXG5cdCAqIFRoZSBsaXN0IHVybCB0byB1c2UgZm9yIHRoaXMgdGFibGUuIEhvdC5EYXRhLkFkbWluUGFuZWwubGlzdFVybCB3aWxsIG5vdCBiZSB1c2VkIGluIHRoaXMgY2FzZS5cblx0ICovXG5cdGxpc3R1cmw6IHN0cmluZztcblx0LyoqXG5cdCAqIElmIHNldCB0byB0cnVlLCBlYWNoIHJvdyB3aWxsIGhhdmUgYSBjaGVja2JveC5cblx0ICogQGRlZmF1bHQgdHJ1ZVxuXHQgKi9cblx0Y2hlY2tib3g6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGlzIGV2ZW50IHdoZW4gYSByb3cgaXMgc2VsZWN0ZWQuIFRoZSBwb3RlbnRpYWwgaXRlbSB0byBiZSBzZWxlY3RlZCBcblx0ICogd2lsbCBhbHNvIGJlIHBhc3NlZC4gSWYgdGhpcyByZXR1cm5zIGZhbHNlLCB0aGUgcm93IHdpbGwgbm90IGJlIHNlbGVjdGVkLlxuXHQgKi9cblx0b25zZWxlY3RlZHJvdzogKHJvd0luZGV4OiBudW1iZXIsIGl0ZW06IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRhYmxlXCI7XG5cdFx0dGhpcy50aXRsZSA9IFwiXCI7XG5cdFx0dGhpcy5zY2hlbWEgPSBcIlwiO1xuXHRcdHRoaXMuaGVhZGVycyA9IHtcblx0XHRcdFx0ZmllbGRzOiB7fSxcblx0XHRcdFx0ZWxlbWVudHM6IHt9LFxuXHRcdFx0XHRpbmRpY2llczogW11cblx0XHRcdH07XG5cdFx0dGhpcy5yb3dFbGVtZW50cyA9IFtdO1xuXHRcdC8vdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcblx0XHR0aGlzLm9ubGlzdCA9IG51bGw7XG5cdFx0dGhpcy5saXN0dXJsID0gXCJcIjtcblx0XHR0aGlzLmNoZWNrYm94ID0gdHJ1ZTtcblx0XHR0aGlzLm9uc2VsZWN0ZWRyb3cgPSBudWxsO1xuXHRcdHRoaXMuc2VsZWN0ZWQgPSAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBoZWFkZXIgdG8gdGhlIHRhYmxlLlxuXHQgKi9cblx0YWRkSGVhZGVyICh0YWJsZUZpZWxkRWxlbWVudDogSFRNTEVsZW1lbnQpXG5cdHtcblx0XHRsZXQgaGVhZGVyID0gdGhpcy5odG1sRWxlbWVudHNbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGhlYWRcIilbMF07XG5cblx0XHRpZiAodGhpcy5oZWFkZXJzLmluZGljaWVzLmxlbmd0aCA8IDEpXG5cdFx0XHR0aGlzLmhlYWRlcnMuaW5kaWNpZXMucHVzaCAobnVsbCk7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0dGhpcy5oZWFkZXJzLmluZGljaWVzLnB1c2ggKHRhYmxlRmllbGRFbGVtZW50LmhvdENvbXBvbmVudC5maWVsZCk7XG5cdFx0aGVhZGVyLmFwcGVuZENoaWxkICh0YWJsZUZpZWxkRWxlbWVudCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgaGVhZGVyIHRvIHRoZSB0YWJsZS5cblx0ICovXG5cdGFkZEhlYWRlckRhdGFPbmx5ICh0YWJsZUZpZWxkOiBBZG1pblRhYmxlRmllbGQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudClcblx0e1xuXHRcdGlmICh0aGlzLmhlYWRlcnMuaW5kaWNpZXMubGVuZ3RoIDwgMSlcblx0XHRcdHRoaXMuaGVhZGVycy5pbmRpY2llcy5wdXNoIChudWxsKTtcblxuXHRcdHRoaXMuaGVhZGVycy5pbmRpY2llcy5wdXNoICh0YWJsZUZpZWxkLmZpZWxkKTtcblx0XHR0aGlzLmhlYWRlcnMuZmllbGRzW3RhYmxlRmllbGQuZmllbGRdID0gdGFibGVGaWVsZDtcblx0XHR0aGlzLmhlYWRlcnMuZWxlbWVudHNbdGFibGVGaWVsZC5maWVsZF0gPSBodG1sRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZpZWxkIHR5cGUgb2YgYSBmaWVsZC5cblx0ICovXG5cdGdldEZpZWxkVHlwZSAoZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmdcblx0e1xuXHRcdGlmICh0aGlzLmhlYWRlcnMuZWxlbWVudHNbZmllbGROYW1lXSAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCBob3RDb21wb25lbnQ6IEFkbWluVGFibGVGaWVsZCA9IHRoaXMuaGVhZGVycy5lbGVtZW50c1tmaWVsZE5hbWVdLmhvdENvbXBvbmVudDtcblxuXHRcdFx0aWYgKGhvdENvbXBvbmVudCAhPSBudWxsKVxuXHRcdFx0XHRyZXR1cm4gKGhvdENvbXBvbmVudC5maWVsZF90eXBlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gYSByb3cgaXMgc2VsZWN0ZWQuXG5cdCAqL1xuXHRhc3luYyBzZWxlY3RSb3cgKGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgcm93SW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGlmICh0aGlzLm9uc2VsZWN0ZWRyb3cgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uc2VsZWN0ZWRyb3cpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9uc2VsZWN0ZWRyb3cgPSAoPChyb3dJbmRleDogbnVtYmVyLCBpdGVtOiBhbnlbXSkgPT4gUHJvbWlzZTxib29sZWFuPj5uZXcgRnVuY3Rpb24gKHRoaXMub25zZWxlY3RlZHJvdykpO1xuXG5cdFx0XHRsZXQgaXRlbTogYW55W10gPSBudWxsO1xuXG5cdFx0XHRpZiAodGhpcy5yb3dFbGVtZW50c1tyb3dJbmRleF0gIT0gbnVsbClcblx0XHRcdFx0aXRlbSA9IHRoaXMucm93RWxlbWVudHNbcm93SW5kZXhdLmZpZWxkcztcblxuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25zZWxlY3RlZHJvdyAocm93SW5kZXgsIGl0ZW0pO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEluIHRoZSBmdXR1cmUsIHdlIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSByb3dzIGJlaW5nIHNlbGVjdGVkLiBGb3Igbm93IFxuXHRcdC8vIHRoaXMgd2lsbCBlbnN1cmUgdGhhdCBvbmx5IG9uZSByb3cgaXMgc2VsZWN0ZWQgYXQgYSB0aW1lLlxuXHRcdHtcblx0XHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXHRcdFx0bGV0IHJvd3MgPSB0Ym9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0clwiKTtcblxuXHRcdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCByb3dzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgcm93OiBIVE1MVGFibGVSb3dFbGVtZW50ID0gcm93c1tpSWR4XTtcblxuXHRcdFx0XHRpZiAocm93LmNsYXNzTGlzdC5jb250YWlucyAoXCJ0YWJsZS1wcmltYXJ5XCIpID09PSB0cnVlKVxuXHRcdFx0XHRcdHJvdy5jbGFzc0xpc3QucmVtb3ZlIChcInRhYmxlLXByaW1hcnlcIik7XG5cdFx0XHR9XG5cblx0XHRcdGh0bWxFbGVtZW50LmNsYXNzTGlzdC5hZGQgKFwidGFibGUtcHJpbWFyeVwiKTtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkID0gcm93SW5kZXg7XG5cblx0XHQvKnRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG5cdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cblx0XHQvLyBGaW5kIGFsbCB0aGUgY2hlY2tib3hlcyBpbiB0Ym9keS5cblx0XHRsZXQgY2hlY2tib3hlcyA9IHRib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lIChcImlucHV0XCIpO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBjaGVja2JveGVzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBjaGVja2JveDogSFRNTElucHV0RWxlbWVudCA9IGNoZWNrYm94ZXNbaUlkeF07XG5cblx0XHRcdGlmIChjaGVja2JveC5jaGVja2VkICE9IG51bGwpXG5cdFx0XHR7XG5cdFx0XHRcdGlmIChjaGVja2JveC5jaGVja2VkID09PSB0cnVlKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBkYXRhLWluZGV4IGF0dHJpYnV0ZS5cblx0XHRcdFx0XHRsZXQgZGF0YUluZGV4U3RyOiBzdHJpbmcgPSBjaGVja2JveC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlIChcImRhdGEtaW5kZXhcIik7XG5cdFx0XHRcdFx0bGV0IGRhdGFJbmRleDogbnVtYmVyID0gIHBhcnNlSW50IChkYXRhSW5kZXhTdHIpO1xuXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFJvd3MucHVzaCAoZGF0YUluZGV4KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0qL1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2VsZWN0ZWQgZGF0YS5cblx0ICovXG5cdGdldFNlbGVjdGVkICgpOiBhbnlbXVxuXHR7XG5cdFx0bGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLnNlbGVjdGVkO1xuXG5cdFx0aWYgKGluZGV4IDwgMClcblx0XHRcdHJldHVybiAobnVsbCk7XG5cblx0XHRyZXR1cm4gKHRoaXMucm93RWxlbWVudHNbaW5kZXhdLmZpZWxkcyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3RlZCBkYXRhLlxuXHQgKi9cblx0LypnZXRTZWxlY3RlZFJvd3MgKCk6IGFueVtdXG5cdHtcblx0XHRsZXQgcm93czogYW55W10gPSBbXTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLnNlbGVjdGVkUm93c1tpSWR4XTtcblx0XHRcdHJvd3MucHVzaCAodGhpcy5yb3dFbGVtZW50c1tpbmRleF0uZmllbGRzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKHJvd3MpO1xuXHR9Ki9cblxuXHQvKipcblx0ICogR2V0IHRoZSBkYXRhIGZvciBlYWNoIHJvdyB0aGF0IGhhcyBiZWVuIGNoZWNrZWQuXG5cdCAqL1xuXHRnZXRDaGVja2VkUm93cyAoKTogYW55W11cblx0e1xuXHRcdGxldCByb3dzOiBhbnlbXSA9IFtdO1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXG5cdFx0Ly8gRmluZCBhbGwgdGhlIGNoZWNrYm94ZXMgaW4gdGJvZHkuXG5cdFx0bGV0IGNoZWNrYm94ZXMgPSB0Ym9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJpbnB1dFwiKTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgY2hlY2tib3hlcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgY2hlY2tib3g6IEhUTUxJbnB1dEVsZW1lbnQgPSBjaGVja2JveGVzW2lJZHhdO1xuXG5cdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCA9PT0gdHJ1ZSlcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZGF0YS1pbmRleCBhdHRyaWJ1dGUuXG5cdFx0XHRcdFx0bGV0IGRhdGFJbmRleFN0cjogc3RyaW5nID0gY2hlY2tib3gucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSAoXCJkYXRhLWluZGV4XCIpO1xuXHRcdFx0XHRcdGxldCBkYXRhSW5kZXg6IG51bWJlciA9ICBwYXJzZUludCAoZGF0YUluZGV4U3RyKTtcblxuXHRcdFx0XHRcdHJvd3MucHVzaCAodGhpcy5yb3dFbGVtZW50c1tkYXRhSW5kZXhdLmZpZWxkcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKHJvd3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJvdydzIGRhdGEuXG5cdCAqL1xuXHRnZXRSb3cgKGluZGV4OiBudW1iZXIpOiBhbnlbXVxuXHR7XG5cdFx0cmV0dXJuICh0aGlzLnJvd0VsZW1lbnRzW2luZGV4XS5maWVsZHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIHJvdyB0byB0aGUgdGFibGUuXG5cdCAqIFxuXHQgKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgQSBsaXN0IG9mIHZhbHVlcyB0byBhcHBlbmQuXG5cdCAqL1xuXHRhZGRSb3cgKGZpZWxkczogeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXSlcblx0e1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXHRcdGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5yb3dFbGVtZW50cy5sZW5ndGg7XG5cdFx0bGV0IHJvd1N0ciA9IGA8dHIgb25jbGljayA9IFwidGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudC5zZWxlY3RSb3cgKHRoaXMsICR7aW5kZXh9KTtcIj5gO1xuXG5cdFx0aWYgKHR5cGVvZiAodGhpcy5jaGVja2JveCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHR0aGlzLmNoZWNrYm94ID0gSG90U3RhcS5wYXJzZUJvb2xlYW4gKHRoaXMuY2hlY2tib3gpO1xuXG5cdFx0aWYgKHRoaXMuY2hlY2tib3ggPT09IHRydWUpXG5cdFx0XHRyb3dTdHIgKz0gYDx0ZD48aW5wdXQgdHlwZSA9IFwiY2hlY2tib3hcIiAvPjwvdGQ+YDtcblx0XHRlbHNlXG5cdFx0XHRyb3dTdHIgKz0gYDx0ZD48L3RkPmA7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHRoaXMuaGVhZGVycy5pbmRpY2llcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHQvLyBAdHMtaWdub3JlIC0gQGZpeG1lIEkgbWVzc2VkIHRoaXMgdXAsIHdpbGwgZml4LlxuXHRcdFx0bGV0IGtleTogc3RyaW5nID0gdGhpcy5oZWFkZXJzLmluZGljaWVzW2lJZHhdO1xuXG5cdFx0XHRpZiAoa2V5ID09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRsZXQgdmFsdWUgPSBmaWVsZHNba2V5XTtcblx0XHRcdC8vIEZvciBlYWNoIC4gaW4ga2V5IHdlIG5lZWQgdG8gZ2V0IHRoZSBuZXh0IG9iamVjdC5cblx0XHRcdGxldCBrZXlQYXJ0czogc3RyaW5nW10gPSBrZXkuc3BsaXQgKFwiLlwiKTtcblx0XHRcdFxuXHRcdFx0aWYgKGtleVBhcnRzLmxlbmd0aCA+IDEpXG5cdFx0XHR7XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0bGV0IHRlbXBWYWx1ZTogYW55ID0gZmllbGRzW2tleVBhcnRzWzBdXTtcblxuXHRcdFx0XHRmb3IgKGxldCBpSWR4ID0gMTsgaUlkeCA8IGtleVBhcnRzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgcGFydDogc3RyaW5nID0ga2V5UGFydHNbaUlkeF07XG5cblx0XHRcdFx0XHR0ZW1wVmFsdWUgPSB0ZW1wVmFsdWVbcGFydF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YWx1ZSA9IHRlbXBWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuaGVhZGVycy5lbGVtZW50c1trZXldICE9IG51bGwpXG5cdFx0XHR7XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmUgLSBAZml4bWUgSSBtZXNzZWQgdGhpcyB1cCwgd2lsbCBmaXguXG5cdFx0XHRcdGxldCBmaWVsZFR5cGU6IHN0cmluZyA9IHRoaXMuZ2V0RmllbGRUeXBlIChrZXkpO1xuXG5cdFx0XHRcdGlmIChmaWVsZFR5cGUgPT0gbnVsbClcblx0XHRcdFx0XHRmaWVsZFR5cGUgPSBcInRleHRcIjtcblxuXHRcdFx0XHRpZiAoZmllbGRUeXBlICE9PSBcInJlbW92ZVwiKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3Qgb3JnRmllbGQgPSB0aGlzLmhlYWRlcnMuZmllbGRzW2tleV07XG5cdFx0XHRcdFx0bGV0IGRlZmF1bHRPdXRwdXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKG9yZ0ZpZWxkICE9IG51bGwpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKG9yZ0ZpZWxkLm9uaW5wdXQgIT0gbnVsbClcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiAob3JnRmllbGQub25pbnB1dCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5oZWFkZXJzLmZpZWxkc1trZXldLm9uaW5wdXQgPSAoPChpdGVtOiBhbnkpID0+IGFueT5uZXcgRnVuY3Rpb24gKG9yZ0ZpZWxkLm9uaW5wdXQpKTtcblxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IG9yZ0ZpZWxkLm9uaW5wdXQgKHZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG9yZ0ZpZWxkLm9ub3V0cHV0ICE9IG51bGwpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgKG9yZ0ZpZWxkLm9ub3V0cHV0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmhlYWRlcnMuZmllbGRzW2tleV0ub25vdXRwdXQgPSAoPChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc+bmV3IEZ1bmN0aW9uIChvcmdGaWVsZC5vbm91dHB1dCkpO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRPdXRwdXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3T3V0cHV0OiBzdHJpbmcgPSBvcmdGaWVsZC5vbm91dHB1dCAoaW5kZXgsIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0cm93U3RyICs9IG5ld091dHB1dDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoZGVmYXVsdE91dHB1dCA9PT0gdHJ1ZSlcblx0XHRcdFx0XHRcdHJvd1N0ciArPSBgPHRkIGRhdGEtaW5kZXggPSBcIiR7aW5kZXh9XCI+JHt2YWx1ZX08L3RkPmA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyb3dTdHIgKz0gXCI8L3RyPlwiO1xuXG5cdFx0bGV0IG5ld09iaiA9IEhvdFN0YXEuYWRkSHRtbCAodGJvZHksIHJvd1N0cik7XG5cblx0XHR0aGlzLnJvd0VsZW1lbnRzLnB1c2ggKHtcblx0XHRcdFx0ZmllbGRzOiBmaWVsZHMsXG5cdFx0XHRcdGVsZW1lbnQ6ICg8SFRNTEVsZW1lbnQ+bmV3T2JqKVxuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgdGhlIGxpc3Qgb2Ygcm93cy5cblx0ICovXG5cdGFzeW5jIGNsZWFyUm93cyAoKVxuXHR7XG5cdFx0dGhpcy5yb3dFbGVtZW50cyA9IFtdO1xuXG5cdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cblx0XHR0Ym9keS5pbm5lckhUTUwgPSBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZnJlc2ggdGhlIGxpc3QuXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoTGlzdCAoKVxuXHR7XG5cdFx0bGV0IGxpc3QgPSBudWxsO1xuXG5cdFx0aWYgKHRoaXMub25saXN0ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmxpc3QpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9ubGlzdCA9ICg8KCkgPT4gUHJvbWlzZTxhbnlbXT4+bmV3IEZ1bmN0aW9uICh0aGlzLm9ubGlzdCkpO1xuXG5cdFx0XHRsaXN0ID0gYXdhaXQgdGhpcy5vbmxpc3QgKCk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRsZXQgbGlzdFVybDogc3RyaW5nID0gSG90LkRhdGEuQWRtaW5QYW5lbC5saXN0VXJsO1xuXG5cdFx0XHRpZiAodGhpcy5saXN0dXJsICE9PSBcIlwiKVxuXHRcdFx0XHRsaXN0VXJsID0gdGhpcy5saXN0dXJsO1xuXG5cdFx0XHRsaXN0ID0gYXdhaXQgSG90Lmpzb25SZXF1ZXN0IChsaXN0VXJsLCB7XG5cdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLmNsZWFyUm93cyAoKTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgbGlzdC5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgZmllbGRzID0gbGlzdFtpSWR4XTtcblxuXHRcdFx0dGhpcy5hZGRSb3cgKGZpZWxkcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbGlzdCBvZiBkYXRhIGZyb20gdGhlIHNlcnZlci5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRzZXRUaW1lb3V0IChhc3luYyAoKSA9PlxuXHRcdFx0e1xuXHRcdFx0XHRhd2FpdCB0aGlzLnJlZnJlc2hMaXN0ICgpO1xuXHRcdFx0fSwgNTApO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGxldCBlbXB0eUNoZWNrYm94SGVhZGVyOiBzdHJpbmcgPSBcIjx0aD48L3RoPlwiO1xuXG5cdFx0cmV0dXJuIChgXG5cdFx0PGRpdiBpZCA9IFwiJHt0aGlzLmh0bWxFbGVtZW50c1swXS5pZH1cIj5cblx0XHRcdDxoMj4ke3RoaXMudGl0bGV9PC9oMj5cblx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG5cdFx0XHQ8dGFibGUgaWQgPSBcIiR7dGhpcy5odG1sRWxlbWVudHNbMF0uaWR9VGFibGVcIiBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtc21cIj5cblx0XHRcdFx0PHRoZWFkPlxuXHRcdFx0XHRcdDx0ciBob3QtcGxhY2UtaGVyZSA9IFwiaGVhZGVyXCI+XG5cdFx0XHRcdFx0XHQke2VtcHR5Q2hlY2tib3hIZWFkZXJ9XG5cdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0PHRib2R5IGhvdC1wbGFjZS1oZXJlID0gXCJyZXN1bHRzXCI+XG5cdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHQ8L3RhYmxlPlxuXHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcImFmdGVyVGFibGVcIj48L2hvdC1wbGFjZS1oZXJlPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQsIEhvdENvbXBvbmVudE91dHB1dCB9IGZyb20gXCJob3RzdGFxXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pblRleHQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIElmIHNldCB0byAxLCB0aGlzIHdpbGwgbm90IG91dHB1dCB0aGUgZmllbGQuXG5cdCAqL1xuXHRub19vdXRwdXQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBjbGFzc2VzIHRvIHNldCBmb3IgdGhlIGlucHV0LlxuXHQgKiBAZGVmYXVsdCBcImZvcm0tY29udHJvbFwiXG5cdCAqL1xuXHRjbGFzczogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRleHRcIjtcblx0XHR0aGlzLm5vX291dHB1dCA9IFwiMFwiO1xuXHRcdHRoaXMuY2xhc3MgPSBcImZvcm0tY29udHJvbFwiXG5cdH1cblxuXHQvKipcblx0ICogQ29ycmVjdHMgdGhlIHBsYWNlbWVudCBvZiB0aGUgdGV4dCBlbGVtZW50cyBmb3IgbW9kYWxzLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdGxldCBwbGFjZUhlcmVBcnJheSA9IHBhcmVudEh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKGBob3QtcGxhY2UtaGVyZVt0eXBlPVwibW9kYWxcIl1gKTtcblxuXHRcdC8vIFNlYXJjaCBmb3IgdGhlIGlucHV0IGJveCBpbiB0aGUgbW9kYWwgd2UgYXR0YWNoZWQgdG8sIHRoZW4gc3RvcmUgdGhlIFxuXHRcdC8vIGZvdW5kIGlucHV0IGJveCBpbnRvIHRoZSBmaWVsZEVsZW1lbnRzIGFycmF5LlxuXHRcdGlmIChwbGFjZUhlcmVBcnJheS5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdGxldCBwbGFjZUhlcmUgPSBwbGFjZUhlcmVBcnJheVswXTtcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LnJlbW92ZUNoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0XHRwbGFjZUhlcmUuYXBwZW5kQ2hpbGQgKGh0bWxFbGVtZW50KTtcblxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0cGFyZW50SHRtbEVsZW1lbnQuaG90Q29tcG9uZW50LmZpZWxkRWxlbWVudHNbdGhpcy5maWVsZF0gPSBodG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yIChcImlucHV0XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZyB8IEhvdENvbXBvbmVudE91dHB1dFtdXG5cdHtcblx0XHRsZXQgdmFsdWU6IHN0cmluZyA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy52YWx1ZSAhPSBudWxsKVxuXHRcdFx0dmFsdWUgPSB0aGlzLnZhbHVlO1xuXG5cdFx0aWYgKHRoaXMubm9fb3V0cHV0ID09PSBcIjFcIilcblx0XHRcdHJldHVybiAoYDxkaXY+PGlucHV0IGNsYXNzPVwiJHt0aGlzLmNsYXNzfVwiIHR5cGUgPSBcImhpZGRlblwiIHZhbHVlID0gXCIke3ZhbHVlfVwiIC8+PC9kaXY+YCk7XG5cblx0XHRjb25zdCBmaWVsZCA9IHRoaXMuaHRtbEVsZW1lbnRzWzBdLmdldEF0dHJpYnV0ZSAoXCJob3QtZmllbGRcIik7XG5cdFx0bGV0IGZpZWxkX3R5cGUgPSB0aGlzLmh0bWxFbGVtZW50c1swXS5nZXRBdHRyaWJ1dGUgKFwiaG90LWZpZWxkLXR5cGVcIik7XG5cblx0XHRpZiAoZmllbGRfdHlwZSA9PSBudWxsKVxuXHRcdFx0ZmllbGRfdHlwZSA9IFwidGV4dFwiO1xuXG5cdFx0cmV0dXJuIChgPGRpdj5cblx0XHRcdDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj4ke3RoaXMuaW5uZXJ9PC9sYWJlbD5cblx0XHRcdDxpbnB1dCBjbGFzcz1cIiR7dGhpcy5jbGFzc31cIiB0eXBlID0gXCJ0ZXh0XCIgaG90LWZpZWxkID0gXCIke2ZpZWxkfVwiIGhvdC1maWVsZC10eXBlID0gXCIke2ZpZWxkX3R5cGV9XCIgdmFsdWUgPSBcIiR7dmFsdWV9XCIgLz5cblx0XHQ8L2Rpdj5gKTtcblx0fVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBIb3RTdGFxV2ViOyIsIm1vZHVsZS5leHBvcnRzID0gYm9vdHN0cmFwOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJpbXBvcnQgeyBBZG1pbkJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tYnV0dG9uXCI7XG5pbXBvcnQgeyBBZG1pbkRyb3Bkb3duIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1kcm9wZG93blwiO1xuaW1wb3J0IHsgQWRtaW5EYXNoYm9hcmQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLWRhc2hib2FyZFwiO1xuaW1wb3J0IHsgQWRtaW5FZGl0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1lZGl0XCI7XG5pbXBvcnQgeyBBZG1pblRhYmxlIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10YWJsZVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZUZpZWxkIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10YWJsZS1maWVsZFwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZVJvdyB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtcm93XCI7XG5pbXBvcnQgeyBBZG1pblRleHQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLXRleHRcIjtcblxuZXhwb3J0IHtcblx0XHRBZG1pbkJ1dHRvbixcblx0XHRBZG1pbkRyb3Bkb3duLFxuXHRcdEFkbWluRGFzaGJvYXJkLFxuXHRcdEFkbWluRWRpdCxcblx0XHRBZG1pblRhYmxlLFxuXHRcdEFkbWluVGFibGVGaWVsZCxcblx0XHRBZG1pblRhYmxlUm93LFxuXHRcdEFkbWluVGV4dFxuXHR9OyJdLCJuYW1lcyI6WyJBZG1pbkJ1dHRvbiIsIkhvdENvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwiY29weSIsImFwaSIsInN1cGVyIiwidGhpcyIsInRhZyIsIm9uY2xpY2siLCJidXR0b25DbGlja2VkIiwib25Qb3N0UGxhY2UiLCJwYXJlbnRIdG1sRWxlbWVudCIsImh0bWxFbGVtZW50IiwicGxhY2VIZXJlQXJyYXkiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwicGxhY2VIZXJlIiwicmVtb3ZlQ2hpbGQiLCJhcHBlbmRDaGlsZCIsImhvdENvbXBvbmVudCIsImZpZWxkRWxlbWVudHMiLCJmaWVsZCIsIkZ1bmN0aW9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm91dHB1dCIsImh0bWxFbGVtZW50cyIsImlkIiwiaW5uZXIiLCJBZG1pbkRhc2hib2FyZCIsInRpdGxlIiwiYmFzZSIsIkhvdCIsIkRhdGEiLCJBZG1pblBhbmVsIiwiYmFzZVVybCIsImFkZFVybCIsImVkaXRVcmwiLCJyZW1vdmVVcmwiLCJsaXN0VXJsIiwiQWRtaW5Ecm9wZG93biIsInBsYWNlaG9sZGVyIiwib25zZWFyY2giLCJvbnNlbGVjdCIsInF1ZXJ5U2VsZWN0b3IiLCJldmVudCIsInNlYXJjaFRleHQiLCJjdXJyZW50VGFyZ2V0IiwidmFsdWUiLCJyZXN1bHRzIiwic2VhcmNoUmVzdWx0c0RpdiIsIiQiLCJmaW5kIiwiZW1wdHkiLCJpSWR4IiwicmVzdWx0IiwidXJsIiwidGV4dCIsImFwcGVuZCIsInNlbGVjdGVkIiwiaW5kZXgiLCJnZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJBZG1pbkVkaXQiLCJvbkFkZENsaWNrZWQiLCJvbkVkaXRDbGlja2VkIiwib25SZW1vdmVDbGlja2VkIiwiYnV0dG9uX3RpdGxlIiwiYXR0YWNoZWRfbGlzdCIsInNjaGVtYSIsIm1vZGFsSWQiLCJjbGFzcyIsIm1vZGFsIiwibW9kYWxUeXBlIiwiY2xvc2VPblNhdmUiLCJzZWxlY3RlZEZpZWxkcyIsIm9uc2F2ZSIsIm9uZWRpdCIsIm9uZGVsZXRlIiwicHJvY2Vzc0hvdEZpZWxkcyIsIm9uRmllbGQiLCJlbG1zIiwiZWxtIiwiYXR0ciIsImZpZWxkVHlwZSIsIm5hbWUiLCJ0eXBlIiwiYWRkQ2xpY2tlZCIsInZhbCIsIk1vZGFsIiwiZ2V0SW5zdGFuY2UiLCJzaG93IiwiZWRpdENsaWNrZWQiLCJzZWxlY3RlZEZpZWxkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImdldFNlbGVjdGVkIiwicmVtb3ZlQ2xpY2tlZCIsImNoZWNrZWRSb3dzIiwiZ2V0Q2hlY2tlZFJvd3MiLCJ3aGVyZUZpZWxkcyIsImkiLCJjaGVja2VkUm93IiwicHVzaCIsImNvbmZpcm0iLCJ3aGVyZUZpZWxkIiwia2V5IiwiZ2V0RmllbGRUeXBlIiwianNvblJlcXVlc3QiLCJyZWZyZXNoTGlzdCIsIm9uU2F2ZSIsInZhbHVlcyIsImZpZWxkcyIsImFsZXJ0IiwidGFibGUiLCJoaWRlIiwiRXJyb3IiLCJodG1sIiwiZG9jdW1lbnRTZWxlY3RvciIsIkFkbWluVGFibGVGaWVsZCIsImZpZWxkX3R5cGUiLCJub19vdXRwdXQiLCJvbmlucHV0Iiwib25vdXRwdXQiLCJwYXJlbnROb2RlIiwiYWRkSGVhZGVyRGF0YU9ubHkiLCJwbGFjZUhlcmVQYXJlbnQiLCJBZG1pblRhYmxlUm93Iiwicm93RWxlbWVudHMiLCJlbGVtZW50Iiwicm93SHRtbCIsImZpZWxkT2JqIiwiQWRtaW5UYWJsZSIsImhlYWRlcnMiLCJlbGVtZW50cyIsImluZGljaWVzIiwib25saXN0IiwibGlzdHVybCIsImNoZWNrYm94Iiwib25zZWxlY3RlZHJvdyIsImFkZEhlYWRlciIsInRhYmxlRmllbGRFbGVtZW50IiwiaGVhZGVyIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWJsZUZpZWxkIiwiZmllbGROYW1lIiwic2VsZWN0Um93Iiwicm93SW5kZXgiLCJpdGVtIiwicm93cyIsInJvdyIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwicmVtb3ZlIiwiYWRkIiwiY2hlY2tib3hlcyIsImNoZWNrZWQiLCJkYXRhSW5kZXhTdHIiLCJwYXJlbnRFbGVtZW50IiwiZGF0YUluZGV4IiwicGFyc2VJbnQiLCJnZXRSb3ciLCJhZGRSb3ciLCJ0Ym9keSIsInJvd1N0ciIsIkhvdFN0YXEiLCJwYXJzZUJvb2xlYW4iLCJrZXlQYXJ0cyIsInNwbGl0IiwidGVtcFZhbHVlIiwib3JnRmllbGQiLCJkZWZhdWx0T3V0cHV0IiwibmV3T2JqIiwiYWRkSHRtbCIsImNsZWFyUm93cyIsImxpc3QiLCJzZXRUaW1lb3V0IiwiQWRtaW5UZXh0IiwibW9kdWxlIiwiZXhwb3J0cyIsIkhvdFN0YXFXZWIiLCJib290c3RyYXAiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJ1bmRlZmluZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiY2FsbCJdLCJzb3VyY2VSb290IjoiIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hotstaq/admin-panel",
3
3
  "description": "",
4
- "version": "0.2.12",
4
+ "version": "0.3.0",
5
5
  "main": "build/index.js",
6
6
  "scripts": {
7
7
  "start": "hotstaq --hotsite ./HotSite.json --env-file ./.env run --server-type web-api",
package/src/WebExport.ts CHANGED
@@ -1,19 +1,20 @@
1
1
  async function buildAssets (): Promise<any>
2
2
  {
3
3
  return ({
4
- import: [{ name: "bootstrap", files: ["bootstrap.min.js", "bootstrap.min.css"] },
4
+ import: ["@popperjs/core",
5
5
  { name: "jquery", files: ["jquery.min.js"] },
6
6
  "chart.js",
7
7
  "feather-icons",
8
- "@popperjs/core"],
8
+ { name: "bootstrap", files: ["bootstrap.min.js", "bootstrap.min.css"] }],
9
9
  html: ["./assets/html/*.*"],
10
10
  css: ["./assets/css/*.*"],
11
11
  js: ["./assets/js/*.*", "./build-web/AdminPanelComponents.js"],
12
12
  componentLibrary: "AdminPanelComponentsWeb",
13
13
  components: [
14
- "AdminButton",
15
14
  "AdminDashboard",
16
15
  "AdminEdit",
16
+ "AdminButton",
17
+ "AdminDropdown",
17
18
  "AdminTable",
18
19
  "AdminTableField",
19
20
  "AdminTableRow",