info-library 2.15.1-beta → 3.0.0-beta

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 (184) hide show
  1. package/controls/alert/alert.component.d.ts +7 -7
  2. package/controls/autocomplete/autocomplete.component.d.ts +52 -51
  3. package/controls/big-checkbox/big-checkbox.component.d.ts +41 -41
  4. package/controls/card/card.component.d.ts +16 -16
  5. package/controls/card-menu/card-menu.component.d.ts +23 -23
  6. package/controls/checkbox/checkbox.component.d.ts +27 -27
  7. package/controls/chips/chips.component.d.ts +23 -23
  8. package/controls/date/date.component.d.ts +38 -37
  9. package/controls/date-month/date-month.component.d.ts +40 -39
  10. package/controls/editor/editor.component.d.ts +40 -40
  11. package/controls/grid/grid.component.d.ts +172 -172
  12. package/controls/input/input.component.d.ts +47 -37
  13. package/controls/input-list/input-list.component.d.ts +29 -29
  14. package/controls/list-checkbox/list-checkbox.component.d.ts +26 -26
  15. package/controls/message/message.component.d.ts +10 -10
  16. package/controls/multi-select/multi-select.component.d.ts +39 -37
  17. package/controls/paginator/paginator.component.d.ts +25 -25
  18. package/controls/select/select.component.d.ts +42 -41
  19. package/controls/timeline/timeline.component.d.ts +17 -17
  20. package/directives/mask.directive.d.ts +24 -24
  21. package/directives/unmask.directive.d.ts +12 -11
  22. package/enum/dialog-buttons.enum.d.ts +7 -7
  23. package/enum/index.d.ts +3 -3
  24. package/enum/modal-action.enum.d.ts +10 -10
  25. package/enum/page-action.enum.d.ts +8 -8
  26. package/esm2022/controls/alert/alert.component.mjs +72 -0
  27. package/esm2022/controls/autocomplete/autocomplete.component.mjs +265 -0
  28. package/esm2022/controls/big-checkbox/big-checkbox.component.mjs +300 -0
  29. package/esm2022/controls/card/card.component.mjs +83 -0
  30. package/esm2022/controls/card-menu/card-menu.component.mjs +143 -0
  31. package/esm2022/controls/checkbox/checkbox.component.mjs +93 -0
  32. package/esm2022/controls/chips/chips.component.mjs +114 -0
  33. package/esm2022/controls/date/date.component.mjs +173 -0
  34. package/esm2022/controls/date-month/date-month.component.mjs +181 -0
  35. package/esm2022/controls/editor/editor.component.mjs +139 -0
  36. package/esm2022/controls/grid/grid.component.mjs +1818 -0
  37. package/esm2022/controls/input/input.component.mjs +389 -0
  38. package/esm2022/controls/input-list/input-list.component.mjs +259 -0
  39. package/{esm2020 → esm2022}/controls/list-checkbox/list-checkbox.component.mjs +242 -238
  40. package/esm2022/controls/message/message.component.mjs +48 -0
  41. package/esm2022/controls/multi-select/multi-select.component.mjs +174 -0
  42. package/esm2022/controls/paginator/paginator.component.mjs +177 -0
  43. package/esm2022/controls/select/select.component.mjs +189 -0
  44. package/esm2022/controls/timeline/timeline.component.mjs +116 -0
  45. package/esm2022/directives/mask.directive.mjs +134 -0
  46. package/esm2022/directives/unmask.directive.mjs +35 -0
  47. package/{esm2020 → esm2022}/enum/dialog-buttons.enum.mjs +8 -8
  48. package/{esm2020 → esm2022}/enum/index.mjs +3 -3
  49. package/{esm2020 → esm2022}/enum/modal-action.enum.mjs +11 -11
  50. package/{esm2020 → esm2022}/enum/page-action.enum.mjs +9 -9
  51. package/{esm2020 → esm2022}/global-config.mjs +3 -3
  52. package/{esm2020 → esm2022}/info-library.mjs +4 -4
  53. package/esm2022/info-library.module.mjs +283 -0
  54. package/esm2022/layouts/dialog/dialog.component.mjs +192 -0
  55. package/esm2022/layouts/filter/filter.component.mjs +179 -0
  56. package/esm2022/layouts/loading/loading.component.mjs +40 -0
  57. package/esm2022/layouts/main/main.component.mjs +305 -0
  58. package/esm2022/layouts/modal/modal.component.mjs +273 -0
  59. package/esm2022/layouts/pagebar/pagebar.component.mjs +432 -0
  60. package/esm2022/layouts/sidebar/sidebar.component.mjs +447 -0
  61. package/esm2022/layouts/topbar/topbar.component.mjs +1032 -0
  62. package/esm2022/layouts/topmenu/topmenu.component.mjs +173 -0
  63. package/esm2022/model/app-config.model.mjs +14 -0
  64. package/esm2022/model/data-access.model.mjs +37 -0
  65. package/esm2022/model/dialog-result.model.mjs +9 -0
  66. package/esm2022/model/dialog.model.mjs +15 -0
  67. package/esm2022/model/form-prop.model.mjs +37 -0
  68. package/esm2022/model/grid-button.model.mjs +26 -0
  69. package/{esm2020 → esm2022}/model/index.mjs +14 -14
  70. package/esm2022/model/last-search.model.mjs +7 -0
  71. package/esm2022/model/login.model.mjs +11 -0
  72. package/esm2022/model/method-grid-button.model.mjs +11 -0
  73. package/esm2022/model/notification.model.mjs +13 -0
  74. package/{esm2020 → esm2022}/model/pagebar-buttons.model.mjs +15 -15
  75. package/esm2022/model/permission.model.mjs +6 -0
  76. package/esm2022/model/platform.model.mjs +20 -0
  77. package/esm2022/model/session.model.mjs +27 -0
  78. package/{esm2020 → esm2022}/pipe/index.mjs +2 -2
  79. package/esm2022/pipe/mask.pipe.mjs +38 -0
  80. package/esm2022/pipe/translate.pipe.mjs +27 -0
  81. package/{esm2020 → esm2022}/public_api.mjs +37 -36
  82. package/esm2022/service/authentication.service.mjs +411 -0
  83. package/esm2022/service/configuration.service.mjs +90 -0
  84. package/esm2022/service/data.service.mjs +129 -0
  85. package/{esm2020 → esm2022}/service/index.mjs +5 -5
  86. package/esm2022/service/theme.service.mjs +89 -0
  87. package/esm2022/service/translate.service.mjs +57 -0
  88. package/esm2022/utils/utilities.mjs +189 -0
  89. package/fesm2022/info-library.mjs +9364 -0
  90. package/fesm2022/info-library.mjs.map +1 -0
  91. package/global-config.d.ts +3 -3
  92. package/index.d.ts +5 -5
  93. package/info-library-3.0.0-beta.tgz +0 -0
  94. package/info-library.module.d.ts +61 -60
  95. package/layouts/dialog/dialog.component.d.ts +29 -29
  96. package/layouts/filter/filter.component.d.ts +24 -0
  97. package/layouts/loading/loading.component.d.ts +8 -8
  98. package/layouts/main/main.component.d.ts +60 -56
  99. package/layouts/modal/modal.component.d.ts +40 -39
  100. package/layouts/pagebar/pagebar.component.d.ts +45 -45
  101. package/layouts/sidebar/sidebar.component.d.ts +40 -40
  102. package/layouts/topbar/topbar.component.d.ts +69 -66
  103. package/layouts/topmenu/topmenu.component.d.ts +34 -34
  104. package/model/app-config.model.d.ts +13 -11
  105. package/model/data-access.model.d.ts +12 -12
  106. package/model/dialog-result.model.d.ts +6 -6
  107. package/model/dialog.model.d.ts +14 -14
  108. package/model/form-prop.model.d.ts +12 -12
  109. package/model/grid-button.model.d.ts +18 -18
  110. package/model/index.d.ts +14 -14
  111. package/model/last-search.model.d.ts +6 -6
  112. package/model/login.model.d.ts +6 -6
  113. package/model/method-grid-button.model.d.ts +6 -6
  114. package/model/notification.model.d.ts +12 -12
  115. package/model/pagebar-buttons.model.d.ts +10 -10
  116. package/model/permission.model.d.ts +5 -5
  117. package/model/platform.model.d.ts +16 -16
  118. package/model/session.model.d.ts +27 -22
  119. package/package.json +5 -11
  120. package/pipe/index.d.ts +2 -2
  121. package/pipe/mask.pipe.d.ts +8 -8
  122. package/pipe/translate.pipe.d.ts +10 -10
  123. package/public_api.d.ts +34 -33
  124. package/service/authentication.service.d.ts +63 -61
  125. package/service/configuration.service.d.ts +17 -14
  126. package/service/data.service.d.ts +41 -39
  127. package/service/index.d.ts +5 -5
  128. package/service/theme.service.d.ts +16 -16
  129. package/service/translate.service.d.ts +16 -16
  130. package/utils/utilities.d.ts +38 -27
  131. package/esm2020/controls/alert/alert.component.mjs +0 -74
  132. package/esm2020/controls/autocomplete/autocomplete.component.mjs +0 -258
  133. package/esm2020/controls/big-checkbox/big-checkbox.component.mjs +0 -298
  134. package/esm2020/controls/card/card.component.mjs +0 -77
  135. package/esm2020/controls/card-menu/card-menu.component.mjs +0 -145
  136. package/esm2020/controls/checkbox/checkbox.component.mjs +0 -93
  137. package/esm2020/controls/chips/chips.component.mjs +0 -113
  138. package/esm2020/controls/date/date.component.mjs +0 -141
  139. package/esm2020/controls/date-month/date-month.component.mjs +0 -148
  140. package/esm2020/controls/editor/editor.component.mjs +0 -135
  141. package/esm2020/controls/grid/grid.component.mjs +0 -1800
  142. package/esm2020/controls/input/input.component.mjs +0 -314
  143. package/esm2020/controls/input-list/input-list.component.mjs +0 -258
  144. package/esm2020/controls/message/message.component.mjs +0 -50
  145. package/esm2020/controls/multi-select/multi-select.component.mjs +0 -161
  146. package/esm2020/controls/paginator/paginator.component.mjs +0 -178
  147. package/esm2020/controls/select/select.component.mjs +0 -180
  148. package/esm2020/controls/timeline/timeline.component.mjs +0 -117
  149. package/esm2020/directives/mask.directive.mjs +0 -125
  150. package/esm2020/directives/unmask.directive.mjs +0 -28
  151. package/esm2020/info-library.module.mjs +0 -278
  152. package/esm2020/layouts/dialog/dialog.component.mjs +0 -188
  153. package/esm2020/layouts/loading/loading.component.mjs +0 -42
  154. package/esm2020/layouts/main/main.component.mjs +0 -258
  155. package/esm2020/layouts/modal/modal.component.mjs +0 -258
  156. package/esm2020/layouts/pagebar/pagebar.component.mjs +0 -404
  157. package/esm2020/layouts/sidebar/sidebar.component.mjs +0 -395
  158. package/esm2020/layouts/topbar/topbar.component.mjs +0 -868
  159. package/esm2020/layouts/topmenu/topmenu.component.mjs +0 -165
  160. package/esm2020/model/app-config.model.mjs +0 -14
  161. package/esm2020/model/data-access.model.mjs +0 -35
  162. package/esm2020/model/dialog-result.model.mjs +0 -8
  163. package/esm2020/model/dialog.model.mjs +0 -16
  164. package/esm2020/model/form-prop.model.mjs +0 -35
  165. package/esm2020/model/grid-button.model.mjs +0 -21
  166. package/esm2020/model/last-search.model.mjs +0 -9
  167. package/esm2020/model/login.model.mjs +0 -9
  168. package/esm2020/model/method-grid-button.model.mjs +0 -9
  169. package/esm2020/model/notification.model.mjs +0 -9
  170. package/esm2020/model/permission.model.mjs +0 -3
  171. package/esm2020/model/platform.model.mjs +0 -21
  172. package/esm2020/model/session.model.mjs +0 -8
  173. package/esm2020/pipe/mask.pipe.mjs +0 -34
  174. package/esm2020/pipe/translate.pipe.mjs +0 -26
  175. package/esm2020/service/authentication.service.mjs +0 -358
  176. package/esm2020/service/configuration.service.mjs +0 -59
  177. package/esm2020/service/data.service.mjs +0 -112
  178. package/esm2020/service/theme.service.mjs +0 -79
  179. package/esm2020/service/translate.service.mjs +0 -53
  180. package/esm2020/utils/utilities.mjs +0 -142
  181. package/fesm2015/info-library.mjs +0 -9312
  182. package/fesm2015/info-library.mjs.map +0 -1
  183. package/fesm2020/info-library.mjs +0 -8462
  184. package/fesm2020/info-library.mjs.map +0 -1
@@ -0,0 +1,93 @@
1
+ import { Component, Input, forwardRef } from "@angular/core";
2
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "@angular/material/checkbox";
7
+ import * as i4 from "../../pipe/translate.pipe";
8
+ const _c0 = function (a0) { return { "info-checkbox-min": a0 }; };
9
+ export class InfoCheckboxComponent {
10
+ placeholder = '';
11
+ type = null;
12
+ min = false;
13
+ value = false;
14
+ disabled = false;
15
+ checkboxValue = { true: true, false: false };
16
+ initialized = false;
17
+ onChange;
18
+ onTouched;
19
+ get checked() {
20
+ return this.value;
21
+ }
22
+ set checked(value) {
23
+ if (this.initialized) {
24
+ this.value = value;
25
+ this.onChangeValue();
26
+ }
27
+ }
28
+ ngOnInit() {
29
+ if (this.type != null) {
30
+ let customType = this.type.split(',');
31
+ this.checkboxValue.true = isNaN(Number(customType[0])) ? customType[0] : Number(customType[0]);
32
+ this.checkboxValue.false = isNaN(Number(customType[1])) ? customType[1] : Number(customType[1]);
33
+ }
34
+ this.value = true;
35
+ }
36
+ writeValue(modelValue) {
37
+ if (modelValue === undefined || modelValue == null)
38
+ this.value = false;
39
+ else
40
+ this.value = modelValue === this.checkboxValue.true;
41
+ this.onChangeValue();
42
+ }
43
+ registerOnChange(fn) {
44
+ this.onChange = fn;
45
+ }
46
+ registerOnTouched(fn) {
47
+ this.initialized = true;
48
+ this.onTouched = fn;
49
+ }
50
+ setDisabledState(isDisabled) {
51
+ this.disabled = isDisabled;
52
+ }
53
+ onChangeValue() {
54
+ let result = this.value ? this.checkboxValue.true : this.checkboxValue.false;
55
+ if (this.onChange != null)
56
+ this.onChange(result);
57
+ }
58
+ /** @nocollapse */ static ɵfac = function InfoCheckboxComponent_Factory(t) { return new (t || InfoCheckboxComponent)(); };
59
+ /** @nocollapse */ static ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: InfoCheckboxComponent, selectors: [["info-checkbox"]], inputs: { placeholder: "placeholder", type: "type", min: "min", checked: "checked" }, features: [i0.ɵɵProvidersFeature([{
60
+ provide: NG_VALUE_ACCESSOR,
61
+ useExisting: forwardRef((() => InfoCheckboxComponent)),
62
+ multi: true
63
+ }])], decls: 4, vars: 8, consts: [[1, "info-checkbox-content", "mat-form-field-margin", 3, "ngClass"], [3, "ngModel", "disabled", "ngModelChange", "change"], [3, "innerHtml"]], template: function InfoCheckboxComponent_Template(rf, ctx) { if (rf & 1) {
64
+ i0.ɵɵelementStart(0, "section", 0)(1, "mat-checkbox", 1);
65
+ i0.ɵɵlistener("ngModelChange", function InfoCheckboxComponent_Template_mat_checkbox_ngModelChange_1_listener($event) { return ctx.value = $event; })("change", function InfoCheckboxComponent_Template_mat_checkbox_change_1_listener() { return ctx.onChangeValue(); });
66
+ i0.ɵɵelement(2, "div", 2);
67
+ i0.ɵɵpipe(3, "translate");
68
+ i0.ɵɵelementEnd()();
69
+ } if (rf & 2) {
70
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(6, _c0, ctx.min));
71
+ i0.ɵɵadvance(1);
72
+ i0.ɵɵproperty("ngModel", ctx.value)("disabled", ctx.disabled);
73
+ i0.ɵɵadvance(1);
74
+ i0.ɵɵproperty("innerHtml", i0.ɵɵpipeBind1(3, 4, ctx.placeholder), i0.ɵɵsanitizeHtml);
75
+ } }, dependencies: [i1.NgClass, i2.NgControlStatus, i2.NgModel, i3.MatCheckbox, i4.InfoTranslatePipe], styles: [".info-checkbox-content[_ngcontent-%COMP%]{padding-top:20px}.info-checkbox-min[_ngcontent-%COMP%]{padding-top:0!important;margin:0 0 13px!important}"] });
76
+ }
77
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoCheckboxComponent, [{
78
+ type: Component,
79
+ args: [{ selector: 'info-checkbox', providers: [{
80
+ provide: NG_VALUE_ACCESSOR,
81
+ useExisting: forwardRef((() => InfoCheckboxComponent)),
82
+ multi: true
83
+ }], template: "<section class=\"info-checkbox-content mat-form-field-margin \" [ngClass]=\"{ 'info-checkbox-min': min }\">\r\n <mat-checkbox [(ngModel)]=\"value\" (change)=\"onChangeValue()\" [disabled]=\"disabled\"><div [innerHtml]=\"placeholder | translate\"></div></mat-checkbox>\r\n</section>", styles: [".info-checkbox-content{padding-top:20px}.info-checkbox-min{padding-top:0!important;margin:0 0 13px!important}\n"] }]
84
+ }], null, { placeholder: [{
85
+ type: Input
86
+ }], type: [{
87
+ type: Input
88
+ }], min: [{
89
+ type: Input
90
+ }], checked: [{
91
+ type: Input
92
+ }] }); })();
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5mby1saWJyYXJ5L3NyYy9jb250cm9scy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbmZvLWxpYnJhcnkvc3JjL2NvbnRyb2xzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFZekUsTUFBTSxPQUFPLHFCQUFxQjtJQUVyQixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLElBQUksR0FBVyxJQUFJLENBQUM7SUFDcEIsR0FBRyxHQUFZLEtBQUssQ0FBQztJQUU5QixLQUFLLEdBQVksS0FBSyxDQUFDO0lBQ3ZCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsYUFBYSxHQUE4QixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3hFLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFFN0IsUUFBUSxDQUFNO0lBQ2QsU0FBUyxDQUFNO0lBRWYsSUFDSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLO1FBRWIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFDO1lBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN4QjtJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtZQUNuQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9GLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkc7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQWU7UUFFdEIsSUFBSSxVQUFVLEtBQUssU0FBUyxJQUFJLFVBQVUsSUFBSSxJQUFJO1lBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDOztZQUVsQixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztRQUV6RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGdCQUFnQixDQUFFLFVBQW1CO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBRTdFLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztrR0FqRVEscUJBQXFCOzRGQUFyQixxQkFBcUIseUpBTm5CLENBQUM7b0JBQ1IsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsRUFBQztvQkFDcEQsS0FBSyxFQUFFLElBQUk7aUJBQ2QsQ0FBQztZQ1hOLGtDQUF1RyxzQkFBQTtZQUNyRixvSkFBbUIsNkZBQVcsbUJBQWUsSUFBMUI7WUFBa0QseUJBQWlEOztZQUFBLGlCQUFlLEVBQUE7O1lBRHpGLDZEQUF3QztZQUNwRixlQUFtQjtZQUFuQixtQ0FBbUIsMEJBQUE7WUFBdUQsZUFBcUM7WUFBckMsb0ZBQXFDOzs7dUZEWXBILHFCQUFxQjtjQVZqQyxTQUFTOzJCQUNJLGVBQWUsYUFHZCxDQUFDO3dCQUNSLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLEVBQUMsR0FBRyxFQUFFLHNCQUFzQixFQUFDO3dCQUNwRCxLQUFLLEVBQUUsSUFBSTtxQkFDZCxDQUFDO2dCQUlPLFdBQVc7a0JBQW5CLEtBQUs7WUFDRyxJQUFJO2tCQUFaLEtBQUs7WUFDRyxHQUFHO2tCQUFYLEtBQUs7WUFXRixPQUFPO2tCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIGZvcndhcmRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdpbmZvLWNoZWNrYm94JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVzOiBbJy5pbmZvLWNoZWNrYm94LWNvbnRlbnQgeyBwYWRkaW5nLXRvcDogMjBweDsgfSAuaW5mby1jaGVja2JveC1taW4geyBwYWRkaW5nLXRvcDogMCAhaW1wb3J0YW50OyBtYXJnaW46IDAgMCAxM3B4ICFpbXBvcnRhbnQ7IH0gJ10sXHJcbiAgICBwcm92aWRlcnM6IFt7XHJcbiAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSW5mb0NoZWNrYm94Q29tcG9uZW50KSxcclxuICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEluZm9DaGVja2JveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9IG51bGw7XHJcbiAgICBASW5wdXQoKSBtaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICB2YWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGNoZWNrYm94VmFsdWU6IHsgdHJ1ZTogYW55LCBmYWxzZTogYW55IH0gPSB7IHRydWU6IHRydWUsIGZhbHNlOiBmYWxzZSB9O1xyXG4gICAgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBvbkNoYW5nZTogYW55O1xyXG4gICAgb25Ub3VjaGVkOiBhbnk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBjaGVja2VkKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNoZWNrZWQodmFsdWUpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpe1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VWYWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy50eXBlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbGV0IGN1c3RvbVR5cGUgPSB0aGlzLnR5cGUuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2JveFZhbHVlLnRydWUgPSBpc05hTihOdW1iZXIoY3VzdG9tVHlwZVswXSkpID8gY3VzdG9tVHlwZVswXSA6IE51bWJlcihjdXN0b21UeXBlWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2JveFZhbHVlLmZhbHNlID0gaXNOYU4oTnVtYmVyKGN1c3RvbVR5cGVbMV0pKSA/IGN1c3RvbVR5cGVbMV0gOiBOdW1iZXIoY3VzdG9tVHlwZVsxXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKG1vZGVsVmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChtb2RlbFZhbHVlID09PSB1bmRlZmluZWQgfHwgbW9kZWxWYWx1ZSA9PSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGVsc2UgdGhpcy52YWx1ZSA9IG1vZGVsVmFsdWUgPT09IHRoaXMuY2hlY2tib3hWYWx1ZS50cnVlO1xyXG5cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlVmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlVmFsdWUoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMudmFsdWUgPyB0aGlzLmNoZWNrYm94VmFsdWUudHJ1ZSA6IHRoaXMuY2hlY2tib3hWYWx1ZS5mYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub25DaGFuZ2UgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShyZXN1bHQpO1xyXG4gICAgfVxyXG59IiwiPHNlY3Rpb24gY2xhc3M9XCJpbmZvLWNoZWNrYm94LWNvbnRlbnQgbWF0LWZvcm0tZmllbGQtbWFyZ2luIFwiIFtuZ0NsYXNzXT1cInsgJ2luZm8tY2hlY2tib3gtbWluJzogbWluIH1cIj5cclxuICAgIDxtYXQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChjaGFuZ2UpPVwib25DaGFuZ2VWYWx1ZSgpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+PGRpdiBbaW5uZXJIdG1sXT1cInBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCI+PC9kaXY+PC9tYXQtY2hlY2tib3g+XHJcbjwvc2VjdGlvbj4iXX0=
@@ -0,0 +1,114 @@
1
+ import { ENTER } from '@angular/cdk/keycodes';
2
+ import { Component, forwardRef, Input, Output, EventEmitter } from "@angular/core";
3
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/material/icon";
7
+ import * as i3 from "@angular/material/form-field";
8
+ import * as i4 from "@angular/material/chips";
9
+ import * as i5 from "../../pipe/translate.pipe";
10
+ function InfoChipsComponent_mat_chip_3_mat_icon_2_Template(rf, ctx) { if (rf & 1) {
11
+ i0.ɵɵelementStart(0, "mat-icon", 5);
12
+ i0.ɵɵtext(1, "cancel");
13
+ i0.ɵɵelementEnd();
14
+ } }
15
+ function InfoChipsComponent_mat_chip_3_Template(rf, ctx) { if (rf & 1) {
16
+ const _r6 = i0.ɵɵgetCurrentView();
17
+ i0.ɵɵelementStart(0, "mat-chip", 3);
18
+ i0.ɵɵlistener("removed", function InfoChipsComponent_mat_chip_3_Template_mat_chip_removed_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r6); const i_r3 = restoredCtx.index; const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.remove(i_r3)); });
19
+ i0.ɵɵtext(1);
20
+ i0.ɵɵtemplate(2, InfoChipsComponent_mat_chip_3_mat_icon_2_Template, 2, 0, "mat-icon", 4);
21
+ i0.ɵɵelementEnd();
22
+ } if (rf & 2) {
23
+ const item_r2 = ctx.$implicit;
24
+ const ctx_r1 = i0.ɵɵnextContext();
25
+ i0.ɵɵproperty("removable", !ctx_r1.disabled);
26
+ i0.ɵɵadvance(1);
27
+ i0.ɵɵtextInterpolate1(" ", item_r2, " ");
28
+ i0.ɵɵadvance(1);
29
+ i0.ɵɵproperty("ngIf", !ctx_r1.disabled);
30
+ } }
31
+ export class InfoChipsComponent {
32
+ placeholder;
33
+ disabled = false;
34
+ readonly = false;
35
+ separatorKeysCodes = [ENTER];
36
+ onblur = new EventEmitter();
37
+ values = [];
38
+ onChange;
39
+ onTouched;
40
+ add(event) {
41
+ const input = event.input;
42
+ const value = event.value;
43
+ if ((value || '').trim())
44
+ this.values.push(value.trim());
45
+ if (input)
46
+ input.value = '';
47
+ this.writeValue(this.values);
48
+ }
49
+ remove(index) {
50
+ if (index >= 0)
51
+ this.values.splice(index, 1);
52
+ this.writeValue(this.values);
53
+ }
54
+ onBlur() {
55
+ this.onblur.emit(this.values);
56
+ }
57
+ onChangeValue() {
58
+ if (this.onChange != null)
59
+ this.onChange(this.values);
60
+ }
61
+ writeValue(modelValues) {
62
+ this.values = modelValues;
63
+ this.onChangeValue();
64
+ }
65
+ registerOnChange(fn) {
66
+ this.onChange = fn;
67
+ }
68
+ registerOnTouched(fn) {
69
+ this.onTouched = fn;
70
+ }
71
+ setDisabledState(isDisabled) {
72
+ this.disabled = isDisabled;
73
+ }
74
+ /** @nocollapse */ static ɵfac = function InfoChipsComponent_Factory(t) { return new (t || InfoChipsComponent)(); };
75
+ /** @nocollapse */ static ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: InfoChipsComponent, selectors: [["info-chips"]], inputs: { placeholder: "placeholder", disabled: "disabled", readonly: "readonly" }, outputs: { onblur: "onblur" }, features: [i0.ɵɵProvidersFeature([
76
+ {
77
+ provide: NG_VALUE_ACCESSOR,
78
+ useExisting: forwardRef((() => InfoChipsComponent)),
79
+ multi: true
80
+ }
81
+ ])], decls: 6, vars: 7, consts: [["chipList", ""], [3, "removable", "removed", 4, "ngFor", "ngForOf"], [3, "placeholder", "matChipInputFor", "matChipInputSeparatorKeyCodes", "disabled", "matChipInputTokenEnd", "blur"], [3, "removable", "removed"], ["matChipRemove", "", 4, "ngIf"], ["matChipRemove", ""]], template: function InfoChipsComponent_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelementStart(0, "mat-form-field")(1, "mat-chip-list", null, 0);
83
+ i0.ɵɵtemplate(3, InfoChipsComponent_mat_chip_3_Template, 3, 3, "mat-chip", 1);
84
+ i0.ɵɵelementStart(4, "input", 2);
85
+ i0.ɵɵlistener("matChipInputTokenEnd", function InfoChipsComponent_Template_input_matChipInputTokenEnd_4_listener($event) { return ctx.add($event); })("blur", function InfoChipsComponent_Template_input_blur_4_listener() { return ctx.onBlur(); });
86
+ i0.ɵɵpipe(5, "translate");
87
+ i0.ɵɵelementEnd()()();
88
+ } if (rf & 2) {
89
+ const _r0 = i0.ɵɵreference(2);
90
+ i0.ɵɵadvance(3);
91
+ i0.ɵɵproperty("ngForOf", ctx.values);
92
+ i0.ɵɵadvance(1);
93
+ i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(5, 5, ctx.placeholder))("matChipInputFor", _r0)("matChipInputSeparatorKeyCodes", ctx.separatorKeysCodes)("disabled", ctx.disabled);
94
+ } }, dependencies: [i1.NgForOf, i1.NgIf, i2.MatIcon, i3.MatFormField, i4.MatChipList, i4.MatChip, i4.MatChipInput, i4.MatChipRemove, i5.InfoTranslatePipe], encapsulation: 2 });
95
+ }
96
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoChipsComponent, [{
97
+ type: Component,
98
+ args: [{ selector: 'info-chips', providers: [
99
+ {
100
+ provide: NG_VALUE_ACCESSOR,
101
+ useExisting: forwardRef((() => InfoChipsComponent)),
102
+ multi: true
103
+ }
104
+ ], template: "<mat-form-field>\r\n <mat-chip-list #chipList>\r\n <mat-chip *ngFor=\"let item of values; let i = index\" [removable]=\"!disabled\" (removed)=\"remove(i)\">\r\n {{item}}\r\n <mat-icon matChipRemove *ngIf=\"!disabled\">cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"placeholder | translate\"\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n (matChipInputTokenEnd)=\"add($event)\"\r\n [disabled]=\"disabled\"\r\n (blur)=\"onBlur()\">\r\n </mat-chip-list>\r\n </mat-form-field>" }]
105
+ }], null, { placeholder: [{
106
+ type: Input
107
+ }], disabled: [{
108
+ type: Input
109
+ }], readonly: [{
110
+ type: Input
111
+ }], onblur: [{
112
+ type: Output
113
+ }] }); })();
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5mby1saWJyYXJ5L3NyYy9jb250cm9scy9jaGlwcy9jaGlwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbmZvLWxpYnJhcnkvc3JjL2NvbnRyb2xzL2NoaXBzL2NoaXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0lDRTdELG1DQUEwQztJQUFBLHNCQUFNO0lBQUEsaUJBQVc7Ozs7SUFGakUsbUNBQW1HO0lBQXRCLDhOQUFXLGVBQUEsbUJBQVMsQ0FBQSxJQUFDO0lBQzVGLFlBQ0E7SUFBQSx3RkFBMkQ7SUFDakUsaUJBQVc7Ozs7SUFIMEMsNENBQXVCO0lBQ3RFLGVBQ0E7SUFEQSx3Q0FDQTtJQUF5QixlQUFlO0lBQWYsdUNBQWU7O0FEV3BELE1BQU0sT0FBTyxrQkFBa0I7SUFFbEIsV0FBVyxDQUFTO0lBQ3BCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixrQkFBa0IsR0FBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRXRDLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDdEIsUUFBUSxDQUFNO0lBQ2QsU0FBUyxDQUFNO0lBRWYsR0FBRyxDQUFDLEtBQUs7UUFDTCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFFMUIsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLEtBQUs7WUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUU1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUs7UUFDUixJQUFJLEtBQUssSUFBSSxDQUFDO1lBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFHRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUk7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUFnQjtRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGdCQUFnQixDQUFFLFVBQW1CO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7K0ZBckRRLGtCQUFrQjs0RkFBbEIsa0JBQWtCLG1MQVJqQjtnQkFDTjtvQkFDSSxPQUFPLEVBQUUsaUJBQWlCO29CQUMxQixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFDO29CQUNqRCxLQUFLLEVBQUUsSUFBSTtpQkFDZDthQUNKO1lDYkwsc0NBQWdCLDZCQUFBO1lBRVYsNkVBR1c7WUFDWCxnQ0FLeUI7WUFGbEIsa0lBQXdCLGVBQVcsSUFBQywrRUFFNUIsWUFBUSxJQUZvQjs7WUFIM0MsaUJBS3lCLEVBQUEsRUFBQTs7O1lBVEUsZUFBVztZQUFYLG9DQUFXO1lBSS9CLGVBQXVDO1lBQXZDLG1FQUF1Qyx3QkFBQSx5REFBQSwwQkFBQTs7O3VGRFN2QyxrQkFBa0I7Y0FYOUIsU0FBUzsyQkFDSSxZQUFZLGFBRVo7b0JBQ047d0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBQyxHQUFHLEVBQUUsbUJBQW1CLEVBQUM7d0JBQ2pELEtBQUssRUFBRSxJQUFJO3FCQUNkO2lCQUNKO2dCQUlRLFdBQVc7a0JBQW5CLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUdJLE1BQU07a0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVOVEVSIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdpbmZvLWNoaXBzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnY2hpcHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgcHJvdmlkZXJzOltcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbmZvQ2hpcHNDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEluZm9DaGlwc0NvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICByZWFkb25seSBzZXBhcmF0b3JLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSXTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25ibHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgXHJcbiAgICB2YWx1ZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBvbkNoYW5nZTogYW55O1xyXG4gICAgb25Ub3VjaGVkOiBhbnk7XHJcblxyXG4gICAgYWRkKGV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBldmVudC5pbnB1dDtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xyXG5cclxuICAgICAgICBpZiAoKHZhbHVlIHx8ICcnKS50cmltKCkpIHRoaXMudmFsdWVzLnB1c2godmFsdWUudHJpbSgpKTtcclxuICAgICAgICBpZiAoaW5wdXQpIGlucHV0LnZhbHVlID0gJyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWVzKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmVtb3ZlKGluZGV4KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHRoaXMudmFsdWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMudmFsdWVzKTtcclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIG9uQmx1cigpIHtcclxuICAgICAgICB0aGlzLm9uYmx1ci5lbWl0KHRoaXMudmFsdWVzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZVZhbHVlKCl7XHJcbiAgICAgICAgaWYgKHRoaXMub25DaGFuZ2UgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVWYWx1ZShtb2RlbFZhbHVlczogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSBtb2RlbFZhbHVlcztcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlVmFsdWUoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgfVxyXG59IiwiPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1jaGlwLWxpc3QgI2NoaXBMaXN0PlxyXG4gICAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmFsdWVzOyBsZXQgaSA9IGluZGV4XCIgW3JlbW92YWJsZV09XCIhZGlzYWJsZWRcIiAocmVtb3ZlZCk9XCJyZW1vdmUoaSlcIj5cclxuICAgICAgICAgICAge3tpdGVtfX1cclxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmUgKm5nSWY9XCIhZGlzYWJsZWRcIj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICA8L21hdC1jaGlwPlxyXG4gICAgICA8aW5wdXQgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIlxyXG4gICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiXHJcbiAgICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCI+XHJcbiAgICA8L21hdC1jaGlwLWxpc3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD4iXX0=
@@ -0,0 +1,173 @@
1
+ import { Component, forwardRef, Input, ViewChild } from "@angular/core";
2
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
3
+ import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
4
+ import { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS } from "@angular/material-moment-adapter";
5
+ import { createTextMaskInputElement } from "text-mask-core/dist/textMaskCore";
6
+ import { createAutoCorrectedDatePipe } from "text-mask-addons";
7
+ import moment from "moment";
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "@angular/forms";
11
+ import * as i3 from "@angular/material/form-field";
12
+ import * as i4 from "@angular/material/input";
13
+ import * as i5 from "@angular/material/datepicker";
14
+ import * as i6 from "../../pipe/translate.pipe";
15
+ const _c0 = ["inputDate"];
16
+ function InfoDateComponent_mat_form_field_0_Template(rf, ctx) { if (rf & 1) {
17
+ const _r5 = i0.ɵɵgetCurrentView();
18
+ i0.ɵɵelementStart(0, "mat-form-field")(1, "input", 1, 2);
19
+ i0.ɵɵlistener("ngModelChange", function InfoDateComponent_mat_form_field_0_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.dateValue = $event); })("dateChange", function InfoDateComponent_mat_form_field_0_Template_input_dateChange_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.onChangeValue()); })("input", function InfoDateComponent_mat_form_field_0_Template_input_input_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.onInputDate($event.target.value)); })("keypress", function InfoDateComponent_mat_form_field_0_Template_input_keypress_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.onKeyPress($event)); })("blur", function InfoDateComponent_mat_form_field_0_Template_input_blur_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.onChangeValue()); });
20
+ i0.ɵɵpipe(3, "translate");
21
+ i0.ɵɵelementEnd();
22
+ i0.ɵɵelement(4, "mat-datepicker-toggle", 3)(5, "mat-datepicker", 4, 5);
23
+ i0.ɵɵelementEnd();
24
+ } if (rf & 2) {
25
+ const _r3 = i0.ɵɵreference(6);
26
+ const ctx_r0 = i0.ɵɵnextContext();
27
+ i0.ɵɵadvance(1);
28
+ i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(3, 10, ctx_r0.placeholder))("ngModel", ctx_r0.dateValue)("disabled", ctx_r0.disabled)("required", ctx_r0.required)("min", ctx_r0.minDate)("max", ctx_r0.maxDate)("matDatepicker", _r3)("matDatepickerFilter", ctx_r0.datefilter);
29
+ i0.ɵɵadvance(3);
30
+ i0.ɵɵproperty("for", _r3);
31
+ i0.ɵɵadvance(1);
32
+ i0.ɵɵproperty("dateClass", ctx_r0.dateclass);
33
+ } }
34
+ function InfoDateComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {
35
+ const _r13 = i0.ɵɵgetCurrentView();
36
+ i0.ɵɵelementContainerStart(0);
37
+ i0.ɵɵelementStart(1, "input", 6, 2);
38
+ i0.ɵɵlistener("click", function InfoDateComponent_ng_container_1_Template_input_click_1_listener() { i0.ɵɵrestoreView(_r13); const _r11 = i0.ɵɵreference(4); return i0.ɵɵresetView(_r11.open()); })("ngModelChange", function InfoDateComponent_ng_container_1_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r14 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r14.dateValue = $event); })("dateChange", function InfoDateComponent_ng_container_1_Template_input_dateChange_1_listener() { i0.ɵɵrestoreView(_r13); const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.onChangeValue()); });
39
+ i0.ɵɵelementEnd();
40
+ i0.ɵɵelement(3, "mat-datepicker", null, 5);
41
+ i0.ɵɵelementContainerEnd();
42
+ } if (rf & 2) {
43
+ const _r11 = i0.ɵɵreference(4);
44
+ const ctx_r1 = i0.ɵɵnextContext();
45
+ i0.ɵɵadvance(1);
46
+ i0.ɵɵproperty("ngModel", ctx_r1.dateValue)("disabled", ctx_r1.disabled)("required", ctx_r1.required)("min", ctx_r1.minDate)("max", ctx_r1.maxDate)("matDatepicker", _r11)("matDatepickerFilter", ctx_r1.datefilter);
47
+ } }
48
+ export const PT_BR_DATE_FORMATS = {
49
+ parse: {
50
+ dateInput: 'DD/MM/YYYY',
51
+ },
52
+ display: {
53
+ dateInput: 'DD/MM/YYYY',
54
+ monthYearLabel: 'MMM Y',
55
+ dateA11yLabel: 'LL',
56
+ monthYearA11yLabel: 'MMMM Y',
57
+ },
58
+ };
59
+ export class InfoDateComponent {
60
+ placeholder;
61
+ disabled = false;
62
+ required = false;
63
+ minDate = new Date(1800, 0, 1);
64
+ maxDate = null;
65
+ button = false;
66
+ datefilter = null; //Metodo que recebe uma data(moment) e retorna boolean
67
+ dateclass = null; //Metodo que recebe uma data(moment) e retorna string
68
+ input;
69
+ dateValue;
70
+ dateMask;
71
+ onChange;
72
+ onTouched;
73
+ ngAfterViewInit() {
74
+ let config = {
75
+ mask: [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/],
76
+ guide: true,
77
+ placeholderChar: '_',
78
+ pipe: createAutoCorrectedDatePipe(PT_BR_DATE_FORMATS.parse.dateInput.toLowerCase()),
79
+ modelClean: true,
80
+ keepCharPositions: false,
81
+ };
82
+ this.dateMask = createTextMaskInputElement(Object.assign({ inputElement: this.input.nativeElement }, config));
83
+ }
84
+ onInputDate(value) {
85
+ this.dateMask.update(value);
86
+ }
87
+ onChangeValue() {
88
+ if (this.dateValue != null) {
89
+ if (moment(this.dateValue).isBefore(moment(this.minDate)))
90
+ this.dateValue = this.minDate;
91
+ if (this.maxDate != null && moment(this.dateValue).isAfter(moment(this.maxDate)))
92
+ this.dateValue = this.maxDate;
93
+ }
94
+ if (this.onChange != null)
95
+ this.onChange(this.dateValue);
96
+ }
97
+ writeValue(value) {
98
+ if (value != null) {
99
+ value = new Date(value);
100
+ value.setMinutes(value.getMinutes() + value.getTimezoneOffset());
101
+ value = new Date(value.getFullYear(), value.getMonth(), value.getDate());
102
+ }
103
+ this.dateValue = value;
104
+ this.onChangeValue();
105
+ }
106
+ registerOnChange(fn) {
107
+ this.onChange = fn;
108
+ }
109
+ registerOnTouched(fn) {
110
+ this.onTouched = fn;
111
+ }
112
+ setDisabledState(isDisabled) {
113
+ this.disabled = isDisabled;
114
+ }
115
+ onKeyPress(e) {
116
+ if (e.keyCode == 13)
117
+ this.onChangeValue();
118
+ }
119
+ /** @nocollapse */ static ɵfac = function InfoDateComponent_Factory(t) { return new (t || InfoDateComponent)(); };
120
+ /** @nocollapse */ static ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: InfoDateComponent, selectors: [["info-date"]], viewQuery: function InfoDateComponent_Query(rf, ctx) { if (rf & 1) {
121
+ i0.ɵɵviewQuery(_c0, 5);
122
+ } if (rf & 2) {
123
+ let _t;
124
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.input = _t.first);
125
+ } }, inputs: { placeholder: "placeholder", disabled: "disabled", required: "required", minDate: "minDate", maxDate: "maxDate", button: "button", datefilter: "datefilter", dateclass: "dateclass" }, features: [i0.ɵɵProvidersFeature([{
126
+ provide: NG_VALUE_ACCESSOR,
127
+ useExisting: forwardRef((() => InfoDateComponent)),
128
+ multi: true
129
+ },
130
+ { provide: MAT_DATE_LOCALE, useValue: 'pt-BR' },
131
+ { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },
132
+ { provide: MAT_DATE_FORMATS, useValue: PT_BR_DATE_FORMATS },
133
+ { provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } }])], decls: 2, vars: 2, consts: [[4, "ngIf"], ["matInput", "", 3, "placeholder", "ngModel", "disabled", "required", "min", "max", "matDatepicker", "matDatepickerFilter", "ngModelChange", "dateChange", "input", "keypress", "blur"], ["inputDate", ""], ["matSuffix", "", 3, "for"], [3, "dateClass"], ["datepicker", ""], ["type", "button", 1, "mat-button", 3, "ngModel", "disabled", "required", "min", "max", "matDatepicker", "matDatepickerFilter", "click", "ngModelChange", "dateChange"]], template: function InfoDateComponent_Template(rf, ctx) { if (rf & 1) {
134
+ i0.ɵɵtemplate(0, InfoDateComponent_mat_form_field_0_Template, 7, 12, "mat-form-field", 0);
135
+ i0.ɵɵtemplate(1, InfoDateComponent_ng_container_1_Template, 5, 7, "ng-container", 0);
136
+ } if (rf & 2) {
137
+ i0.ɵɵproperty("ngIf", !ctx.button);
138
+ i0.ɵɵadvance(1);
139
+ i0.ɵɵproperty("ngIf", ctx.button);
140
+ } }, dependencies: [i1.NgIf, i2.DefaultValueAccessor, i2.NgControlStatus, i2.RequiredValidator, i2.NgModel, i3.MatFormField, i3.MatSuffix, i4.MatInput, i5.MatDatepicker, i5.MatDatepickerInput, i5.MatDatepickerToggle, i6.InfoTranslatePipe], encapsulation: 2 });
141
+ }
142
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoDateComponent, [{
143
+ type: Component,
144
+ args: [{ selector: 'info-date', providers: [{
145
+ provide: NG_VALUE_ACCESSOR,
146
+ useExisting: forwardRef((() => InfoDateComponent)),
147
+ multi: true
148
+ },
149
+ { provide: MAT_DATE_LOCALE, useValue: 'pt-BR' },
150
+ { provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] },
151
+ { provide: MAT_DATE_FORMATS, useValue: PT_BR_DATE_FORMATS },
152
+ { provide: MAT_MOMENT_DATE_ADAPTER_OPTIONS, useValue: { useUtc: true } }], template: "<mat-form-field *ngIf=\"!button\">\r\n <input matInput [placeholder]=\"placeholder | translate\" [(ngModel)]=\"dateValue\" [disabled]=\"disabled\" [required]=\"required\" [min]=\"minDate\" [max]=\"maxDate\"\r\n (dateChange)=\"onChangeValue()\" (input)=\"onInputDate($event.target.value)\" (keypress)=\"onKeyPress($event)\" (blur)=\"onChangeValue()\" [matDatepicker]=\"datepicker\"\r\n [matDatepickerFilter]=\"datefilter\" #inputDate>\r\n\r\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n <mat-datepicker [dateClass]=\"dateclass\" #datepicker></mat-datepicker>\r\n</mat-form-field>\r\n\r\n<ng-container *ngIf=\"button\">\r\n <input class=\"mat-button\" type=\"button\" (click)=\"datepicker.open()\" [(ngModel)]=\"dateValue\" [disabled]=\"disabled\" [required]=\"required\" [min]=\"minDate\" [max]=\"maxDate\"\r\n (dateChange)=\"onChangeValue()\" [matDatepicker]=\"datepicker\"\r\n [matDatepickerFilter]=\"datefilter\" #inputDate>\r\n\r\n <mat-datepicker #datepicker></mat-datepicker>\r\n</ng-container>" }]
153
+ }], null, { placeholder: [{
154
+ type: Input
155
+ }], disabled: [{
156
+ type: Input
157
+ }], required: [{
158
+ type: Input
159
+ }], minDate: [{
160
+ type: Input
161
+ }], maxDate: [{
162
+ type: Input
163
+ }], button: [{
164
+ type: Input
165
+ }], datefilter: [{
166
+ type: Input
167
+ }], dateclass: [{
168
+ type: Input
169
+ }], input: [{
170
+ type: ViewChild,
171
+ args: ['inputDate', { static: false }]
172
+ }] }); })();
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbmZvLWxpYnJhcnkvc3JjL2NvbnRyb2xzL2RhdGUvZGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbmZvLWxpYnJhcnkvc3JjL2NvbnRyb2xzL2RhdGUvZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9ELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7SUNONUIsc0NBQWdDLGtCQUFBO0lBQzRCLDJPQUF1QixxS0FDMUQsZUFBQSxzQkFBZSxDQUFBLElBRDJDLGlLQUNoQyxlQUFBLHVDQUFnQyxDQUFBLElBREEsdUtBQ2MsZUFBQSx5QkFBa0IsQ0FBQSxJQURoQyx5SkFDMEMsZUFBQSxzQkFBZSxDQUFBLElBRHpEOztJQUEvRSxpQkFFcUQ7SUFFckQsMkNBQTRFLDJCQUFBO0lBRWhGLGlCQUFpQjs7OztJQU5HLGVBQXVDO0lBQXZDLHVFQUF1Qyw2QkFBQSw2QkFBQSw2QkFBQSx1QkFBQSx1QkFBQSxzQkFBQSwwQ0FBQTtJQUl0QixlQUFrQjtJQUFsQix5QkFBa0I7SUFDbkMsZUFBdUI7SUFBdkIsNENBQXVCOzs7O0lBRzNDLDZCQUE2QjtJQUN6QixtQ0FFcUQ7SUFGYixvS0FBUyxlQUFBLFdBQWlCLENBQUEsSUFBQywrTkFBQSxxS0FDOUMsZUFBQSx1QkFBZSxDQUFBLElBRCtCO0lBQW5FLGlCQUVxRDtJQUVyRCwwQ0FBNkM7SUFDakQsMEJBQWU7Ozs7SUFMeUQsZUFBdUI7SUFBdkIsMENBQXVCLDZCQUFBLDZCQUFBLHVCQUFBLHVCQUFBLHVCQUFBLDBDQUFBOztBREYvRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUM5QixLQUFLLEVBQUU7UUFDSCxTQUFTLEVBQUUsWUFBWTtLQUMxQjtJQUNELE9BQU8sRUFBRTtRQUNMLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLGNBQWMsRUFBRSxPQUFPO1FBQ3ZCLGFBQWEsRUFBRSxJQUFJO1FBQ25CLGtCQUFrQixFQUFFLFFBQVE7S0FDL0I7Q0FDSixDQUFDO0FBZUYsTUFBTSxPQUFPLGlCQUFpQjtJQUVqQixXQUFXLENBQVM7SUFDcEIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLE9BQU8sR0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sR0FBUyxJQUFJLENBQUM7SUFDckIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUV4QixVQUFVLEdBQVEsSUFBSSxDQUFDLENBQUMsc0RBQXNEO0lBQzlFLFNBQVMsR0FBUSxJQUFJLENBQUMsQ0FBQyxxREFBcUQ7SUFFMUMsS0FBSyxDQUFDO0lBRWpELFNBQVMsQ0FBTTtJQUNmLFFBQVEsQ0FBTTtJQUNkLFFBQVEsQ0FBQztJQUNULFNBQVMsQ0FBQztJQUVWLGVBQWU7UUFFWCxJQUFJLE1BQU0sR0FBRztZQUNULElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztZQUNoRSxLQUFLLEVBQUUsSUFBSTtZQUNYLGVBQWUsRUFBRSxHQUFHO1lBQ3BCLElBQUksRUFBRSwyQkFBMkIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25GLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGlCQUFpQixFQUFFLEtBQUs7U0FDM0IsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsMEJBQTBCLENBQ3RDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FDcEUsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSztRQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUVqQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUNyQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNqQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDZixLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUNqRSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUM1RTtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsZ0JBQWdCLENBQUUsVUFBbUI7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxDQUFDO1FBQ1IsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQzs4RkE5RVEsaUJBQWlCOzRGQUFqQixpQkFBaUI7Ozs7OzhPQVZmLENBQUM7b0JBQ1IsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsRUFBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBQztvQkFDaEQsS0FBSyxFQUFFLElBQUk7aUJBQ2Q7Z0JBQ0QsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7Z0JBQy9DLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUU7Z0JBQzlFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRTtnQkFDM0QsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUMvQjdFLHlGQU9pQjtZQUVqQixvRkFNZTs7WUFmRSxrQ0FBYTtZQVNmLGVBQVk7WUFBWixpQ0FBWTs7O3VGRHdCZCxpQkFBaUI7Y0FiN0IsU0FBUzsyQkFDSSxXQUFXLGFBRVYsQ0FBQzt3QkFDUixPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBQzt3QkFDaEQsS0FBSyxFQUFFLElBQUk7cUJBQ2Q7b0JBQ0QsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7b0JBQy9DLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUU7b0JBQzlFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRTtvQkFDM0QsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBSWhFLFdBQVc7a0JBQW5CLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUNHLE1BQU07a0JBQWQsS0FBSztZQUVHLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxTQUFTO2tCQUFqQixLQUFLO1lBRXFDLEtBQUs7a0JBQS9DLFNBQVM7bUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTUFUX0RBVEVfRk9STUFUUywgTUFUX0RBVEVfTE9DQUxFIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1vbWVudERhdGVBZGFwdGVyLCBNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVRleHRNYXNrSW5wdXRFbGVtZW50IH0gZnJvbSBcInRleHQtbWFzay1jb3JlL2Rpc3QvdGV4dE1hc2tDb3JlXCI7XHJcbmltcG9ydCB7IGNyZWF0ZUF1dG9Db3JyZWN0ZWREYXRlUGlwZSB9IGZyb20gXCJ0ZXh0LW1hc2stYWRkb25zXCI7XHJcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFBUX0JSX0RBVEVfRk9STUFUUyA9IHtcclxuICAgIHBhcnNlOiB7XHJcbiAgICAgICAgZGF0ZUlucHV0OiAnREQvTU0vWVlZWScsXHJcbiAgICB9LFxyXG4gICAgZGlzcGxheToge1xyXG4gICAgICAgIGRhdGVJbnB1dDogJ0REL01NL1lZWVknLFxyXG4gICAgICAgIG1vbnRoWWVhckxhYmVsOiAnTU1NIFknLFxyXG4gICAgICAgIGRhdGVBMTF5TGFiZWw6ICdMTCcsXHJcbiAgICAgICAgbW9udGhZZWFyQTExeUxhYmVsOiAnTU1NTSBZJyxcclxuICAgIH0sXHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnaW5mby1kYXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHByb3ZpZGVyczogW3tcclxuICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJbmZvRGF0ZUNvbXBvbmVudCksXHJcbiAgICAgICAgbXVsdGk6IHRydWVcclxuICAgIH0sXHJcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0xPQ0FMRSwgdXNlVmFsdWU6ICdwdC1CUicgfSxcclxuICAgIHsgcHJvdmlkZTogRGF0ZUFkYXB0ZXIsIHVzZUNsYXNzOiBNb21lbnREYXRlQWRhcHRlciwgZGVwczogW01BVF9EQVRFX0xPQ0FMRV0gfSxcclxuICAgIHsgcHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IFBUX0JSX0RBVEVfRk9STUFUUyB9LFxyXG4gICAgeyBwcm92aWRlOiBNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TLCB1c2VWYWx1ZTogeyB1c2VVdGM6IHRydWUgfSB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5mb0RhdGVDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgbWluRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKDE4MDAsIDAsIDEpO1xyXG4gICAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZSA9IG51bGw7XHJcbiAgICBASW5wdXQoKSBidXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBkYXRlZmlsdGVyOiBhbnkgPSBudWxsOyAvL01ldG9kbyBxdWUgcmVjZWJlIHVtYSBkYXRhKG1vbWVudCkgZSByZXRvcm5hIGJvb2xlYW5cclxuICAgIEBJbnB1dCgpIGRhdGVjbGFzczogYW55ID0gbnVsbDsgLy9NZXRvZG8gcXVlIHJlY2ViZSB1bWEgZGF0YShtb21lbnQpIGUgcmV0b3JuYSBzdHJpbmdcclxuXHJcbiAgICBAVmlld0NoaWxkKCdpbnB1dERhdGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgaW5wdXQ7XHJcblxyXG4gICAgZGF0ZVZhbHVlOiBhbnk7XHJcbiAgICBkYXRlTWFzazogYW55O1xyXG4gICAgb25DaGFuZ2U7XHJcbiAgICBvblRvdWNoZWQ7XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICAgICAgICBsZXQgY29uZmlnID0ge1xyXG4gICAgICAgICAgICBtYXNrOiBbL1xcZC8sIC9cXGQvLCAnLycsIC9cXGQvLCAvXFxkLywgJy8nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkL10sXHJcbiAgICAgICAgICAgIGd1aWRlOiB0cnVlLFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlckNoYXI6ICdfJyxcclxuICAgICAgICAgICAgcGlwZTogY3JlYXRlQXV0b0NvcnJlY3RlZERhdGVQaXBlKFBUX0JSX0RBVEVfRk9STUFUUy5wYXJzZS5kYXRlSW5wdXQudG9Mb3dlckNhc2UoKSksXHJcbiAgICAgICAgICAgIG1vZGVsQ2xlYW46IHRydWUsXHJcbiAgICAgICAgICAgIGtlZXBDaGFyUG9zaXRpb25zOiBmYWxzZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmRhdGVNYXNrID0gY3JlYXRlVGV4dE1hc2tJbnB1dEVsZW1lbnQoXHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oeyBpbnB1dEVsZW1lbnQ6IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCB9LCBjb25maWcpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbklucHV0RGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZGF0ZU1hc2sudXBkYXRlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZVZhbHVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGVWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChtb21lbnQodGhpcy5kYXRlVmFsdWUpLmlzQmVmb3JlKG1vbWVudCh0aGlzLm1pbkRhdGUpKSlcclxuICAgICAgICAgICAgICAgdGhpcy5kYXRlVmFsdWUgPSB0aGlzLm1pbkRhdGU7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSAhPSBudWxsICYmIG1vbWVudCh0aGlzLmRhdGVWYWx1ZSkuaXNBZnRlcihtb21lbnQodGhpcy5tYXhEYXRlKSkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVWYWx1ZSA9IHRoaXMubWF4RGF0ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9uQ2hhbmdlICE9IG51bGwpXHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5kYXRlVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICB2YWx1ZS5zZXRNaW51dGVzKHZhbHVlLmdldE1pbnV0ZXMoKSArIHZhbHVlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlLmdldEZ1bGxZZWFyKCksIHZhbHVlLmdldE1vbnRoKCksIHZhbHVlLmdldERhdGUoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGVWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgb25LZXlQcmVzcyhlKXtcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKVxyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlVmFsdWUoKTtcclxuICAgIH1cclxufSIsIjxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIiFidXR0b25cIj5cclxuICAgIDxpbnB1dCBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIiBbKG5nTW9kZWwpXT1cImRhdGVWYWx1ZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFttaW5dPVwibWluRGF0ZVwiIFttYXhdPVwibWF4RGF0ZVwiXHJcbiAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25DaGFuZ2VWYWx1ZSgpXCIgKGlucHV0KT1cIm9uSW5wdXREYXRlKCRldmVudC50YXJnZXQudmFsdWUpXCIgKGtleXByZXNzKT1cIm9uS2V5UHJlc3MoJGV2ZW50KVwiIChibHVyKT1cIm9uQ2hhbmdlVmFsdWUoKVwiIFttYXREYXRlcGlja2VyXT1cImRhdGVwaWNrZXJcIlxyXG4gICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImRhdGVmaWx0ZXJcIiAjaW5wdXREYXRlPlxyXG5cclxuICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZGF0ZXBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgPG1hdC1kYXRlcGlja2VyIFtkYXRlQ2xhc3NdPVwiZGF0ZWNsYXNzXCIgI2RhdGVwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJidXR0b25cIj5cclxuICAgIDxpbnB1dCBjbGFzcz1cIm1hdC1idXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRhdGVwaWNrZXIub3BlbigpXCIgWyhuZ01vZGVsKV09XCJkYXRlVmFsdWVcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbbWluXT1cIm1pbkRhdGVcIiBbbWF4XT1cIm1heERhdGVcIlxyXG4gICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uQ2hhbmdlVmFsdWUoKVwiIFttYXREYXRlcGlja2VyXT1cImRhdGVwaWNrZXJcIlxyXG4gICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImRhdGVmaWx0ZXJcIiAjaW5wdXREYXRlPlxyXG5cclxuICAgIDxtYXQtZGF0ZXBpY2tlciAjZGF0ZXBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG48L25nLWNvbnRhaW5lcj4iXX0=