@wavemaker/app-ng-runtime 12.0.0-next.140534 → 12.0.0-next.141130

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 (170) hide show
  1. app-ng-runtime/build-task/advanced/custom-widget-container/custom-widget-container.build.d.ts +2 -0
  2. app-ng-runtime/build-task/advanced/custom-widget-wrapper/custom-widget-wrapper.build.d.ts +2 -0
  3. app-ng-runtime/build-task/bundles/index.umd.js +451 -405
  4. app-ng-runtime/build-task/esm2022/advanced/custom-widget-container/custom-widget-container.build.mjs +15 -0
  5. app-ng-runtime/build-task/esm2022/advanced/custom-widget-wrapper/custom-widget-wrapper.build.mjs +26 -0
  6. app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +3 -2
  7. app-ng-runtime/build-task/esm2022/public_api.mjs +3 -1
  8. app-ng-runtime/build-task/fesm2022/index.mjs +454 -406
  9. app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
  10. app-ng-runtime/build-task/public_api.d.ts +2 -0
  11. app-ng-runtime/components/advanced/custom/.npmignore +2 -0
  12. app-ng-runtime/components/advanced/custom/bundles/index.umd.js +232 -0
  13. app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +19 -0
  14. app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget.props.d.ts +2 -0
  15. app-ng-runtime/components/advanced/custom/custom-widget-prop.d.ts +1 -0
  16. app-ng-runtime/components/advanced/custom/custom-widget.directive.d.ts +19 -0
  17. app-ng-runtime/components/advanced/custom/custom-widget.module.d.ts +10 -0
  18. app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +102 -0
  19. app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget.props.mjs +12 -0
  20. app-ng-runtime/components/advanced/custom/esm2022/custom-widget-prop.mjs +8 -0
  21. app-ng-runtime/components/advanced/custom/esm2022/custom-widget.directive.mjs +68 -0
  22. app-ng-runtime/components/advanced/custom/esm2022/custom-widget.module.mjs +32 -0
  23. app-ng-runtime/components/advanced/custom/esm2022/index.mjs +5 -0
  24. app-ng-runtime/components/advanced/custom/esm2022/public_api.mjs +4 -0
  25. app-ng-runtime/components/advanced/custom/fesm2022/index.mjs +215 -0
  26. app-ng-runtime/components/advanced/custom/fesm2022/index.mjs.map +1 -0
  27. app-ng-runtime/components/advanced/custom/index.d.ts +5 -0
  28. app-ng-runtime/components/advanced/custom/package.json +23 -0
  29. app-ng-runtime/components/advanced/custom/public_api.d.ts +3 -0
  30. app-ng-runtime/components/base/bundles/index.umd.js +63 -21
  31. app-ng-runtime/components/base/components.module.d.ts +12 -11
  32. app-ng-runtime/components/base/esm2022/components.module.mjs +5 -1
  33. app-ng-runtime/components/base/esm2022/public_api.mjs +2 -1
  34. app-ng-runtime/components/base/esm2022/utils/live-utils.mjs +2 -8
  35. app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +25 -15
  36. app-ng-runtime/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +39 -0
  37. app-ng-runtime/components/base/fesm2022/index.mjs +63 -22
  38. app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
  39. app-ng-runtime/components/base/public_api.d.ts +1 -0
  40. app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +10 -5
  41. app-ng-runtime/components/base/widgets/common/base/custom-widget-container.directive.d.ts +14 -0
  42. app-ng-runtime/components/basic/search/bundles/index.umd.js +36 -24
  43. app-ng-runtime/components/basic/search/esm2022/search.component.mjs +33 -24
  44. app-ng-runtime/components/basic/search/esm2022/search.props.mjs +5 -2
  45. app-ng-runtime/components/basic/search/fesm2022/index.mjs +36 -24
  46. app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
  47. app-ng-runtime/components/basic/search/search.component.d.ts +3 -0
  48. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +14 -6
  49. app-ng-runtime/components/containers/tabs/esm2022/tabs.component.mjs +14 -7
  50. app-ng-runtime/components/containers/tabs/esm2022/tabs.props.mjs +3 -2
  51. app-ng-runtime/components/containers/tabs/fesm2022/index.mjs +14 -6
  52. app-ng-runtime/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  53. app-ng-runtime/components/containers/tabs/tabs.component.d.ts +1 -0
  54. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +0 -17
  55. app-ng-runtime/components/containers/wizard/esm2022/wizard.component.mjs +1 -18
  56. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs +0 -17
  57. app-ng-runtime/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  58. app-ng-runtime/components/containers/wizard/wizard.component.d.ts +0 -1
  59. app-ng-runtime/components/data/form/bundles/index.umd.js +0 -4
  60. app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +3 -5
  61. app-ng-runtime/components/data/form/fesm2022/index.mjs +2 -4
  62. app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
  63. app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +0 -1
  64. app-ng-runtime/components/data/table/bundles/index.umd.js +2 -2
  65. app-ng-runtime/components/data/table/esm2022/table.component.mjs +3 -3
  66. app-ng-runtime/components/data/table/fesm2022/index.mjs +2 -2
  67. app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
  68. app-ng-runtime/components/data/table/table.component.d.ts +1 -1
  69. app-ng-runtime/components/dialogs/default/base-dialog.d.ts +2 -0
  70. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +17 -17
  71. app-ng-runtime/components/dialogs/default/esm2022/base-dialog.mjs +1 -12
  72. app-ng-runtime/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +14 -2
  73. app-ng-runtime/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +6 -7
  74. app-ng-runtime/components/dialogs/default/fesm2022/index.mjs +18 -18
  75. app-ng-runtime/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  76. app-ng-runtime/components/dialogs/design-dialog/bundles/index.umd.js +21 -3
  77. app-ng-runtime/components/dialogs/design-dialog/dialog.component.d.ts +3 -2
  78. app-ng-runtime/components/dialogs/design-dialog/esm2022/dialog.component.mjs +22 -4
  79. app-ng-runtime/components/dialogs/design-dialog/fesm2022/index.mjs +21 -3
  80. app-ng-runtime/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  81. app-ng-runtime/components/input/default/bundles/index.umd.js +116 -115
  82. app-ng-runtime/components/input/default/checkboxset/checkboxset.component.d.ts +1 -0
  83. app-ng-runtime/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +8 -5
  84. app-ng-runtime/components/input/default/esm2022/radioset/radioset.component.mjs +8 -5
  85. app-ng-runtime/components/input/default/esm2022/select/select.component.mjs +29 -59
  86. app-ng-runtime/components/input/default/esm2022/switch/switch.component.mjs +64 -38
  87. app-ng-runtime/components/input/default/esm2022/switch/switch.props.mjs +2 -1
  88. app-ng-runtime/components/input/default/esm2022/text/base/base-input.mjs +4 -1
  89. app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +2 -2
  90. app-ng-runtime/components/input/default/esm2022/textarea/textarea.component.mjs +1 -4
  91. app-ng-runtime/components/input/default/fesm2022/index.mjs +117 -116
  92. app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
  93. app-ng-runtime/components/input/default/radioset/radioset.component.d.ts +1 -0
  94. app-ng-runtime/components/input/default/select/select.component.d.ts +4 -2
  95. app-ng-runtime/components/input/default/switch/switch.component.d.ts +2 -0
  96. app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +2 -3
  97. app-ng-runtime/components/input/epoch/bundles/index.umd.js +0 -3
  98. app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +1 -4
  99. app-ng-runtime/components/input/epoch/fesm2022/index.mjs +0 -3
  100. app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
  101. app-ng-runtime/components/input/file-upload/bundles/index.umd.js +5 -31
  102. app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +8 -34
  103. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +6 -32
  104. app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  105. app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +2 -6
  106. app-ng-runtime/components/input/rating/bundles/index.umd.js +26 -35
  107. app-ng-runtime/components/input/rating/esm2022/rating.component.mjs +26 -37
  108. app-ng-runtime/components/input/rating/esm2022/rating.props.mjs +3 -1
  109. app-ng-runtime/components/input/rating/fesm2022/index.mjs +27 -36
  110. app-ng-runtime/components/input/rating/fesm2022/index.mjs.map +1 -1
  111. app-ng-runtime/components/input/rating/rating.component.d.ts +3 -1
  112. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +2 -2
  113. app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +2 -2
  114. app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +2 -2
  115. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +2 -2
  116. app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  117. app-ng-runtime/components/page/left-panel/bundles/index.umd.js +6 -2
  118. app-ng-runtime/components/page/left-panel/esm2022/left-panel.directive.mjs +9 -5
  119. app-ng-runtime/components/page/left-panel/fesm2022/index.mjs +8 -4
  120. app-ng-runtime/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  121. app-ng-runtime/components/page/left-panel/left-panel.directive.d.ts +2 -2
  122. app-ng-runtime/components/page/right-panel/bundles/index.umd.js +6 -2
  123. app-ng-runtime/components/page/right-panel/esm2022/right-panel.directive.mjs +9 -5
  124. app-ng-runtime/components/page/right-panel/fesm2022/index.mjs +8 -4
  125. app-ng-runtime/components/page/right-panel/fesm2022/index.mjs.map +1 -1
  126. app-ng-runtime/components/page/right-panel/right-panel.directive.d.ts +2 -2
  127. app-ng-runtime/core/bundles/index.umd.js +28 -6
  128. app-ng-runtime/core/enums/enums.d.ts +2 -1
  129. app-ng-runtime/core/esm2022/enums/enums.mjs +2 -1
  130. app-ng-runtime/core/esm2022/public_api.mjs +2 -2
  131. app-ng-runtime/core/esm2022/types/types.mjs +4 -1
  132. app-ng-runtime/core/esm2022/utils/build-utils.mjs +6 -1
  133. app-ng-runtime/core/esm2022/utils/utils.mjs +11 -4
  134. app-ng-runtime/core/fesm2022/index.mjs +22 -4
  135. app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
  136. app-ng-runtime/core/public_api.d.ts +1 -1
  137. app-ng-runtime/core/types/types.d.ts +5 -1
  138. app-ng-runtime/core/utils/utils.d.ts +2 -1
  139. app-ng-runtime/mobile/core/bundles/index.umd.js +2 -18
  140. app-ng-runtime/mobile/core/esm2022/native.xhr.mjs +3 -19
  141. app-ng-runtime/mobile/core/fesm2022/index.mjs +2 -18
  142. app-ng-runtime/mobile/core/fesm2022/index.mjs.map +1 -1
  143. app-ng-runtime/package.json +1 -1
  144. app-ng-runtime/runtime/base/bundles/index.umd.js +296 -5
  145. app-ng-runtime/runtime/base/components/base-custom-widget.component.d.ts +73 -0
  146. app-ng-runtime/runtime/base/esm2022/components/base-custom-widget.component.mjs +294 -0
  147. app-ng-runtime/runtime/base/esm2022/public_api.mjs +2 -1
  148. app-ng-runtime/runtime/base/esm2022/runtime-base.module.mjs +6 -1
  149. app-ng-runtime/runtime/base/esm2022/services/i18n.service.mjs +2 -2
  150. app-ng-runtime/runtime/base/esm2022/types/types.mjs +4 -1
  151. app-ng-runtime/runtime/base/fesm2022/index.mjs +294 -4
  152. app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
  153. app-ng-runtime/runtime/base/public_api.d.ts +1 -0
  154. app-ng-runtime/runtime/base/runtime-base.module.d.ts +9 -8
  155. app-ng-runtime/runtime/base/types/types.d.ts +5 -1
  156. app-ng-runtime/runtime/dynamic/app/services/customwidget-config-provider.service.d.ts +8 -0
  157. app-ng-runtime/runtime/dynamic/bundles/index.umd.js +49 -13
  158. app-ng-runtime/runtime/dynamic/esm2022/app/app.module.mjs +8 -3
  159. app-ng-runtime/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +23 -7
  160. app-ng-runtime/runtime/dynamic/esm2022/app/services/customwidget-config-provider.service.mjs +22 -0
  161. app-ng-runtime/runtime/dynamic/fesm2022/index.mjs +50 -11
  162. app-ng-runtime/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  163. app-ng-runtime/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
  164. app-ng-runtime/scripts/datatable/datatable.js +4 -7
  165. app-ng-runtime/scripts/summernote/dist/summernote-lite.min.js +3 -2
  166. app-ng-runtime/transpiler/bundles/index.umd.js +5 -0
  167. app-ng-runtime/transpiler/esm2022/build.mjs +4 -1
  168. app-ng-runtime/transpiler/esm2022/imports.mjs +3 -1
  169. app-ng-runtime/transpiler/fesm2022/index.mjs +5 -0
  170. app-ng-runtime/transpiler/fesm2022/index.mjs.map +1 -1
@@ -55,21 +55,21 @@
55
55
  const _c0$c = ["wmButton", ""];
56
56
  const _c1$b = [[["", 8, "caret"]]];
57
57
  const _c2$8 = [".caret"];
58
- const _c3$3 = (a0, a1, a2) => ({ width: a0, height: a1, margin: a2 });
59
- const _c4$2 = (a0, a1, a2, a3) => ({ width: a0, height: a1, margin: a2, fontSize: a3 });
58
+ const _c3$4 = (a0, a1, a2) => ({ width: a0, height: a1, margin: a2 });
59
+ const _c4$3 = (a0, a1, a2, a3) => ({ width: a0, height: a1, margin: a2, fontSize: a3 });
60
60
  function ButtonComponent_img_0_Template(rf, ctx) { if (rf & 1) {
61
61
  i0__namespace.ɵɵelement(0, "img", 5);
62
62
  i0__namespace.ɵɵpipe(1, "image");
63
63
  } if (rf & 2) {
64
64
  const ctx_r0 = i0__namespace.ɵɵnextContext();
65
- i0__namespace.ɵɵproperty("src", i0__namespace.ɵɵpipeBind1(1, 2, ctx_r0.iconurl), i0__namespace.ɵɵsanitizeUrl)("ngStyle", i0__namespace.ɵɵpureFunction3(4, _c3$3, ctx_r0.iconwidth, ctx_r0.iconheight, ctx_r0.iconmargin));
65
+ i0__namespace.ɵɵproperty("src", i0__namespace.ɵɵpipeBind1(1, 2, ctx_r0.iconurl), i0__namespace.ɵɵsanitizeUrl)("ngStyle", i0__namespace.ɵɵpureFunction3(4, _c3$4, ctx_r0.iconwidth, ctx_r0.iconheight, ctx_r0.iconmargin));
66
66
  } }
67
67
  function ButtonComponent_i_1_Template(rf, ctx) { if (rf & 1) {
68
68
  i0__namespace.ɵɵelement(0, "i", 6);
69
69
  } if (rf & 2) {
70
70
  const ctx_r0 = i0__namespace.ɵɵnextContext();
71
71
  i0__namespace.ɵɵclassMapInterpolate1("app-icon ", ctx_r0.iconclass, "");
72
- i0__namespace.ɵɵproperty("ngStyle", i0__namespace.ɵɵpureFunction4(4, _c4$2, ctx_r0.iconwidth, ctx_r0.iconheight, ctx_r0.iconmargin, ctx_r0.iconwidth));
72
+ i0__namespace.ɵɵproperty("ngStyle", i0__namespace.ɵɵpureFunction4(4, _c4$3, ctx_r0.iconwidth, ctx_r0.iconheight, ctx_r0.iconmargin, ctx_r0.iconwidth));
73
73
  } }
74
74
  function ButtonComponent_span_2_Template(rf, ctx) { if (rf & 1) {
75
75
  i0__namespace.ɵɵelementStart(0, "span", 7);
@@ -400,7 +400,7 @@
400
400
  const _c0$b = ["checkbox"];
401
401
  const _c1$a = ["wmCheckbox", ""];
402
402
  const _c2$7 = (a0, a1, a2) => ({ "unchecked": a0, "disabled": a1, "required": a2 });
403
- const _c3$2 = () => ({ standalone: true });
403
+ const _c3$3 = () => ({ standalone: true });
404
404
  const DEFAULT_CLS$4 = 'app-checkbox checkbox';
405
405
  const WIDGET_CONFIG$c = {
406
406
  widgetType: 'wm-checkbox',
@@ -523,7 +523,7 @@
523
523
  i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction3(14, _c2$7, !ctx.proxyModel, ctx.disabled || ctx.readonly, ctx.required && ctx._caption));
524
524
  i0__namespace.ɵɵadvance();
525
525
  i0__namespace.ɵɵtwoWayProperty("ngModel", ctx.proxyModel);
526
- i0__namespace.ɵɵproperty("ngModelOptions", i0__namespace.ɵɵpureFunction0(18, _c3$2))("readonly", ctx.readonly)("required", ctx.required)("disabled", ctx.disabled || ctx.readonly)("tabindex", ctx.tabindex);
526
+ i0__namespace.ɵɵproperty("ngModelOptions", i0__namespace.ɵɵpureFunction0(18, _c3$3))("readonly", ctx.readonly)("required", ctx.required)("disabled", ctx.disabled || ctx.readonly)("tabindex", ctx.tabindex);
527
527
  i0__namespace.ɵɵattribute("name", ctx.name)("aria-label", ctx.hint)("aria-checked", !!ctx.proxyModel)("accesskey", ctx.shortcutkey);
528
528
  i0__namespace.ɵɵadvance(2);
529
529
  i0__namespace.ɵɵproperty("innerHtml", ctx._caption, i0__namespace.ɵɵsanitizeHtml);
@@ -898,8 +898,8 @@
898
898
  const _c0$a = ["wmCheckboxset", ""];
899
899
  const _c1$9 = (a0, a1) => ["checkbox", "app-checkbox", a0, a1];
900
900
  const _c2$6 = a0 => ({ "disabled": a0 });
901
- const _c3$1 = a0 => ({ "collapsible-content": a0 });
902
- const _c4$1 = (a0, a1) => ["checkbox", "app-checkbox", "group-list-item", a0, a1];
901
+ const _c3$2 = a0 => ({ "collapsible-content": a0 });
902
+ const _c4$2 = (a0, a1) => ["checkbox", "app-checkbox", "group-list-item", a0, a1];
903
903
  function CheckboxsetComponent_ng_template_0_li_0_label_1_Template(rf, ctx) { if (rf & 1) {
904
904
  i0__namespace.ɵɵelementStart(0, "label", 8);
905
905
  i0__namespace.ɵɵelement(1, "input", 9)(2, "span", 10);
@@ -1007,7 +1007,7 @@
1007
1007
  const item_r9 = ctx.$implicit;
1008
1008
  const ctx_r2 = i0__namespace.ɵɵnextContext(3);
1009
1009
  i0__namespace.ɵɵclassProp("active", item_r9.selected);
1010
- i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction2(7, _c4$1, ctx_r2.itemclass, ctx_r2.itemsPerRowClass))("wmItemTemplate", ctx_r2.content)("userComponentParams", item_r9);
1010
+ i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction2(7, _c4$2, ctx_r2.itemclass, ctx_r2.itemsPerRowClass))("wmItemTemplate", ctx_r2.content)("userComponentParams", item_r9);
1011
1011
  i0__namespace.ɵɵadvance();
1012
1012
  i0__namespace.ɵɵproperty("ngIf", !ctx_r2.content);
1013
1013
  i0__namespace.ɵɵadvance();
@@ -1028,7 +1028,7 @@
1028
1028
  const groupObj_r7 = ctx.$implicit;
1029
1029
  const ctx_r2 = i0__namespace.ɵɵnextContext(2);
1030
1030
  i0__namespace.ɵɵadvance(2);
1031
- i0__namespace.ɵɵproperty("title", groupObj_r7.key)("ngClass", i0__namespace.ɵɵpureFunction1(6, _c3$1, ctx_r2.collapsible));
1031
+ i0__namespace.ɵɵproperty("title", groupObj_r7.key)("ngClass", i0__namespace.ɵɵpureFunction1(6, _c3$2, ctx_r2.collapsible));
1032
1032
  i0__namespace.ɵɵadvance(2);
1033
1033
  i0__namespace.ɵɵtextInterpolate1("", groupObj_r7.key, " ");
1034
1034
  i0__namespace.ɵɵadvance(2);
@@ -1054,6 +1054,12 @@
1054
1054
  i2.styler(this.nativeElement, this);
1055
1055
  this.multiple = true;
1056
1056
  }
1057
+ triggerInvokeOnChange(keys, $event) {
1058
+ this.modelByKey = keys;
1059
+ this.invokeOnTouched();
1060
+ // invoke on datavalue change.
1061
+ this.invokeOnChange(this.datavalue, $event || {}, true);
1062
+ }
1057
1063
  onCheckboxLabelClick($event, key) {
1058
1064
  if (!$($event.target).is('input')) {
1059
1065
  return;
@@ -1065,10 +1071,7 @@
1065
1071
  // @ts-ignore
1066
1072
  keys.push($el.value);
1067
1073
  });
1068
- this.modelByKey = keys;
1069
- this.invokeOnTouched();
1070
- // invoke on datavalue change.
1071
- this.invokeOnChange(this.datavalue, $event || {}, true);
1074
+ this.triggerInvokeOnChange(keys, $event);
1072
1075
  }
1073
1076
  // change and blur events are added from the template
1074
1077
  handleEvent(node, eventName, callback, locals) {
@@ -1270,6 +1273,9 @@
1270
1273
  /* WMS-18269 | Update Angular about the required attr value change */
1271
1274
  this._onChange(this.datavalue);
1272
1275
  }
1276
+ if (key === 'updateon') {
1277
+ this.ngModelOptions.updateOn = nv === 'default' ? 'change' : ov;
1278
+ }
1273
1279
  if (key === 'class') {
1274
1280
  if (this.inputEl.nativeElement) {
1275
1281
  i1$1.switchClass(this.inputEl.nativeElement, nv, ov);
@@ -1368,7 +1374,7 @@
1368
1374
  const prevDataValue = this.prevDatavalue;
1369
1375
  this.displayValue = input.value = this.proxyModel = null;
1370
1376
  this.resetValidations();
1371
- if ((prevDataValue || prevDataValue == 0) && !this.isDefaultQuery) {
1377
+ if (prevDataValue && !this.isDefaultQuery) {
1372
1378
  this.handleChange(value);
1373
1379
  this._onChange();
1374
1380
  }
@@ -1878,8 +1884,8 @@
1878
1884
  const _c0$8 = ["wmRadioset", ""];
1879
1885
  const _c1$7 = (a0, a1) => ["radio", "app-radio", a0, a1];
1880
1886
  const _c2$5 = a0 => ({ "disabled": a0 });
1881
- const _c3 = a0 => ({ "collapsible-content": a0 });
1882
- const _c4 = (a0, a1) => ["radio", "app-radio", "group-list-item", a0, a1];
1887
+ const _c3$1 = a0 => ({ "collapsible-content": a0 });
1888
+ const _c4$1 = (a0, a1) => ["radio", "app-radio", "group-list-item", a0, a1];
1883
1889
  function RadiosetComponent_ng_template_0_li_0_label_1_Template(rf, ctx) { if (rf & 1) {
1884
1890
  i0__namespace.ɵɵelementStart(0, "label", 7);
1885
1891
  i0__namespace.ɵɵelement(1, "input", 8)(2, "span", 9);
@@ -1987,7 +1993,7 @@
1987
1993
  const item_r9 = ctx.$implicit;
1988
1994
  const ctx_r2 = i0__namespace.ɵɵnextContext(3);
1989
1995
  i0__namespace.ɵɵclassProp("active", item_r9.selected);
1990
- i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction2(7, _c4, ctx_r2.itemclass, ctx_r2.itemsPerRowClass))("wmItemTemplate", ctx_r2.content)("userComponentParams", item_r9);
1996
+ i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction2(7, _c4$1, ctx_r2.itemclass, ctx_r2.itemsPerRowClass))("wmItemTemplate", ctx_r2.content)("userComponentParams", item_r9);
1991
1997
  i0__namespace.ɵɵadvance();
1992
1998
  i0__namespace.ɵɵproperty("ngIf", !ctx_r2.content);
1993
1999
  i0__namespace.ɵɵadvance();
@@ -2008,7 +2014,7 @@
2008
2014
  const groupObj_r7 = ctx.$implicit;
2009
2015
  const ctx_r2 = i0__namespace.ɵɵnextContext(2);
2010
2016
  i0__namespace.ɵɵadvance(2);
2011
- i0__namespace.ɵɵproperty("title", groupObj_r7.key)("ngClass", i0__namespace.ɵɵpureFunction1(6, _c3, ctx_r2.collapsible));
2017
+ i0__namespace.ɵɵproperty("title", groupObj_r7.key)("ngClass", i0__namespace.ɵɵpureFunction1(6, _c3$1, ctx_r2.collapsible));
2012
2018
  i0__namespace.ɵɵadvance(2);
2013
2019
  i0__namespace.ɵɵtextInterpolate1("", groupObj_r7.key, " ");
2014
2020
  i0__namespace.ɵɵadvance(2);
@@ -2034,6 +2040,12 @@
2034
2040
  i2.styler(this.nativeElement, this);
2035
2041
  this.multiple = false;
2036
2042
  }
2043
+ triggerInvokeOnChange(key, $event) {
2044
+ this.modelByKey = key;
2045
+ this.invokeOnTouched();
2046
+ // invoke on datavalue change.
2047
+ this.invokeOnChange(this.datavalue, $event || {}, true);
2048
+ }
2037
2049
  /**
2038
2050
  * On click of the option, update the datavalue
2039
2051
  */
@@ -2041,10 +2053,7 @@
2041
2053
  if (!$($event.target).is('input')) {
2042
2054
  return;
2043
2055
  }
2044
- this.modelByKey = key;
2045
- this.invokeOnTouched();
2046
- // invoke on datavalue change.
2047
- this.invokeOnChange(this.datavalue, $event || {}, true);
2056
+ this.triggerInvokeOnChange(key, $event);
2048
2057
  }
2049
2058
  // change and blur events are added from the template
2050
2059
  handleEvent(node, eventName, callback, locals) {
@@ -2189,38 +2198,10 @@
2189
2198
  this.datavalue = ds.execute(i1$1.DataSource.Operation.GET_DEFAULT_LOCALE);
2190
2199
  }
2191
2200
  }
2192
- constructor(inj, explicitContext) {
2201
+ constructor(inj, app, explicitContext) {
2193
2202
  super(inj, WIDGET_CONFIG$7, explicitContext);
2203
+ this.app = app;
2194
2204
  this.acceptsArray = true;
2195
- /*
2196
- * When the dataset for a select element is updated and no longer includes the previously selected value:
2197
- * The select element becomes empty, and the ngModel value is updated to reflect this change.
2198
- * However, the change event is not triggered, preventing the form control from recognizing the update and applying necessary validations.
2199
- * As this widget implements ControlValueAccessor, manually updating the ngModel (or modelByKey) is necessary to ensure correct form behavior.
2200
- * */
2201
- const datasetSubscription = this.dataset$.subscribe(() => {
2202
- if (i1$1.isIos()) {
2203
- if (this.datavalue) {
2204
- const selectedItem = this.datasetItems.find(item => item.selected);
2205
- if (!selectedItem) {
2206
- setTimeout(() => {
2207
- if (!this.placeholder) {
2208
- this.selectEl.nativeElement.value = '';
2209
- }
2210
- this.modelByKey = undefined;
2211
- }, 100);
2212
- }
2213
- }
2214
- else {
2215
- setTimeout(() => {
2216
- if (!this.placeholder) {
2217
- this.selectEl.nativeElement.value = '';
2218
- }
2219
- }, 100);
2220
- }
2221
- }
2222
- });
2223
- this.registerDestroyListener(() => datasetSubscription.unsubscribe());
2224
2205
  }
2225
2206
  ngAfterViewInit() {
2226
2207
  super.ngAfterViewInit();
@@ -2228,7 +2209,7 @@
2228
2209
  }
2229
2210
  // Change event is registered from the template, Prevent the framework from registering one more event
2230
2211
  handleEvent(node, eventName, eventCallback, locals) {
2231
- if (!['blur', 'change'].includes(eventName)) {
2212
+ if (!lodashEs.includes(['blur', 'change'], eventName)) {
2232
2213
  super.handleEvent(this.selectEl.nativeElement, eventName, eventCallback, locals);
2233
2214
  }
2234
2215
  }
@@ -2279,40 +2260,36 @@
2279
2260
  */
2280
2261
  checkForFloatingLabel($event) {
2281
2262
  const captionEl = $(this.selectEl.nativeElement).closest('.app-composite-widget.caption-floating');
2282
- if (!this.placeholder && i1$1.isIos()) {
2283
- this.removePlaceholderOption();
2284
- }
2285
2263
  if (captionEl.length > 0) {
2286
- const placeholderOption = this.selectEl.nativeElement.querySelector('#placeholderOption');
2287
- if ($event.type === 'mousedown' && (!this.datavalue || (this.datavalue && $(this.selectEl).find('select option:selected').text() === '' && this.placeholder))) {
2288
- if (this.placeholder) {
2289
- placeholderOption.textContent = this.placeholder;
2264
+ if ($event.type === 'focus' && (!this.datavalue || (this.datavalue && $(this.selectEl).find('select option:selected').text() === '' && this.placeholder))) {
2265
+ if (!(this.datavalue || this.placeholder)) {
2266
+ this.removePlaceholderOption();
2267
+ }
2268
+ else {
2269
+ $(this.selectEl.nativeElement).find('option:first').text(this.placeholder);
2290
2270
  }
2291
2271
  }
2292
2272
  else if (!this.datavalue) {
2293
- if (this.placeholder) {
2294
- placeholderOption.textContent = '';
2295
- }
2273
+ $(this.selectEl.nativeElement).find('option:selected').text('');
2296
2274
  captionEl.removeClass('float-active');
2297
2275
  }
2298
2276
  }
2277
+ else if (!(this.datavalue || this.placeholder)) {
2278
+ this.removePlaceholderOption();
2279
+ }
2299
2280
  }
2300
2281
  /*
2301
2282
  * Removing the placeholder option if no placeholder is provided.
2302
- * In html we are hiding the placeholder option using css but in Apple devices and safari option is showing.
2303
- * Styles are not allowed on option tag in ios safari
2304
- * After removing the option, if no datavalue is present and native select element sets value to the first option by default, so we are setting it to empty
2283
+ * In html we are hiding the placeholder option using css but in apple devices and safari option is showing.
2305
2284
  * */
2306
2285
  removePlaceholderOption() {
2307
2286
  const hiddenEle = $(this.selectEl.nativeElement).find('#placeholderOption');
2308
2287
  if (hiddenEle.length) {
2309
2288
  hiddenEle.remove();
2310
- if (!this.datavalue) {
2311
- this.selectEl.nativeElement.value = '';
2312
- }
2289
+ this.selectEl.nativeElement.value = '';
2313
2290
  }
2314
2291
  }
2315
- static { this.ɵfac = function SelectComponent_Factory(t) { return new (t || SelectComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
2292
+ static { this.ɵfac = function SelectComponent_Factory(t) { return new (t || SelectComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject(i1$1__namespace.App), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
2316
2293
  static { this.ɵcmp = /*@__PURE__*/ i0__namespace.ɵɵdefineComponent({ type: SelectComponent, selectors: [["wm-select"]], viewQuery: function SelectComponent_Query(rf, ctx) { if (rf & 1) {
2317
2294
  i0__namespace.ɵɵviewQuery(_c0$7, 7, i0.ElementRef);
2318
2295
  } if (rf & 2) {
@@ -2322,11 +2299,11 @@
2322
2299
  i2.provideAs(SelectComponent, i2$1.NG_VALUE_ACCESSOR, true),
2323
2300
  i2.provideAs(SelectComponent, i2$1.NG_VALIDATORS, true),
2324
2301
  i2.provideAsWidgetRef(SelectComponent)
2325
- ]), i0__namespace.ɵɵInheritDefinitionFeature], decls: 5, vars: 18, consts: [["select", ""], ["role", "listbox", "aria-haspopup", "true", "aria-expanded", "false", "focus-target", "", 3, "ngModelChange", "change", "mousedown", "blur", "ngClass", "disabled", "required", "tabindex", "ngModel", "ngModelOptions", "multiple", "autofocus"], ["selected", "", "value", "undefined", "id", "placeholderOption", 3, "textContent", "hidden"], [4, "ngIf"], [3, "label", 4, "ngFor", "ngForOf"], [3, "label"], ["role", "option", 3, "value", "selected", "textContent", 4, "ngFor", "ngForOf"], ["role", "option", 3, "value", "selected", "textContent"]], template: function SelectComponent_Template(rf, ctx) { if (rf & 1) {
2302
+ ]), i0__namespace.ɵɵInheritDefinitionFeature], decls: 5, vars: 18, consts: [["select", ""], ["role", "listbox", "aria-haspopup", "true", "aria-expanded", "false", "focus-target", "", 3, "ngModelChange", "change", "focus", "blur", "ngClass", "disabled", "required", "tabindex", "ngModel", "ngModelOptions", "multiple", "autofocus"], ["selected", "", "value", "undefined", "id", "placeholderOption", 3, "textContent", "hidden"], [4, "ngIf"], [3, "label", 4, "ngFor", "ngForOf"], [3, "label"], ["role", "option", 3, "value", "selected", "textContent", 4, "ngFor", "ngForOf"], ["role", "option", 3, "value", "selected", "textContent"]], template: function SelectComponent_Template(rf, ctx) { if (rf & 1) {
2326
2303
  const _r1 = i0__namespace.ɵɵgetCurrentView();
2327
2304
  i0__namespace.ɵɵelementStart(0, "select", 1, 0);
2328
2305
  i0__namespace.ɵɵtwoWayListener("ngModelChange", function SelectComponent_Template_select_ngModelChange_0_listener($event) { i0__namespace.ɵɵrestoreView(_r1); i0__namespace.ɵɵtwoWayBindingSet(ctx.modelByKey, $event) || (ctx.modelByKey = $event); return i0__namespace.ɵɵresetView($event); });
2329
- i0__namespace.ɵɵlistener("change", function SelectComponent_Template_select_change_0_listener($event) { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.onSelectValueChange($event)); })("mousedown", function SelectComponent_Template_select_mousedown_0_listener($event) { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.checkForFloatingLabel($event)); })("blur", function SelectComponent_Template_select_blur_0_listener($event) { i0__namespace.ɵɵrestoreView(_r1); ctx.invokeOnTouched($event); return i0__namespace.ɵɵresetView(ctx.checkForFloatingLabel($event)); });
2306
+ i0__namespace.ɵɵlistener("change", function SelectComponent_Template_select_change_0_listener($event) { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.onSelectValueChange($event)); })("focus", function SelectComponent_Template_select_focus_0_listener($event) { i0__namespace.ɵɵrestoreView(_r1); return i0__namespace.ɵɵresetView(ctx.checkForFloatingLabel($event)); })("blur", function SelectComponent_Template_select_blur_0_listener($event) { i0__namespace.ɵɵrestoreView(_r1); ctx.invokeOnTouched($event); return i0__namespace.ɵɵresetView(ctx.checkForFloatingLabel($event)); });
2330
2307
  i0__namespace.ɵɵelement(2, "option", 2);
2331
2308
  i0__namespace.ɵɵtemplate(3, SelectComponent_ng_container_3_Template, 2, 1, "ng-container", 3)(4, SelectComponent_ng_container_4_Template, 2, 1, "ng-container", 3);
2332
2309
  i0__namespace.ɵɵelementEnd();
@@ -2349,8 +2326,8 @@
2349
2326
  i2.provideAs(SelectComponent, i2$1.NG_VALUE_ACCESSOR, true),
2350
2327
  i2.provideAs(SelectComponent, i2$1.NG_VALIDATORS, true),
2351
2328
  i2.provideAsWidgetRef(SelectComponent)
2352
- ], template: "<!--Updated focus with mousedown event. IOS devices not allow update of option value after opening dropdown-->\n<select role=\"listbox\" aria-haspopup=\"true\" aria-expanded=\"false\" #select\n focus-target\n [ngClass]=\"['app-select form-control', class]\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [(ngModel)]=\"modelByKey\"\n [ngModelOptions]=\"{standalone: true}\"\n [multiple]=\"multiple\"\n (change)=\"onSelectValueChange($event)\"\n (mousedown)=\"checkForFloatingLabel($event)\"\n (blur)=\"invokeOnTouched($event); checkForFloatingLabel($event)\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"hint\"\n [attr.aria-multiselectable]=\"multiple\"\n [autofocus]=\"autofocus\">\n\n <option selected\n value=\"undefined\"\n [textContent]=\"placeholder\"\n id=\"placeholderOption\"\n [hidden]=\"!placeholder\"></option>\n\n <ng-container *ngIf=\"groupby\">\n <optgroup *ngFor=\"let groupObj of groupedData\"\n [label]=\"groupObj.key\">\n <option *ngFor=\"let item of groupObj.data;\"\n [value]=\"item.key\"\n [selected]=\"item.selected\"\n [textContent]=\"item.label\"\n role=\"option\"></option>\n </optgroup>\n </ng-container>\n\n <ng-container *ngIf=\"!groupby\">\n <option *ngFor=\"let item of datasetItems\"\n [value]=\"item.key\"\n [selected]=\"item.selected\"\n [textContent]=\"item.label\"\n role=\"option\"></option>\n </ng-container>\n</select>\n" }]
2353
- }], () => [{ type: i0__namespace.Injector }, { type: undefined, decorators: [{
2329
+ ], template: "<select role=\"listbox\" aria-haspopup=\"true\" aria-expanded=\"false\" #select\n focus-target\n [ngClass]=\"['app-select form-control', class]\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [(ngModel)]=\"modelByKey\"\n [ngModelOptions]=\"{standalone: true}\"\n [multiple]=\"multiple\"\n (change)=\"onSelectValueChange($event)\"\n (focus)=\"checkForFloatingLabel($event)\"\n (blur)=\"invokeOnTouched($event); checkForFloatingLabel($event)\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"hint\"\n [attr.aria-multiselectable]=\"multiple\"\n [autofocus]=\"autofocus\">\n\n <option selected\n value=\"undefined\"\n [textContent]=\"placeholder\"\n id=\"placeholderOption\"\n [hidden]=\"!placeholder\"></option>\n\n <ng-container *ngIf=\"groupby\">\n <optgroup *ngFor=\"let groupObj of groupedData\"\n [label]=\"groupObj.key\">\n <option *ngFor=\"let item of groupObj.data;\"\n [value]=\"item.key\"\n [selected]=\"item.selected\"\n [textContent]=\"item.label\"\n role=\"option\"></option>\n </optgroup>\n </ng-container>\n\n <ng-container *ngIf=\"!groupby\">\n <option *ngFor=\"let item of datasetItems\"\n [value]=\"item.key\"\n [selected]=\"item.selected\"\n [textContent]=\"item.label\"\n role=\"option\"></option>\n </ng-container>\n</select>\n" }]
2330
+ }], () => [{ type: i0__namespace.Injector }, { type: i1$1__namespace.App }, { type: undefined, decorators: [{
2354
2331
  type: i0.Inject,
2355
2332
  args: ['EXPLICIT_CONTEXT']
2356
2333
  }, {
@@ -2359,7 +2336,7 @@
2359
2336
  type: i0.ViewChild,
2360
2337
  args: ['select', { static: true, read: i0.ElementRef }]
2361
2338
  }] }); })();
2362
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassDebugInfo(SelectComponent, { className: "SelectComponent", filePath: "select/select.component.ts", lineNumber: 20 }); })();
2339
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0__namespace.ɵsetClassDebugInfo(SelectComponent, { className: "SelectComponent", filePath: "select/select.component.ts", lineNumber: 22 }); })();
2363
2340
 
2364
2341
  const switchProps = new Map([
2365
2342
  ['class', i2.PROP_STRING],
@@ -2373,6 +2350,7 @@
2373
2350
  ['displayfield', i2.PROP_STRING],
2374
2351
  ['hint', i2.PROP_STRING],
2375
2352
  ['iconclass', i2.PROP_STRING],
2353
+ ['checkediconclass', { value: 'wm-sl-l sl-check', ...i2.PROP_STRING }],
2376
2354
  ['name', i2.PROP_STRING],
2377
2355
  ['orderby', i2.PROP_STRING],
2378
2356
  ['required', i2.PROP_BOOLEAN],
@@ -2386,36 +2364,54 @@
2386
2364
  };
2387
2365
 
2388
2366
  const _c0$6 = ["wmSwitch", ""];
2389
- const _c1$5 = (a0, a1) => ({ "selected": a0, "disabled": a1 });
2390
- const _c2$3 = a0 => ["app-icon", a0];
2367
+ const _c1$5 = a0 => ({ "multi-select": a0 });
2368
+ const _c2$3 = (a0, a1) => ({ "selected": a0, "disabled": a1 });
2369
+ const _c3 = a0 => ["app-icon", a0];
2370
+ const _c4 = a0 => [a0];
2391
2371
  function SwitchComponent_a_1_i_1_Template(rf, ctx) { if (rf & 1) {
2392
- i0__namespace.ɵɵelement(0, "i", 8);
2372
+ i0__namespace.ɵɵelement(0, "i", 7);
2393
2373
  } if (rf & 2) {
2394
2374
  const opt_r3 = i0__namespace.ɵɵnextContext().$implicit;
2395
2375
  const ctx_r4 = i0__namespace.ɵɵnextContext();
2396
- i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction1(1, _c2$3, opt_r3.dataObject[ctx_r4.iconclass] || opt_r3["icon"]));
2376
+ i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction1(1, _c3, opt_r3.dataObject[ctx_r4.iconclass] || opt_r3["icon"]));
2377
+ } }
2378
+ function SwitchComponent_a_1_i_2_Template(rf, ctx) { if (rf & 1) {
2379
+ i0__namespace.ɵɵelement(0, "i", 7);
2380
+ } if (rf & 2) {
2381
+ const ctx_r4 = i0__namespace.ɵɵnextContext(2);
2382
+ i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction1(1, _c4, ctx_r4.checkediconclass));
2397
2383
  } }
2398
2384
  function SwitchComponent_a_1_Template(rf, ctx) { if (rf & 1) {
2399
2385
  const _r1 = i0__namespace.ɵɵgetCurrentView();
2400
- i0__namespace.ɵɵelementStart(0, "a", 5);
2386
+ i0__namespace.ɵɵelementStart(0, "a", 4);
2401
2387
  i0__namespace.ɵɵlistener("click", function SwitchComponent_a_1_Template_a_click_0_listener($event) { const ctx_r1 = i0__namespace.ɵɵrestoreView(_r1); const opt_r3 = ctx_r1.$implicit; const $index_r4 = ctx_r1.index; const ctx_r4 = i0__namespace.ɵɵnextContext(); return i0__namespace.ɵɵresetView(ctx_r4.selectOpt($event, $index_r4, opt_r3)); });
2402
- i0__namespace.ɵɵtemplate(1, SwitchComponent_a_1_i_1_Template, 1, 3, "i", 6);
2403
- i0__namespace.ɵɵelement(2, "span", 7);
2388
+ i0__namespace.ɵɵtemplate(1, SwitchComponent_a_1_i_1_Template, 1, 3, "i", 5)(2, SwitchComponent_a_1_i_2_Template, 1, 3, "i", 5);
2389
+ i0__namespace.ɵɵelement(3, "span", 6);
2404
2390
  i0__namespace.ɵɵelementEnd();
2405
2391
  } if (rf & 2) {
2406
2392
  const opt_r3 = ctx.$implicit;
2407
2393
  const ctx_r4 = i0__namespace.ɵɵnextContext();
2408
- i0__namespace.ɵɵproperty("name", "wm-switch-" + opt_r3.key)("ngClass", i0__namespace.ɵɵpureFunction2(4, _c1$5, opt_r3.selected, ctx_r4.disabled));
2394
+ i0__namespace.ɵɵproperty("name", "wm-switch-" + opt_r3.key)("ngClass", i0__namespace.ɵɵpureFunction2(5, _c2$3, opt_r3.selected, ctx_r4.disabled));
2409
2395
  i0__namespace.ɵɵadvance();
2410
- i0__namespace.ɵɵproperty("ngIf", opt_r3.dataObject && opt_r3.dataObject[ctx_r4.iconclass]);
2396
+ i0__namespace.ɵɵproperty("ngIf", opt_r3.dataObject && opt_r3.dataObject[ctx_r4.iconclass] && !opt_r3.selected);
2397
+ i0__namespace.ɵɵadvance();
2398
+ i0__namespace.ɵɵproperty("ngIf", opt_r3.selected);
2411
2399
  i0__namespace.ɵɵadvance();
2412
2400
  i0__namespace.ɵɵproperty("textContent", opt_r3[ctx_r4.displayfield] || opt_r3.label);
2413
2401
  } }
2414
- function SwitchComponent_i_3_Template(rf, ctx) { if (rf & 1) {
2415
- i0__namespace.ɵɵelement(0, "i");
2402
+ function SwitchComponent_span_2_Template(rf, ctx) { if (rf & 1) {
2403
+ i0__namespace.ɵɵelementStart(0, "span", 8);
2404
+ i0__namespace.ɵɵelement(1, "i", 9);
2405
+ i0__namespace.ɵɵelementStart(2, "span", 10);
2406
+ i0__namespace.ɵɵtext(3);
2407
+ i0__namespace.ɵɵelementEnd()();
2416
2408
  } if (rf & 2) {
2417
2409
  const ctx_r4 = i0__namespace.ɵɵnextContext();
2418
- i0__namespace.ɵɵclassMapInterpolate1("app-icon ", ctx_r4.selectedItem && ctx_r4.selectedItem.dataObject && ctx_r4.selectedItem.dataObject[ctx_r4.iconclass], "");
2410
+ i0__namespace.ɵɵproperty("title", ctx_r4.selectedItem ? ctx_r4.selectedItem.label : ctx_r4.modelByKey);
2411
+ i0__namespace.ɵɵadvance();
2412
+ i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction1(3, _c4, ctx_r4.checkediconclass));
2413
+ i0__namespace.ɵɵadvance(2);
2414
+ i0__namespace.ɵɵtextInterpolate(ctx_r4.selectedItem ? ctx_r4.selectedItem.label : ctx_r4.modelByKey);
2419
2415
  } }
2420
2416
  const DEFAULT_CLS = 'app-switch';
2421
2417
  const WIDGET_CONFIG$6 = { widgetType: 'wm-switch', hostClass: DEFAULT_CLS };
@@ -2424,6 +2420,8 @@
2424
2420
  constructor(inj, explicitContext) {
2425
2421
  super(inj, WIDGET_CONFIG$6, explicitContext);
2426
2422
  this.options = [];
2423
+ this.multiple = this.getAttr("multiple") === "true";
2424
+ this.checkediconclass = this.getAttr("checkediconclass") || 'wm-sl-l sl-check';
2427
2425
  this._debounceSetSelectedValue = i1$1.debounce((val) => {
2428
2426
  this.setSelectedValue();
2429
2427
  this.updateHighlighter(val);
@@ -2463,7 +2461,7 @@
2463
2461
  // set the css for switch overlay element.
2464
2462
  // set the selected index from the datasetItems and highlight the datavalue on switch.
2465
2463
  updateSwitchOptions() {
2466
- if (this.datasetItems.length) {
2464
+ if (this.datasetItems.length && !this.multiple) {
2467
2465
  this.btnwidth = (100 / this.datasetItems.length);
2468
2466
  i1$1.setCSS(this.nativeElement.querySelector('.app-switch-overlay'), 'width', this.btnwidth + '%');
2469
2467
  }
@@ -2501,18 +2499,30 @@
2501
2499
  if (this.disabled) {
2502
2500
  return;
2503
2501
  }
2504
- this.modelByKey = option.key;
2505
- this.invokeOnTouched();
2506
- if (this.selectedItem && $index === lodashEs.findIndex(this.datasetItems, { key: this.selectedItem.key })) {
2507
- if (this.datasetItems.length === 2) {
2508
- $index = $index === 1 ? 0 : 1;
2509
- }
2510
- else {
2511
- return;
2502
+ if (this.multiple) {
2503
+ const keys = [];
2504
+ this.datasetItems[$index].selected = !this.datasetItems[$index].selected;
2505
+ lodashEs.forEach(this.datasetItems, (item) => {
2506
+ if (item.selected)
2507
+ keys.push(item.key);
2508
+ });
2509
+ this.modelByKey = keys;
2510
+ this.selectedItem = lodashEs.find(this.datasetItems, { selected: true });
2511
+ }
2512
+ else {
2513
+ this.modelByKey = option.key;
2514
+ if (!this.multiple && this.selectedItem && $index === lodashEs.findIndex(this.datasetItems, { key: this.selectedItem.key })) {
2515
+ if (this.datasetItems.length === 2) {
2516
+ $index = $index === 1 ? 0 : 1;
2517
+ }
2518
+ else {
2519
+ return;
2520
+ }
2512
2521
  }
2522
+ this.selectedItem = this.datasetItems[$index];
2523
+ this.updateHighlighter();
2513
2524
  }
2514
- this.selectedItem = this.datasetItems[$index];
2515
- this.updateHighlighter();
2525
+ this.invokeOnTouched();
2516
2526
  // invoke on datavalue change.
2517
2527
  this.invokeOnChange(this.datavalue, $event || {}, true);
2518
2528
  i1$1.$appDigest();
@@ -2529,24 +2539,18 @@
2529
2539
  static { this.ɵcmp = /*@__PURE__*/ i0__namespace.ɵɵdefineComponent({ type: SwitchComponent, selectors: [["", "wmSwitch", ""]], exportAs: ["wmSwitch"], features: [i0__namespace.ɵɵProvidersFeature([
2530
2540
  i2.provideAs(SwitchComponent, i2$1.NG_VALUE_ACCESSOR, true),
2531
2541
  i2.provideAsWidgetRef(SwitchComponent)
2532
- ]), i0__namespace.ɵɵInheritDefinitionFeature], attrs: _c0$6, decls: 6, vars: 8, consts: [["role", "group", 1, "btn-group", "btn-group-justified"], ["focus-target", "", "href", "javascript:void(0);", "class", "btn btn-default", 3, "name", "ngClass", "click", 4, "ngFor", "ngForOf"], [1, "btn", "btn-primary", "app-switch-overlay", "switch-handle", 3, "title"], [3, "class", 4, "ngIf"], ["aria-hidden", "true", 1, "model-holder", "ng-hide", 3, "name", "disabled", "value", "required"], ["focus-target", "", "href", "javascript:void(0);", 1, "btn", "btn-default", 3, "click", "name", "ngClass"], ["aria-hidden", "true", 3, "ngClass", 4, "ngIf"], [1, "caption", 3, "textContent"], ["aria-hidden", "true", 3, "ngClass"]], template: function SwitchComponent_Template(rf, ctx) { if (rf & 1) {
2542
+ ]), i0__namespace.ɵɵInheritDefinitionFeature], attrs: _c0$6, decls: 4, vars: 9, consts: [["role", "group", 1, "btn-group", "btn-group-justified", 3, "ngClass"], ["focus-target", "", "href", "javascript:void(0);", "class", "btn btn-default", 3, "name", "ngClass", "click", 4, "ngFor", "ngForOf"], ["class", "btn btn-primary app-switch-overlay switch-handle", 3, "title", 4, "ngIf"], ["aria-hidden", "true", 1, "model-holder", "ng-hide", 3, "name", "disabled", "value", "required"], ["focus-target", "", "href", "javascript:void(0);", 1, "btn", "btn-default", 3, "click", "name", "ngClass"], ["aria-hidden", "true", 3, "ngClass", 4, "ngIf"], [1, "caption", 3, "textContent"], ["aria-hidden", "true", 3, "ngClass"], [1, "btn", "btn-primary", "app-switch-overlay", "switch-handle", 3, "title"], [3, "ngClass"], [1, "caption"]], template: function SwitchComponent_Template(rf, ctx) { if (rf & 1) {
2533
2543
  i0__namespace.ɵɵelementStart(0, "div", 0);
2534
- i0__namespace.ɵɵtemplate(1, SwitchComponent_a_1_Template, 3, 7, "a", 1);
2544
+ i0__namespace.ɵɵtemplate(1, SwitchComponent_a_1_Template, 4, 8, "a", 1);
2535
2545
  i0__namespace.ɵɵelementEnd();
2536
- i0__namespace.ɵɵelementStart(2, "span", 2);
2537
- i0__namespace.ɵɵtemplate(3, SwitchComponent_i_3_Template, 1, 3, "i", 3);
2538
- i0__namespace.ɵɵtext(4);
2539
- i0__namespace.ɵɵelementEnd();
2540
- i0__namespace.ɵɵelement(5, "input", 4);
2546
+ i0__namespace.ɵɵtemplate(2, SwitchComponent_span_2_Template, 4, 5, "span", 2);
2547
+ i0__namespace.ɵɵelement(3, "input", 3);
2541
2548
  } if (rf & 2) {
2549
+ i0__namespace.ɵɵproperty("ngClass", i0__namespace.ɵɵpureFunction1(7, _c1$5, ctx.multiple));
2542
2550
  i0__namespace.ɵɵadvance();
2543
2551
  i0__namespace.ɵɵproperty("ngForOf", ctx.datasetItems);
2544
2552
  i0__namespace.ɵɵadvance();
2545
- i0__namespace.ɵɵproperty("title", ctx.selectedItem ? ctx.selectedItem.label : ctx.modelByKey);
2546
- i0__namespace.ɵɵadvance();
2547
- i0__namespace.ɵɵproperty("ngIf", ctx.iconclass);
2548
- i0__namespace.ɵɵadvance();
2549
- i0__namespace.ɵɵtextInterpolate1(" ", ctx.selectedItem ? ctx.selectedItem.label : ctx.modelByKey, "\n");
2553
+ i0__namespace.ɵɵproperty("ngIf", !ctx.multiple);
2550
2554
  i0__namespace.ɵɵadvance();
2551
2555
  i0__namespace.ɵɵproperty("name", ctx.name)("disabled", ctx.disabled)("value", ctx.modelByKey)("required", ctx.required);
2552
2556
  } }, dependencies: [i1__namespace.NgClass, i1__namespace.NgForOf, i1__namespace.NgIf, i2__namespace.TextContentDirective], encapsulation: 2 }); }
@@ -2556,7 +2560,7 @@
2556
2560
  args: [{ selector: '[wmSwitch]', providers: [
2557
2561
  i2.provideAs(SwitchComponent, i2$1.NG_VALUE_ACCESSOR, true),
2558
2562
  i2.provideAsWidgetRef(SwitchComponent)
2559
- ], exportAs: 'wmSwitch', template: "<div role=\"group\" class=\"btn-group btn-group-justified\">\n <a *ngFor=\"let opt of datasetItems; let $index = index;\"\n focus-target\n href=\"javascript:void(0);\"\n class=\"btn btn-default\"\n [name]=\"'wm-switch-' + opt.key\"\n [ngClass]=\"{'selected': opt.selected, 'disabled': disabled}\"\n (click)=\"selectOpt($event, $index, opt)\"\n >\n <i *ngIf=\"opt.dataObject && opt.dataObject[iconclass]\" aria-hidden=\"true\" [ngClass]=\"['app-icon', opt.dataObject[iconclass] || opt['icon']]\"></i>\n <span class=\"caption\" [textContent]=\"opt[displayfield] || opt.label\"></span>\n </a>\n</div>\n<span [title]=\"selectedItem ? selectedItem.label : modelByKey\"\n class=\"btn btn-primary app-switch-overlay switch-handle\">\n <i *ngIf=\"iconclass\"\n class=\"app-icon {{(selectedItem && selectedItem.dataObject) && selectedItem.dataObject[iconclass]}}\"></i>\n {{selectedItem ? selectedItem.label : modelByKey}}\n</span>\n<input [name]=\"name\" class=\"model-holder ng-hide\" [disabled]=\"disabled\" [value]=\"modelByKey\" [required]=\"required\" aria-hidden=\"true\">\n" }]
2563
+ ], exportAs: 'wmSwitch', template: "<div role=\"group\" class=\"btn-group btn-group-justified\" [ngClass]=\"{'multi-select': multiple}\">\n <a *ngFor=\"let opt of datasetItems; let $index = index;\"\n focus-target\n href=\"javascript:void(0);\"\n class=\"btn btn-default\"\n [name]=\"'wm-switch-' + opt.key\"\n [ngClass]=\"{'selected': opt.selected, 'disabled': disabled}\"\n (click)=\"selectOpt($event, $index, opt)\"\n >\n <i *ngIf=\"opt.dataObject && opt.dataObject[iconclass] && !opt.selected\" aria-hidden=\"true\" [ngClass]=\"['app-icon', opt.dataObject[iconclass] || opt['icon']]\"></i>\n <i *ngIf=\"opt.selected\" aria-hidden=\"true\" [ngClass]=\"[checkediconclass]\"></i>\n <span class=\"caption\" [textContent]=\"opt[displayfield] || opt.label\"></span>\n </a>\n</div>\n<span [title]=\"selectedItem ? selectedItem.label : modelByKey\"\n class=\"btn btn-primary app-switch-overlay switch-handle\" *ngIf=\"!multiple\">\n <i [ngClass]=\"[checkediconclass]\"></i>\n <span class=\"caption\">{{selectedItem ? selectedItem.label : modelByKey}}</span>\n</span>\n<input [name]=\"name\" class=\"model-holder ng-hide\" [disabled]=\"disabled\" [value]=\"modelByKey\" [required]=\"required\" aria-hidden=\"true\">\n" }]
2560
2564
  }], () => [{ type: i0__namespace.Injector }, { type: undefined, decorators: [{
2561
2565
  type: i0.Inject,
2562
2566
  args: ['EXPLICIT_CONTEXT']
@@ -3136,9 +3140,6 @@
3136
3140
  onInputChange() {
3137
3141
  this.charlength = this.inputEl.nativeElement.value.length;
3138
3142
  }
3139
- ngAfterViewChecked() {
3140
- this.charlength = this.inputEl.nativeElement.value.length;
3141
- }
3142
3143
  static { this.ɵfac = function TextareaComponent_Factory(t) { return new (t || TextareaComponent)(i0__namespace.ɵɵdirectiveInject(i0__namespace.Injector), i0__namespace.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
3143
3144
  static { this.ɵcmp = /*@__PURE__*/ i0__namespace.ɵɵdefineComponent({ type: TextareaComponent, selectors: [["wm-textarea"]], viewQuery: function TextareaComponent_Query(rf, ctx) { if (rf & 1) {
3144
3145
  i0__namespace.ɵɵviewQuery(_c0, 7);
@@ -11,6 +11,7 @@ export declare class CheckboxsetComponent extends DatasetAwareFormComponent {
11
11
  itemsperrow: string;
12
12
  private itemsPerRowClass;
13
13
  constructor(inj: Injector, explicitContext: any);
14
+ triggerInvokeOnChange(keys: any, $event: any): void;
14
15
  onCheckboxLabelClick($event: any, key: any): void;
15
16
  protected handleEvent(node: HTMLElement, eventName: string, callback: Function, locals: any): void;
16
17
  onKeyDown($event: any): void;
@@ -167,6 +167,12 @@ export class CheckboxsetComponent extends DatasetAwareFormComponent {
167
167
  styler(this.nativeElement, this);
168
168
  this.multiple = true;
169
169
  }
170
+ triggerInvokeOnChange(keys, $event) {
171
+ this.modelByKey = keys;
172
+ this.invokeOnTouched();
173
+ // invoke on datavalue change.
174
+ this.invokeOnChange(this.datavalue, $event || {}, true);
175
+ }
170
176
  onCheckboxLabelClick($event, key) {
171
177
  if (!$($event.target).is('input')) {
172
178
  return;
@@ -178,10 +184,7 @@ export class CheckboxsetComponent extends DatasetAwareFormComponent {
178
184
  // @ts-ignore
179
185
  keys.push($el.value);
180
186
  });
181
- this.modelByKey = keys;
182
- this.invokeOnTouched();
183
- // invoke on datavalue change.
184
- this.invokeOnChange(this.datavalue, $event || {}, true);
187
+ this.triggerInvokeOnChange(keys, $event);
185
188
  }
186
189
  // change and blur events are added from the template
187
190
  handleEvent(node, eventName, callback, locals) {
@@ -254,4 +257,4 @@ export class CheckboxsetComponent extends DatasetAwareFormComponent {
254
257
  args: ['keydown.enter', ['$event', '"ENTER"']]
255
258
  }] }); })();
256
259
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CheckboxsetComponent, { className: "CheckboxsetComponent", filePath: "checkboxset/checkboxset.component.ts", lineNumber: 27 }); })();
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3hzZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2RlZmF1bHQvc3JjL2NoZWNrYm94c2V0L2NoZWNrYm94c2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC9kZWZhdWx0L3NyYy9jaGVja2JveHNldC9jaGVja2JveHNldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFvQixZQUFZLEVBQWMsTUFBTSxVQUFVLENBQUM7QUFDdEUsT0FBTyxFQUFvRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBQ2hLLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7OztJQ0RwQyxnQ0FBeUg7SUFLckgsQUFKQSwyQkFHMkUsZUFDbkI7SUFDNUQsaUJBQVE7Ozs7OztJQU40RixBQUE5Qyx5RkFBNkMsd0JBQXFCO0lBQzdHLGNBQWtDO0lBR08sQUFBdEIsQUFBbkIsQUFEQSxBQURBLEFBREEsdURBQWtDLDZCQUNiLGdEQUNZLHNCQUNmLDZCQUFzQiw2QkFBMEI7O0lBQ25ELGNBQTBCO0lBQTFCLDJDQUEwQjs7O0lBR3BELGlDQUFv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aEMsU0FBUzsyQkFDSSxpQkFBaUIsWUFDakIsZUFBZSxhQUVkO29CQUNQLFNBQVMsdUJBQXVCLGlCQUFpQixFQUFFLElBQUksQ0FBQztvQkFDeEQsU0FBUyx1QkFBdUIsYUFBYSxFQUFFLElBQUksQ0FBQztvQkFDcEQsa0JBQWtCLHNCQUFzQjtpQkFDM0M7O3NCQWdCMkIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBOENoRSxTQUFTO2tCQURSLFlBQVk7bUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQzs7a0ZBMUQzQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0F0dHJpYnV0ZSwgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5qZWN0b3IsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0FwcERlZmF1bHRzLCBub29wLCBzZXRMaXN0Q2xhc3MsIHN3aXRjaENsYXNzfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBjb252ZXJ0RGF0YVRvT2JqZWN0LCBJV2lkZ2V0Q29uZmlnLCBncm91cERhdGEsIGhhbmRsZUhlYWRlckNsaWNrLCBwcm92aWRlQXMsIHByb3ZpZGVBc1dpZGdldFJlZiwgc3R5bGVyLCB0b2dnbGVBbGxIZWFkZXJzIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyBEYXRhc2V0QXdhcmVGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXNldC1hd2FyZS1mb3JtLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuLi9jaGVja2JveHNldC9jaGVja2JveHNldC5wcm9wcyc7XG5pbXBvcnQge2ZvckVhY2gsIGluY2x1ZGVzfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWNoZWNrYm94c2V0IGxpc3QtZ3JvdXAgaW5saW5lJztcbmNvbnN0IFdJREdFVF9DT05GSUc6IElXaWRnZXRDb25maWcgPSB7d2lkZ2V0VHlwZTogJ3dtLWNoZWNrYm94c2V0JywgaG9zdENsYXNzOiBERUZBVUxUX0NMU307XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3dtQ2hlY2tib3hzZXRdJyxcbiAgICBleHBvcnRBczogJ3dtQ2hlY2tib3hzZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnY2hlY2tib3hzZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXMoQ2hlY2tib3hzZXRDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzKENoZWNrYm94c2V0Q29tcG9uZW50LCBOR19WQUxJREFUT1JTLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKENoZWNrYm94c2V0Q29tcG9uZW50KVxuICAgIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBDaGVja2JveHNldENvbXBvbmVudCBleHRlbmRzIERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgbGF5b3V0ID0gJyc7XG4gICAgcHVibGljIGNvbGxhcHNpYmxlOiBib29sZWFuO1xuXG4gICAgcHJvdGVjdGVkIG1hdGNoOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGRhdGVmb3JtYXQ6IHN0cmluZztcblxuICAgIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgaXRlbXNwZXJyb3c6IHN0cmluZztcbiAgICBwcml2YXRlIGl0ZW1zUGVyUm93Q2xhc3M6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLm11bHRpcGxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbkNoZWNrYm94TGFiZWxDbGljaygkZXZlbnQsIGtleSkge1xuICAgICAgICBpZiAoISQoJGV2ZW50LnRhcmdldCkuaXMoJ2lucHV0JykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnN0cnVjdCB0aGUgX21vZGVsIGZyb20gdGhlIGNoZWNrZWQgZWxlbWVudHMuXG4gICAgICAgIGNvbnN0IGlucHV0RWxlbWVudHMgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQ6Y2hlY2tlZCcpO1xuICAgICAgICBjb25zdCBrZXlzID0gW107XG4gICAgICAgIGZvckVhY2goaW5wdXRFbGVtZW50cywgKCRlbCkgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAga2V5cy5wdXNoKCRlbC52YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubW9kZWxCeUtleSA9IGtleXM7XG5cbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgLy8gaW52b2tlIG9uIGRhdGF2YWx1ZSBjaGFuZ2UuXG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsICRldmVudCB8fCB7fSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gY2hhbmdlIGFuZCBibHVyIGV2ZW50cyBhcmUgYWRkZWQgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55KSB7XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghJChlLnRhcmdldCkuaXMoJ2lucHV0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsb2NhbHMuJGV2ZW50ID0gZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICghaW5jbHVkZXMoWydjaGFuZ2UnXSwgZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQobm9kZSwgZXZlbnROYW1lLCBjYWxsYmFjaywgbG9jYWxzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCcsICdcIkVOVEVSXCInXSlcbiAgICBvbktleURvd24oJGV2ZW50KSB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcblxuICAgICAgICBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ3JlcXVpcmVkJykge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdpdGVtc3BlcnJvdycpIHtcbiAgICAgICAgICAgIHNldExpc3RDbGFzcyh0aGlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFncm91cGJ5XCIgW25nSWZFbHNlXT1cImdyb3VwZWRMaXN0VGVtcGxhdGVcIj5cbiAgICA8bGkgW25nQ2xhc3NdPVwiWydjaGVja2JveCcsICdhcHAtY2hlY2tib3gnLCBpdGVtY2xhc3MsIGl0ZW1zUGVyUm93Q2xhc3NdXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YXNldEl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgW3dtSXRlbVRlbXBsYXRlXT1cImNvbnRlbnRcIiBbdXNlckNvbXBvbmVudFBhcmFtc109XCJpdGVtXCIgcGFydGlhbENvbnRhaW5lclxuICAgICAgICAoY2xpY2spPVwib25DaGVja2JveExhYmVsQ2xpY2soJGV2ZW50LCBpdGVtLmtleSlcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDwhLS0gRGVmYXVsdCBpdGVtIHRlbXBsYXRlIC0tPlxuICAgICAgICA8bGFiZWwgKm5nSWY9XCIhY29udGVudFwiIGNsYXNzPVwiYXBwLWNoZWNrYm94c2V0LWxhYmVsXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6ZGlzYWJsZWQgfHwgcmVhZG9ubHl9XCIgW3RpdGxlXT1cIml0ZW0ubGFiZWxcIj5cbiAgICAgICAgICAgIDxpbnB1dCBbbmFtZV09XCInY2hlY2tib3hzZXRfJyArIHdpZGdldElkXCIgdHlwZT1cImNoZWNrYm94XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmtleVwiXG4gICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cIml0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiIFthdHRyLmRhdGEtYXR0ci1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5rZXlcIiBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIiBbY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCIvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXB0aW9uXCIgW3RleHRDb250ZW50XT1cIml0ZW0ubGFiZWxcIj48L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwhLS0gQ3VzdG9tIHBhcnRpYWwgdGVtcGxhdGUgLS0+XG4gICAgICAgIDxsYWJlbCAqbmdJZj1cImNvbnRlbnRcIiBjbGFzcz1cImFwcC1jaGVja2JveHNldC1sYWJlbFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmRpc2FibGVkIHx8IHJlYWRvbmx5fVwiID5cbiAgICAgICAgICAgIDxpbnB1dCBbbmFtZV09XCInY2hlY2tib3hzZXRfJyArIHdpZGdldElkXCIgdHlwZT1cImNoZWNrYm94XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmtleVwiXG4gICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCIgW2F0dHIuYXJpYS1jaGVja2VkXT1cIml0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiIFthdHRyLmRhdGEtYXR0ci1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5rZXlcIiBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIiBbY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCIvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXB0aW9uIGN1c3RvbVRlbXBsYXRlXCIgcGFydGlhbC1jb250YWluZXItdGFyZ2V0Pjwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICA8L2xpPlxuPC9uZy10ZW1wbGF0ZT5cbjxpbnB1dCBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIiBoaWRkZW4gY2xhc3M9XCJtb2RlbC1ob2xkZXJcIj5cbjxkaXYgKm5nSWY9XCJyZWFkb25seSB8fCBkaXNhYmxlZFwiIGNsYXNzPVwicmVhZG9ubHktd3JhcHBlclwiPjwvZGl2PlxuXG48IS0tIFRoaXMgdGVtcGxhdGUgd2lsbCBiZSBkaXNwbGF5ZWQgd2hlbiBncm91cGJ5IGlzIHNwZWNpZmllZC4gLS0+XG48bmctdGVtcGxhdGUgI2dyb3VwZWRMaXN0VGVtcGxhdGU+XG4gICAgPGxpICpuZ0Zvcj1cImxldCBncm91cE9iaiBvZiBncm91cGVkRGF0YVwiIGNsYXNzPVwiYXBwLWxpc3QtaXRlbS1ncm91cFwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgPHVsIGNsYXNzPVwiaXRlbS1ncm91cFwiPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1oZWFkZXJcIiAoY2xpY2spPVwiaGFuZGxlSGVhZGVyQ2xpY2soJGV2ZW50KVwiIFt0aXRsZV09XCJncm91cE9iai5rZXlcIiBbbmdDbGFzc109XCJ7J2NvbGxhcHNpYmxlLWNvbnRlbnQnOiBjb2xsYXBzaWJsZX1cIj5cbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJncm91cC10aXRsZVwiPnt7Z3JvdXBPYmoua2V5fX1cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1hY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24gd2kgYWN0aW9uIHdpLWNoZXZyb24tdXBcIiAqbmdJZj1cImNvbGxhcHNpYmxlXCIgdGl0bGU9XCJ7e2FwcExvY2FsZS5MQUJFTF9DT0xMQVBTRX19L3t7YXBwTG9jYWxlLkxBQkVMX0VYUEFORH19XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93Y291bnRcIiBjbGFzcz1cImxhYmVsIGxhYmVsLWRlZmF1bHRcIiBbdGV4dENvbnRlbnRdPVwiZ3JvdXBPYmouZGF0YS5sZW5ndGhcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdyb3VwT2JqLmRhdGE7IGxldCBpID0gaW5kZXg7XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbJ2NoZWNrYm94JywgJ2FwcC1jaGVja2JveCcsICdncm91cC1saXN0LWl0ZW0nLCBpdGVtY2xhc3MsIGl0ZW1zUGVyUm93Q2xhc3NdXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIml0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIFt3bUl0ZW1UZW1wbGF0ZV09XCJjb250ZW50XCIgW3VzZXJDb21wb25lbnRQYXJhbXNdPVwiaXRlbVwiIHBhcnRpYWxDb250YWluZXJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGVja2JveExhYmVsQ2xpY2soJGV2ZW50LCBpdGVtKVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRGVmYXVsdCBpdGVtIHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFjb250ZW50XCIgY2xhc3M9XCJhcHAtY2hlY2tib3hzZXQtbGFiZWxcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzpkaXNhYmxlZCB8fCByZWFkb25seX1cIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW25hbWVdPVwiJ2NoZWNrYm94c2V0XycgKyB3aWRnZXRJZFwiIHR5cGU9XCJjaGVja2JveFwiIGFyaWEtbGFiZWw9XCJjaGVja2JveCBncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCIgW2F0dHIuZGF0YS1hdHRyLWluZGV4XT1cImlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0ua2V5XCIgW3RhYmluZGV4XT1cInRhYmluZGV4XCIgW2NoZWNrZWRdPVwiaXRlbS5zZWxlY3RlZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXB0aW9uXCIgW3RleHRDb250ZW50XT1cIml0ZW0ubGFiZWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8IS0tIEN1c3RvbSBwYXJ0aWFsIHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cImNvbnRlbnRcIiBjbGFzcz1cImFwcC1jaGVja2JveHNldC1sYWJlbFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmRpc2FibGVkIHx8IHJlYWRvbmx5fVwiID5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuYW1lXT1cIidjaGVja2JveHNldF8nICsgd2lkZ2V0SWRcIiB0eXBlPVwiY2hlY2tib3hcIiBhcmlhLWxhYmVsPVwiY2hlY2tib3ggZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiIFthdHRyLmRhdGEtYXR0ci1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLmtleVwiIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiIFtjaGVja2VkXT1cIml0ZW0uc2VsZWN0ZWRcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FwdGlvblwiIHBhcnRpYWwtY29udGFpbmVyLXRhcmdldD48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9saT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3hzZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2RlZmF1bHQvc3JjL2NoZWNrYm94c2V0L2NoZWNrYm94c2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC9kZWZhdWx0L3NyYy9jaGVja2JveHNldC9jaGVja2JveHNldC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVksU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFvQixZQUFZLEVBQWMsTUFBTSxVQUFVLENBQUM7QUFDdEUsT0FBTyxFQUFvRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBQ2hLLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7OztJQ0RwQyxnQ0FBeUg7SUFLckgsQUFKQSwyQkFHMkUsZUFDbkI7SUFDNUQsaUJBQVE7Ozs7OztJQU40RixBQUE5Qyx5RkFBNkMsd0JBQXFCO0lBQzdHLGNBQWtDO0lBR08sQUFBdEIsQUFBbkIsQUFEQSxBQURBLEFBREEsdURBQWtDLDZCQUNiLGdEQUNZLHNCQUNmLDZCQUFzQiw2QkFBMEI7O0lBQ25ELGNBQTBCO0lBQTFCLDJDQUEwQjs7O0lBR3BELGlDQUFvRztJQUtoRyxBQUpBLDJCQUcyRSxlQUNOO0lBQ3pFLGlCQUFROzs7Ozs7SUFONkMseUZBQTZDO0lBQ3ZGLGNBQWtDO0lBR08sQUFBdEIsQUFBbkIsQUFEQSxBQURBLEFBREEsdURBQWtDLDZCQUNiLGdEQUNZLHNCQUNmLDZCQUFzQiw2QkFBMEI7Ozs7O0lBbEJqRiw2QkFJeUU7SUFBckUsME5BQVMsZ0RBQXNDLEtBQUM7SUFVaEQsQUFSQSw2RkFBeUgsZ0ZBUXJCO0lBT3hHLGlCQUFLOzs7O0lBcEJELDBDQUE4QjtJQUVILEFBQTNCLEFBSEEsK0ZBQXFFLGtDQUczQyxnQ0FBNkI7SUFHL0MsY0FBYztJQUFkLHNDQUFjO0lBUWQsY0FBYTtJQUFiLHFDQUFhOzs7SUFkekIsa0ZBSXlFOzs7SUFGcEQsNkNBQWlCOzs7SUFzQjFDLDBCQUFpRTs7O0lBU3pDLHdCQUFvSTs7O0lBQXBFLCtHQUErRDs7O0lBQy9ILDJCQUFnRzs7O0lBQTVDLHFEQUFvQzs7O0lBVWhHLGdDQUF5SDtJQUtySCxBQUpBLDRCQUcyRSxlQUNuQjtJQUM1RCxpQkFBUTs7Ozs7O0lBTjRGLEFBQTlDLHlGQUE2Qyx3QkFBcUI7SUFDN0csY0FBa0M7SUFHTyxBQUF0QixBQUFuQixBQURBLEFBREEsQUFEQSx1REFBa0MsNkJBQ2IsZ0RBQ1ksc0JBQ2YsNkJBQXNCLDZCQUEwQjs7SUFDbkQsY0FBMEI7SUFBMUIsMkNBQTBCOzs7SUFHcEQsaUNBQW9HO0lBS2hHLEFBSkEsNEJBRzJFLGVBQ3JCO0lBQzFELGlCQUFROzs7Ozs7SUFONkMsd0ZBQTZDO0lBQ3ZGLGNBQWtDO0lBR08sQUFBdEIsQUFBbkIsQUFEQSxBQURBLEFBREEsdURBQWtDLDZCQUNiLGdEQUNZLHNCQUNmLDZCQUFzQiw2QkFBMEI7Ozs7O0lBbEJqRiw4QkFJaUQ7SUFBN0MsK05BQVMsNENBQWtDLEtBQUM7SUFVNUMsQUFSQSxrR0FBeUgscUZBUXJCO0lBT3hHLGlCQUFLOzs7O0lBbkJELDBDQUE4QjtJQUNILEFBQTNCLEFBRkEsK0ZBQXdGLGtDQUU5RCxnQ0FBNkI7SUFHL0MsY0FBYztJQUFkLHNDQUFjO0lBUWQsY0FBYTtJQUFiLHFDQUFhOzs7O0lBdEJ6QixBQURKLEFBREosOEJBQXlGLGFBQzlELGFBQ3VIO0lBQTVHLGdNQUFTLGdDQUF5QixLQUFDO0lBQzdELDhCQUF3QjtJQUFBLFlBQ3BCO0lBQUEsK0JBQTJCO0lBRXZCLEFBREEscUZBQWdJLDhFQUN2QztJQUdyRyxBQURJLEFBREksaUJBQU0sRUFDTCxFQUNKO0lBQ0wsd0ZBSWlEO0lBbUJ6RCxBQURJLGlCQUFLLEVBQ0o7Ozs7SUEvQnFFLGVBQXNCO0lBQUMsQUFBdkIsdUNBQXNCLDJEQUFpRDtJQUM3RyxlQUNwQjtJQURvQiwrQ0FDcEI7SUFDaUQsZUFBaUI7SUFBakIseUNBQWlCO0lBQ3ZELGNBQWU7SUFBZix1Q0FBZTtJQUliLGNBQWtCO0lBQWxCLDBDQUFrQjs7O0lBVi9DLGtGQUF5Rjs7O0lBQWhFLDRDQUFjOztBRGpCM0MsTUFBTSxXQUFXLEdBQUcsbUNBQW1DLENBQUM7QUFDeEQsTUFBTSxhQUFhLEdBQWtCLEVBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsQ0FBQztBQWE1RixNQUFNLE9BQU8sb0JBQXFCLFNBQVEseUJBQXlCO2FBQ3hELG9CQUFlLEdBQUcsYUFBYSxFQUFFLEFBQWxCLENBQW1CO0lBWXpDLFlBQVksR0FBYSxFQUEwQyxlQUFvQjtRQUNuRixLQUFLLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztRQVh4QyxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBWWYsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQUksRUFBRSxNQUFNO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2Qiw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQU0sRUFBRSxHQUFHO1FBQzVCLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU87UUFDWCxDQUFDO1FBRUQsa0RBQWtEO1FBQ2xELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0UsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMzQixhQUFhO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxxREFBcUQ7SUFDM0MsV0FBVyxDQUFDLElBQWlCLEVBQUUsU0FBaUIsRUFBRSxRQUFrQixFQUFFLE1BQVc7UUFDdkYsSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDOUIsSUFBSSxFQUNKLFNBQVMsRUFDVCxDQUFDLENBQUMsRUFBRTtnQkFDQSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsT0FBTztnQkFDWCxDQUFDO2dCQUNELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixPQUFPLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FDSixDQUFDO1FBQ04sQ0FBQzthQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNMLENBQUM7SUFHRCxTQUFTLENBQUMsTUFBTTtRQUNaLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUc7UUFFekIsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvQixPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksR0FBRyxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixDQUFDO2FBQU0sQ0FBQztZQUNKLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO3FGQWxGUSxvQkFBb0IsMERBYU0sa0JBQWtCO29FQWI1QyxvQkFBb0I7WUFBcEIsK0dBQUEsc0JBQWlCLE9BQU8sQ0FBQyxJQUFMOzJFQVBsQjtnQkFDUCxTQUFTLENBQUMsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO2dCQUN4RCxTQUFTLENBQUMsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQztnQkFDcEQsa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7YUFDM0M7WUN2QkwscUZBQWdFO1lBd0JoRSwyQkFBcUU7WUFJckUsQUFIQSxxRUFBMkQseUdBR3pCOzs7WUE1QkgsQUFBbEIsbUNBQWlCLHFDQUFpQztZQXdCeEQsY0FBaUM7WUFBakMsdURBQWlDO1lBQ2xDLGNBQTBCO1lBQTFCLG1EQUEwQjs7O2lGRENuQixvQkFBb0I7Y0FYaEMsU0FBUzsyQkFDSSxpQkFBaUIsWUFDakIsZUFBZSxhQUVkO29CQUNQLFNBQVMsdUJBQXVCLGlCQUFpQixFQUFFLElBQUksQ0FBQztvQkFDeEQsU0FBUyx1QkFBdUIsYUFBYSxFQUFFLElBQUksQ0FBQztvQkFDcEQsa0JBQWtCLHNCQUFzQjtpQkFDM0M7O3NCQWdCMkIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBa0RoRSxTQUFTO2tCQURSLFlBQVk7bUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQzs7a0ZBOUQzQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0F0dHJpYnV0ZSwgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5qZWN0b3IsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0FwcERlZmF1bHRzLCBub29wLCBzZXRMaXN0Q2xhc3MsIHN3aXRjaENsYXNzfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBjb252ZXJ0RGF0YVRvT2JqZWN0LCBJV2lkZ2V0Q29uZmlnLCBncm91cERhdGEsIGhhbmRsZUhlYWRlckNsaWNrLCBwcm92aWRlQXMsIHByb3ZpZGVBc1dpZGdldFJlZiwgc3R5bGVyLCB0b2dnbGVBbGxIZWFkZXJzIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyBEYXRhc2V0QXdhcmVGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXNldC1hd2FyZS1mb3JtLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuLi9jaGVja2JveHNldC9jaGVja2JveHNldC5wcm9wcyc7XG5pbXBvcnQge2ZvckVhY2gsIGluY2x1ZGVzfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWNoZWNrYm94c2V0IGxpc3QtZ3JvdXAgaW5saW5lJztcbmNvbnN0IFdJREdFVF9DT05GSUc6IElXaWRnZXRDb25maWcgPSB7d2lkZ2V0VHlwZTogJ3dtLWNoZWNrYm94c2V0JywgaG9zdENsYXNzOiBERUZBVUxUX0NMU307XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3dtQ2hlY2tib3hzZXRdJyxcbiAgICBleHBvcnRBczogJ3dtQ2hlY2tib3hzZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnY2hlY2tib3hzZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXMoQ2hlY2tib3hzZXRDb21wb25lbnQsIE5HX1ZBTFVFX0FDQ0VTU09SLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzKENoZWNrYm94c2V0Q29tcG9uZW50LCBOR19WQUxJREFUT1JTLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKENoZWNrYm94c2V0Q29tcG9uZW50KVxuICAgIF1cbn0pXG5cbmV4cG9ydCBjbGFzcyBDaGVja2JveHNldENvbXBvbmVudCBleHRlbmRzIERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwdWJsaWMgbGF5b3V0ID0gJyc7XG4gICAgcHVibGljIGNvbGxhcHNpYmxlOiBib29sZWFuO1xuXG4gICAgcHJvdGVjdGVkIG1hdGNoOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGRhdGVmb3JtYXQ6IHN0cmluZztcblxuICAgIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgaXRlbXNwZXJyb3c6IHN0cmluZztcbiAgICBwcml2YXRlIGl0ZW1zUGVyUm93Q2xhc3M6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLm11bHRpcGxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cmlnZ2VySW52b2tlT25DaGFuZ2Uoa2V5cywgJGV2ZW50KSB7XG4gICAgICAgIHRoaXMubW9kZWxCeUtleSA9IGtleXM7XG5cbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgLy8gaW52b2tlIG9uIGRhdGF2YWx1ZSBjaGFuZ2UuXG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsICRldmVudCB8fCB7fSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25DaGVja2JveExhYmVsQ2xpY2soJGV2ZW50LCBrZXkpIHtcbiAgICAgICAgaWYgKCEkKCRldmVudC50YXJnZXQpLmlzKCdpbnB1dCcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25zdHJ1Y3QgdGhlIF9tb2RlbCBmcm9tIHRoZSBjaGVja2VkIGVsZW1lbnRzLlxuICAgICAgICBjb25zdCBpbnB1dEVsZW1lbnRzID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0OmNoZWNrZWQnKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IFtdO1xuICAgICAgICBmb3JFYWNoKGlucHV0RWxlbWVudHMsICgkZWwpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGtleXMucHVzaCgkZWwudmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRyaWdnZXJJbnZva2VPbkNoYW5nZShrZXlzLCAkZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIGNoYW5nZSBhbmQgYmx1ciBldmVudHMgYXJlIGFkZGVkIGZyb20gdGhlIHRlbXBsYXRlXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoZXZlbnROYW1lID09PSAnY2xpY2snKSB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoISQoZS50YXJnZXQpLmlzKCdpbnB1dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9jYWxzLiRldmVudCA9IGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzKFsnY2hhbmdlJ10sIGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHN1cGVyLmhhbmRsZUV2ZW50KG5vZGUsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVudGVyJywgWyckZXZlbnQnLCAnXCJFTlRFUlwiJ10pXG4gICAgb25LZXlEb3duKCRldmVudCkge1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgJGV2ZW50LnRhcmdldC5jbGljaygpO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdyZXF1aXJlZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnaXRlbXNwZXJyb3cnKSB7XG4gICAgICAgICAgICBzZXRMaXN0Q2xhc3ModGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhZ3JvdXBieVwiIFtuZ0lmRWxzZV09XCJncm91cGVkTGlzdFRlbXBsYXRlXCI+XG4gICAgPGxpIFtuZ0NsYXNzXT1cIlsnY2hlY2tib3gnLCAnYXBwLWNoZWNrYm94JywgaXRlbWNsYXNzLCBpdGVtc1BlclJvd0NsYXNzXVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFzZXRJdGVtczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIFt3bUl0ZW1UZW1wbGF0ZV09XCJjb250ZW50XCIgW3VzZXJDb21wb25lbnRQYXJhbXNdPVwiaXRlbVwiIHBhcnRpYWxDb250YWluZXJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2hlY2tib3hMYWJlbENsaWNrKCRldmVudCwgaXRlbS5rZXkpXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICA8IS0tIERlZmF1bHQgaXRlbSB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgPGxhYmVsICpuZ0lmPVwiIWNvbnRlbnRcIiBjbGFzcz1cImFwcC1jaGVja2JveHNldC1sYWJlbFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmRpc2FibGVkIHx8IHJlYWRvbmx5fVwiIFt0aXRsZV09XCJpdGVtLmxhYmVsXCI+XG4gICAgICAgICAgICA8aW5wdXQgW25hbWVdPVwiJ2NoZWNrYm94c2V0XycgKyB3aWRnZXRJZFwiIHR5cGU9XCJjaGVja2JveFwiIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5rZXlcIlxuICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiIFthdHRyLmFyaWEtY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIiBbYXR0ci5kYXRhLWF0dHItaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0ua2V5XCIgW3RhYmluZGV4XT1cInRhYmluZGV4XCIgW2NoZWNrZWRdPVwiaXRlbS5zZWxlY3RlZFwiLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FwdGlvblwiIFt0ZXh0Q29udGVudF09XCJpdGVtLmxhYmVsXCI+PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8IS0tIEN1c3RvbSBwYXJ0aWFsIHRlbXBsYXRlIC0tPlxuICAgICAgICA8bGFiZWwgKm5nSWY9XCJjb250ZW50XCIgY2xhc3M9XCJhcHAtY2hlY2tib3hzZXQtbGFiZWxcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzpkaXNhYmxlZCB8fCByZWFkb25seX1cIiA+XG4gICAgICAgICAgICA8aW5wdXQgW25hbWVdPVwiJ2NoZWNrYm94c2V0XycgKyB3aWRnZXRJZFwiIHR5cGU9XCJjaGVja2JveFwiIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5rZXlcIlxuICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiIFthdHRyLmFyaWEtY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIiBbYXR0ci5kYXRhLWF0dHItaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0ua2V5XCIgW3RhYmluZGV4XT1cInRhYmluZGV4XCIgW2NoZWNrZWRdPVwiaXRlbS5zZWxlY3RlZFwiLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FwdGlvbiBjdXN0b21UZW1wbGF0ZVwiIHBhcnRpYWwtY29udGFpbmVyLXRhcmdldD48L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9saT5cbjwvbmctdGVtcGxhdGU+XG48aW5wdXQgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCIgaGlkZGVuIGNsYXNzPVwibW9kZWwtaG9sZGVyXCI+XG48ZGl2ICpuZ0lmPVwicmVhZG9ubHkgfHwgZGlzYWJsZWRcIiBjbGFzcz1cInJlYWRvbmx5LXdyYXBwZXJcIj48L2Rpdj5cblxuPCEtLSBUaGlzIHRlbXBsYXRlIHdpbGwgYmUgZGlzcGxheWVkIHdoZW4gZ3JvdXBieSBpcyBzcGVjaWZpZWQuIC0tPlxuPG5nLXRlbXBsYXRlICNncm91cGVkTGlzdFRlbXBsYXRlPlxuICAgIDxsaSAqbmdGb3I9XCJsZXQgZ3JvdXBPYmogb2YgZ3JvdXBlZERhdGFcIiBjbGFzcz1cImFwcC1saXN0LWl0ZW0tZ3JvdXBcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDx1bCBjbGFzcz1cIml0ZW0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaGVhZGVyXCIgKGNsaWNrKT1cImhhbmRsZUhlYWRlckNsaWNrKCRldmVudClcIiBbdGl0bGVdPVwiZ3JvdXBPYmoua2V5XCIgW25nQ2xhc3NdPVwieydjb2xsYXBzaWJsZS1jb250ZW50JzogY29sbGFwc2libGV9XCI+XG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj57e2dyb3VwT2JqLmtleX19XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImFwcC1pY29uIHdpIGFjdGlvbiB3aS1jaGV2cm9uLXVwXCIgKm5nSWY9XCJjb2xsYXBzaWJsZVwiIHRpdGxlPVwie3thcHBMb2NhbGUuTEFCRUxfQ09MTEFQU0V9fS97e2FwcExvY2FsZS5MQUJFTF9FWFBBTkR9fVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd2NvdW50XCIgY2xhc3M9XCJsYWJlbCBsYWJlbC1kZWZhdWx0XCIgW3RleHRDb250ZW50XT1cImdyb3VwT2JqLmRhdGEubGVuZ3RoXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBncm91cE9iai5kYXRhOyBsZXQgaSA9IGluZGV4O1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiWydjaGVja2JveCcsICdhcHAtY2hlY2tib3gnLCAnZ3JvdXAtbGlzdC1pdGVtJywgaXRlbWNsYXNzLCBpdGVtc1BlclJvd0NsYXNzXVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbd21JdGVtVGVtcGxhdGVdPVwiY29udGVudFwiIFt1c2VyQ29tcG9uZW50UGFyYW1zXT1cIml0ZW1cIiBwYXJ0aWFsQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hlY2tib3hMYWJlbENsaWNrKCRldmVudCwgaXRlbSlcIj5cbiAgICAgICAgICAgICAgICA8IS0tIERlZmF1bHQgaXRlbSB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCIhY29udGVudFwiIGNsYXNzPVwiYXBwLWNoZWNrYm94c2V0LWxhYmVsXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6ZGlzYWJsZWQgfHwgcmVhZG9ubHl9XCIgW3RpdGxlXT1cIml0ZW0ubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuYW1lXT1cIidjaGVja2JveHNldF8nICsgd2lkZ2V0SWRcIiB0eXBlPVwiY2hlY2tib3hcIiBhcmlhLWxhYmVsPVwiY2hlY2tib3ggZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCByZWFkb25seVwiIFthdHRyLmRhdGEtYXR0ci1pbmRleF09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLmtleVwiIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiIFtjaGVja2VkXT1cIml0ZW0uc2VsZWN0ZWRcIi8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FwdGlvblwiIFt0ZXh0Q29udGVudF09XCJpdGVtLmxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gcGFydGlhbCB0ZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJjb250ZW50XCIgY2xhc3M9XCJhcHAtY2hlY2tib3hzZXQtbGFiZWxcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzpkaXNhYmxlZCB8fCByZWFkb25seX1cIiA+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbbmFtZV09XCInY2hlY2tib3hzZXRfJyArIHdpZGdldElkXCIgdHlwZT1cImNoZWNrYm94XCIgYXJpYS1sYWJlbD1cImNoZWNrYm94IGdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHlcIiBbYXR0ci5kYXRhLWF0dHItaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbS5rZXlcIiBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIiBbY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCIvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcHRpb25cIiBwYXJ0aWFsLWNvbnRhaW5lci10YXJnZXQ+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgIDwvbGk+XG48L25nLXRlbXBsYXRlPlxuIl19