keevo-components 1.8.34 → 1.8.36

Sign up to get free protection for your applications and to get access to all the features.
Files changed (212) hide show
  1. package/README.md +24 -24
  2. package/esm2022/keevo-components.mjs +4 -4
  3. package/esm2022/lib/api/base-components/base-component-button.mjs +36 -36
  4. package/esm2022/lib/api/base-components/base-component-chart.mjs +92 -92
  5. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +298 -298
  6. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +78 -78
  7. package/esm2022/lib/api/base-components/base-component-crud.mjs +65 -65
  8. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +31 -31
  9. package/esm2022/lib/api/base-components/base-component-dropdown.mjs +169 -169
  10. package/esm2022/lib/api/base-components/base-component-input.mjs +94 -94
  11. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +130 -130
  12. package/esm2022/lib/api/base-components/base-component.mjs +51 -51
  13. package/esm2022/lib/api/components/chart/chart.config.mjs +2 -2
  14. package/esm2022/lib/api/components/chart/chart.model.mjs +2 -2
  15. package/esm2022/lib/api/components/chart/orchart.config.mjs +2 -2
  16. package/esm2022/lib/api/components/chart/orchart.item.mjs +2 -2
  17. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +2 -2
  18. package/esm2022/lib/api/components/error/error.component.mjs +26 -26
  19. package/esm2022/lib/api/components/error/kverror.module.mjs +35 -35
  20. package/esm2022/lib/api/components/table/action-item.mjs +2 -2
  21. package/esm2022/lib/api/components/table/kv-menuitem.mjs +3 -3
  22. package/esm2022/lib/api/components/table/table-dropdown-control.mjs +2 -2
  23. package/esm2022/lib/api/components/table/table.config.column.mjs +2 -2
  24. package/esm2022/lib/api/components/table/table.config.mjs +2 -2
  25. package/esm2022/lib/api/components/table/table.paginate.mjs +9 -9
  26. package/esm2022/lib/api/components/table/tabledit.config.mjs +2 -2
  27. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +2 -2
  28. package/esm2022/lib/api/helpers/component-providers.mjs +16 -16
  29. package/esm2022/lib/api/helpers/keevo-validators.mjs +72 -72
  30. package/esm2022/lib/api/helpers/translate-primeng.mjs +23 -23
  31. package/esm2022/lib/api/models/menu/menu.model.mjs +2 -2
  32. package/esm2022/lib/api/models/menu/menucompleto.model.mjs +2 -2
  33. package/esm2022/lib/api/models/menu/sistemamenu.model.mjs +2 -2
  34. package/esm2022/lib/api/modules/primeng.module.mjs +251 -251
  35. package/esm2022/lib/api/services/base.api.service.mjs +74 -74
  36. package/esm2022/lib/api/services/breadcrumbs.service.mjs +57 -57
  37. package/esm2022/lib/api/services/component.service.mjs +27 -27
  38. package/esm2022/lib/api/services/form.service.mjs +85 -85
  39. package/esm2022/lib/api/services/imagens.service.mjs +28 -28
  40. package/esm2022/lib/api/services/notification.service.mjs +67 -67
  41. package/esm2022/lib/api/services/object.service.mjs +39 -39
  42. package/esm2022/lib/avatar/avatar.component.mjs +78 -78
  43. package/esm2022/lib/avatar/kv-avatar.module.mjs +32 -32
  44. package/esm2022/lib/buttons/button-personalize/button-personalize.component.mjs +17 -17
  45. package/esm2022/lib/buttons/button-popup/button-popup.component.mjs +31 -31
  46. package/esm2022/lib/buttons/button-secondary/button-secondary.component.mjs +17 -17
  47. package/esm2022/lib/buttons/button-success/button-success.component.mjs +17 -17
  48. package/esm2022/lib/buttons/kvbutton.module.mjs +39 -39
  49. package/esm2022/lib/carousel/carousel.component.mjs +92 -92
  50. package/esm2022/lib/carousel/kv-carousel.module.mjs +28 -28
  51. package/esm2022/lib/chart/chart.component.mjs +145 -145
  52. package/esm2022/lib/chart/kvchart.module.mjs +32 -32
  53. package/esm2022/lib/directives/template/template.directive.mjs +24 -24
  54. package/esm2022/lib/inputs/check/check.component.mjs +26 -26
  55. package/esm2022/lib/inputs/dropdown/dropdown.component.mjs +37 -37
  56. package/esm2022/lib/inputs/editor/editor.component.mjs +88 -88
  57. package/esm2022/lib/inputs/input-calendar/input-calendar.component.mjs +89 -89
  58. package/esm2022/lib/inputs/input-mask/input-mask.component.mjs +29 -29
  59. package/esm2022/lib/inputs/input-number/input-number.component.mjs +59 -59
  60. package/esm2022/lib/inputs/input-password/input-password.component.mjs +33 -33
  61. package/esm2022/lib/inputs/input-text/input-text.component.mjs +21 -21
  62. package/esm2022/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +41 -41
  63. package/esm2022/lib/inputs/input-textarea/input-textarea.component.mjs +43 -43
  64. package/esm2022/lib/inputs/input-time/input-time.component.mjs +24 -24
  65. package/esm2022/lib/inputs/kvinputs.module.mjs +108 -108
  66. package/esm2022/lib/inputs/multi-select/multi-select.component.mjs +44 -44
  67. package/esm2022/lib/inputs/radio-group/radio-group.component.mjs +53 -53
  68. package/esm2022/lib/inputs/switch/switch.component.mjs +34 -34
  69. package/esm2022/lib/keevo-components.module.mjs +144 -144
  70. package/esm2022/lib/label/label.component.mjs +14 -14
  71. package/esm2022/lib/label/label.module.mjs +23 -23
  72. package/esm2022/lib/loader/kvloader.module.mjs +28 -28
  73. package/esm2022/lib/loader/loader.component.mjs +17 -17
  74. package/esm2022/lib/loader/loader.service.mjs +29 -29
  75. package/esm2022/lib/login/kvlogin.module.mjs +47 -47
  76. package/esm2022/lib/login/login.component.mjs +52 -52
  77. package/esm2022/lib/menu/kvmenu.module.mjs +47 -43
  78. package/esm2022/lib/menu/menu.component.mjs +188 -215
  79. package/esm2022/lib/modal/kv-modal.module.mjs +31 -31
  80. package/esm2022/lib/modal/modal.component.mjs +67 -60
  81. package/esm2022/lib/orgchart/orgchart.component.mjs +100 -100
  82. package/esm2022/lib/orgchart/orgchart.module.mjs +24 -24
  83. package/esm2022/lib/page-form/kv-page-form.module.mjs +38 -38
  84. package/esm2022/lib/page-form/page-form.component.mjs +147 -147
  85. package/esm2022/lib/picklist/kvpicklist.module.mjs +32 -32
  86. package/esm2022/lib/picklist/picklist.component.mjs +48 -48
  87. package/esm2022/lib/pipes/codigofile.pipe.mjs +19 -19
  88. package/esm2022/lib/pipes/cpfcnpj.pipe.mjs +25 -25
  89. package/esm2022/lib/pipes/pipes.module.mjs +34 -34
  90. package/esm2022/lib/pipes/telefone.pipe.mjs +45 -45
  91. package/esm2022/lib/progress-bar/kv-progress-bar.module.mjs +28 -28
  92. package/esm2022/lib/progress-bar/progress-bar.component.mjs +58 -58
  93. package/esm2022/lib/table/kvtable.module.mjs +36 -36
  94. package/esm2022/lib/table/table.component.mjs +554 -554
  95. package/esm2022/lib/table-edit/table-edit.component.mjs +564 -502
  96. package/esm2022/lib/table-edit/table-edit.module.mjs +31 -31
  97. package/esm2022/lib/tree-table/kv-treetable.component.mjs +371 -371
  98. package/esm2022/lib/tree-table/kv-treetable.module.mjs +32 -32
  99. package/esm2022/lib/tree-view/kvtree-view.module.mjs +28 -28
  100. package/esm2022/lib/tree-view/tree-view.component.mjs +30 -30
  101. package/esm2022/lib/treetable/treetable.component.mjs +215 -215
  102. package/esm2022/lib/treetable/treetable.module.mjs +28 -28
  103. package/esm2022/lib/workspace/kvworkspace.module.mjs +51 -51
  104. package/esm2022/lib/workspace/workspace.component.mjs +178 -178
  105. package/esm2022/public-api.mjs +165 -165
  106. package/fesm2022/keevo-components.mjs +5744 -5697
  107. package/fesm2022/keevo-components.mjs.map +1 -1
  108. package/index.d.ts +5 -5
  109. package/lib/api/base-components/base-component-button.d.ts +14 -14
  110. package/lib/api/base-components/base-component-chart.d.ts +40 -40
  111. package/lib/api/base-components/base-component-crud-form.d.ts +145 -145
  112. package/lib/api/base-components/base-component-crud-list.d.ts +63 -63
  113. package/lib/api/base-components/base-component-crud.d.ts +36 -36
  114. package/lib/api/base-components/base-component-dropdown-external.d.ts +15 -15
  115. package/lib/api/base-components/base-component-dropdown.d.ts +44 -44
  116. package/lib/api/base-components/base-component-input.d.ts +31 -31
  117. package/lib/api/base-components/base-component-multi-select.d.ts +35 -35
  118. package/lib/api/base-components/base-component.d.ts +22 -22
  119. package/lib/api/components/chart/chart.config.d.ts +11 -11
  120. package/lib/api/components/chart/chart.model.d.ts +9 -9
  121. package/lib/api/components/chart/orchart.config.d.ts +35 -35
  122. package/lib/api/components/chart/orchart.item.d.ts +26 -26
  123. package/lib/api/components/dropdown/filtro.combo.d.ts +4 -4
  124. package/lib/api/components/error/error.component.d.ts +12 -12
  125. package/lib/api/components/error/kverror.module.d.ts +10 -10
  126. package/lib/api/components/table/action-item.d.ts +9 -8
  127. package/lib/api/components/table/kv-menuitem.d.ts +10 -10
  128. package/lib/api/components/table/table-dropdown-control.d.ts +6 -6
  129. package/lib/api/components/table/table.config.column.d.ts +25 -25
  130. package/lib/api/components/table/table.config.d.ts +19 -19
  131. package/lib/api/components/table/table.paginate.d.ts +6 -6
  132. package/lib/api/components/table/tabledit.config.d.ts +8 -6
  133. package/lib/api/components/table/tableedit.config.column.d.ts +9 -9
  134. package/lib/api/helpers/component-providers.d.ts +2 -2
  135. package/lib/api/helpers/keevo-validators.d.ts +11 -11
  136. package/lib/api/helpers/translate-primeng.d.ts +4 -4
  137. package/lib/api/models/menu/menu.model.d.ts +10 -10
  138. package/lib/api/models/menu/menucompleto.model.d.ts +6 -6
  139. package/lib/api/models/menu/sistemamenu.model.d.ts +8 -8
  140. package/lib/api/modules/primeng.module.d.ts +61 -61
  141. package/lib/api/services/base.api.service.d.ts +25 -25
  142. package/lib/api/services/breadcrumbs.service.d.ts +16 -16
  143. package/lib/api/services/component.service.d.ts +11 -11
  144. package/lib/api/services/form.service.d.ts +28 -28
  145. package/lib/api/services/imagens.service.d.ts +10 -10
  146. package/lib/api/services/notification.service.d.ts +25 -25
  147. package/lib/api/services/object.service.d.ts +9 -9
  148. package/lib/avatar/avatar.component.d.ts +22 -22
  149. package/lib/avatar/kv-avatar.module.d.ts +10 -10
  150. package/lib/buttons/button-personalize/button-personalize.component.d.ts +7 -7
  151. package/lib/buttons/button-popup/button-popup.component.d.ts +13 -13
  152. package/lib/buttons/button-secondary/button-secondary.component.d.ts +7 -7
  153. package/lib/buttons/button-success/button-success.component.d.ts +7 -7
  154. package/lib/buttons/kvbutton.module.d.ts +11 -11
  155. package/lib/carousel/carousel.component.d.ts +16 -16
  156. package/lib/carousel/kv-carousel.module.d.ts +9 -9
  157. package/lib/chart/chart.component.d.ts +56 -56
  158. package/lib/chart/kvchart.module.d.ts +10 -10
  159. package/lib/directives/template/template.directive.d.ts +11 -11
  160. package/lib/inputs/check/check.component.d.ts +11 -11
  161. package/lib/inputs/dropdown/dropdown.component.d.ts +14 -14
  162. package/lib/inputs/editor/editor.component.d.ts +36 -36
  163. package/lib/inputs/input-calendar/input-calendar.component.d.ts +27 -27
  164. package/lib/inputs/input-mask/input-mask.component.d.ts +12 -12
  165. package/lib/inputs/input-number/input-number.component.d.ts +19 -19
  166. package/lib/inputs/input-password/input-password.component.d.ts +13 -13
  167. package/lib/inputs/input-text/input-text.component.d.ts +9 -9
  168. package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +16 -16
  169. package/lib/inputs/input-textarea/input-textarea.component.d.ts +16 -16
  170. package/lib/inputs/input-time/input-time.component.d.ts +10 -10
  171. package/lib/inputs/kvinputs.module.d.ts +25 -25
  172. package/lib/inputs/multi-select/multi-select.component.d.ts +15 -15
  173. package/lib/inputs/radio-group/radio-group.component.d.ts +18 -18
  174. package/lib/inputs/switch/switch.component.d.ts +14 -14
  175. package/lib/keevo-components.module.d.ts +25 -25
  176. package/lib/label/label.component.d.ts +7 -7
  177. package/lib/label/label.module.d.ts +8 -8
  178. package/lib/loader/kvloader.module.d.ts +9 -9
  179. package/lib/loader/loader.component.d.ts +8 -8
  180. package/lib/loader/loader.service.d.ts +10 -10
  181. package/lib/login/kvlogin.module.d.ts +13 -13
  182. package/lib/login/login.component.d.ts +30 -30
  183. package/lib/menu/kvmenu.module.d.ts +13 -12
  184. package/lib/menu/menu.component.d.ts +61 -73
  185. package/lib/modal/kv-modal.module.d.ts +10 -10
  186. package/lib/modal/modal.component.d.ts +20 -19
  187. package/lib/orgchart/orgchart.component.d.ts +27 -27
  188. package/lib/orgchart/orgchart.module.d.ts +9 -9
  189. package/lib/page-form/kv-page-form.module.d.ts +11 -11
  190. package/lib/page-form/page-form.component.d.ts +70 -70
  191. package/lib/picklist/kvpicklist.module.d.ts +10 -10
  192. package/lib/picklist/picklist.component.d.ts +20 -20
  193. package/lib/pipes/codigofile.pipe.d.ts +7 -7
  194. package/lib/pipes/cpfcnpj.pipe.d.ts +7 -7
  195. package/lib/pipes/pipes.module.d.ts +10 -10
  196. package/lib/pipes/telefone.pipe.d.ts +7 -7
  197. package/lib/progress-bar/kv-progress-bar.module.d.ts +9 -9
  198. package/lib/progress-bar/progress-bar.component.d.ts +67 -67
  199. package/lib/table/kvtable.module.d.ts +11 -11
  200. package/lib/table/table.component.d.ts +113 -113
  201. package/lib/table-edit/table-edit.component.d.ts +116 -109
  202. package/lib/table-edit/table-edit.module.d.ts +11 -11
  203. package/lib/tree-table/kv-treetable.component.d.ts +85 -85
  204. package/lib/tree-table/kv-treetable.module.d.ts +11 -11
  205. package/lib/tree-view/kvtree-view.module.d.ts +9 -9
  206. package/lib/tree-view/tree-view.component.d.ts +14 -14
  207. package/lib/treetable/treetable.component.d.ts +42 -42
  208. package/lib/treetable/treetable.module.d.ts +9 -9
  209. package/lib/workspace/kvworkspace.module.d.ts +14 -14
  210. package/lib/workspace/workspace.component.d.ts +46 -46
  211. package/package.json +1 -1
  212. package/public-api.d.ts +161 -161
@@ -1,502 +1,564 @@
1
- import { Component, EventEmitter, Input, Output, HostListener } from '@angular/core';
2
- import { FormControl } from '@angular/forms';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "../../public-api";
6
- import * as i3 from "primeng/api";
7
- import * as i4 from "primeng/autofocus";
8
- import * as i5 from "primeng/button";
9
- import * as i6 from "primeng/tooltip";
10
- import * as i7 from "primeng/dropdown";
11
- import * as i8 from "primeng/inputtext";
12
- import * as i9 from "primeng/menu";
13
- import * as i10 from "primeng/panel";
14
- import * as i11 from "primeng/ripple";
15
- import * as i12 from "primeng/table";
16
- import * as i13 from "primeng/toast";
17
- import * as i14 from "@angular/forms";
18
- import * as i15 from "../inputs/input-calendar/input-calendar.component";
19
- import * as i16 from "../inputs/input-mask/input-mask.component";
20
- import * as i17 from "../inputs/input-number/input-number.component";
21
- import * as i18 from "../inputs/input-text/input-text.component";
22
- import * as i19 from "../inputs/switch/switch.component";
23
- export class TableEditComponent {
24
- set setConfig(value) {
25
- this.config = {
26
- enableCation: value.enableCation || true,
27
- enableSelect: value.enableSelect || false,
28
- enableFilter: value.enableFilter || true,
29
- ...value,
30
- };
31
- // if (this.config.enableFilter) {
32
- // this.config.columns.forEach((col) => {
33
- // this.globalFilterFields.push(col.field);
34
- // });
35
- // }
36
- }
37
- constructor(datePipe, decimalPipe, codigoFipePipe, cpfCnpjPipe, telefonePipe, notificationService) {
38
- this.datePipe = datePipe;
39
- this.decimalPipe = decimalPipe;
40
- this.codigoFipePipe = codigoFipePipe;
41
- this.cpfCnpjPipe = cpfCnpjPipe;
42
- this.telefonePipe = telefonePipe;
43
- this.notificationService = notificationService;
44
- this.globalFilterFields = [];
45
- this.collapsed = false;
46
- this.editMode = 'cell';
47
- this.selectedItems = [];
48
- this.paginator = true;
49
- this.rows = 5;
50
- this.pageLinksOptions = 1;
51
- this.showFirstLastIcon = false;
52
- this.applyStyle = (rowData, col) => '';
53
- this.acoesLinhaTabela = true;
54
- this.filterColumnsBtn = false;
55
- this.filtrosAvancados = false;
56
- this.scrollHeight = '';
57
- this.isTableScrollable = false;
58
- this.rowTrackBy = (index, item) => item;
59
- this.responsiveLayout = true;
60
- this.espacamentoPai = '2px';
61
- this.espacamentoLateral = true;
62
- this.rightCollapse = false;
63
- this.onFilter = new EventEmitter();
64
- this.selectedSize = '';
65
- this.menuItems = [];
66
- this.imgDefault = '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';
67
- this.isExpanded = false;
68
- this.clonedDataSource = {};
69
- /** Emite evento de salvamento da linha */
70
- this.onRowSave = new EventEmitter();
71
- this.onActiveItem = new EventEmitter();
72
- this.onActiveItemLote = new EventEmitter();
73
- this.onPaginate = new EventEmitter();
74
- this.onSelectionChange = new EventEmitter();
75
- this.doubleClickEvent = new EventEmitter();
76
- this.filterField = new EventEmitter();
77
- this.onSwitchTableChange = new EventEmitter();
78
- this.isRowSelectable = this.isRowSelectable.bind(this);
79
- }
80
- ngOnInit() {
81
- this.tamanhoTela = window.innerWidth;
82
- }
83
- isRowSelectable(event) {
84
- return !this.isDisabledCheckbox(event.data);
85
- }
86
- ngOnChanges(changes) {
87
- //Called before any other lifecycle hook. Use it to inject dependencies, but avoid any serious work here.
88
- //Add '${implements OnChanges}' to the class.
89
- if (changes['setConfig'] && this.config) {
90
- this.config.columns.forEach((e) => {
91
- if (e.fieldControlType == 'dropdown') {
92
- this.listarDrop(e.fieldDropDownControl?.fieldControlDropdownService, e);
93
- }
94
- });
95
- }
96
- }
97
- onRowEditInit(rowData) {
98
- this.clonedDataSource[rowData.id] = { ...rowData };
99
- }
100
- onRowEditSave(rowData, index) {
101
- let errors = [];
102
- //Validação do formulario fake
103
- this.config.columns.forEach((col) => {
104
- if (col.required ?? true) {
105
- if (!rowData[col.field])
106
- this.notificationService.toastWarn(`O campo ${col.header} e obrigatório! `);
107
- }
108
- if (col.validator) {
109
- const tempFormControl = new FormControl(rowData[col.field], col.validator);
110
- tempFormControl.markAllAsTouched();
111
- tempFormControl.valid;
112
- if (tempFormControl.invalid) {
113
- this.notificationService.toastWarn(`Erro ao validar dados do campo: ${col.header}! `);
114
- errors.push({ erro: "Campo invalido", campo: rowData[col.field] });
115
- }
116
- }
117
- });
118
- if (errors.length == 0) {
119
- this.onRowSave.emit(rowData);
120
- delete this.clonedDataSource[rowData.id];
121
- }
122
- else {
123
- this.notificationService.toastWarn(`Erro de validação de dados! `);
124
- // this.onRowEditCancel(rowData, index)
125
- // this.onRowEditInit(rowData)
126
- this.dataSource[index] = this.clonedDataSource[rowData.id];
127
- delete this.clonedDataSource[rowData.id];
128
- }
129
- }
130
- onRowEditCancel(product, index) {
131
- this.dataSource[index] = this.clonedDataSource[product.id];
132
- delete this.clonedDataSource[product.id];
133
- }
134
- async listarDrop(service, col, indtodos) {
135
- const column = this.config.columns?.indexOf(col);
136
- if (!col.fieldDropDownControl.fieldControlDropdownSource)
137
- await service.Listar(indtodos || '').subscribe({
138
- next: (data) => {
139
- if (column) {
140
- if (this.config && this.config.columns && column !== undefined) {
141
- // @ts-ignore
142
- this.config.columns[column].fieldDropDownControl.fieldControlDropdownSource = data;
143
- }
144
- return this.config.columns[column].fieldDropDownControl?.fieldControlDropdownSource;
145
- }
146
- }
147
- });
148
- else
149
- return this.config.columns[column].fieldDropDownControl?.fieldControlDropdownSource;
150
- }
151
- retornaDescricaoDrop(rowData, col) {
152
- const data = col.fieldDropDownControl?.fieldControlDropdownSource;
153
- const idobjeto = col.fieldDropDownControl?.idobjeto;
154
- const descricaoobjeto = col.fieldDropDownControl?.descricaoobjeto;
155
- // @ts-ignore
156
- const valorAtual = rowData[col.field];
157
- if (data && idobjeto && descricaoobjeto)
158
- return data?.find((item) => item[idobjeto] == valorAtual)[descricaoobjeto];
159
- else
160
- return 'Carregando';
161
- }
162
- onGlobalFilter(table, event) {
163
- this.onFilter.emit(event.target.value);
164
- table.filterGlobal(event.target.value, 'contains');
165
- }
166
- onWindowResize() {
167
- this.adjustTableSize();
168
- this.tamanhoTela = window.innerWidth;
169
- }
170
- adjustTableSize() {
171
- if (this.tableSize < 800) {
172
- this.selectedSize = 'p-datatable-sm';
173
- }
174
- else {
175
- this.selectedSize = '';
176
- }
177
- }
178
- paginate($event) {
179
- if ($event) {
180
- let paginaInicial = ($event?.first > 0 ? $event.first / $event.rows : $event.first) + 1;
181
- let termoPesquisa = '';
182
- let ordenacao = '';
183
- if ($event.globalFilter)
184
- termoPesquisa = $event.globalFilter;
185
- if ($event.sortField)
186
- ordenacao = `${$event.sortField} ${$event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
187
- const objeto = {
188
- paginaInicial: paginaInicial,
189
- tamanhoPagina: $event.rows,
190
- termoPesquisa: termoPesquisa,
191
- ordenacao: ordenacao,
192
- };
193
- this.onPaginate.emit(objeto);
194
- }
195
- }
196
- isBooleanField(rowData, col) {
197
- return col.fieldType == 'boolean';
198
- }
199
- isChipField(col) {
200
- return col.fieldType == 'chip';
201
- }
202
- isImageField(col) {
203
- let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
204
- return retorno;
205
- }
206
- returnRowClass(rowData, col) {
207
- let value = rowData[col.field];
208
- let rowClass;
209
- this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
210
- if (col.expiredDate == true) {
211
- new Date(value) < new Date()
212
- ? (rowClass = rowClass + ' text-red-400 font-semibold')
213
- : '';
214
- }
215
- return rowClass;
216
- }
217
- transformValue(rowData, col) {
218
- let value = rowData[col.field];
219
- if (value != null) {
220
- if (!col.pipe) {
221
- return value;
222
- }
223
- switch (col.pipe) {
224
- case 'date':
225
- return this.datePipe.transform(value, 'dd/MM/yyyy');
226
- case 'decimal':
227
- return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
228
- case 'cpfcnpj':
229
- return this.cpfCnpjPipe.transform(value);
230
- case 'telefone':
231
- return this.telefonePipe.transform(value);
232
- case 'codigofipe':
233
- return this.codigoFipePipe.transform(value);
234
- case 'money':
235
- return this.formatarValor(value);
236
- case 'percentage':
237
- return `${value} %`;
238
- default:
239
- break;
240
- }
241
- }
242
- }
243
- alignColunasHeader(col) {
244
- if (col.align) {
245
- if (col.align == 'right')
246
- return 'justify-content: end';
247
- else
248
- return '';
249
- }
250
- else
251
- return '';
252
- }
253
- centralizarColunas(col) {
254
- if (col.centralize) {
255
- return 'text-align: center; ';
256
- }
257
- else
258
- return '';
259
- }
260
- alignColunas(col) {
261
- if (col.align) {
262
- return `text-align: ${col.align}`;
263
- }
264
- else
265
- return '';
266
- }
267
- returnClassIcon(rowData, col) {
268
- return this.retornarRow(rowData, col, 'iconrow');
269
- }
270
- returnTooltipIcon(rowData, col) {
271
- return this.retornarRow(rowData, col, 'tooltipiconrow');
272
- }
273
- returnClassChip(rowData, col) {
274
- return `chip-style w-auto border-round-2xl p-2 text-${this.retornarRow(rowData, col, 'stylechip')} border-${this.retornarRow(rowData, col, 'stylechip')}`;
275
- }
276
- retornarRow(rowData, col, field) {
277
- const _rowaction = this.config.rows ? this.config.rows[col.field] : null;
278
- const _field = _rowaction && _rowaction[field]
279
- ? _rowaction[field].constructor === Function
280
- ? _rowaction[field].apply(this, [rowData])
281
- : _rowaction[field]
282
- : null;
283
- return _field;
284
- }
285
- selectionChange(value = []) {
286
- this.onSelectionChange.emit(value);
287
- }
288
- formatarValor(valor) {
289
- const formatter = new Intl.NumberFormat('pt-BR', {
290
- style: 'currency',
291
- currency: 'BRL',
292
- });
293
- return formatter.format(valor);
294
- }
295
- loadImage(rowData, col) {
296
- /*
297
- Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
298
- */
299
- let retorno = `data:image/jpg;base64, ${this.imgDefault}`;
300
- if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
301
- if (rowData[col.field].includes('http'))
302
- retorno = rowData[col.field];
303
- else
304
- retorno = `data:image/jpg;base64, ${rowData[col.field]}`;
305
- }
306
- return retorno;
307
- }
308
- getCustomTemplate(templatename) {
309
- return this._templates[templatename];
310
- }
311
- exibirCampo(field, rowData) {
312
- let visible = field.visible ? field.visible(rowData) : true;
313
- return visible;
314
- }
315
- activeItem(rowData) {
316
- this.onActiveItem.emit({ rowData: rowData });
317
- }
318
- activeItemLote(rowData) {
319
- this.onActiveItemLote.emit(rowData);
320
- }
321
- retornarCampo(action, rowData, field) {
322
- const _function = action.dynamicfields
323
- ? action.dynamicfields[field]
324
- : null;
325
- const _field = _function
326
- ? _function.apply(action, [rowData])
327
- : action[field];
328
- return _field;
329
- }
330
- callDisabled(action, data) {
331
- if (action?.disabled) {
332
- return action.disabled(data);
333
- }
334
- return false;
335
- }
336
- criarMenusModal(data) {
337
- if (this.config.actions && data) {
338
- const items = this.config.actions.map((action) => {
339
- const icon = this.retornarCampo(action, data, 'icon');
340
- const tooltip = this.retornarCampo(action, data, 'tooltip');
341
- const label = this.retornarCampo(action, data, 'label');
342
- const command = this.retornarCampo(action, data, 'command');
343
- const visible = action.visible
344
- ? action.visible(data)
345
- : true;
346
- const disabled = action.disabled
347
- ? action.disabled(data)
348
- : false;
349
- const menuInsert = {
350
- label,
351
- icon,
352
- tooltip,
353
- command,
354
- disabled,
355
- visible,
356
- };
357
- let item = this.menuItems.filter((x) => x.command == menuInsert.command);
358
- if (item.length == 0)
359
- this.menuItems.push(menuInsert);
360
- else {
361
- if (menuInsert.label != item[0].label) {
362
- let index = this.menuItems.indexOf(item[0]);
363
- this.menuItems.splice(index, 1);
364
- }
365
- if (menuInsert.visible != item[0].visible) {
366
- let index = this.menuItems.indexOf(item[0]);
367
- this.menuItems.splice(index, 1);
368
- }
369
- if (menuInsert.disabled != item[0].disabled) {
370
- let index = this.menuItems.indexOf(item[0]);
371
- this.menuItems.splice(index, 1);
372
- }
373
- }
374
- });
375
- }
376
- }
377
- validaLinhaAcaoVazia(rowData) {
378
- var algumItemVisivel = this.config.actions.some((a) => {
379
- if (typeof a.visible === 'function') {
380
- return a.visible(rowData) === true;
381
- }
382
- else {
383
- return true; // Retorna true se a.visible(rowData) não existir
384
- }
385
- });
386
- return !algumItemVisivel;
387
- }
388
- doubleClick(e, rowData) {
389
- let eventDoubleClick = { event: e, rowData: rowData };
390
- let array = [];
391
- e.target.classList.forEach((x) => array.push(x));
392
- //if (array.find((x: any) => x == 'ng-star-inserted') != undefined)
393
- this.doubleClickEvent.emit(eventDoubleClick);
394
- }
395
- isDisabledCheckbox(rowData) {
396
- return this.config.disableControlCheckboxFunction
397
- ? this.config.disableControlCheckboxFunction(rowData)
398
- : false;
399
- }
400
- returnTooltipRow(rowData, col) {
401
- return this.retornarRow(rowData, col, 'tooltiprow');
402
- }
403
- isSwitchField(col) {
404
- let retorno = col.fieldType && col.fieldType === 'switch' ? true : false;
405
- return retorno;
406
- }
407
- onSwitchChange(estado, rowData, col) {
408
- this.onSwitchTableChange.emit({
409
- estado: estado,
410
- rowData: rowData,
411
- col: col
412
- });
413
- }
414
- isButtonDisable(action, rowData, commandEvent) {
415
- if (this.callDisabled(action, rowData)) {
416
- return '';
417
- }
418
- else
419
- return this.activeItem(rowData), action?.command(commandEvent);
420
- }
421
- isDisableEditRowFunction(rowData) {
422
- return this.config.disableEditRowFunction ? this.config.disableEditRowFunction(rowData) : false;
423
- }
424
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableEditComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CodigoFipePipe }, { token: i2.CpfCnpjPipe }, { token: i2.TelefonePipe }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
425
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableEditComponent, selector: "kv-table-edit", inputs: { setConfig: ["config", "setConfig"], dataSource: "dataSource", editMode: "editMode", selectedItems: "selectedItems", totalRecords: "totalRecords", paginator: "paginator", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", pageLinksOptions: "pageLinksOptions", showFirstLastIcon: "showFirstLastIcon", tableSize: "tableSize", applyStyle: "applyStyle", acoesLinhaTabela: "acoesLinhaTabela", filterColumnsBtn: "filterColumnsBtn", filtrosAvancados: "filtrosAvancados", scrollHeight: "scrollHeight", isTableScrollable: "isTableScrollable", rowTrackBy: "rowTrackBy", responsiveLayout: "responsiveLayout", espacamentoPai: "espacamentoPai", espacamentoLateral: "espacamentoLateral", tamanhoTotalTabela: "tamanhoTotalTabela", rightCollapse: "rightCollapse", _templates: ["templates", "_templates"] }, outputs: { onFilter: "onFilter", onRowSave: "onRowSave", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", onSwitchTableChange: "onSwitchTableChange" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, usesOnChanges: true, ngImport: i0, template: "\r\n<div class=\"card\" >\r\n <p-toast></p-toast>\r\n\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n <i\r\n *ngIf=\"!collapsed\"\r\n class=\"pi pi-filter\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n <i\r\n *ngIf=\"collapsed\"\r\n class=\"pi pi-minus\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n <p-table\r\n #te\r\n *ngIf=\"config\"\r\n [value]=\"dataSource\"\r\n dataKey=\"id\"\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n [columns]=\"config.columns\"\r\n [editMode]=\"'row'\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"400px\"\r\n appendTo=\"body\"\r\n [styleClass]=\"'p-datatable-sm'\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy \"\r\n [resizableColumns]=\"true\"\r\n >\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 \">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"p-input-icon-left\"\r\n >\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n [style]=\"{ 'margin-right': '7px' }\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"\r\n (selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)\r\n \"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"\r\n action?.command(commandEvent); activeItemLote(selectedItems)\r\n \"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"\r\n retornarCampo(action, selectedItems, 'btnColor')\r\n \"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"header\"\r\n let-columns\r\n >\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.min-width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n <th id=\"th-edit\" style=\"width: 20px\">Editar</th>\r\n </tr>\r\n </ng-template>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n <ng-template pTemplate=\"body\" let-rowData let-editing=\"editing\" let-ri=\"rowIndex\" let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\" let-rowspan=\"rowspan\">\r\n <tr [pEditableRow]=\"rowData\" [pEditableRowDisabled]=\"false\" >\r\n\r\n\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n\r\n\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\r\n <td *ngIf=\"col.fieldControlType\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col) \" [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor [ngClass]=\"{'switch': col.fieldControlType == 'switch'}\">\r\n <!-- Controle de edi\u00E7\u00E3o do campo -->\r\n <ng-template pTemplate=\"input\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <kv-input-text [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-text>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <kv-input-number [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-number>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <kv-input-mask [mask]=\"col.mask\" [required]=\"col.required ?? true\" [(ngModel)]=\"rowData[col.field]\"></kv-input-mask>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch [(ngModel)]=\"rowData[col.field]\" ></kv-switch>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div style=\"width: 300px\">\r\n <kv-input-calendar [(ngModel)]=\"rowData[col.field]\"></kv-input-calendar>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <div style=\"width: 300px\" >\r\n <p-dropdown\r\n appendTo=\"body\"\r\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\r\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\r\n [options]=\"col.fieldDropDownControl.fieldControlDropdownSource\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Valor atual do campo -->\r\n <ng-template pTemplate=\"output\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container *ngIf=\"rowData[col.field]\">\r\n {{\r\n retornaDescricaoDrop(\r\n rowData,\r\n col\r\n )\r\n }}\r\n <!-- {{rowData[col.field]}} -->\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch [(ngModel)]=\"rowData[col.field]\" [disabled]=\"true\"></kv-switch>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n {{ rowData[col.field] | date }}\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ rowData[col.field] }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <td *ngIf=\"rowgroup && !col.template && !col.fieldControlType\" [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">{{\r\n transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"!rowgroup && !col.grouped && !col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\">\r\n </ng-container>\r\n </td>\r\n\r\n </ng-container>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de a\u00E7\u00E3o -->\r\n <td class=\"td-tools\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && !editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div\r\n *ngFor=\"let action of config.actions\"\r\n class=\"mr-1\"\r\n >\r\n <!-- <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span\r\n >\r\n </button> -->\r\n\r\n <span\r\n class=\"material-symbols-outlined {{\r\n callDisabled(action, rowData)\r\n ? 'text-gray-400 cursor-auto'\r\n : 'cursor-pointer'\r\n }}\"\r\n style=\"font-size: 20px\"\r\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n >\r\n {{ retornarCampo(action, rowData, \"icon\") }}\r\n </span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <!-- <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n > -->\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n\r\n <td\r\n class=\"td-tools\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de edi\u00E7\u00E3o -->\r\n <td class=\"td-edit\" >\r\n <div class=\"flex align-items-center justify-content-center gap-2\">\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"!editing\" pButton pRipple type=\"button\" pInitEditableRow icon=\"pi pi-pencil\"\r\n (click)=\"onRowEditInit(rowData)\" class=\"p-button-rounded p-button-text\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pSaveEditableRow icon=\"pi pi-check\"\r\n (click)=\"onRowEditSave(rowData, ri)\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pCancelEditableRow icon=\"pi pi-times\"\r\n (click)=\"onRowEditCancel(rowData, ri)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#eaeaea}.td-tools{position:sticky;right:52px;border-right:3px solid #fff!important;background-color:#eaeaea}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border:1px solid #dee2e6;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-inputtext{font-size:.75rem}:host ::ng-deep .p-datatable-table{font-size:.75rem}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important}:host ::ng-deep .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-inputswitch{height:21px}:host ::ng-deep .p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep .inputs{height:15px!important}:host ::ng-deep .p-dropdown .p-dropdown-label{display:flex;align-items:center;justify-content:center}:host ::ng-deep .p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep .p-inputswitch .p-inputswitch-slider{height:21px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i8.InputText, selector: "[pInputText]" }, { kind: "component", type: i9.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i10.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "directive", type: i11.Ripple, selector: "[pRipple]" }, { kind: "component", type: i12.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i12.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i12.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i12.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i12.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i12.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i12.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i12.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i12.SaveEditableRow, selector: "[pSaveEditableRow]" }, { kind: "directive", type: i12.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i13.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i14.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i15.InputCalendarComponent, selector: "kv-input-calendar", inputs: ["isYear", "isMonthYear", "minDate", "maxDate", "showButtonBar", "showIcon", "showTime", "selectionMode"], outputs: ["onSelectionChange", "onSelectionValue"] }, { kind: "component", type: i16.InputMaskComponent, selector: "kv-input-mask", inputs: ["mask"], outputs: ["onComplete"] }, { kind: "component", type: i17.InputNumberComponent, selector: "kv-input-number", inputs: ["mode", "digits", "min", "max", "suffix"] }, { kind: "component", type: i18.InputTextComponent, selector: "kv-input-text" }, { kind: "component", type: i19.SwitchComponent, selector: "kv-switch", inputs: ["switchValue", "readonly"], outputs: ["onSwitchChange"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] }); }
426
- }
427
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableEditComponent, decorators: [{
428
- type: Component,
429
- args: [{ selector: 'kv-table-edit', template: "\r\n<div class=\"card\" >\r\n <p-toast></p-toast>\r\n\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n <i\r\n *ngIf=\"!collapsed\"\r\n class=\"pi pi-filter\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n <i\r\n *ngIf=\"collapsed\"\r\n class=\"pi pi-minus\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n <p-table\r\n #te\r\n *ngIf=\"config\"\r\n [value]=\"dataSource\"\r\n dataKey=\"id\"\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n [columns]=\"config.columns\"\r\n [editMode]=\"'row'\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"400px\"\r\n appendTo=\"body\"\r\n [styleClass]=\"'p-datatable-sm'\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy \"\r\n [resizableColumns]=\"true\"\r\n >\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 \">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"p-input-icon-left\"\r\n >\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n [style]=\"{ 'margin-right': '7px' }\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"\r\n (selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)\r\n \"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"\r\n action?.command(commandEvent); activeItemLote(selectedItems)\r\n \"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"\r\n retornarCampo(action, selectedItems, 'btnColor')\r\n \"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"header\"\r\n let-columns\r\n >\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.min-width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n <th id=\"th-edit\" style=\"width: 20px\">Editar</th>\r\n </tr>\r\n </ng-template>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n <ng-template pTemplate=\"body\" let-rowData let-editing=\"editing\" let-ri=\"rowIndex\" let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\" let-rowspan=\"rowspan\">\r\n <tr [pEditableRow]=\"rowData\" [pEditableRowDisabled]=\"false\" >\r\n\r\n\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n\r\n\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\r\n <td *ngIf=\"col.fieldControlType\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col) \" [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor [ngClass]=\"{'switch': col.fieldControlType == 'switch'}\">\r\n <!-- Controle de edi\u00E7\u00E3o do campo -->\r\n <ng-template pTemplate=\"input\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <kv-input-text [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-text>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <kv-input-number [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-number>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <kv-input-mask [mask]=\"col.mask\" [required]=\"col.required ?? true\" [(ngModel)]=\"rowData[col.field]\"></kv-input-mask>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch [(ngModel)]=\"rowData[col.field]\" ></kv-switch>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div style=\"width: 300px\">\r\n <kv-input-calendar [(ngModel)]=\"rowData[col.field]\"></kv-input-calendar>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <div style=\"width: 300px\" >\r\n <p-dropdown\r\n appendTo=\"body\"\r\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\r\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\r\n [options]=\"col.fieldDropDownControl.fieldControlDropdownSource\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Valor atual do campo -->\r\n <ng-template pTemplate=\"output\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container *ngIf=\"rowData[col.field]\">\r\n {{\r\n retornaDescricaoDrop(\r\n rowData,\r\n col\r\n )\r\n }}\r\n <!-- {{rowData[col.field]}} -->\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch [(ngModel)]=\"rowData[col.field]\" [disabled]=\"true\"></kv-switch>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n {{ rowData[col.field] | date }}\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ rowData[col.field] }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <td *ngIf=\"rowgroup && !col.template && !col.fieldControlType\" [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">{{\r\n transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"!rowgroup && !col.grouped && !col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\">\r\n </ng-container>\r\n </td>\r\n\r\n </ng-container>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de a\u00E7\u00E3o -->\r\n <td class=\"td-tools\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && !editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div\r\n *ngFor=\"let action of config.actions\"\r\n class=\"mr-1\"\r\n >\r\n <!-- <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span\r\n >\r\n </button> -->\r\n\r\n <span\r\n class=\"material-symbols-outlined {{\r\n callDisabled(action, rowData)\r\n ? 'text-gray-400 cursor-auto'\r\n : 'cursor-pointer'\r\n }}\"\r\n style=\"font-size: 20px\"\r\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n >\r\n {{ retornarCampo(action, rowData, \"icon\") }}\r\n </span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <!-- <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n > -->\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n\r\n <td\r\n class=\"td-tools\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de edi\u00E7\u00E3o -->\r\n <td class=\"td-edit\" >\r\n <div class=\"flex align-items-center justify-content-center gap-2\">\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"!editing\" pButton pRipple type=\"button\" pInitEditableRow icon=\"pi pi-pencil\"\r\n (click)=\"onRowEditInit(rowData)\" class=\"p-button-rounded p-button-text\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pSaveEditableRow icon=\"pi pi-check\"\r\n (click)=\"onRowEditSave(rowData, ri)\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pCancelEditableRow icon=\"pi pi-times\"\r\n (click)=\"onRowEditCancel(rowData, ri)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#eaeaea}.td-tools{position:sticky;right:52px;border-right:3px solid #fff!important;background-color:#eaeaea}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border:1px solid #dee2e6;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-inputtext{font-size:.75rem}:host ::ng-deep .p-datatable-table{font-size:.75rem}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important}:host ::ng-deep .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-inputswitch{height:21px}:host ::ng-deep .p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep .inputs{height:15px!important}:host ::ng-deep .p-dropdown .p-dropdown-label{display:flex;align-items:center;justify-content:center}:host ::ng-deep .p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep .p-inputswitch .p-inputswitch-slider{height:21px!important}\n"] }]
430
- }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CodigoFipePipe }, { type: i2.CpfCnpjPipe }, { type: i2.TelefonePipe }, { type: i2.NotificationService }]; }, propDecorators: { setConfig: [{
431
- type: Input,
432
- args: ['config']
433
- }], dataSource: [{
434
- type: Input
435
- }], editMode: [{
436
- type: Input
437
- }], selectedItems: [{
438
- type: Input
439
- }], totalRecords: [{
440
- type: Input
441
- }], paginator: [{
442
- type: Input
443
- }], rowsPerPageOptions: [{
444
- type: Input
445
- }], rows: [{
446
- type: Input
447
- }], pageLinksOptions: [{
448
- type: Input
449
- }], showFirstLastIcon: [{
450
- type: Input
451
- }], tableSize: [{
452
- type: Input
453
- }], applyStyle: [{
454
- type: Input
455
- }], acoesLinhaTabela: [{
456
- type: Input
457
- }], filterColumnsBtn: [{
458
- type: Input
459
- }], filtrosAvancados: [{
460
- type: Input
461
- }], scrollHeight: [{
462
- type: Input
463
- }], isTableScrollable: [{
464
- type: Input
465
- }], rowTrackBy: [{
466
- type: Input
467
- }], responsiveLayout: [{
468
- type: Input
469
- }], espacamentoPai: [{
470
- type: Input
471
- }], espacamentoLateral: [{
472
- type: Input
473
- }], tamanhoTotalTabela: [{
474
- type: Input
475
- }], rightCollapse: [{
476
- type: Input
477
- }], onFilter: [{
478
- type: Output
479
- }], _templates: [{
480
- type: Input,
481
- args: ['templates']
482
- }], onRowSave: [{
483
- type: Output
484
- }], onActiveItem: [{
485
- type: Output
486
- }], onActiveItemLote: [{
487
- type: Output
488
- }], onPaginate: [{
489
- type: Output
490
- }], onSelectionChange: [{
491
- type: Output
492
- }], doubleClickEvent: [{
493
- type: Output
494
- }], filterField: [{
495
- type: Output
496
- }], onSwitchTableChange: [{
497
- type: Output
498
- }], onWindowResize: [{
499
- type: HostListener,
500
- args: ['window:resize', ['$event']]
501
- }] } });
502
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvdGFibGUtZWRpdC90YWJsZS1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS1lZGl0L3RhYmxlLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFlBQVksRUFBZSxNQUFNLGVBQWUsQ0FBQztBQU9wSSxPQUFPLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8sa0JBQWtCO0lBUzdCLElBQXFCLFNBQVMsQ0FBQyxLQUFrQjtRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTtZQUN4QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLO1lBQ3pDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7WUFDeEMsR0FBRyxLQUFLO1NBQ1QsQ0FBQztRQUVGLGtDQUFrQztRQUNsQywyQ0FBMkM7UUFDM0MsK0NBQStDO1FBQy9DLFFBQVE7UUFDUixJQUFJO0lBQ04sQ0FBQztJQXdERCxZQUNtQixRQUFrQixFQUNsQixXQUF3QixFQUN4QixjQUE4QixFQUM5QixXQUF3QixFQUN4QixZQUEwQixFQUMxQixtQkFBd0M7UUFMeEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFD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WUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFFYSxVQUFVO3NCQUE3QixLQUFLO3VCQUFDLFdBQVc7Z0JBb0JSLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQW9IUCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBIb3N0TGlzdGVuZXIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtQ29tbWFuZEV2ZW50LCBTZWxlY3RJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBDb2RpZ29GaXBlUGlwZSwgQ3BmQ25walBpcGUsIEt2TWVudUl0ZW0sIE5vdGlmaWNhdGlvblNlcnZpY2UsIFRhYmxlQ29uZmlnLCBUYWJsZUNvbmZpZ0NvbHVtbiwgVGFibGVQYWdpbmF0ZSwgVGVsZWZvbmVQaXBlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCBUYWJsZUVkaXRDb25maWcgZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGVkaXQuY29uZmlnJztcclxuaW1wb3J0IHsgVGFibGVFZGl0Q29uZmlnQ29sdW1uIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGVlZGl0LmNvbmZpZy5jb2x1bW4nO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LXRhYmxlLWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1lZGl0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1lZGl0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2Vze1xyXG5cclxuXHJcbiAgY29uZmlnITogVGFibGVFZGl0Q29uZmlnO1xyXG4gIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgY29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICBASW5wdXQoJ2NvbmZpZycpIHNldCBzZXRDb25maWcodmFsdWU6IFRhYmxlQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IHtcclxuICAgICAgZW5hYmxlQ2F0aW9uOiB2YWx1ZS5lbmFibGVDYXRpb24gfHwgdHJ1ZSxcclxuICAgICAgZW5hYmxlU2VsZWN0OiB2YWx1ZS5lbmFibGVTZWxlY3QgfHwgZmFsc2UsXHJcbiAgICAgIGVuYWJsZUZpbHRlcjogdmFsdWUuZW5hYmxlRmlsdGVyIHx8IHRydWUsXHJcbiAgICAgIC4uLnZhbHVlLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5jb25maWcuZW5hYmxlRmlsdGVyKSB7XHJcbiAgICAvLyAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMucHVzaChjb2wuZmllbGQpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2UhOiBhbnlbXTtcclxuICBASW5wdXQoKSBlZGl0TW9kZTogJ3JvdycgfCAnY2VsbCcgPSAnY2VsbCc7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHMhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgcGFnaW5hdG9yOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByb3dzUGVyUGFnZU9wdGlvbnMhOiBudW1iZXJbXTtcclxuICBASW5wdXQoKSByb3dzOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgpIHBhZ2VMaW5rc09wdGlvbnM6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEljb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YWJsZVNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYXBwbHlTdHlsZTogRnVuY3Rpb24gPSAocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSA9PiAnJztcclxuICBASW5wdXQoKSBhY29lc0xpbmhhVGFiZWxhOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZmlsdHJvc0F2YW5jYWRvczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaXNUYWJsZVNjcm9sbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSByb3dUcmFja0J5OiBGdW5jdGlvbiA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW07XHJcbiAgQElucHV0KCkgcmVzcG9uc2l2ZUxheW91dDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZXNwYWNhbWVudG9QYWk6IHN0cmluZyA9ICcycHgnO1xyXG4gIEBJbnB1dCgpIGVzcGFjYW1lbnRvTGF0ZXJhbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdGFtYW5ob1RvdGFsVGFiZWxhITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHJpZ2h0Q29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgb25GaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBASW5wdXQoJ3RlbXBsYXRlcycpIF90ZW1wbGF0ZXMhOiBhbnk7XHJcbiAgdGFtYW5ob1RlbGEhOiBudW1iZXI7XHJcbiAgc2VsZWN0ZWRTaXplOiBzdHJpbmcgPSAnJztcclxuICBzZWxlY3RlSWVtcyE6IGFueVtdO1xyXG4gIG1lbnVJdGVtczogS3ZNZW51SXRlbVtdID0gW107XHJcbiAgaW1nRGVmYXVsdDogc3RyaW5nID1cclxuICAgICcvOWovNEFBUVNrWkpSZ0FCQVFJQWRnQjJBQUQvNFFCaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFNQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQjJBQUFBQVFBQUFIWUFBQUFCLzlzQVF3QURBZ0lDQWdJREFnSUNBd01EQXdRR0JBUUVCQVFJQmdZRkJna0lDZ29KQ0FrSkNnd1BEQW9MRGdzSkNRMFJEUTRQRUJBUkVBb01FaE1TRUJNUEVCQVEvOXNBUXdFREF3TUVBd1FJQkFRSUVBc0pDeEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUS84QUFFUWdBa0FDUUF3RVJBQUlSQVFNUkFmL0VBQjBBQVFBQkJBTUJBQUFBQUFBQUFBQUFBQUFHQVFJSENBTUVDUVgveEFCQkVBQUNBUVFBQlFJQ0NBUURCQXNBQUFBQkFnTUFCQVVSQmdjU0lURVRRUWhSQ1JRVkdTSlZsZEV5WVlHUlFsSmlGaU0zT0ZOamNYTjFkcEtUc2JPMC84UUFHZ0VCQUFJREFRQUFBQUFBQUFBQUFBQUFBQUVGQXdRR0F2L0VBRElSQUFJQUJBTUZDQUVGQVFFQkFBQUFBQUFCQWdNRUVTRXhVUVVTUVpId0V4VXlZWEdCb2JIUklqTkN3ZUUwOFNQLzJnQU1Bd0VBQWhFREVRQS9BUEtxZ0ZBS0FVQmRERExjU3BCQkU4a3NqQkVSRkpabUowQUFQSkpxVW5FN0lodFFxN3lKNXc5eWR6MlZpK3M1ZTRYRlJNdTBWMDlTVTcwUnRBUjBqUlBrOVFJMFY5NnM1R3lwa3hYbVBkK1gvbjM1RmJPMnBLbDRRZnFmeHpKOWpPVS9CbU82V2tzWmI2UkpCSXIzVXBPdGEwcFZlbFNPM2dnNzJkN0hhck9YczJuZ3pWL1hwSXE0OXBWTWZHM292emRrbXNNVGlzWDEvWm1NdExQMWRkZm9RTEgxYTNyZlNCdld6L2V0dUNYQkx2dUpLK21CcHh6STVsdDl0MjF4TzNXUThDZ09wZjRuRlpUbyswOFphWG5wYjZQckVDeWRPOWIxMUE2M29mMnJISExnbWVOSitxUGNFeU9YZmNiVjlNQ001UGxQd1prZXBvN0dXeGtlUXlNOXJLUnZlOXFGYnFVTDM4QURXaHJRN1ZxVE5tMDhlU3Q2UC8xRzVCdEtvZzQzOVYrTE1nUEVQSjNQWXFMNnppTGhjckdxN2RFVDA1UnJaT2tKUFVOQWVEMUVuUVgzcXNuN0ttUzF2UzN2ZkQvMzc4aTBrN1VsVEh1eHJkZnh6L3dnYzBNMXZNOXZjUlBGTEV4UjBkU3JLd09pQ0Q0SVB0VlkwNFhabGttb2xkWkZ0UVNLQVVBb0JRQ2dGQVNqZy9sOW1lTFpSS0ZleXNPa3NidVNJbFc3a2FRZHVzN0JCMGREUjJkNkIzYVdobVZPT1VPdjQxTktzcllhVllZeGFkWC9BTitWbXpoN2hIQWNNUkJNVFlJa3BYcGU0ZjhBRksvWWIyeDlqMGc5STB1L1lWME1pbWxVNnRBc2RlSnpzMnBtei8zSXIvWFN5MTFaOW1zNWdLaFRVa1hLNkZCY2FGQ0xqUW9MalFvVGNvVk5CY3BVRW54dUllRWNCeFJDVXkxZ2pTaGVsTGhQd3lwMk90TU81QTZpZWs3WGZ0V0NmU3lxaGZyV092RXp5YWliSWY4QTg0cmVYRHA1WHowWmhQakhsL2wrRVpmVUlhOHNDb0l1NDR5RlU3QTA0NzlCMlJyWjBkalIzc0RuYXFpbVVydThWcitkRG9LU3ZsMUt0RmFHSytWODg4c3I0SzcwK1NMMXBtK0tBVUFvQlFFNTVkY3U1ZUpwbHl1V1I0OFRHM1liS3Rjc0QzVlQ3S0QyTGYwSGZaV3lvYUYxRDM0L0Q5OWNlclZ0ZFhLblhaeS9GOWY3cDFmT01NTVZ2RWx2YnhKSEZHb1JFUlFGVlFOQUFEd0FQYXVpU1VLc3NqblczRTd0NG5JQjg2OUhoc3JRZ3JVQVVBb0JRQ2dGQVVxUVVJb1RjNDVvWXA0bmduaVNTT1JTam82aGxaU05FRUhzUVI3VkRTaVZua2VrM0M3cDRtRGVZbkx1WGhpVnNyaWtlVEZTTjNIY3RiTVQyVmo3cVQ0YitoNzZMYzVYVUxwMzJrdncvWCtlZlQ2T2hybFVMczVuaSsvOTE2dEI2clN5RkFLQWxITC9BSU9sNHV5K3BDcTJGbXlTWFpKTzJVbnRHTkVIYmFJMzdBRStkQTdsRlN1cW1XZVN6L0h1YUZmVnFtbDdxdnZSWHQ1ZWVUV0Y4bm5wYTVzRkRGRkJFa0VFU1J4eHFFUkVVQlZVRFFBQThBRDJycVVrbFpITXR0NHM1UUtrOHRsYWdnVUFvQ2ZjcHVSUE5MbmJrbngvTHZoYTR5RWNEQmJtOWNpSzF0dC85SksybEIxMzZSdGlQQU5ZWjFSTHAxZVl6UElwcHRRN1MwYlA0VDZMYmp1NHRGazRoNXFZS3d1U05tS3pzWnJwQWZsMXNZLy9BSXF1aTJ2QW4rbUZsbERzZU5yOVVTSXJ6QitqYjUyOEsyY3VSNFN5ZUc0dGlpQlkyOXM3VzEyUVBjUnlmZ1AvQUdDVFo5Z2F5U3RxeVkzYUs2TVUzWk02QlhnYVpxdmxzVGxjRGtybkRadkczV1B2N09ReFhGcmRSTkZMRTQ4cXlNQVZQOGpWa21vbGRaRlpGQzRYYUxNNmxTUUtBVUJhUlU1a3BuSE5ERmNSUGIzRVNTUlNLVWRIVU1yS1JvZ2crUWFocE5OTTl3eE9GN3l6TmZlWUhCMHZDT1lJajZUWVhqUEphRUh1cWdqYUhaSjJ1d04rNDBmT3dPV3JhVjBzekR3dkw4ZXgwdEJWcXBsN3I4VUtWL1B6eVN4dGtzdVJGNjB6ZkxvWVpiaVZJSUlua2xrWUlpSXBMTXhPZ0FCNUpOU2s0blpFTnFGWGVSc3B3bmdJdUdlSDdURG9JekpFblZPNkFmN3lWdTdIWUFMRGZZRWpmU0ZIdFhXMDBoVThwUzE3K3ZYd2NoVVRlMm14VE1jWHEvVFYyeXhTd3ZkNXRuMkFLMkRBeTZvSUZBS0F5cDhOWEl6SmZFQnpRc3VDNEpaTFhGd0liM0wzaUFiZ3RFSURkTyszV3hLb3ZudTJ5Q0FhMTZxb1ZOTGNmSGdiTkpUT3BtcURoeFBZbmd6Z3ZoZmw3dzFZOEljSFlhM3htSng4WWpndDRWMEI4MlkrV1ludVdPeVNTU1NhNVdaTWlteE9LTjNaMWt1WERLaFVFQ3NqN2RlRDJLQTF5K01UNFc4Tnp6NE51dUkrSDhkRkR4emhyZHBiQzRqVUsxL0dnMmJXUS80dGpmUVQvQzJ1NEJiZS9RMWpwNDkyTHd2NDh6UXJxTlZNRzlDdjFMNThqeVZkSGpkbzVGS3NwSVpTTkVINUd1bU9XS1VBb0JRRnBIdlVrbytOeGR3OUR4UmdMckV5QlJLNjlkdTdhSFJLUDRUdlIwTjlqb2I2U1I3MXIxVWhWRXB5MzdlcHNVMDNzSnNNelQ2L3YzNDJaclpORE5ielBiM0VUeFN4TVVkSFVxeXNEb2dnK0NEN1Z5VFRoZG1kY21vbGRaRTg1TzhQUlpYUHk1YTVDdEZpbFYxUTZPNVgyRU9pRDJBVmp2WUlZS2FzdGx5Vk1tNzcvajk5ZkpXYlVxSExscVd2NWNmSlcrL3E1bSt1ak9kTHFIa3JVQVVBb0QwaStpNzRWczdUbHJ4ZHhyNlMvVzhsbTF4cGNqdUlyZUJKQUI4Z1d1Vy9zUGxWRHRlTnVaREJvcjljam9OandKUzRvOVg5ZittNjFWQmNDZ0ZBS0E4WS9pMjRWdE9EUGlQNDh3VmhFc1Z2OXAvWGtSUm9JTG1OTGpwQTlnUFcwQjhxNnlpamN5UkRFOVByQTVHdWdVdW9qaFd2M2lZanJaTlVVQW9DbFNDMm9QUmhEbkZ3OUZpcy9GbDdib1dQS3F6c2c3YWxUUWM2QUEwUXluZXlTeFluMnJudHFTRkxtS1l2NWZhL1AzYzZQWmM1ekpXNDg0ZnJoL1pQdVUrTSt6dURMYVJrbFNTK2trdW5XUWExczlLbFJyK0VvaWtlZDczNElxejJiTDNLZFBXNzY5a1ZlMG85K29mbFpmMzlzbVFGYjVvTXVxRHlLQVVBb0QwYitpNjR4czduZ1BqRGdGcFZGM2o4c21XVkNlN1JUd3BFU1BtQTF1Ti9Mckh6cWgydkxhamhqOHJIUWJIbUp3UlFhTzV1N1ZRWEFvQlFDZ1BGejRxT01iUGp6NGh1T3VKY2ZLc3RySmxHdElKRk8xa2p0MFczVndma1JFQ1A1R3VzbzVibHlJWVhwOTRuSTFzeFRLaUtKYS9XQmlxdGsxUlFDZ0ZBV2tWSktJZHpZeG4yandYY3lLa3p5V1VrZDBpeDkvQjZXTERSN0JIYysydGIzb0dxL2FVdHpLZDI0WTljeXcyZE1VdW9WK09IWHVrU1hFV0gyVmlyTEdlcjZ2MU8zamc2K25wNnVoUXU5Yk90NjhicmNsd2RuQW9ORlkwNWtmYVJ1UFYzNW5kSGlzaGpaV29JRkFLQVVCa2JrQnpvemZJWG1aanVQY1JHYmlDTUcyeVZuMWRJdTdOeVBVajM3SHNyS2Zaa1VuWTJEZ3FaQ3FaYmdac1UxUkZUVEZHajJKNWJjek9DK2JYQ2xyeGx3TG1vY2pqcnBSdnBJRWtFbXRtS1ZQS09OOTFQOGlOZ2dubFpzcU9URnVSckU2eVZPZ253NzhEdWlVMWpNZ29EVmo0MHZpenczS1BoZSs1ZThGNVNPNDQ0eTBCZ1BvUHY3SmhjYU16a2Z3eWxUK0JmSUpEbnNBR3NxQ2ljNkpUSTErbGZKVzE5YXBFTGdnZjZuOEhsZDVyb3ptUlFDZ0ZBS0FvM2lwSlIwc3RZREs0cTh4Wm05SVhsdkpCNm5UMWRIV3BYZXRqZXQrTjFqbVFkcEE0TlUxek1rdVBzNDFHbGV6dWR1c2g0UmNQRkR5eXRRQlFDZ0ZBS0FsUEx6bWp6QjVVWnIvYURsNXhWZllTOUlDeUdCd1k1bEIyRmtqWUZKRjM3TUNLeHpaTUU1YnN4WE1zcWRNa1BlbHV4c25oUHBOdWVlUHRGdHN2dzF3amxaRUd2ckQyczhNakg1c0VsQ2YyVVZYeGJKa3Q0Tm9zSWRyemtzVW1SVG1EOUlEOFJQSFZuTGpiTE00N2hhMW1CVnhnN1pvcG1YL3ZwR2VSVC9OQ3ByTEwyYklsdTdWL1V4VGRwMUV4V1R0Nkd1VnpjM0Y1Y1MzZDNQSlBQTTVra2xrWXM3c1Rzc3hQY2tuM05iNlZzRVY3YmVMT09nRkFLQVVBb0NoOFZJUmJROUNnUmNQRkR5eXRRQlFDZ0ZBU2ZnL2xmekg1Z3llbndQd0xuYzRPcnBaN0d3a2xqUS82blVkSy8xSXJISE9seXZIRWtaSmNtWk44RUxabURBL0FKOFQrYlJaWnVCclhGUnYzRFgrVXQxT3Y1cWpzdy9xQldyRnRLbmgvbGYyTnVIWmxURi9HM3VTdUg2TS80aEpVRFNaZmd1RS81WHlVNUkvOEFUQVJXUHZXUm8rdmN5clpNL1ZkZXgxYi9BT2piK0kyelF0YnR3cmZFRCtHM3lqZ24vd0J5TlJVcmFzaDY4aUhzbW9Xbk14OXhSOEczeEw4Skk4MlI1VDVXNmlRYjY4WThWL3NmTUxBenQvY1ZuZ3JxZVBLTCt2c3dSMEZSQm5EeXgrakVPVHhlVHd0N0pqc3hqcnF4dTRUcVNDNWhhS1JEL05XQUlyWlRVU3VqVWNMaGRtZGFwSUZBS0FVQlErS2tJdG9lanFZbS93RHRURldXVDlMMHZybHZIUDBkWFYwOWFodGIwTjYzNTFXT1hIMmtDajFTWjdtUWRuRzRMM3M3Y2p1anhXUXhzclVFQ2dNajhrT1FQTVBuN3hJY0R3UmpsRnZiZExYK1N1ZHJhMlNId1hZQTdZNk9rVUZqbzl0QWtZS2lwbDAwTzlHYkZQVFRLbUxkZzVubzl5YitBdmtqeXdnZ3Z1SXNXdkdtY1FBdmQ1YUlOYkszL1YydXlnSGorUHJiNUVlS29aKzBaMDdDRjdxOHZ5ZEJJMmJKazR4TGVmbitEWTYydGJheXQ0N1N6dDRvSUlsQ1J4UklGUkZIZ0FEc0JXZzIzaXl3U3RnamxxQUtBVUFvQ09jYTh1T0F1WStPT0s0NzRReFdjdHRFS3Q3YkxJMGUvZEhJNmtQODFJTlpKYzJPVTd3T3hqbVNvSnF0R3Jtay9QNzZOdTNqdExuaWJrSGZUZXJHR2tmaDYvbTZ1c2ZLM25idnY1TElUdjhBempzRGIwMjFjZDJmei9KVDFPeVZiZWtjdndhRlpISFpERDVDNXhXV3NwN085czVXZ3VMZWVNcEpGSXAweU1wN2dnZ2dnMWRKcUpYUlNOT0YyZVoxNkVDZ0tIeFVrbzZXV3Z4aXNWZVpRdytxTE8za245UHE2ZXZvVXRyZWpyZXZPcXh6SSt6Z2NlaWI1R1NYQTVrYWdUdGQyNWthNVQ1TVpIZ3Uxalo1bmtzWkpMVjJrTy9CNmxDblovQ0VkQVBHdGE4QVZwN05tT1pUcFBoaDF6TnphTXZzNmgyNDQ5ZTZaTVFhc0N2WmRVRUhaeG1PdTh2a3JURTJFZnFYTjdQSGJ3cHZYVkk3QlZIOXlLaHRRcTdKU2NUc2oyMjVMOHBlSE9Tbkx2RmNCY09XOFlXemlEWGx5RjA5NWRFRDFaM1BrbGo0MzRVS283QVZ5TlJPaXFKamppT3hwNUVOUExVRUpPYXdtWVVBb0JRQ2dGQUtBVUJvVjlKZnlWdzhXTXhYUEhDMmtjRisxMG1KelBwcnI2d3JJeGdtYi9VdlFVSjhrTWc4TFYxc3FvZDNKZnFpazJ2VHF5bkxQSm5uNVYyVVFvQzBtcEpSRHViR1QrenVDN3FOWG1TUzlranRVYU02MXM5VEJqc2ZoS0k0OTk3MXJSTlYrMHBqbDA3dHh3NjVHL3M2V3BsUXI4TWV2ZG9nSEozaUNMRlorWEUzSlZZc3Fxb3JuUTFNbXlnMlNPeERNUEJKWXFLck5sejFMbTdqeWkrK0JaN1ZrT1pMVXlIK1BEeWZ0dzVXdjVHYjY2STU0dXFUeVN6bEwveFY0TS84d1k3L0FQVEhXS2QrMUY2TXl5UDNZZlZIdWJYSEhaaWdGQUtBVUFvQlFDZ0ZBYXkvU0ovOHMrUy84VnNQL3NxdzJaLzBMMFpYYlUvNW42bzhvYTZVNWdvZTFTQzJvUFJoRG5GeEREbGM5RmliYm9hUEZLeU00N2t5dm91TmdrYUhTbzhBaHVvSDJybnRxejFNbUtYRC9IN2Y0KzduUjdMa3VYS2NjV2NYMXcvc2djTTB0dktrOEVyeHl4c0hSMFlobFlIWUlJOEVHcXhOd3U2TEpwUkt6eU5sT0VzL0h4TncvWjVkVEdKSlU2WjBVajhFcTltR2dTVjc5d0QzNlNwOTY2Mm1ucW9sS05lL3IxOEhJVkV2c1owVXJUMXl6WERIMVdGN3JOTSt3RDdWc0dCbmZ3ZVl2ZUhzMWo4L2pXUmJ2R1hVVjVibDE2bEVrYmgxSkh1TmdkcTh4UXFKT0Y4UkRFNFdvbHdOanZ2RlBpWC9BRG5CZnBNZjcxb2QyVStqNWxoM3JVYXJrUHZGUGlYL0FEbkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjhBT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUVQNXFmR0J6cDV5Y0lUY0Q4YjVIRnpZdWVhSzRkYmZIcEUvWEdkcitJZC9OWlpOREprUmI4R1ppblYwNm9nM0k4akNsYlpwbHBQdFVrcEh4ZUx1SVl1RjhCZFpaeWhsUmVpM1J2OGNwN0tOYkd4N25SMzBnMXIxTTlVOHB6SDdldlh3YkZQSzdlYkRMMSt2Njk4TDJOYlpwcGJpVjU1NVhrbGtZdTd1eExNeE95U1Q1Sk5jazI0bmQ1blhKS0ZXUmJVRWtvNWY4WXk4STVjR1RwTmhlTWtkMkNEdFZCT3BCb0U3WFpPdmNFanpvamNvcXAwc3pId3ZQOEFQc2FGZlNLcGw3eXZ2UTN0NStXT0dOcytHdHJtd1VNMFZ4RWx4YnlwSkZJb2RIUmd5c3BHd1FSNUJycVU3cTZPWmFhd1p5QTFPWjVhTHFnZ1VBb0JRQ2dGQUtBVUFvQlFGcE5Ua1NrY2MwMFZ2RTl4Y1NwSEZHcGQzZGdxcW9HeVNUNEFxRzBrMnozREM0bnVyTTE5NWdjWXk4WFpnbVBwRmhaczhkb0FPN0tTTnlIWUIyM1NEcjJHaDUyVHkxYlZPcW1YV1N5L0owdEJTS21sN3o4VVNWL0x5emF3dm1zK1JGNjB6ZkZBS0FuSEx2bUpMd3hLdUt5cnZKaXBHN0h1eld6RTkyVWU2aytWL3FPK3cxbFExenAzMmN6dy9YK2VYVHJhNmhWUXQrWDR2dnJoMWJPVU0wVnhFazhFcVNSU0tIUjBZRldVallJSThnaXVqVFRWMHpuR21uWm81QWZuVW5sb3JVRUZhQVVBb0JRQ2dGQVUzcXBCUW41VUpTT09hYUszaWU0dUpVamlqVXU3dXdDcW9HeVNUNEFGUTJsaXowbGQyUmczbUp6RWw0bWxiRllwM2p4VWJkejNEWExBOW1ZZXlqMlgrcDc2Qzg1WFZ6cUh1UWVINzY2OHVqb2FGVTY3U1B4ZlhYWG5CNnJTeUZBS0FVQW9DVThIOHc4MXduSXNKZDc3SGhDZ3M1WlNGVHVXM0dlL1FlcGlUb2FPenNiMFJ1VXRiTXBuYk9IVDhhRmZWYk9sMUY0b0xReE4zYnRua3NjcjRLeWZDeTRZR2JjQnhaZ09Kb2cySXlNY3NnUU84RGZobGo3S1R0VDNJQllBc05ydndUWFJTYW1WVUs4dCszSHI0T2ZtMDg2VCs1RGJGL2ZsZlBOWHh0bWs4RDY5WnpDVkRHcElzVjZoUVdHeDg2RVdHeDg2Q3c2aFFteFFzYUN4U29KUGtaL2kzaC9obU10bDhqSEZJVUxwQXY0cFpPekVhVWR4c3FRR09sMzVJckJQcVpWT3J6SDdjZXZnelNxZWJQOEEyNGI0cGNNT2RzczN4dGttOERDUEdQTURMOFhTK21TMW5ZQlFCYVJ5a3F4MkR0ejI2enNEV3hvYUdodlpQTzFWYk1xblo0TFQ4Nm5SVXRCTHBrbkZhS0xXM3JsbmJCMmV2d1JldE0zaFFDZ0ZBS0FVQW9DNkdhVzNsU2VDVjQ1WTJEbzZNUXlzRHNFRWVDRFVwdUYzUkRTaVZua1R6aDduRm44VkVMYkxRSmxZbFhTTTcrbktPd0EyNEI2aDJQa0ZpVHNtcktUdFNiTFZvMXZMNTYrZk1xNSt5cGN4M2x2ZDE0cmp5K3JLMWlmNHpteHdYa2VsWkw2V3lrZVQwMVM2aEs3OGFZc3ZVcWp2NUxEV2p2UTcxWnk5cFU4eDJ2YjE2Wld6Tm5WRXRYdGYwNlQrQ1MyR1d4V1ZFaHhlU3Rid1JhOVQwSmxrNk43MXZwSjF2Ui9zYTNJSmtFendOUDBkelRqbHh5N0tOTlgxTzNXUThDZ09wZjVmRTRybyswOG5hV2ZxN0tldk1zZlZyenJxSTM1SDk2eHh6SUpmamFYcXpKQkxqbWVCTitpSTFrK2EvQmVONmxTL2x2WkVsTWJKYXhGdkc5c0dicFJsN2VReDNzYTJPOWFjemFWUExkcjM5T2w4RzFMMmRVVEZlMXZYcHRjaUFjUWM0cy9sWWpiWW1CTVZFeTZka2YxSlRzRUhUa0FLTzQ4RHFCR3cxVmsvYWsyWmhCK2xmUE10Skd5cGN0NzB4NzJuQmNPZkh5eHk0a0RtbW11Sm51TGlWNVpaV0x1N3NXWm1KMlNTZTVKUHZWYTI0bmRsbWtvVlpaRnRRU0tBVUFvRC85az0nO1xyXG5cclxuICBpc0V4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbW1hbmRFdmVudCE6IE1lbnVJdGVtQ29tbWFuZEV2ZW50O1xyXG5cclxuXHJcblxyXG5cclxuICAgIHN0YXR1c2VzITogU2VsZWN0SXRlbVtdO1xyXG4gIGNsb25lZERhdGFTb3VyY2U6IHsgW3M6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG5cclxuICAvKiogIEVtaXRlIGV2ZW50byBkZSBzYWx2YW1lbnRvIGRhIGxpbmhhICovXHJcbiAgQE91dHB1dCgpIG9uUm93U2F2ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbUxvdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2luYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyRmllbGQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblN3aXRjaFRhYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29kaWdvRmlwZVBpcGU6IENvZGlnb0ZpcGVQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcGZDbnBqUGlwZTogQ3BmQ25walBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbGVmb25lUGlwZTogVGVsZWZvbmVQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlXHJcblxyXG4gICkge1xyXG4gICAgdGhpcy5pc1Jvd1NlbGVjdGFibGUgPSB0aGlzLmlzUm93U2VsZWN0YWJsZS5iaW5kKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgfVxyXG4gIGlzUm93U2VsZWN0YWJsZShldmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZENoZWNrYm94KGV2ZW50LmRhdGEpO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAvL0NhbGxlZCBiZWZvcmUgYW55IG90aGVyIGxpZmVjeWNsZSBob29rLiBVc2UgaXQgdG8gaW5qZWN0IGRlcGVuZGVuY2llcywgYnV0IGF2b2lkIGFueSBzZXJpb3VzIHdvcmsgaGVyZS5cclxuICAgIC8vQWRkICcke2ltcGxlbWVudHMgT25DaGFuZ2VzfScgdG8gdGhlIGNsYXNzLlxyXG4gICAgaWYgKGNoYW5nZXNbJ3NldENvbmZpZyddICYmIHRoaXMuY29uZmlnKSB7XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goKGU6VGFibGVFZGl0Q29uZmlnQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgaWYoZS5maWVsZENvbnRyb2xUeXBlID09ICdkcm9wZG93bicpe1xyXG4gICAgICAgICAgdGhpcy5saXN0YXJEcm9wKGUuZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU2VydmljZSwgZSlcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Sb3dFZGl0SW5pdChyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuY2xvbmVkRGF0YVNvdXJjZVtyb3dEYXRhLmlkIGFzIHN0cmluZ10gPSB7IC4uLnJvd0RhdGEgfTtcclxuICB9XHJcbiAgb25Sb3dFZGl0U2F2ZShyb3dEYXRhOiBhbnksIGluZGV4OiBhbnkpIHtcclxuXHJcbiAgICBsZXQgZXJyb3JzID0gW11cclxuICAgIC8vVmFsaWRhw6fDo28gZG8gZm9ybXVsYXJpbyBmYWtlXHJcbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goKGNvbDpUYWJsZUVkaXRDb25maWdDb2x1bW4pID0+IHtcclxuXHJcbiAgICAgIGlmKGNvbC5yZXF1aXJlZCA/PyB0cnVlKXtcclxuICAgICAgICBpZighcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihgTyBjYW1wbyAke2NvbC5oZWFkZXJ9IGUgb2JyaWdhdMOzcmlvISBgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihjb2wudmFsaWRhdG9yKVxyXG4gICAgICB7XHJcbiAgICAgICAgY29uc3QgdGVtcEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKHJvd0RhdGFbY29sLmZpZWxkXSwgY29sLnZhbGlkYXRvciBhcyBWYWxpZGF0b3JGbik7XHJcbiAgICAgICAgdGVtcEZvcm1Db250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKVxyXG4gICAgICAgIHRlbXBGb3JtQ29udHJvbC52YWxpZFxyXG4gICAgICAgIGlmKHRlbXBGb3JtQ29udHJvbC5pbnZhbGlkKXtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFdhcm4oYEVycm8gYW8gdmFsaWRhciBkYWRvcyBkbyBjYW1wbzogJHtjb2wuaGVhZGVyfSEgYClcclxuICAgICAgICAgIGVycm9ycy5wdXNoKCB7IGVycm86IFwiQ2FtcG8gaW52YWxpZG9cIiwgY2FtcG86IHJvd0RhdGFbY29sLmZpZWxkXSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBpZihlcnJvcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5vblJvd1NhdmUuZW1pdChyb3dEYXRhKVxyXG4gICAgICBkZWxldGUgdGhpcy5jbG9uZWREYXRhU291cmNlW3Jvd0RhdGEuaWQgYXMgc3RyaW5nXTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RXYXJuKGBFcnJvIGRlIHZhbGlkYcOnw6NvIGRlIGRhZG9zISBgKVxyXG4gICAgICAvLyB0aGlzLm9uUm93RWRpdENhbmNlbChyb3dEYXRhLCBpbmRleClcclxuICAgICAgLy8gdGhpcy5vblJvd0VkaXRJbml0KHJvd0RhdGEpXHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZVtpbmRleF0gPSB0aGlzLmNsb25lZERhdGFTb3VyY2Vbcm93RGF0YS5pZCBhcyBzdHJpbmddO1xyXG4gICAgICBkZWxldGUgdGhpcy5jbG9uZWREYXRhU291cmNlW3Jvd0RhdGEuaWQgYXMgc3RyaW5nXTtcclxuICAgIH1cclxuICB9XHJcbiAgb25Sb3dFZGl0Q2FuY2VsKHByb2R1Y3Q6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5kYXRhU291cmNlW2luZGV4XSA9IHRoaXMuY2xvbmVkRGF0YVNvdXJjZVtwcm9kdWN0LmlkIGFzIHN0cmluZ107XHJcbiAgICBkZWxldGUgdGhpcy5jbG9uZWREYXRhU291cmNlW3Byb2R1Y3QuaWQgYXMgc3RyaW5nXTtcclxufVxyXG5cclxuICBhc3luYyBsaXN0YXJEcm9wKHNlcnZpY2U6IGFueSwgY29sOmFueSwgaW5kdG9kb3M/OiBib29sZWFuKXtcclxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnM/LmluZGV4T2YoY29sKTtcclxuXHJcbiAgICBpZighY29sLmZpZWxkRHJvcERvd25Db250cm9sLmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlKVxyXG4gICAgICBhd2FpdCBzZXJ2aWNlLkxpc3RhcihpbmR0b2RvcyB8fCAnJykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YTogYW55W10pID0+IHtcclxuICAgICAgICAgIGlmIChjb2x1bW4pIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5jb2x1bW5zICYmIGNvbHVtbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnNbY29sdW1uXS5maWVsZERyb3BEb3duQ29udHJvbC5maWVsZENvbnRyb2xEcm9wZG93blNvdXJjZSA9IGRhdGE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zW2NvbHVtbl0uZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICBlbHNlIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zW2NvbHVtbl0uZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlXHJcbiAgfVxyXG4gIHJldG9ybmFEZXNjcmljYW9Ecm9wKHJvd0RhdGE6IGFueVtdLCBjb2w6IFRhYmxlRWRpdENvbmZpZ0NvbHVtbil7XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IGNvbC5maWVsZERyb3BEb3duQ29udHJvbD8uZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2VcclxuICAgIGNvbnN0IGlkb2JqZXRvID0gY29sLmZpZWxkRHJvcERvd25Db250cm9sPy5pZG9iamV0b1xyXG4gICAgY29uc3QgZGVzY3JpY2Fvb2JqZXRvID0gY29sLmZpZWxkRHJvcERvd25Db250cm9sPy5kZXNjcmljYW9vYmpldG9cclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIGNvbnN0IHZhbG9yQXR1YWwgPSByb3dEYXRhW2NvbC5maWVsZF1cclxuXHJcbiAgICBpZihkYXRhICYmIGlkb2JqZXRvICYmIGRlc2NyaWNhb29iamV0bylcclxuICAgIHJldHVybiBkYXRhPy5maW5kKChpdGVtOmFueSkgPT4gaXRlbVtpZG9iamV0b10gPT0gdmFsb3JBdHVhbClbZGVzY3JpY2Fvb2JqZXRvXVxyXG4gICAgZWxzZSByZXR1cm4gJ0NhcnJlZ2FuZG8nXHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIG9uR2xvYmFsRmlsdGVyKHRhYmxlOiBUYWJsZSwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLm9uRmlsdGVyLmVtaXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XHJcbiAgICB0YWJsZS5maWx0ZXJHbG9iYWwoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSwgJ2NvbnRhaW5zJyk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcclxuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICB9XHJcbiAgYWRqdXN0VGFibGVTaXplKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVTaXplIDwgODAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJ3AtZGF0YXRhYmxlLXNtJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBwYWdpbmF0ZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCRldmVudCkge1xyXG4gICAgICBsZXQgcGFnaW5hSW5pY2lhbCA9XHJcbiAgICAgICAgKCRldmVudD8uZmlyc3QgPiAwID8gJGV2ZW50LmZpcnN0IC8gJGV2ZW50LnJvd3MgOiAkZXZlbnQuZmlyc3QpICsgMTtcclxuICAgICAgbGV0IHRlcm1vUGVzcXVpc2EgPSAnJztcclxuICAgICAgbGV0IG9yZGVuYWNhbyA9ICcnO1xyXG5cclxuICAgICAgaWYgKCRldmVudC5nbG9iYWxGaWx0ZXIpIHRlcm1vUGVzcXVpc2EgPSAkZXZlbnQuZ2xvYmFsRmlsdGVyO1xyXG5cclxuICAgICAgaWYgKCRldmVudC5zb3J0RmllbGQpXHJcbiAgICAgICAgb3JkZW5hY2FvID0gYCR7JGV2ZW50LnNvcnRGaWVsZH0gJHtcclxuICAgICAgICAgICRldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJ1xyXG4gICAgICAgIH1gO1xyXG5cclxuICAgICAgY29uc3Qgb2JqZXRvOiBUYWJsZVBhZ2luYXRlID0ge1xyXG4gICAgICAgIHBhZ2luYUluaWNpYWw6IHBhZ2luYUluaWNpYWwsXHJcbiAgICAgICAgdGFtYW5ob1BhZ2luYTogJGV2ZW50LnJvd3MsXHJcbiAgICAgICAgdGVybW9QZXNxdWlzYTogdGVybW9QZXNxdWlzYSxcclxuICAgICAgICBvcmRlbmFjYW86IG9yZGVuYWNhbyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMub25QYWdpbmF0ZS5lbWl0KG9iamV0byk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0Jvb2xlYW5GaWVsZChyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb2wuZmllbGRUeXBlID09ICdib29sZWFuJztcclxuICB9XHJcblxyXG4gIGlzQ2hpcEZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb2wuZmllbGRUeXBlID09ICdjaGlwJztcclxuICB9XHJcblxyXG4gIGlzSW1hZ2VGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0b3JubyA9IGNvbC5maWVsZFR5cGUgJiYgY29sLmZpZWxkVHlwZSA9PT0gJ2ltYWdlJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiByZXRvcm5vO1xyXG4gIH1cclxuICByZXR1cm5Sb3dDbGFzcyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuICAgIGxldCByb3dDbGFzczogc3RyaW5nO1xyXG5cclxuICAgIHRoaXMudGFibGVTaXplID4gODAwID8gKHJvd0NsYXNzID0gJ3RleHQtYmFzZScpIDogKHJvd0NsYXNzID0gJ3RleHQtc20nKTtcclxuXHJcbiAgICBpZiAoY29sLmV4cGlyZWREYXRlID09IHRydWUpIHtcclxuICAgICAgbmV3IERhdGUodmFsdWUpIDwgbmV3IERhdGUoKVxyXG4gICAgICAgID8gKHJvd0NsYXNzID0gcm93Q2xhc3MgKyAnIHRleHQtcmVkLTQwMCBmb250LXNlbWlib2xkJylcclxuICAgICAgICA6ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvd0NsYXNzO1xyXG4gIH1cclxuICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuXHJcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIWNvbC5waXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKGNvbC5waXBlKSB7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgY2FzZSAnZGVjaW1hbCc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xyXG4gICAgICAgIGNhc2UgJ2NwZmNucGonOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3BmQ25walBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZWxlZm9uZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdjb2RpZ29maXBlJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvZGlnb0ZpcGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnbW9uZXknOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0YXJWYWxvcih2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XHJcbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9ICVgO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYWxpZ25Db2x1bmFzSGVhZGVyKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuYWxpZ24pIHtcclxuICAgICAgaWYgKGNvbC5hbGlnbiA9PSAncmlnaHQnKSByZXR1cm4gJ2p1c3RpZnktY29udGVudDogZW5kJztcclxuICAgICAgZWxzZSByZXR1cm4gJyc7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuICBjZW50cmFsaXphckNvbHVuYXMoY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKGNvbC5jZW50cmFsaXplKSB7XHJcbiAgICAgIHJldHVybiAndGV4dC1hbGlnbjogY2VudGVyOyAnO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcbiAgYWxpZ25Db2x1bmFzKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuYWxpZ24pIHtcclxuICAgICAgcmV0dXJuIGB0ZXh0LWFsaWduOiAke2NvbC5hbGlnbn1gO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcbiAgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAnaWNvbnJvdycpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuVG9vbHRpcEljb24ocm93RGF0YTogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwaWNvbnJvdycpO1xyXG4gIH1cclxuICByZXR1cm5DbGFzc0NoaXAocm93RGF0YTogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYGNoaXAtc3R5bGUgdy1hdXRvIGJvcmRlci1yb3VuZC0yeGwgcC0yIHRleHQtJHt0aGlzLnJldG9ybmFyUm93KFxyXG4gICAgICByb3dEYXRhLFxyXG4gICAgICBjb2wsXHJcbiAgICAgICdzdHlsZWNoaXAnXHJcbiAgICApfSBib3JkZXItJHt0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3N0eWxlY2hpcCcpfWA7XHJcbiAgfVxyXG4gIHJldG9ybmFyUm93KHJvd0RhdGE6IGFueSwgY29sOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgX3Jvd2FjdGlvbiA9IHRoaXMuY29uZmlnLnJvd3MgPyB0aGlzLmNvbmZpZy5yb3dzW2NvbC5maWVsZF0gOiBudWxsO1xyXG4gICAgY29uc3QgX2ZpZWxkOiBzdHJpbmcgPVxyXG4gICAgICBfcm93YWN0aW9uICYmIF9yb3dhY3Rpb25bZmllbGRdXHJcbiAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb25cclxuICAgICAgICAgID8gX3Jvd2FjdGlvbltmaWVsZF0uYXBwbHkodGhpcywgW3Jvd0RhdGFdKVxyXG4gICAgICAgICAgOiBfcm93YWN0aW9uW2ZpZWxkXVxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIHJldHVybiBfZmllbGQ7XHJcbiAgfVxyXG4gIHNlbGVjdGlvbkNoYW5nZSh2YWx1ZSA9IFtdKSB7XHJcbiAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuICBmb3JtYXRhclZhbG9yKHZhbG9yOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHtcclxuICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXHJcbiAgICAgIGN1cnJlbmN5OiAnQlJMJyxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbG9yKTtcclxuICB9XHJcbiAgbG9hZEltYWdlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICAvKlxyXG4gICAgICBOb3NzYSBjb2x1bmEgZGUgaW1hZ2VtIHRyYWJhbGhhIGNvbSBzdHJpbmdzIGRvIHRpcG86IGJhc2U2NCBvdSB1cmxcclxuICAgICovXHJcbiAgICBsZXQgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7dGhpcy5pbWdEZWZhdWx0fWA7XHJcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcclxuICAgICAgaWYgKHJvd0RhdGFbY29sLmZpZWxkXS5pbmNsdWRlcygnaHR0cCcpKSByZXRvcm5vID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICBlbHNlIHJldG9ybm8gPSBgZGF0YTppbWFnZS9qcGc7YmFzZTY0LCAke3Jvd0RhdGFbY29sLmZpZWxkXX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXRvcm5vO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tVGVtcGxhdGUodGVtcGxhdGVuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcclxuICB9XHJcbiAgZXhpYmlyQ2FtcG8oZmllbGQ6IGFueSwgcm93RGF0YTogYW55KSB7XHJcbiAgICBsZXQgdmlzaWJsZSA9IGZpZWxkLnZpc2libGUgPyBmaWVsZC52aXNpYmxlKHJvd0RhdGEpIDogdHJ1ZTtcclxuICAgIHJldHVybiB2aXNpYmxlO1xyXG4gIH1cclxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtLmVtaXQoeyByb3dEYXRhOiByb3dEYXRhfSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBhY3RpdmVJdGVtTG90ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtTG90ZS5lbWl0KHJvd0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgcmV0b3JuYXJDYW1wbyhhY3Rpb246IEt2TWVudUl0ZW0sIHJvd0RhdGE6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBfZnVuY3Rpb24gPSBhY3Rpb24uZHluYW1pY2ZpZWxkc1xyXG4gICAgICA/IChhY3Rpb24uZHluYW1pY2ZpZWxkc1tmaWVsZF0gYXMgRnVuY3Rpb24pXHJcbiAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IF9maWVsZDogc3RyaW5nID0gX2Z1bmN0aW9uXHJcbiAgICAgID8gX2Z1bmN0aW9uLmFwcGx5KGFjdGlvbiwgW3Jvd0RhdGFdKVxyXG4gICAgICA6IGFjdGlvbltmaWVsZF07XHJcbiAgICByZXR1cm4gX2ZpZWxkO1xyXG4gIH1cclxuICBjYWxsRGlzYWJsZWQoYWN0aW9uOiBLdk1lbnVJdGVtLCBkYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChhY3Rpb24/LmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQoZGF0YSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGNyaWFyTWVudXNNb2RhbChkYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5hY3Rpb25zICYmIGRhdGEpIHtcclxuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmNvbmZpZy5hY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdpY29uJyk7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICd0b29sdGlwJyk7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnbGFiZWwnKTtcclxuICAgICAgICBjb25zdCBjb21tYW5kOiBhbnkgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnY29tbWFuZCcpO1xyXG4gICAgICAgIGNvbnN0IHZpc2libGU6IGJvb2xlYW4gPSBhY3Rpb24udmlzaWJsZVxyXG4gICAgICAgICAgPyBhY3Rpb24udmlzaWJsZShkYXRhKVxyXG4gICAgICAgICAgOiB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGVkOiBib29sZWFuID0gYWN0aW9uLmRpc2FibGVkXHJcbiAgICAgICAgICA/IGFjdGlvbi5kaXNhYmxlZChkYXRhKVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVudUluc2VydDogS3ZNZW51SXRlbSA9IHtcclxuICAgICAgICAgIGxhYmVsLFxyXG4gICAgICAgICAgaWNvbixcclxuICAgICAgICAgIHRvb2x0aXAsXHJcbiAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgZGlzYWJsZWQsXHJcbiAgICAgICAgICB2aXNpYmxlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5tZW51SXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+IHguY29tbWFuZCA9PSBtZW51SW5zZXJ0LmNvbW1hbmRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT0gMCkgdGhpcy5tZW51SXRlbXMucHVzaChtZW51SW5zZXJ0KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmxhYmVsICE9IGl0ZW1bMF0ubGFiZWwpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC52aXNpYmxlICE9IGl0ZW1bMF0udmlzaWJsZSkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmRpc2FibGVkICE9IGl0ZW1bMF0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhTGluaGFBY2FvVmF6aWEocm93RGF0YTogYW55KSB7XHJcbiAgICB2YXIgYWxndW1JdGVtVmlzaXZlbCA9IHRoaXMuY29uZmlnLmFjdGlvbnMuc29tZSgoYSkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGEudmlzaWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiBhLnZpc2libGUocm93RGF0YSkgPT09IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIFJldG9ybmEgdHJ1ZSBzZSBhLnZpc2libGUocm93RGF0YSkgbsOjbyBleGlzdGlyXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiAhYWxndW1JdGVtVmlzaXZlbDtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG4gIGRvdWJsZUNsaWNrKGU6IGFueSwgcm93RGF0YTogYW55KSB7XHJcbiAgICBsZXQgZXZlbnREb3VibGVDbGljayA9IHsgZXZlbnQ6IGUsIHJvd0RhdGE6IHJvd0RhdGF9O1xyXG5cclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXTtcclxuICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5mb3JFYWNoKCh4OiBhbnkpID0+IGFycmF5LnB1c2goeCkpO1xyXG5cclxuICAgIC8vaWYgKGFycmF5LmZpbmQoKHg6IGFueSkgPT4geCA9PSAnbmctc3Rhci1pbnNlcnRlZCcpICE9IHVuZGVmaW5lZClcclxuICAgIHRoaXMuZG91YmxlQ2xpY2tFdmVudC5lbWl0KGV2ZW50RG91YmxlQ2xpY2spO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvblxyXG4gICAgICA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHJldHVyblRvb2x0aXBSb3cocm93RGF0YTogYW55LCBjb2w6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwcm93Jyk7XHJcbiAgfVxyXG5cclxuICBpc1N3aXRjaEZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGxldCByZXRvcm5vID0gY29sLmZpZWxkVHlwZSAmJiBjb2wuZmllbGRUeXBlID09PSAnc3dpdGNoJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiByZXRvcm5vO1xyXG4gIH1cclxuICBvblN3aXRjaENoYW5nZShlc3RhZG86IGFueSwgcm93RGF0YTogYm9vbGVhbiwgY29sOiBhbnkpIHtcclxuICAgIHRoaXMub25Td2l0Y2hUYWJsZUNoYW5nZS5lbWl0KHtcclxuICAgICAgZXN0YWRvOiBlc3RhZG8sXHJcbiAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgIGNvbDogY29sXHJcbiAgICB9KVxyXG4gIH1cclxuICBpc0J1dHRvbkRpc2FibGUoYWN0aW9uOiBhbnksIHJvd0RhdGE6IGFueSwgY29tbWFuZEV2ZW50OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfSBlbHNlIHJldHVybiB0aGlzLmFjdGl2ZUl0ZW0ocm93RGF0YSksIGFjdGlvbj8uY29tbWFuZChjb21tYW5kRXZlbnQpO1xyXG4gIH1cclxuICBpc0Rpc2FibGVFZGl0Um93RnVuY3Rpb24ocm93RGF0YTogYW55KTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVFZGl0Um93RnVuY3Rpb24gPyB0aGlzLmNvbmZpZy5kaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpIDogZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48ZGl2IGNsYXNzPVwiY2FyZFwiID5cclxuICA8cC10b2FzdD48L3AtdG9hc3Q+XHJcblxyXG4gIDxwLXBhbmVsXHJcbiAgICAqbmdJZj1cImZpbHRyb3NBdmFuY2Fkb3NcIlxyXG4gICAgaGVhZGVyPVwiRmlsdHJvcyBhdmFuw6dhZG9zXCJcclxuICAgIFt0b2dnbGVhYmxlXT1cInRydWVcIlxyXG4gICAgW2NvbGxhcHNlZF09XCJ0cnVlXCJcclxuICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwiY29sbGFwc2VkID0gIWNvbGxhcHNlZFwiXHJcbiAgICBbc3R5bGVdPVwieyAnbWFyZ2luLWJvdHRvbSc6ICcycHgnIH1cIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJpY29uc1wiPlxyXG4gICAgICA8aVxyXG4gICAgICAgICpuZ0lmPVwiIWNvbGxhcHNlZFwiXHJcbiAgICAgICAgY2xhc3M9XCJwaSBwaS1maWx0ZXJcIlxyXG4gICAgICA+PC9pPlxyXG4gICAgICA8IS0tIMONY29uZSBxdWFuZG8gbyBwYWluZWwgZXN0w6EgYWJlcnRvIC0tPlxyXG4gICAgICA8aVxyXG4gICAgICAgICpuZ0lmPVwiY29sbGFwc2VkXCJcclxuICAgICAgICBjbGFzcz1cInBpIHBpLW1pbnVzXCJcclxuICAgICAgPjwvaT5cclxuICAgICAgPCEtLSDDjWNvbmUgcXVhbmRvIG8gcGFpbmVsIGVzdMOhIGZlY2hhZG8gLS0+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvcC1wYW5lbD5cclxuXHJcbiAgPHAtdGFibGVcclxuICAjdGVcclxuICAqbmdJZj1cImNvbmZpZ1wiXHJcbiAgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIlxyXG4gIGRhdGFLZXk9XCJpZFwiXHJcbiAgW3RhYmxlU3R5bGVdPVwieyAnbWluLXdpZHRoJzogJzUwcmVtJyB9XCJcclxuICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXHJcbiAgW2VkaXRNb2RlXT1cIidyb3cnXCJcclxuICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICBzY3JvbGxIZWlnaHQ9XCI0MDBweFwiXHJcbiAgYXBwZW5kVG89XCJib2R5XCJcclxuICBbc3R5bGVDbGFzc109XCIncC1kYXRhdGFibGUtc20nXCJcclxuICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXHJcbiAgW3Jvd1NlbGVjdGFibGVdPVwiaXNSb3dTZWxlY3RhYmxlXCJcclxuICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXHJcbiAgW3Jvd3NdPVwicm93c1wiXHJcbiAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxyXG4gIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcclxuICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IGRlIHt7IHRvdGFsUmVjb3JkcyB9fVwiXHJcbiAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgW3Jvd0hvdmVyXT1cInRydWVcIlxyXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICBbbGF6eV09XCJjb25maWcubGF6eVwiXHJcbiAgKG9uTGF6eUxvYWQpPVwicGFnaW5hdGUoJGV2ZW50KVwiXHJcbiAgW2dyb3VwUm93c0J5XT1cImNvbmZpZy5maWVsZEdyb3VwXCJcclxuICBbc2hvd0ZpcnN0TGFzdEljb25dPVwic2hvd0ZpcnN0TGFzdEljb25cIlxyXG4gIFtwYWdlTGlua3NdPVwicGFnZUxpbmtzT3B0aW9uc1wiXHJcbiAgW3Njcm9sbGFibGVdPVwiaXNUYWJsZVNjcm9sbGFibGVcIlxyXG4gIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcclxuICBbcm93VHJhY2tCeV09XCJyb3dUcmFja0J5IFwiXHJcbiAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXHJcbiAgPlxyXG5cclxuXHJcblxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgcFRlbXBsYXRlPVwiY2FwdGlvblwiXHJcbiAgICAgICpuZ0lmPVwiY29uZmlnLmVuYWJsZUNhdGlvblwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkIGNvbC0xMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy50aXRsZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLnN1YnRpdGxlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWQ6Y29sLTYgbGc6Y29sLTQge3tcclxuICAgICAgICAgICAgdGFtYW5ob1RlbGEgPCA3NjggPyAnY29sLTEwJyA6ICdjb2wtMTInXHJcbiAgICAgICAgICB9fSBtdC0xIG1iLTIgXCI+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVGaWx0ZXJcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcblxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xyXG4gICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJvbkdsb2JhbEZpbHRlcih0ZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXNxdWlzYXIuLi5cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiaC0ycmVtXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0xIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc0xvdGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0bnMtb3B0aW9uc1wiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7ICdtYXJnaW4tcmlnaHQnOiAnN3B4JyB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGlkPVwiYWN0aW9uTG90ZUJ0bnNcIlxyXG4gICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiZcclxuICAgICAgICAgICAgICAgIGV4aWJpckNhbXBvKGFjdGlvbiwgdGhpcy5hY3Rpb24pXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkxvdGVCdG5zIHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ3Rvb2x0aXAnKVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcclxuICAgICAgICAgICAgICAgIHJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnYnRuQ29sb3InKVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnZGlzYWJsZWQnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTIyXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdpY29uQnRuQ29sb3InKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgXCJpY29uXCIpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIHBUZW1wbGF0ZT1cImhlYWRlclwiXHJcbiAgICAgIGxldC1jb2x1bW5zXHJcbiAgICA+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGhcclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDRyZW07IGJvcmRlci1sZWZ0OiBzb2xpZCA0cHggdHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94IChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcclxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgIGNsYXNzPVwidGV4dC1zbVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbY2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgJiYgYWxpZ25Db2x1bmFzSGVhZGVyKGNvbCkgPT0gJydcclxuICAgICAgICAgICAgICAgID8gJ2ZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgIDogJ2ZsZXggZmxleC1yb3cnXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJhbGlnbkNvbHVuYXNIZWFkZXIoY29sKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxwLXNvcnRJY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuc29ydGFibGUgPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4XCJcclxuICAgICAgICAgICAgPjwvcC1zb3J0SWNvbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICA+aW5mbzwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRoICpuZ0lmPVwiY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMFwiPjwvdGg+XHJcbiAgICAgICAgPHRoIGlkPVwidGgtZWRpdFwiIHN0eWxlPVwid2lkdGg6IDIwcHhcIj5FZGl0YXI8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcblxyXG5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3dEYXRhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCIgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCJcclxuICAgICAgbGV0LXJvd2dyb3VwPVwicm93Z3JvdXBcIiBsZXQtcm93c3Bhbj1cInJvd3NwYW5cIj5cclxuICAgICAgPHRyIFtwRWRpdGFibGVSb3ddPVwicm93RGF0YVwiIFtwRWRpdGFibGVSb3dEaXNhYmxlZF09XCJmYWxzZVwiID5cclxuXHJcblxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcclxuICAgICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdjaGVjay1ib3gnLCBoZWFkZXI6ICcnIH0pXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tPHAtdGFibGVDaGVja2JveCAqbmdJZj1cImlzVmlzaWJsZUNoZWNrYm94KHJvd0RhdGEpXCItLT5cclxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3hcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgID48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICA8L3RkPlxyXG5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpID0gaW5kZXhcIj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcbiAgICAgICAgICA8IS0tIENlbHVsYSBxdWUgYXJtYXplbmEgb3MgY29udHJvbGVzIGRlIGVkacOnw6NvIHBhcmEgb3MgY2FtcG9zIC0tPlxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwiY29sLmZpZWxkQ29udHJvbFR5cGVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiIFtzdHlsZV09XCJcclxuICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKSBcIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHAtY2VsbEVkaXRvciBbbmdDbGFzc109XCJ7J3N3aXRjaCc6IGNvbC5maWVsZENvbnRyb2xUeXBlID09ICdzd2l0Y2gnfVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gQ29udHJvbGUgZGUgZWRpw6fDo28gZG8gY2FtcG8gLS0+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRDb250cm9sVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtdGV4dCBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiIFtyZXF1aXJlZF09XCJjb2wucmVxdWlyZWQgPz8gdHJ1ZVwiPjwva3YtaW5wdXQtdGV4dD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrdi1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIiBbcmVxdWlyZWRdPVwiY29sLnJlcXVpcmVkID8/IHRydWVcIj48L2t2LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbWFzaydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtbWFzayBbbWFza109XCJjb2wubWFza1wiIFtyZXF1aXJlZF09XCJjb2wucmVxdWlyZWQgPz8gdHJ1ZVwiIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCI+PC9rdi1pbnB1dC1tYXNrPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzd2l0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGt2LXN3aXRjaCBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiID48L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGt2LWlucHV0LWNhbGVuZGFyIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCI+PC9rdi1pbnB1dC1jYWxlbmRhcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMwMHB4XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbC5maWVsZERyb3BEb3duQ29udHJvbC5kZXNjcmljYW9vYmpldG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiY29sLmZpZWxkRHJvcERvd25Db250cm9sLmlkb2JqZXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY29sLmZpZWxkRHJvcERvd25Db250cm9sLmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBWYWxvciBhdHVhbCBkbyBjYW1wbyAtLT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRDb250cm9sVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0RhdGFbY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgIHJldG9ybmFEZXNjcmljYW9Ecm9wKFxyXG4gICAgICAgICAgICAgICAgICAgICAgcm93RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3tyb3dEYXRhW2NvbC5maWVsZF19fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3dpdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2ggWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjYWxlbmRhcidcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gfCBkYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcblxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICA8dGQgKm5nSWY9XCJyb3dncm91cCAmJiAhY29sLnRlbXBsYXRlICYmICFjb2wuZmllbGRDb250cm9sVHlwZVwiIFthdHRyLnJvd3NwYW5dPVwicm93Z3JvdXAgJiYgY29sLmdyb3VwZWQgPyByb3dzcGFuIDogbnVsbFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIiBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgXCIgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sLmljb25cIiBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCI+e3tcclxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0ltYWdlRmllbGQoY29sKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cImNvbC5pY29uRmllbGRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgfVwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhY29sLmljb25GaWVsZCAmJiAhaXNTd2l0Y2hGaWVsZChjb2wpXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgXCI+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1N3aXRjaEZpZWxkKGNvbClcIiBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgPGt2LXN3aXRjaCAob25Td2l0Y2hDaGFuZ2UpPVwib25Td2l0Y2hDaGFuZ2UoJGV2ZW50LCByb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbD8ub25seVJlYWRGaWVsZCA/PyB0cnVlXCIgW3N3aXRjaFZhbHVlXT1cInRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcIj5cclxuICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwiIXJvd2dyb3VwICYmICFjb2wuZ3JvdXBlZCAmJiAhY29sLnRlbXBsYXRlICYmICFjb2wuZmllbGRDb250cm9sVHlwZVwiIFtzdHlsZV09XCJcclxuICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcclxuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxyXG4gICAgICAgICAgICBcIiBjbGFzcz1cInJvd1RhYmxlXCIgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sLmljb25cIiBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxyXG4gICAgICAgICAgICAgIH1cIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgIHt7IHJldHVybkNsYXNzSWNvbihyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxyXG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWNvbC5pY29uRmllbGQgJiYgIWlzU3dpdGNoRmllbGQoY29sKVwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcclxuICAgICAgICAgICAgICAgIFwiPjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNTd2l0Y2hGaWVsZChjb2wpXCIgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIj5cclxuICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2ggKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbC50ZW1wbGF0ZSAmJiAhY29sLmZpZWxkQ29udHJvbFR5cGVcIiBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgXCIgY2xhc3M9XCJyb3dUYWJsZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3dEYXRhIH1cIj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICAgIDwhLS0gQ29udHJvbGUgZGUgYcOnw6NvICAtLT5cclxuICAgICAgPHRkIGNsYXNzPVwidGQtdG9vbHNcIlxyXG4gICAgICAgICpuZ0lmPVwiY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMCAmJiAhZWRpdGluZ1wiXHJcbiAgICAgICAgW3N0eWxlXT1cImFwcGx5U3R5bGUocm93RGF0YSwgeyBmaWVsZDogJ2J0bnMtb3B0aW9ucycsIGhlYWRlcjogJycgfSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsIGdhcC0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiYWNvZXNMaW5oYVRhYmVsYVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtci0xXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgaWQ9XCJhY3Rpb25CdG5zXCJcclxuICAgICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJleGliaXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkJ0bnMgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtKHJvd0RhdGEpOyBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCByb3dEYXRhLCAndG9vbHRpcCcpXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIlxyXG4gICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA/IGFjdGlvbi50b29sdGlwUG9zaXRpb24gOiAnYm90dG9tJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtZC0xOVwiPlxyXG4gICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsIFwiaWNvblwiKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQge3tcclxuICAgICAgICAgICAgICAgIGNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpXHJcbiAgICAgICAgICAgICAgICAgID8gJ3RleHQtZ3JheS00MDAgY3Vyc29yLWF1dG8nXHJcbiAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xyXG4gICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjBweFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImlzQnV0dG9uRGlzYWJsZShhY3Rpb24sIHJvd0RhdGEsIGNvbW1hbmRFdmVudClcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgJ3Rvb2x0aXAnKVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJcclxuICAgICAgICAgICAgICAgIGFjdGlvbi50b29sdGlwUG9zaXRpb24gPyBhY3Rpb24udG9vbHRpcFBvc2l0aW9uIDogJ2JvdHRvbSdcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsIFwiaWNvblwiKSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIlxyXG4gICAgICAgICAgKm5nSWY9XCIhYWNvZXNMaW5oYVRhYmVsYVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgIGlkPVwibW9yZVZlcnRCdG5cIlxyXG4gICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcclxuICAgICAgICAgID4gLS0+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY3Vyc29yLXBvaW50ZXIgaWNvbi1tb3JlLWhvcml6XCJcclxuICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDIwcHhcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIG1vcmVfaG9yaXpcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxyXG4gICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgIDxwLW1lbnVcclxuICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbbW9kZWxdPVwibWVudUl0ZW1zXCJcclxuICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgID48L3AtbWVudT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90ZD5cclxuXHJcbiAgICAgIDx0ZFxyXG4gICAgICBjbGFzcz1cInRkLXRvb2xzXCJcclxuICAgICAgKm5nSWY9XCJjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwICYmIGVkaXRpbmdcIlxyXG4gICAgICBbc3R5bGVdPVwiYXBwbHlTdHlsZShyb3dEYXRhLCB7IGZpZWxkOiAnYnRucy1vcHRpb25zJywgaGVhZGVyOiAnJyB9KVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGwgZ2FwLTFcIlxyXG4gICAgICAgICpuZ0lmPVwiYWNvZXNMaW5oYVRhYmVsYVwiXHJcbiAgICAgID5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCJcclxuICAgICAgICAqbmdJZj1cIiFhY29lc0xpbmhhVGFiZWxhXCJcclxuICAgICAgPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPC90ZD5cclxuXHJcblxyXG5cclxuICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICA8IS0tIENvbnRyb2xlIGRlIGVkacOnw6NvIC0tPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cInRkLWVkaXRcIiA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFtzdHlsZS5oZWlnaHRdPVwiJzI4cHgnXCIgW3N0eWxlLndpZHRoXT1cIicyOHB4J1wiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93RnVuY3Rpb24ocm93RGF0YSlcIiAqbmdJZj1cIiFlZGl0aW5nXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBwSW5pdEVkaXRhYmxlUm93IGljb249XCJwaSBwaS1wZW5jaWxcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0VkaXRJbml0KHJvd0RhdGEpXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBbc3R5bGUuaGVpZ2h0XT1cIicyOHB4J1wiIFtzdHlsZS53aWR0aF09XCInMjhweCdcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpXCIgKm5nSWY9XCJlZGl0aW5nXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBwU2F2ZUVkaXRhYmxlUm93IGljb249XCJwaSBwaS1jaGVja1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RWRpdFNhdmUocm93RGF0YSwgcmkpXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcyBtci0yXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gW3N0eWxlLmhlaWdodF09XCInMjhweCdcIiBbc3R5bGUud2lkdGhdPVwiJzI4cHgnXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUVkaXRSb3dGdW5jdGlvbihyb3dEYXRhKVwiICpuZ0lmPVwiZWRpdGluZ1wiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgcENhbmNlbEVkaXRhYmxlUm93IGljb249XCJwaSBwaS10aW1lc1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RWRpdENhbmNlbChyb3dEYXRhLCByaSlcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXJcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdGFibGU+XHJcbjwvZGl2PlxyXG4iXX0=
1
+ import { Component, EventEmitter, Input, Output, HostListener } from '@angular/core';
2
+ import { FormControl } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "../../public-api";
6
+ import * as i3 from "primeng/api";
7
+ import * as i4 from "primeng/autofocus";
8
+ import * as i5 from "primeng/button";
9
+ import * as i6 from "primeng/contextmenu";
10
+ import * as i7 from "primeng/tooltip";
11
+ import * as i8 from "primeng/dropdown";
12
+ import * as i9 from "primeng/inputtext";
13
+ import * as i10 from "primeng/menu";
14
+ import * as i11 from "primeng/panel";
15
+ import * as i12 from "primeng/ripple";
16
+ import * as i13 from "primeng/table";
17
+ import * as i14 from "primeng/toast";
18
+ import * as i15 from "@angular/forms";
19
+ import * as i16 from "../inputs/input-calendar/input-calendar.component";
20
+ import * as i17 from "../inputs/input-mask/input-mask.component";
21
+ import * as i18 from "../inputs/input-number/input-number.component";
22
+ import * as i19 from "../inputs/input-text/input-text.component";
23
+ import * as i20 from "../inputs/switch/switch.component";
24
+ export class TableEditComponent {
25
+ set setConfig(value) {
26
+ this.config = {
27
+ enableCation: value.enableCation || true,
28
+ enableSelect: value.enableSelect || false,
29
+ enableFilter: value.enableFilter || true,
30
+ ...value,
31
+ };
32
+ // if (this.config.enableFilter) {
33
+ // this.config.columns.forEach((col) => {
34
+ // this.globalFilterFields.push(col.field);
35
+ // });
36
+ // }
37
+ }
38
+ constructor(datePipe, decimalPipe, codigoFipePipe, cpfCnpjPipe, telefonePipe, notificationService) {
39
+ this.datePipe = datePipe;
40
+ this.decimalPipe = decimalPipe;
41
+ this.codigoFipePipe = codigoFipePipe;
42
+ this.cpfCnpjPipe = cpfCnpjPipe;
43
+ this.telefonePipe = telefonePipe;
44
+ this.notificationService = notificationService;
45
+ this.globalFilterFields = [];
46
+ this.collapsed = false;
47
+ this.editMode = 'cell';
48
+ this.selectedItems = [];
49
+ this.paginator = true;
50
+ this.rows = 5;
51
+ this.pageLinksOptions = 1;
52
+ this.showFirstLastIcon = false;
53
+ this.applyStyle = (rowData, col) => '';
54
+ this.acoesLinhaTabela = true;
55
+ this.filterColumnsBtn = false;
56
+ this.filtrosAvancados = false;
57
+ this.scrollHeight = '';
58
+ this.isTableScrollable = false;
59
+ this.rowTrackBy = (index, item) => item;
60
+ this.responsiveLayout = true;
61
+ this.espacamentoPai = '2px';
62
+ this.espacamentoLateral = true;
63
+ this.rightCollapse = false;
64
+ this.onFilter = new EventEmitter();
65
+ this.selectedSize = '';
66
+ this.menuItems = [];
67
+ this.imgDefault = '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';
68
+ this.isExpanded = false;
69
+ this.clonedDataSource = {};
70
+ /** Emite evento de salvamento da linha */
71
+ this.onRowSave = new EventEmitter();
72
+ this.onActiveItem = new EventEmitter();
73
+ this.onActiveItemLote = new EventEmitter();
74
+ this.onPaginate = new EventEmitter();
75
+ this.onSelectionChange = new EventEmitter();
76
+ this.doubleClickEvent = new EventEmitter();
77
+ this.filterField = new EventEmitter();
78
+ this.onSwitchTableChange = new EventEmitter();
79
+ this.selectedProduct = {
80
+ rowData: {},
81
+ editing: false
82
+ };
83
+ this.isRowSelectable = this.isRowSelectable.bind(this);
84
+ }
85
+ ngOnInit() {
86
+ this.tamanhoTela = window.innerWidth;
87
+ this.items = [
88
+ { label: 'Editar linha', icon: 'pi pi-fw pi-pencil', command: () => {
89
+ const element = document.getElementById('rowEdit' + this.selectedProduct.rowData[this.config.dataKey]);
90
+ if (element && !this.config.disableEditRowFunction?.(this.selectedProduct.rowData)) {
91
+ element.click(); // Dispara um evento de clique no elemento com ID 'teste'
92
+ }
93
+ else {
94
+ this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
95
+ }
96
+ this.onRowEditInit(this.selectedProduct);
97
+ } },
98
+ { label: 'Cancelar edição', icon: 'pi pi-fw pi-times', command: (data) => {
99
+ const element = document.getElementById('rowCancel' + this.selectedProduct.rowData[this.config.dataKey]);
100
+ if (element) {
101
+ element.click(); // Dispara um evento de clique no elemento com ID 'teste'
102
+ }
103
+ else {
104
+ this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
105
+ }
106
+ } },
107
+ { label: 'Salvar edição', icon: 'pi pi-fw pi-save', command: (data) => {
108
+ const element = document.getElementById('rowSave' + this.selectedProduct.rowData[this.config.dataKey]);
109
+ if (element) {
110
+ element.click(); // Dispara um evento de clique no elemento com ID 'teste'
111
+ }
112
+ else {
113
+ this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
114
+ }
115
+ } },
116
+ ];
117
+ }
118
+ ngDoCheck() {
119
+ this.items[0].visible = !this.selectedProduct.editing && this.isEditableTable() !== false;
120
+ this.items[1].visible = this.selectedProduct.editing && this.isEditableTable() !== false;
121
+ this.items[2].visible = this.selectedProduct.editing && this.isEditableTable() !== false;
122
+ }
123
+ dbClickEdit() {
124
+ const element = document.getElementById('rowEdit' + this.selectedItem[this.config.dataKey]);
125
+ if (element) {
126
+ element.click();
127
+ }
128
+ else {
129
+ this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
130
+ }
131
+ }
132
+ activateEdit() {
133
+ const element = document.getElementById('teste');
134
+ if (element) {
135
+ element.click(); // Dispara um evento de clique no elemento com ID 'teste'
136
+ }
137
+ }
138
+ isRowSelectable(event) {
139
+ return !this.isDisabledCheckbox(event.data);
140
+ }
141
+ ngOnChanges(changes) {
142
+ //Called before any other lifecycle hook. Use it to inject dependencies, but avoid any serious work here.
143
+ //Add '${implements OnChanges}' to the class.
144
+ if (changes['setConfig'] && this.config) {
145
+ this.config.columns.forEach((e) => {
146
+ if (e.fieldControlType == 'dropdown') {
147
+ this.listarDrop(e.fieldDropDownControl?.fieldControlDropdownService, e);
148
+ }
149
+ });
150
+ }
151
+ }
152
+ onRowEditInit(rowData) {
153
+ this.clonedDataSource[rowData.id] = { ...rowData };
154
+ }
155
+ onRowEditSave(rowData, index) {
156
+ let errors = [];
157
+ //Validação do formulario fake
158
+ this.config.columns.forEach((col) => {
159
+ if (col.required ?? true) {
160
+ if (!rowData[col.field])
161
+ this.notificationService.toastWarn(`O campo ${col.header} e obrigatório! `);
162
+ }
163
+ if (col.validator) {
164
+ const tempFormControl = new FormControl(rowData[col.field], col.validator);
165
+ tempFormControl.markAllAsTouched();
166
+ tempFormControl.valid;
167
+ if (tempFormControl.invalid) {
168
+ this.notificationService.toastWarn(`Erro ao validar dados do campo: ${col.header}! `);
169
+ errors.push({ erro: "Campo invalido", campo: rowData[col.field] });
170
+ }
171
+ }
172
+ });
173
+ if (errors.length == 0) {
174
+ this.onRowSave.emit(rowData);
175
+ delete this.clonedDataSource[rowData.id];
176
+ }
177
+ else {
178
+ this.notificationService.toastWarn(`Erro de validação de dados! `);
179
+ // this.onRowEditCancel(rowData, index)
180
+ // this.onRowEditInit(rowData)
181
+ this.dataSource[index] = this.clonedDataSource[rowData.id];
182
+ delete this.clonedDataSource[rowData.id];
183
+ }
184
+ }
185
+ onRowEditCancel(product, index) {
186
+ this.dataSource[index] = this.clonedDataSource[product.id];
187
+ delete this.clonedDataSource[product.id];
188
+ }
189
+ async listarDrop(service, col, indtodos) {
190
+ const column = this.config.columns?.indexOf(col);
191
+ if (!col.fieldDropDownControl.fieldControlDropdownSource)
192
+ await service.Listar(indtodos || '').subscribe({
193
+ next: (data) => {
194
+ if (column) {
195
+ if (this.config && this.config.columns && column !== undefined) {
196
+ // @ts-ignore
197
+ this.config.columns[column].fieldDropDownControl.fieldControlDropdownSource = data;
198
+ }
199
+ return this.config.columns[column].fieldDropDownControl?.fieldControlDropdownSource;
200
+ }
201
+ }
202
+ });
203
+ else
204
+ return this.config.columns[column].fieldDropDownControl?.fieldControlDropdownSource;
205
+ }
206
+ retornaDescricaoDrop(rowData, col) {
207
+ const data = col.fieldDropDownControl?.fieldControlDropdownSource;
208
+ const idobjeto = col.fieldDropDownControl?.idobjeto;
209
+ const descricaoobjeto = col.fieldDropDownControl?.descricaoobjeto;
210
+ // @ts-ignore
211
+ const valorAtual = rowData[col.field];
212
+ if (data && idobjeto && descricaoobjeto)
213
+ return data?.find((item) => item[idobjeto] == valorAtual)[descricaoobjeto];
214
+ else
215
+ return 'Carregando';
216
+ }
217
+ onGlobalFilter(table, event) {
218
+ this.onFilter.emit(event.target.value);
219
+ table.filterGlobal(event.target.value, 'contains');
220
+ }
221
+ onWindowResize() {
222
+ this.adjustTableSize();
223
+ this.tamanhoTela = window.innerWidth;
224
+ }
225
+ adjustTableSize() {
226
+ if (this.tableSize < 800) {
227
+ this.selectedSize = 'p-datatable-sm';
228
+ }
229
+ else {
230
+ this.selectedSize = '';
231
+ }
232
+ }
233
+ paginate($event) {
234
+ if ($event) {
235
+ let paginaInicial = ($event?.first > 0 ? $event.first / $event.rows : $event.first) + 1;
236
+ let termoPesquisa = '';
237
+ let ordenacao = '';
238
+ if ($event.globalFilter)
239
+ termoPesquisa = $event.globalFilter;
240
+ if ($event.sortField)
241
+ ordenacao = `${$event.sortField} ${$event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
242
+ const objeto = {
243
+ paginaInicial: paginaInicial,
244
+ tamanhoPagina: $event.rows,
245
+ termoPesquisa: termoPesquisa,
246
+ ordenacao: ordenacao,
247
+ };
248
+ this.onPaginate.emit(objeto);
249
+ }
250
+ }
251
+ isBooleanField(rowData, col) {
252
+ return col.fieldType == 'boolean';
253
+ }
254
+ isChipField(col) {
255
+ return col.fieldType == 'chip';
256
+ }
257
+ isImageField(col) {
258
+ let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
259
+ return retorno;
260
+ }
261
+ returnRowClass(rowData, col) {
262
+ let value = rowData[col.field];
263
+ let rowClass;
264
+ this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
265
+ if (col.expiredDate == true) {
266
+ new Date(value) < new Date()
267
+ ? (rowClass = rowClass + ' text-red-400 font-semibold')
268
+ : '';
269
+ }
270
+ return rowClass;
271
+ }
272
+ transformValue(rowData, col) {
273
+ let value = rowData[col.field];
274
+ if (value != null) {
275
+ if (!col.pipe) {
276
+ return value;
277
+ }
278
+ switch (col.pipe) {
279
+ case 'date':
280
+ return this.datePipe.transform(value, 'dd/MM/yyyy');
281
+ case 'decimal':
282
+ return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
283
+ case 'cpfcnpj':
284
+ return this.cpfCnpjPipe.transform(value);
285
+ case 'telefone':
286
+ return this.telefonePipe.transform(value);
287
+ case 'codigofipe':
288
+ return this.codigoFipePipe.transform(value);
289
+ case 'money':
290
+ return this.formatarValor(value);
291
+ case 'percentage':
292
+ return `${value} %`;
293
+ default:
294
+ break;
295
+ }
296
+ }
297
+ }
298
+ alignColunasHeader(col) {
299
+ if (col.align) {
300
+ if (col.align == 'right')
301
+ return 'justify-content: end';
302
+ else
303
+ return '';
304
+ }
305
+ else
306
+ return '';
307
+ }
308
+ centralizarColunas(col) {
309
+ if (col.centralize) {
310
+ return 'text-align: center; ';
311
+ }
312
+ else
313
+ return '';
314
+ }
315
+ alignColunas(col) {
316
+ if (col.align) {
317
+ return `text-align: ${col.align}`;
318
+ }
319
+ else
320
+ return '';
321
+ }
322
+ returnClassIcon(rowData, col) {
323
+ return this.retornarRow(rowData, col, 'iconrow');
324
+ }
325
+ returnTooltipIcon(rowData, col) {
326
+ return this.retornarRow(rowData, col, 'tooltipiconrow');
327
+ }
328
+ returnClassChip(rowData, col) {
329
+ return `chip-style w-auto border-round-2xl p-2 text-${this.retornarRow(rowData, col, 'stylechip')} border-${this.retornarRow(rowData, col, 'stylechip')}`;
330
+ }
331
+ retornarRow(rowData, col, field) {
332
+ const _rowaction = this.config.rows ? this.config.rows[col.field] : null;
333
+ const _field = _rowaction && _rowaction[field]
334
+ ? _rowaction[field].constructor === Function
335
+ ? _rowaction[field].apply(this, [rowData])
336
+ : _rowaction[field]
337
+ : null;
338
+ return _field;
339
+ }
340
+ selectionChange(value = []) {
341
+ this.onSelectionChange.emit(value);
342
+ }
343
+ formatarValor(valor) {
344
+ const formatter = new Intl.NumberFormat('pt-BR', {
345
+ style: 'currency',
346
+ currency: 'BRL',
347
+ });
348
+ return formatter.format(valor);
349
+ }
350
+ loadImage(rowData, col) {
351
+ /*
352
+ Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
353
+ */
354
+ let retorno = `data:image/jpg;base64, ${this.imgDefault}`;
355
+ if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
356
+ if (rowData[col.field].includes('http'))
357
+ retorno = rowData[col.field];
358
+ else
359
+ retorno = `data:image/jpg;base64, ${rowData[col.field]}`;
360
+ }
361
+ return retorno;
362
+ }
363
+ getCustomTemplate(templatename) {
364
+ return this._templates[templatename];
365
+ }
366
+ exibirCampo(field, rowData) {
367
+ let visible = field.visible ? field.visible(rowData) : true;
368
+ return visible;
369
+ }
370
+ activeItem(rowData) {
371
+ this.selectedItem = rowData;
372
+ this.onActiveItem.emit({ rowData: rowData });
373
+ }
374
+ activeItemLote(rowData) {
375
+ this.onActiveItemLote.emit(rowData);
376
+ }
377
+ retornarCampo(action, rowData, field) {
378
+ const _function = action.dynamicfields
379
+ ? action.dynamicfields[field]
380
+ : null;
381
+ const _field = _function
382
+ ? _function.apply(action, [rowData])
383
+ : action[field];
384
+ return _field;
385
+ }
386
+ callDisabled(action, data) {
387
+ if (action?.disabled) {
388
+ return action.disabled(data);
389
+ }
390
+ return false;
391
+ }
392
+ criarMenusModal(data) {
393
+ if (this.config.actions && data) {
394
+ const items = this.config.actions.map((action) => {
395
+ const icon = this.retornarCampo(action, data, 'icon');
396
+ const tooltip = this.retornarCampo(action, data, 'tooltip');
397
+ const label = this.retornarCampo(action, data, 'label');
398
+ const command = this.retornarCampo(action, data, 'command');
399
+ const visible = action.visible
400
+ ? action.visible(data)
401
+ : true;
402
+ const disabled = action.disabled
403
+ ? action.disabled(data)
404
+ : false;
405
+ const menuInsert = {
406
+ label,
407
+ icon,
408
+ tooltip,
409
+ command,
410
+ disabled,
411
+ visible,
412
+ };
413
+ let item = this.menuItems.filter((x) => x.command == menuInsert.command);
414
+ if (item.length == 0)
415
+ this.menuItems.push(menuInsert);
416
+ else {
417
+ if (menuInsert.label != item[0].label) {
418
+ let index = this.menuItems.indexOf(item[0]);
419
+ this.menuItems.splice(index, 1);
420
+ }
421
+ if (menuInsert.visible != item[0].visible) {
422
+ let index = this.menuItems.indexOf(item[0]);
423
+ this.menuItems.splice(index, 1);
424
+ }
425
+ if (menuInsert.disabled != item[0].disabled) {
426
+ let index = this.menuItems.indexOf(item[0]);
427
+ this.menuItems.splice(index, 1);
428
+ }
429
+ }
430
+ });
431
+ }
432
+ }
433
+ validaLinhaAcaoVazia(rowData) {
434
+ var algumItemVisivel = this.config.actions.some((a) => {
435
+ if (typeof a.visible === 'function') {
436
+ return a.visible(rowData) === true;
437
+ }
438
+ else {
439
+ return true; // Retorna true se a.visible(rowData) não existir
440
+ }
441
+ });
442
+ return !algumItemVisivel;
443
+ }
444
+ doubleClick(e, rowData) {
445
+ let eventDoubleClick = { event: e, rowData: rowData };
446
+ let array = [];
447
+ e.target.classList.forEach((x) => array.push(x));
448
+ //if (array.find((x: any) => x == 'ng-star-inserted') != undefined)
449
+ this.doubleClickEvent.emit(eventDoubleClick);
450
+ }
451
+ isDisabledCheckbox(rowData) {
452
+ return this.config.disableControlCheckboxFunction
453
+ ? this.config.disableControlCheckboxFunction(rowData)
454
+ : false;
455
+ }
456
+ returnTooltipRow(rowData, col) {
457
+ return this.retornarRow(rowData, col, 'tooltiprow');
458
+ }
459
+ isSwitchField(col) {
460
+ let retorno = col.fieldType && col.fieldType === 'switch' ? true : false;
461
+ return retorno;
462
+ }
463
+ onSwitchChange(estado, rowData, col) {
464
+ this.onSwitchTableChange.emit({
465
+ estado: estado,
466
+ rowData: rowData,
467
+ col: col
468
+ });
469
+ }
470
+ isButtonDisable(action, rowData, commandEvent) {
471
+ if (this.callDisabled(action, rowData)) {
472
+ return '';
473
+ }
474
+ else
475
+ return this.activeItem(rowData), action?.command(commandEvent);
476
+ }
477
+ isDisableEditRowFunction(rowData) {
478
+ return this.config.disableEditRowFunction ? this.config.disableEditRowFunction(rowData) : false;
479
+ }
480
+ isEditableTable() {
481
+ if (!this.config.columns) {
482
+ return null; // Se this.config.columns for null, retorna null
483
+ }
484
+ return this.config.columns.some((column) => 'fieldControlType' in column);
485
+ }
486
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableEditComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CodigoFipePipe }, { token: i2.CpfCnpjPipe }, { token: i2.TelefonePipe }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
487
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableEditComponent, selector: "kv-table-edit", inputs: { setConfig: ["config", "setConfig"], dataSource: "dataSource", editMode: "editMode", selectedItems: "selectedItems", totalRecords: "totalRecords", paginator: "paginator", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", pageLinksOptions: "pageLinksOptions", showFirstLastIcon: "showFirstLastIcon", tableSize: "tableSize", applyStyle: "applyStyle", acoesLinhaTabela: "acoesLinhaTabela", filterColumnsBtn: "filterColumnsBtn", filtrosAvancados: "filtrosAvancados", scrollHeight: "scrollHeight", isTableScrollable: "isTableScrollable", rowTrackBy: "rowTrackBy", responsiveLayout: "responsiveLayout", espacamentoPai: "espacamentoPai", espacamentoLateral: "espacamentoLateral", tamanhoTotalTabela: "tamanhoTotalTabela", rightCollapse: "rightCollapse", _templates: ["templates", "_templates"] }, outputs: { onFilter: "onFilter", onRowSave: "onRowSave", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", onSwitchTableChange: "onSwitchTableChange" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, usesOnChanges: true, ngImport: i0, template: "\n\n<div class=\"card\" >\n <p-toast></p-toast>\n\n <p-panel\n *ngIf=\"filtrosAvancados\"\n header=\"Filtros avan\u00E7ados\"\n [toggleable]=\"true\"\n [collapsed]=\"true\"\n (collapsedChange)=\"collapsed = !collapsed\"\n [style]=\"{ 'margin-bottom': '2px' }\"\n >\n <ng-template pTemplate=\"headericons\">\n <i\n *ngIf=\"!collapsed\"\n class=\"pi pi-filter\"\n ></i>\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\n <i\n *ngIf=\"collapsed\"\n class=\"pi pi-minus\"\n ></i>\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\n </ng-template>\n <ng-content></ng-content>\n </p-panel>\n\n <p-contextMenu #cm [model]=\"items\"></p-contextMenu>\n <p-table\n #te\n [reorderableColumns]=\"config.reorderableColumns || false\"\n *ngIf=\"config\"\n [value]=\"dataSource\"\n [dataKey]=\"config.dataKey\"\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n [columns]=\"config.columns\"\n [editMode]=\"'row'\"\n [scrollable]=\"true\"\n scrollHeight=\"400px\"\n appendTo=\"body\"\n [styleClass]=\"'p-datatable-sm'\"\n [(selection)]=\"selectedItems\"\n [rowSelectable]=\"isRowSelectable\"\n [globalFilterFields]=\"globalFilterFields\"\n [rows]=\"rows\"\n [paginator]=\"paginator\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\n (selectionChange)=\"selectionChange($event)\"\n [rowHover]=\"true\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n [groupRowsBy]=\"config.fieldGroup\"\n [showFirstLastIcon]=\"showFirstLastIcon\"\n [pageLinks]=\"pageLinksOptions\"\n [scrollable]=\"isTableScrollable\"\n [scrollHeight]=\"scrollHeight\"\n [rowTrackBy]=\"rowTrackBy \"\n [(contextMenuSelection)]=\"selectedProduct\"\n [contextMenu]=\" isEditableTable() ? cm : null\"\n >\n\n\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <ng-template\n pTemplate=\"caption\"\n *ngIf=\"config.enableCation\"\n >\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\n <div class=\"col-12 flex flex-column\">\n <div\n *ngIf=\"config.title\"\n class=\"text-md font-bold my-3\"\n >\n {{ config.title }}\n </div>\n <div\n *ngIf=\"config.subtitle\"\n class=\"text-sm mb-4 font-medium\"\n >\n {{ config.subtitle }}\n </div>\n </div>\n\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\n tamanhoTela < 768 ? 'col-10' : 'col-12'\n }} mt-1 mb-2 \">\n <span\n *ngIf=\"config.enableFilter\"\n class=\"p-input-icon-left\"\n >\n <i class=\"pi pi-search\"></i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(te, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"h-2rem\"\n />\n </span>\n\n </div>\n\n <div class=\"flex flex-row col-1 justify-content-end\">\n <div\n *ngFor=\"let action of config.actionsLote\"\n class=\"btns-options\"\n [style]=\"{ 'margin-right': '7px' }\"\n >\n <button\n id=\"actionLoteBtns\"\n pButton\n *ngIf=\"\n (selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)\n \"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n (click)=\"\n action?.command(commandEvent); activeItemLote(selectedItems)\n \"\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [style.backgroundColor]=\"\n retornarCampo(action, selectedItems, 'btnColor')\n \"\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\n >\n <span\n class=\"material-symbols-outlined md-22\"\n [style.color]=\"\n retornarCampo(action, selectedItems, 'iconBtnColor')\n \"\n >\n {{ retornarCampo(action, selectedItems, \"icon\") }}\n </span>\n </button>\n </div>\n </div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n </div>\n </ng-template>\n\n <ng-template\n pTemplate=\"header\"\n let-columns\n >\n <tr>\n <th\n style=\"width: 4rem; border-left: solid 4px transparent\"\n *ngIf=\"config.enableSelect\"\n >\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\n </th>\n\n <th\n *ngFor=\"let col of columns\"\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.min-width]=\"col.width\"\n pReorderableColumn\n class=\"text-sm\"\n >\n <div\n [class]=\"\n centralizarColunas(col) && alignColunasHeader(col) == ''\n ? 'flex flex-row justify-content-center'\n : 'flex flex-row'\n \"\n [style]=\"alignColunasHeader(col)\"\n >\n <span>{{ col.header }}</span>\n <p-sortIcon\n *ngIf=\"col.sortable === true\"\n [field]=\"col.field\"\n style=\"font-size: 10px\"\n ></p-sortIcon>\n\n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span>\n </div>\n </th>\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\n <th *ngIf=\"isEditableTable()\" id=\"th-edit\" style=\"width: 20px\">Editar</th>\n </tr>\n </ng-template>\n\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n\n\n\n <ng-template pTemplate=\"body\" let-rowData let-editing=\"editing\" let-ri=\"rowIndex\" let-columns=\"columns\"\n let-rowgroup=\"rowgroup\" let-rowspan=\"rowspan\">\n <tr [pEditableRow]=\"rowData\" [pEditableRowDisabled]=\"false\"\n [pContextMenuRow]=\"{rowData, editing}\"\n >\n\n\n <td\n *ngIf=\"config.enableSelect\"\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\n >\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\n <p-tableCheckbox\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n\n\n <ng-container *ngFor=\"let col of columns; let i = index\">\n\n\n\n\n\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\n <td *ngIf=\"col.fieldControlType\"\n [id]=\"'rowTable'+ rowData[config.dataKey]\"\n pSelectableRowDblClick=\"\"\n (click)=\"activeItem(rowData)\"\n (dblclick)=\"dbClickEdit()\"\n pSelectableRowDblClick=\"\"\n class=\"rowTable\" [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col) \" [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <p-cellEditor [ngClass]=\"{'switch': col.fieldControlType == 'switch'}\">\n <!-- Controle de edi\u00E7\u00E3o do campo -->\n <ng-template pTemplate=\"input\">\n\n <ng-container [ngSwitch]=\"col.fieldControlType\">\n\n <ng-container *ngSwitchCase=\"'text'\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <kv-input-text class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-text>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <kv-input-number class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-number>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mask'\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <kv-input-mask class=\"cellControl col\" [mask]=\"col.mask\" [required]=\"col.required ?? true\" [(ngModel)]=\"rowData[col.field]\"></kv-input-mask>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'switch'\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <kv-switch class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" ></kv-switch>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'calendar'\">\n <div style=\"width: 300px\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <kv-input-calendar class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\"></kv-input-calendar>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <p-dropdown\n class=\"cellControl col\"\n appendTo=\"body\"\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\n [options]=\"col.fieldDropDownControl.fieldControlDropdownSource\"\n [(ngModel)]=\"rowData[col.field]\"\n >\n </p-dropdown>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <!-- Valor atual do campo -->\n <ng-template pTemplate=\"output\">\n <ng-container [ngSwitch]=\"col.fieldControlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container *ngIf=\"rowData[col.field]\">\n {{\n retornaDescricaoDrop(\n rowData,\n col\n )\n }}\n <!-- {{rowData[col.field]}} -->\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'switch'\">\n <kv-switch [(ngModel)]=\"rowData[col.field]\" [disabled]=\"true\"></kv-switch>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'calendar'\">\n {{ rowData[col.field] | date }}\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n {{ rowData[col.field] }}\n </ng-container>\n </ng-container>\n </ng-template>\n </p-cellEditor>\n </td>\n\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n\n\n\n\n\n\n\n\n\n\n <td *ngIf=\"rowgroup && !col.template && !col.fieldControlType\" [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n class=\"rowTable\" [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \" [pTooltip]=\"returnTooltipRow(rowData, col)\">\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\n <span *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \">\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">{{\n transformValue(rowData, col) }}</span>\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\n </kv-switch>\n </span>\n </ng-template>\n </td>\n\n <td *ngIf=\"!rowgroup && !col.grouped && !col.template && !col.fieldControlType\" [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \" class=\"rowTable\" [pTooltip]=\"returnTooltipRow(rowData, col)\">\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\n <span *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \">\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\n {{ transformValue(rowData, col) }}</span>\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\n </kv-switch>\n </span>\n </ng-template>\n </td>\n\n <td *ngIf=\"col.template && !col.fieldControlType\" [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \" class=\"rowTable\">\n <span class=\"p-column-title\">{{ col.header }}:</span>\n <ng-container *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\">\n </ng-container>\n </td>\n\n </ng-container>\n\n\n\n\n\n\n\n\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- Controle de a\u00E7\u00E3o -->\n <td [ngClass]=\"{'td-tools': isEditableTable(), 'td-tools-sticky': !isEditableTable() }\"\n *ngIf=\"config.actions && config.actions.length > 0 && !editing\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\n >\n <div\n class=\"flex flex-row justify-content-end w-full gap-1\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div\n *ngFor=\"let action of config.actions\"\n class=\"mr-1\"\n >\n <!-- <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\n \"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span\n >\n </button> -->\n\n <span\n class=\"material-symbols-outlined {{\n callDisabled(action, rowData)\n ? 'text-gray-400 cursor-auto'\n : 'cursor-pointer'\n }}\"\n style=\"font-size: 20px\"\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\n \"\n >\n {{ retornarCampo(action, rowData, \"icon\") }}\n </span>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <!-- <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n > -->\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\n style=\"font-size: 20px\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n more_horiz\n </span>\n <!-- </button> -->\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </td>\n\n <td\n class=\"td-tools\"\n *ngIf=\"config.actions && config.actions.length > 0 && editing\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\n >\n <div\n class=\"flex flex-row justify-content-end w-full gap-1\"\n *ngIf=\"acoesLinhaTabela\"\n >\n\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n </div>\n </td>\n\n\n\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- Controle de edi\u00E7\u00E3o -->\n <td class=\"td-edit\" *ngIf=\"this.isEditableTable()\" >\n <div class=\"flex align-items-center justify-content-center gap-2\">\n <button [style.height]=\"'28px'\" [id]=\"'rowEdit' + rowData[config.dataKey] \" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"!editing\" pButton pRipple type=\"button\" pInitEditableRow icon=\"pi pi-pencil\"\n (click)=\"onRowEditInit(rowData)\" class=\"p-button-rounded p-button-text\"></button>\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pSaveEditableRow icon=\"pi pi-check\"\n (click)=\"onRowEditSave(rowData, ri)\" [id]=\"'rowSave' + rowData[config.dataKey] \" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pCancelEditableRow icon=\"pi pi-times\"\n (click)=\"onRowEditCancel(rowData, ri)\" [id]=\"'rowCancel' + rowData[config.dataKey] \" class=\"p-button-rounded p-button-text p-button-danger\"></button>\n </div>\n </td>\n\n\n\n\n </tr>\n </ng-template>\n </p-table>\n</div>\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#fff;color:#5289b4}.td-tools{position:sticky;right:52px;border-right:3px solid #fff!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}.td-tools-sticky{position:sticky;right:0;border-right:3px solid #fff!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border:1px solid #dee2e6;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-inputtext{font-size:.75rem}:host ::ng-deep .p-datatable-table{font-size:.75rem}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>div>kv-input-text>span>.inputs{height:15px!important}:host ::ng-deep .p-dropdown .p-dropdown-label{display:flex;align-items:center;justify-content:center}:host ::ng-deep p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:21px!important}:host ::ng-deep input.p-inputtext.p-component.p-element.p-inputmask.inputs.p-filled{height:15px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i6.ContextMenu, selector: "p-contextMenu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "ariaLabel", "ariaLabelledBy"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i9.InputText, selector: "[pInputText]" }, { kind: "component", type: i10.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i11.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "directive", type: i12.Ripple, selector: "[pRipple]" }, { kind: "component", type: i13.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i13.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i13.ContextMenuRow, selector: "[pContextMenuRow]", inputs: ["pContextMenuRow", "pContextMenuRowIndex", "pContextMenuRowDisabled"] }, { kind: "directive", type: i13.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "component", type: i13.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i13.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i13.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i13.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i13.SelectableRowDblClick, selector: "[pSelectableRowDblClick]", inputs: ["pSelectableRowDblClick", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i13.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i13.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i13.SaveEditableRow, selector: "[pSaveEditableRow]" }, { kind: "directive", type: i13.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i14.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i16.InputCalendarComponent, selector: "kv-input-calendar", inputs: ["isYear", "isMonthYear", "minDate", "maxDate", "showButtonBar", "showIcon", "showTime", "selectionMode"], outputs: ["onSelectionChange", "onSelectionValue"] }, { kind: "component", type: i17.InputMaskComponent, selector: "kv-input-mask", inputs: ["mask"], outputs: ["onComplete"] }, { kind: "component", type: i18.InputNumberComponent, selector: "kv-input-number", inputs: ["mode", "digits", "min", "max", "suffix"] }, { kind: "component", type: i19.InputTextComponent, selector: "kv-input-text" }, { kind: "component", type: i20.SwitchComponent, selector: "kv-switch", inputs: ["switchValue", "readonly"], outputs: ["onSwitchChange"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] }); }
488
+ }
489
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableEditComponent, decorators: [{
490
+ type: Component,
491
+ args: [{ selector: 'kv-table-edit', template: "\n\n<div class=\"card\" >\n <p-toast></p-toast>\n\n <p-panel\n *ngIf=\"filtrosAvancados\"\n header=\"Filtros avan\u00E7ados\"\n [toggleable]=\"true\"\n [collapsed]=\"true\"\n (collapsedChange)=\"collapsed = !collapsed\"\n [style]=\"{ 'margin-bottom': '2px' }\"\n >\n <ng-template pTemplate=\"headericons\">\n <i\n *ngIf=\"!collapsed\"\n class=\"pi pi-filter\"\n ></i>\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\n <i\n *ngIf=\"collapsed\"\n class=\"pi pi-minus\"\n ></i>\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\n </ng-template>\n <ng-content></ng-content>\n </p-panel>\n\n <p-contextMenu #cm [model]=\"items\"></p-contextMenu>\n <p-table\n #te\n [reorderableColumns]=\"config.reorderableColumns || false\"\n *ngIf=\"config\"\n [value]=\"dataSource\"\n [dataKey]=\"config.dataKey\"\n [tableStyle]=\"{ 'min-width': '50rem' }\"\n [columns]=\"config.columns\"\n [editMode]=\"'row'\"\n [scrollable]=\"true\"\n scrollHeight=\"400px\"\n appendTo=\"body\"\n [styleClass]=\"'p-datatable-sm'\"\n [(selection)]=\"selectedItems\"\n [rowSelectable]=\"isRowSelectable\"\n [globalFilterFields]=\"globalFilterFields\"\n [rows]=\"rows\"\n [paginator]=\"paginator\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\n (selectionChange)=\"selectionChange($event)\"\n [rowHover]=\"true\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n [groupRowsBy]=\"config.fieldGroup\"\n [showFirstLastIcon]=\"showFirstLastIcon\"\n [pageLinks]=\"pageLinksOptions\"\n [scrollable]=\"isTableScrollable\"\n [scrollHeight]=\"scrollHeight\"\n [rowTrackBy]=\"rowTrackBy \"\n [(contextMenuSelection)]=\"selectedProduct\"\n [contextMenu]=\" isEditableTable() ? cm : null\"\n >\n\n\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <ng-template\n pTemplate=\"caption\"\n *ngIf=\"config.enableCation\"\n >\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\n <div class=\"col-12 flex flex-column\">\n <div\n *ngIf=\"config.title\"\n class=\"text-md font-bold my-3\"\n >\n {{ config.title }}\n </div>\n <div\n *ngIf=\"config.subtitle\"\n class=\"text-sm mb-4 font-medium\"\n >\n {{ config.subtitle }}\n </div>\n </div>\n\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\n tamanhoTela < 768 ? 'col-10' : 'col-12'\n }} mt-1 mb-2 \">\n <span\n *ngIf=\"config.enableFilter\"\n class=\"p-input-icon-left\"\n >\n <i class=\"pi pi-search\"></i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(te, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"h-2rem\"\n />\n </span>\n\n </div>\n\n <div class=\"flex flex-row col-1 justify-content-end\">\n <div\n *ngFor=\"let action of config.actionsLote\"\n class=\"btns-options\"\n [style]=\"{ 'margin-right': '7px' }\"\n >\n <button\n id=\"actionLoteBtns\"\n pButton\n *ngIf=\"\n (selectedItems.length > 0 || action.showAcoesLote) &&\n exibirCampo(action, this.action)\n \"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n (click)=\"\n action?.command(commandEvent); activeItemLote(selectedItems)\n \"\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [style.backgroundColor]=\"\n retornarCampo(action, selectedItems, 'btnColor')\n \"\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\n >\n <span\n class=\"material-symbols-outlined md-22\"\n [style.color]=\"\n retornarCampo(action, selectedItems, 'iconBtnColor')\n \"\n >\n {{ retornarCampo(action, selectedItems, \"icon\") }}\n </span>\n </button>\n </div>\n </div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n </div>\n </ng-template>\n\n <ng-template\n pTemplate=\"header\"\n let-columns\n >\n <tr>\n <th\n style=\"width: 4rem; border-left: solid 4px transparent\"\n *ngIf=\"config.enableSelect\"\n >\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\n </th>\n\n <th\n *ngFor=\"let col of columns\"\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.min-width]=\"col.width\"\n pReorderableColumn\n class=\"text-sm\"\n >\n <div\n [class]=\"\n centralizarColunas(col) && alignColunasHeader(col) == ''\n ? 'flex flex-row justify-content-center'\n : 'flex flex-row'\n \"\n [style]=\"alignColunasHeader(col)\"\n >\n <span>{{ col.header }}</span>\n <p-sortIcon\n *ngIf=\"col.sortable === true\"\n [field]=\"col.field\"\n style=\"font-size: 10px\"\n ></p-sortIcon>\n\n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span>\n </div>\n </th>\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\n <th *ngIf=\"isEditableTable()\" id=\"th-edit\" style=\"width: 20px\">Editar</th>\n </tr>\n </ng-template>\n\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n\n\n\n <ng-template pTemplate=\"body\" let-rowData let-editing=\"editing\" let-ri=\"rowIndex\" let-columns=\"columns\"\n let-rowgroup=\"rowgroup\" let-rowspan=\"rowspan\">\n <tr [pEditableRow]=\"rowData\" [pEditableRowDisabled]=\"false\"\n [pContextMenuRow]=\"{rowData, editing}\"\n >\n\n\n <td\n *ngIf=\"config.enableSelect\"\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\n >\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\n <p-tableCheckbox\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n\n\n <ng-container *ngFor=\"let col of columns; let i = index\">\n\n\n\n\n\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\n <td *ngIf=\"col.fieldControlType\"\n [id]=\"'rowTable'+ rowData[config.dataKey]\"\n pSelectableRowDblClick=\"\"\n (click)=\"activeItem(rowData)\"\n (dblclick)=\"dbClickEdit()\"\n pSelectableRowDblClick=\"\"\n class=\"rowTable\" [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col) \" [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n <p-cellEditor [ngClass]=\"{'switch': col.fieldControlType == 'switch'}\">\n <!-- Controle de edi\u00E7\u00E3o do campo -->\n <ng-template pTemplate=\"input\">\n\n <ng-container [ngSwitch]=\"col.fieldControlType\">\n\n <ng-container *ngSwitchCase=\"'text'\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <kv-input-text class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-text>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'number'\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <kv-input-number class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-number>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'mask'\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <kv-input-mask class=\"cellControl col\" [mask]=\"col.mask\" [required]=\"col.required ?? true\" [(ngModel)]=\"rowData[col.field]\"></kv-input-mask>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'switch'\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <kv-switch class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" ></kv-switch>\n </div>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'calendar'\">\n <div style=\"width: 300px\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <kv-input-calendar class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\"></kv-input-calendar>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\n <p-dropdown\n class=\"cellControl col\"\n appendTo=\"body\"\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\n [options]=\"col.fieldDropDownControl.fieldControlDropdownSource\"\n [(ngModel)]=\"rowData[col.field]\"\n >\n </p-dropdown>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n\n <!-- Valor atual do campo -->\n <ng-template pTemplate=\"output\">\n <ng-container [ngSwitch]=\"col.fieldControlType\">\n <ng-container *ngSwitchCase=\"'dropdown'\">\n <ng-container *ngIf=\"rowData[col.field]\">\n {{\n retornaDescricaoDrop(\n rowData,\n col\n )\n }}\n <!-- {{rowData[col.field]}} -->\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'switch'\">\n <kv-switch [(ngModel)]=\"rowData[col.field]\" [disabled]=\"true\"></kv-switch>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'calendar'\">\n {{ rowData[col.field] | date }}\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n {{ rowData[col.field] }}\n </ng-container>\n </ng-container>\n </ng-template>\n </p-cellEditor>\n </td>\n\n\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\n\n\n\n\n\n\n\n\n\n\n\n <td *ngIf=\"rowgroup && !col.template && !col.fieldControlType\" [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n class=\"rowTable\" [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \" [pTooltip]=\"returnTooltipRow(rowData, col)\">\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\n <span *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \">\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">{{\n transformValue(rowData, col) }}</span>\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\n </kv-switch>\n </span>\n </ng-template>\n </td>\n\n <td *ngIf=\"!rowgroup && !col.grouped && !col.template && !col.fieldControlType\" [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \" class=\"rowTable\" [pTooltip]=\"returnTooltipRow(rowData, col)\">\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\n <span *ngIf=\"\n !isChipField(col) && !col.iconField && !isImageField(col)\n \">\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\n {{ transformValue(rowData, col) }}</span>\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\n </kv-switch>\n </span>\n </ng-template>\n </td>\n\n <td *ngIf=\"col.template && !col.fieldControlType\" [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \" class=\"rowTable\">\n <span class=\"p-column-title\">{{ col.header }}:</span>\n <ng-container *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\">\n </ng-container>\n </td>\n\n </ng-container>\n\n\n\n\n\n\n\n\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- Controle de a\u00E7\u00E3o -->\n <td [ngClass]=\"{'td-tools': isEditableTable(), 'td-tools-sticky': !isEditableTable() }\"\n *ngIf=\"config.actions && config.actions.length > 0 && !editing\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\n >\n <div\n class=\"flex flex-row justify-content-end w-full gap-1\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div\n *ngFor=\"let action of config.actions\"\n class=\"mr-1\"\n >\n <!-- <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\n \"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span\n >\n </button> -->\n\n <span\n class=\"material-symbols-outlined {{\n callDisabled(action, rowData)\n ? 'text-gray-400 cursor-auto'\n : 'cursor-pointer'\n }}\"\n style=\"font-size: 20px\"\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\n \"\n >\n {{ retornarCampo(action, rowData, \"icon\") }}\n </span>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <!-- <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n > -->\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\n style=\"font-size: 20px\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n more_horiz\n </span>\n <!-- </button> -->\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </td>\n\n <td\n class=\"td-tools\"\n *ngIf=\"config.actions && config.actions.length > 0 && editing\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\n >\n <div\n class=\"flex flex-row justify-content-end w-full gap-1\"\n *ngIf=\"acoesLinhaTabela\"\n >\n\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n </div>\n </td>\n\n\n\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\n <!-- Controle de edi\u00E7\u00E3o -->\n <td class=\"td-edit\" *ngIf=\"this.isEditableTable()\" >\n <div class=\"flex align-items-center justify-content-center gap-2\">\n <button [style.height]=\"'28px'\" [id]=\"'rowEdit' + rowData[config.dataKey] \" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"!editing\" pButton pRipple type=\"button\" pInitEditableRow icon=\"pi pi-pencil\"\n (click)=\"onRowEditInit(rowData)\" class=\"p-button-rounded p-button-text\"></button>\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pSaveEditableRow icon=\"pi pi-check\"\n (click)=\"onRowEditSave(rowData, ri)\" [id]=\"'rowSave' + rowData[config.dataKey] \" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pCancelEditableRow icon=\"pi pi-times\"\n (click)=\"onRowEditCancel(rowData, ri)\" [id]=\"'rowCancel' + rowData[config.dataKey] \" class=\"p-button-rounded p-button-text p-button-danger\"></button>\n </div>\n </td>\n\n\n\n\n </tr>\n </ng-template>\n </p-table>\n</div>\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#fff;color:#5289b4}.td-tools{position:sticky;right:52px;border-right:3px solid #fff!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}.td-tools-sticky{position:sticky;right:0;border-right:3px solid #fff!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border:1px solid #dee2e6;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-inputtext{font-size:.75rem}:host ::ng-deep .p-datatable-table{font-size:.75rem}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>div>kv-input-text>span>.inputs{height:15px!important}:host ::ng-deep .p-dropdown .p-dropdown-label{display:flex;align-items:center;justify-content:center}:host ::ng-deep p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:21px!important}:host ::ng-deep input.p-inputtext.p-component.p-element.p-inputmask.inputs.p-filled{height:15px}\n"] }]
492
+ }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CodigoFipePipe }, { type: i2.CpfCnpjPipe }, { type: i2.TelefonePipe }, { type: i2.NotificationService }]; }, propDecorators: { setConfig: [{
493
+ type: Input,
494
+ args: ['config']
495
+ }], dataSource: [{
496
+ type: Input
497
+ }], editMode: [{
498
+ type: Input
499
+ }], selectedItems: [{
500
+ type: Input
501
+ }], totalRecords: [{
502
+ type: Input
503
+ }], paginator: [{
504
+ type: Input
505
+ }], rowsPerPageOptions: [{
506
+ type: Input
507
+ }], rows: [{
508
+ type: Input
509
+ }], pageLinksOptions: [{
510
+ type: Input
511
+ }], showFirstLastIcon: [{
512
+ type: Input
513
+ }], tableSize: [{
514
+ type: Input
515
+ }], applyStyle: [{
516
+ type: Input
517
+ }], acoesLinhaTabela: [{
518
+ type: Input
519
+ }], filterColumnsBtn: [{
520
+ type: Input
521
+ }], filtrosAvancados: [{
522
+ type: Input
523
+ }], scrollHeight: [{
524
+ type: Input
525
+ }], isTableScrollable: [{
526
+ type: Input
527
+ }], rowTrackBy: [{
528
+ type: Input
529
+ }], responsiveLayout: [{
530
+ type: Input
531
+ }], espacamentoPai: [{
532
+ type: Input
533
+ }], espacamentoLateral: [{
534
+ type: Input
535
+ }], tamanhoTotalTabela: [{
536
+ type: Input
537
+ }], rightCollapse: [{
538
+ type: Input
539
+ }], onFilter: [{
540
+ type: Output
541
+ }], _templates: [{
542
+ type: Input,
543
+ args: ['templates']
544
+ }], onRowSave: [{
545
+ type: Output
546
+ }], onActiveItem: [{
547
+ type: Output
548
+ }], onActiveItemLote: [{
549
+ type: Output
550
+ }], onPaginate: [{
551
+ type: Output
552
+ }], onSelectionChange: [{
553
+ type: Output
554
+ }], doubleClickEvent: [{
555
+ type: Output
556
+ }], filterField: [{
557
+ type: Output
558
+ }], onSwitchTableChange: [{
559
+ type: Output
560
+ }], onWindowResize: [{
561
+ type: HostListener,
562
+ args: ['window:resize', ['$event']]
563
+ }] } });
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvdGFibGUtZWRpdC90YWJsZS1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS1lZGl0L3RhYmxlLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFlBQVksRUFBMkIsTUFBTSxlQUFlLENBQUM7QUFPaEosT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzFELE1BQU0sT0FBTyxrQkFBa0I7SUFTN0IsSUFBcUIsU0FBUyxDQUFDLEtBQXNCO1FBQ25ELElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJO1lBQ3hDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUs7WUFDekMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTtZQUN4QyxHQUFHLEtBQUs7U0FDVCxDQUFDO1FBRUYsa0NBQWtDO1FBQ2xDLDJDQUEyQztRQUMzQywrQ0FBK0M7UUFDL0MsUUFBUTtRQUNSLElBQUk7SUFDTixDQUFDO0lBMERELFlBQ21CLFFBQWtCLEVBQ2xCLFdBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLG1CQUF3QztRQUx4QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtR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QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQXVMUCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBIb3N0TGlzdGVuZXIsIFRlbXBsYXRlUmVmLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZW51SXRlbSwgTWVudUl0ZW1Db21tYW5kRXZlbnQsIFNlbGVjdEl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBDb2RpZ29GaXBlUGlwZSwgQ3BmQ25walBpcGUsIEt2TWVudUl0ZW0sIE5vdGlmaWNhdGlvblNlcnZpY2UsIFRhYmxlQ29uZmlnLCBUYWJsZUNvbmZpZ0NvbHVtbiwgVGFibGVQYWdpbmF0ZSwgVGVsZWZvbmVQaXBlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCBUYWJsZUVkaXRDb25maWcgZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGVkaXQuY29uZmlnJztcbmltcG9ydCB7IFRhYmxlRWRpdENvbmZpZ0NvbHVtbiB9IGZyb20gJy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlZWRpdC5jb25maWcuY29sdW1uJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna3YtdGFibGUtZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1lZGl0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtZWRpdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2Vze1xuXG5cbiAgY29uZmlnITogVGFibGVFZGl0Q29uZmlnO1xuICBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XG5cbiAgY29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBASW5wdXQoJ2NvbmZpZycpIHNldCBzZXRDb25maWcodmFsdWU6IFRhYmxlRWRpdENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgZW5hYmxlQ2F0aW9uOiB2YWx1ZS5lbmFibGVDYXRpb24gfHwgdHJ1ZSxcbiAgICAgIGVuYWJsZVNlbGVjdDogdmFsdWUuZW5hYmxlU2VsZWN0IHx8IGZhbHNlLFxuICAgICAgZW5hYmxlRmlsdGVyOiB2YWx1ZS5lbmFibGVGaWx0ZXIgfHwgdHJ1ZSxcbiAgICAgIC4uLnZhbHVlLFxuICAgIH07XG5cbiAgICAvLyBpZiAodGhpcy5jb25maWcuZW5hYmxlRmlsdGVyKSB7XG4gICAgLy8gICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgIC8vICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5wdXNoKGNvbC5maWVsZCk7XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG4gIH1cblxuICBASW5wdXQoKSBkYXRhU291cmNlITogYW55W107XG4gIEBJbnB1dCgpIGVkaXRNb2RlOiAncm93JyB8ICdjZWxsJyA9ICdjZWxsJztcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRJdGVtITogYW55O1xuICBASW5wdXQoKSB0b3RhbFJlY29yZHMhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9ucyE6IG51bWJlcltdO1xuICBASW5wdXQoKSByb3dzOiBudW1iZXIgPSA1O1xuICBASW5wdXQoKSBwYWdlTGlua3NPcHRpb25zOiBudW1iZXIgPSAxO1xuICBASW5wdXQoKSBzaG93Rmlyc3RMYXN0SWNvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0YWJsZVNpemUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIGFwcGx5U3R5bGU6IEZ1bmN0aW9uID0gKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4gJyc7XG4gIEBJbnB1dCgpIGFjb2VzTGluaGFUYWJlbGE6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZpbHRyb3NBdmFuY2Fkb3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaXNUYWJsZVNjcm9sbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcm93VHJhY2tCeTogRnVuY3Rpb24gPSAoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSA9PiBpdGVtO1xuICBASW5wdXQoKSByZXNwb25zaXZlTGF5b3V0OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZXNwYWNhbWVudG9QYWk6IHN0cmluZyA9ICcycHgnO1xuICBASW5wdXQoKSBlc3BhY2FtZW50b0xhdGVyYWw6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSB0YW1hbmhvVG90YWxUYWJlbGEhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHJpZ2h0Q29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIG9uRmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoJ3RlbXBsYXRlcycpIF90ZW1wbGF0ZXMhOiBhbnk7XG4gIHRhbWFuaG9UZWxhITogbnVtYmVyO1xuICBzZWxlY3RlZFNpemU6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlSWVtcyE6IGFueVtdO1xuICBtZW51SXRlbXM6IEt2TWVudUl0ZW1bXSA9IFtdO1xuICBpbWdEZWZhdWx0OiBzdHJpbmcgPVxuICAgICcvOWovNEFBUVNrWkpSZ0FCQVFJQWRnQjJBQUQvNFFCaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFNQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQjJBQUFBQVFBQUFIWUFBQUFCLzlzQVF3QURBZ0lDQWdJREFnSUNBd01EQXdRR0JBUUVCQVFJQmdZRkJna0lDZ29KQ0FrSkNnd1BEQW9MRGdzSkNRMFJEUTRQRUJBUkVBb01FaE1TRUJNUEVCQVEvOXNBUXdFREF3TUVBd1FJQkFRSUVBc0pDeEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUS84QUFFUWdBa0FDUUF3RVJBQUlSQVFNUkFmL0VBQjBBQVFBQkJBTUJBQUFBQUFBQUFBQUFBQUFHQVFJSENBTUVDUVgveEFCQkVBQUNBUVFBQlFJQ0NBUURCQXNBQUFBQkFnTUFCQVVSQmdjU0lURVRRUWhSQ1JRVkdTSlZsZEV5WVlHUlFsSmlGaU0zT0ZOamNYTjFkcEtUc2JPMC84UUFHZ0VCQUFJREFRQUFBQUFBQUFBQUFBQUFBQUVGQXdRR0F2L0VBRElSQUFJQUJBTUZDQUVGQVFFQkFBQUFBQUFCQWdNRUVTRXhVUVVTUVpId0V4VXlZWEdCb2JIUklqTkN3ZUUwOFNQLzJnQU1Bd0VBQWhFREVRQS9BUEtxZ0ZBS0FVQmRERExjU3BCQkU4a3NqQkVSRkpabUowQUFQSkpxVW5FN0lodFFxN3lKNXc5eWR6MlZpK3M1ZTRYRlJNdTBWMDlTVTcwUnRBUjBqUlBrOVFJMFY5NnM1R3lwa3hYbVBkK1gvbjM1RmJPMnBLbDRRZnFmeHpKOWpPVS9CbU82V2tzWmI2UkpCSXIzVXBPdGEwcFZlbFNPM2dnNzJkN0hhck9YczJuZ3pWL1hwSXE0OXBWTWZHM292emRrbXNNVGlzWDEvWm1NdExQMWRkZm9RTEgxYTNyZlNCdld6L2V0dUNYQkx2dUpLK21CcHh6STVsdDl0MjF4TzNXUThDZ09wZjRuRlpUbyswOFphWG5wYjZQckVDeWRPOWIxMUE2M29mMnJISExnbWVOSitxUGNFeU9YZmNiVjlNQ001UGxQd1prZXBvN0dXeGtlUXlNOXJLUnZlOXFGYnFVTDM4QURXaHJRN1ZxVE5tMDhlU3Q2UC8xRzVCdEtvZzQzOVYrTE1nUEVQSjNQWXFMNnppTGhjckdxN2RFVDA1UnJaT2tKUFVOQWVEMUVuUVgzcXNuN0ttUzF2UzN2ZkQvMzc4aTBrN1VsVEh1eHJkZnh6L3dnYzBNMXZNOXZjUlBGTEV4UjBkU3JLd09pQ0Q0SVB0VlkwNFhabGttb2xkWkZ0UVNLQVVBb0JRQ2dGQVNqZy9sOW1lTFpSS0ZleXNPa3NidVNJbFc3a2FRZHVzN0JCMGREUjJkNkIzYVdobVZPT1VPdjQxTktzcllhVllZeGFkWC9BTitWbXpoN2hIQWNNUkJNVFlJa3BYcGU0ZjhBRksvWWIyeDlqMGc5STB1L1lWME1pbWxVNnRBc2RlSnpzMnBtei8zSXIvWFN5MTFaOW1zNWdLaFRVa1hLNkZCY2FGQ0xqUW9MalFvVGNvVk5CY3BVRW54dUllRWNCeFJDVXkxZ2pTaGVsTGhQd3lwMk90TU81QTZpZWs3WGZ0V0NmU3lxaGZyV092RXp5YWliSWY4QTg0cmVYRHA1WHowWmhQakhsL2wrRVpmVUlhOHNDb0l1NDR5RlU3QTA0NzlCMlJyWjBkalIzc0RuYXFpbVVydThWcitkRG9LU3ZsMUt0RmFHSytWODg4c3I0SzcwK1NMMXBtK0tBVUFvQlFFNTVkY3U1ZUpwbHl1V1I0OFRHM1liS3Rjc0QzVlQ3S0QyTGYwSGZaV3lvYUYxRDM0L0Q5OWNlclZ0ZFhLblhaeS9GOWY3cDFmT01NTVZ2RWx2YnhKSEZHb1JFUlFGVlFOQUFEd0FQYXVpU1VLc3NqblczRTd0NG5JQjg2OUhoc3JRZ3JVQVVBb0JRQ2dGQVVxUVVJb1RjNDVvWXA0bmduaVNTT1JTam82aGxaU05FRUhzUVI3VkRTaVZua2VrM0M3cDRtRGVZbkx1WGhpVnNyaWtlVEZTTjNIY3RiTVQyVmo3cVQ0YitoNzZMYzVYVUxwMzJrdncvWCtlZlQ2T2hybFVMczVuaSsvOTE2dEI2clN5RkFLQWxITC9BSU9sNHV5K3BDcTJGbXlTWFpKTzJVbnRHTkVIYmFJMzdBRStkQTdsRlN1cW1XZVN6L0h1YUZmVnFtbDdxdnZSWHQ1ZWVUV0Y4bm5wYTVzRkRGRkJFa0VFU1J4eHFFUkVVQlZVRFFBQThBRDJycVVrbFpITXR0NHM1UUtrOHRsYWdnVUFvQ2ZjcHVSUE5MbmJrbngvTHZoYTR5RWNEQmJtOWNpSzF0dC85SksybEIxMzZSdGlQQU5ZWjFSTHAxZVl6UElwcHRRN1MwYlA0VDZMYmp1NHRGazRoNXFZS3d1U05tS3pzWnJwQWZsMXNZLy9BSXF1aTJ2QW4rbUZsbERzZU5yOVVTSXJ6QitqYjUyOEsyY3VSNFN5ZUc0dGlpQlkyOXM3VzEyUVBjUnlmZ1AvQUdDVFo5Z2F5U3RxeVkzYUs2TVUzWk02QlhnYVpxdmxzVGxjRGtybkRadkczV1B2N09ReFhGcmRSTkZMRTQ4cXlNQVZQOGpWa21vbGRaRlpGQzRYYUxNNmxTUUtBVUJhUlU1a3BuSE5ERmNSUGIzRVNTUlNLVWRIVU1yS1JvZ2crUWFocE5OTTl3eE9GN3l6TmZlWUhCMHZDT1lJajZUWVhqUEphRUh1cWdqYUhaSjJ1d04rNDBmT3dPV3JhVjBzekR3dkw4ZXgwdEJWcXBsN3I4VUtWL1B6eVN4dGtzdVJGNjB6ZkxvWVpiaVZJSUlua2xrWUlpSXBMTXhPZ0FCNUpOU2s0blpFTnFGWGVSc3B3bmdJdUdlSDdURG9JekpFblZPNkFmN3lWdTdIWUFMRGZZRWpmU0ZIdFhXMDBoVThwUzE3K3ZYd2NoVVRlMm14VE1jWHEvVFYyeXhTd3ZkNXRuMkFLMkRBeTZvSUZBS0F5cDhOWEl6SmZFQnpRc3VDNEpaTFhGd0liM0wzaUFiZ3RFSURkTyszV3hLb3ZudTJ5Q0FhMTZxb1ZOTGNmSGdiTkpUT3BtcURoeFBZbmd6Z3ZoZmw3dzFZOEljSFlhM3htSng4WWpndDRWMEI4MlkrV1ludVdPeVNTU1NhNVdaTWlteE9LTjNaMWt1WERLaFVFQ3NqN2RlRDJLQTF5K01UNFc4Tnp6NE51dUkrSDhkRkR4emhyZHBiQzRqVUsxL0dnMmJXUS80dGpmUVQvQzJ1NEJiZS9RMWpwNDkyTHd2NDh6UXJxTlZNRzlDdjFMNThqeVZkSGpkbzVGS3NwSVpTTkVINUd1bU9XS1VBb0JRRnBIdlVrbytOeGR3OUR4UmdMckV5QlJLNjlkdTdhSFJLUDRUdlIwTjlqb2I2U1I3MXIxVWhWRXB5MzdlcHNVMDNzSnNNelQ2L3YzNDJaclpORE5ielBiM0VUeFN4TVVkSFVxeXNEb2dnK0NEN1Z5VFRoZG1kY21vbGRaRTg1TzhQUlpYUHk1YTVDdEZpbFYxUTZPNVgyRU9pRDJBVmp2WUlZS2FzdGx5Vk1tNzcvajk5ZkpXYlVxSExscVd2NWNmSlcrL3E1bSt1ak9kTHFIa3JVQVVBb0QwaStpNzRWczdUbHJ4ZHhyNlMvVzhsbTF4cGNqdUlyZUJKQUI4Z1d1Vy9zUGxWRHRlTnVaREJvcjljam9OandKUzRvOVg5ZittNjFWQmNDZ0ZBS0E4WS9pMjRWdE9EUGlQNDh3VmhFc1Z2OXAvWGtSUm9JTG1OTGpwQTlnUFcwQjhxNnlpamN5UkRFOVByQTVHdWdVdW9qaFd2M2lZanJaTlVVQW9DbFNDMm9QUmhEbkZ3OUZpcy9GbDdib1dQS3F6c2c3YWxUUWM2QUEwUXluZXlTeFluMnJudHFTRkxtS1l2NWZhL1AzYzZQWmM1ekpXNDg0ZnJoL1pQdVUrTSt6dURMYVJrbFNTK2trdW5XUWExczlLbFJyK0VvaWtlZDczNElxejJiTDNLZFBXNzY5a1ZlMG85K29mbFpmMzlzbVFGYjVvTXVxRHlLQVVBb0QwYitpNjR4czduZ1BqRGdGcFZGM2o4c21XVkNlN1JUd3BFU1BtQTF1Ti9Mckh6cWgydkxhamhqOHJIUWJIbUp3UlFhTzV1N1ZRWEFvQlFDZ1BGejRxT01iUGp6NGh1T3VKY2ZLc3RySmxHdElKRk8xa2p0MFczVndma1JFQ1A1R3VzbzVibHlJWVhwOTRuSTFzeFRLaUtKYS9XQmlxdGsxUlFDZ0ZBV2tWSktJZHpZeG4yandYY3lLa3p5V1VrZDBpeDkvQjZXTERSN0JIYysydGIzb0dxL2FVdHpLZDI0WTljeXcyZE1VdW9WK09IWHVrU1hFV0gyVmlyTEdlcjZ2MU8zamc2K25wNnVoUXU5Yk90NjhicmNsd2RuQW9ORlkwNWtmYVJ1UFYzNW5kSGlzaGpaV29JRkFLQVVCa2JrQnpvemZJWG1aanVQY1JHYmlDTUcyeVZuMWRJdTdOeVBVajM3SHNyS2Zaa1VuWTJEZ3FaQ3FaYmdac1UxUkZUVEZHajJKNWJjek9DK2JYQ2xyeGx3TG1vY2pqcnBSdnBJRWtFbXRtS1ZQS09OOTFQOGlOZ2dubFpzcU9URnVSckU2eVZPZ253NzhEdWlVMWpNZ29EVmo0MHZpenczS1BoZSs1ZThGNVNPNDQ0eTBCZ1BvUHY3SmhjYU16a2Z3eWxUK0JmSUpEbnNBR3NxQ2ljNkpUSTErbGZKVzE5YXBFTGdnZjZuOEhsZDVyb3ptUlFDZ0ZBS0FvM2lwSlIwc3RZREs0cTh4Wm05SVhsdkpCNm5UMWRIV3BYZXRqZXQrTjFqbVFkcEE0TlUxek1rdVBzNDFHbGV6dWR1c2g0UmNQRkR5eXRRQlFDZ0ZBS0FsUEx6bWp6QjVVWnIvYURsNXhWZllTOUlDeUdCd1k1bEIyRmtqWUZKRjM3TUNLeHpaTUU1YnN4WE1zcWRNa1BlbHV4c25oUHBOdWVlUHRGdHN2dzF3amxaRUd2ckQyczhNakg1c0VsQ2YyVVZYeGJKa3Q0Tm9zSWRyemtzVW1SVG1EOUlEOFJQSFZuTGpiTE00N2hhMW1CVnhnN1pvcG1YL3ZwR2VSVC9OQ3ByTEwyYklsdTdWL1V4VGRwMUV4V1R0Nkd1VnpjM0Y1Y1MzZDNQSlBQTTVra2xrWXM3c1Rzc3hQY2tuM05iNlZzRVY3YmVMT09nRkFLQVVBb0NoOFZJUmJROUNnUmNQRkR5eXRRQlFDZ0ZBU2ZnL2xmekg1Z3llbndQd0xuYzRPcnBaN0d3a2xqUS82blVkSy8xSXJISE9seXZIRWtaSmNtWk44RUxabURBL0FKOFQrYlJaWnVCclhGUnYzRFgrVXQxT3Y1cWpzdy9xQldyRnRLbmgvbGYyTnVIWmxURi9HM3VTdUg2TS80aEpVRFNaZmd1RS81WHlVNUkvOEFUQVJXUHZXUm8rdmN5clpNL1ZkZXgxYi9BT2piK0kyelF0YnR3cmZFRCtHM3lqZ24vd0J5TlJVcmFzaDY4aUhzbW9Xbk14OXhSOEczeEw4Skk4MlI1VDVXNmlRYjY4WThWL3NmTUxBenQvY1ZuZ3JxZVBLTCt2c3dSMEZSQm5EeXgrakVPVHhlVHd0N0pqc3hqcnF4dTRUcVNDNWhhS1JEL05XQUlyWlRVU3VqVWNMaGRtZGFwSUZBS0FVQlErS2tJdG9lanFZbS93RHRURldXVDlMMHZybHZIUDBkWFYwOWFodGIwTjYzNTFXT1hIMmtDajFTWjdtUWRuRzRMM3M3Y2p1anhXUXhzclVFQ2dNajhrT1FQTVBuN3hJY0R3UmpsRnZiZExYK1N1ZHJhMlNId1hZQTdZNk9rVUZqbzl0QWtZS2lwbDAwTzlHYkZQVFRLbUxkZzVubzl5YitBdmtqeXdnZ3Z1SXNXdkdtY1FBdmQ1YUlOYkszL1YydXlnSGorUHJiNUVlS29aKzBaMDdDRjdxOHZ5ZEJJMmJKazR4TGVmbitEWTYydGJheXQ0N1N6dDRvSUlsQ1J4UklGUkZIZ0FEc0JXZzIzaXl3U3RnamxxQUtBVUFvQ09jYTh1T0F1WStPT0s0NzRReFdjdHRFS3Q3YkxJMGUvZEhJNmtQODFJTlpKYzJPVTd3T3hqbVNvSnF0R3Jtay9QNzZOdTNqdExuaWJrSGZUZXJHR2tmaDYvbTZ1c2ZLM25idnY1TElUdjhBempzRGIwMjFjZDJmei9KVDFPeVZiZWtjdndhRlpISFpERDVDNXhXV3NwN085czVXZ3VMZWVNcEpGSXAweU1wN2dnZ2dnMWRKcUpYUlNOT0YyZVoxNkVDZ0tIeFVrbzZXV3Z4aXNWZVpRdytxTE8za245UHE2ZXZvVXRyZWpyZXZPcXh6SSt6Z2NlaWI1R1NYQTVrYWdUdGQyNWthNVQ1TVpIZ3Uxalo1bmtzWkpMVjJrTy9CNmxDblovQ0VkQVBHdGE4QVZwN05tT1pUcFBoaDF6TnphTXZzNmgyNDQ5ZTZaTVFhc0N2WmRVRUhaeG1PdTh2a3JURTJFZnFYTjdQSGJ3cHZYVkk3QlZIOXlLaHRRcTdKU2NUc2oyMjVMOHBlSE9Tbkx2RmNCY09XOFlXemlEWGx5RjA5NWRFRDFaM1BrbGo0MzRVS283QVZ5TlJPaXFKamppT3hwNUVOUExVRUpPYXdtWVVBb0JRQ2dGQUtBVUJvVjlKZnlWdzhXTXhYUEhDMmtjRisxMG1KelBwcnI2d3JJeGdtYi9VdlFVSjhrTWc4TFYxc3FvZDNKZnFpazJ2VHF5bkxQSm5uNVYyVVFvQzBtcEpSRHViR1QrenVDN3FOWG1TUzlranRVYU02MXM5VEJqc2ZoS0k0OTk3MXJSTlYrMHBqbDA3dHh3NjVHL3M2V3BsUXI4TWV2ZG9nSEozaUNMRlorWEUzSlZZc3Fxb3JuUTFNbXlnMlNPeERNUEJKWXFLck5sejFMbTdqeWkrK0JaN1ZrT1pMVXlIK1BEeWZ0dzVXdjVHYjY2STU0dXFUeVN6bEwveFY0TS84d1k3L0FQVEhXS2QrMUY2TXl5UDNZZlZIdWJYSEhaaWdGQUtBVUFvQlFDZ0ZBYXkvU0ovOHMrUy84VnNQL3NxdzJaLzBMMFpYYlUvNW42bzhvYTZVNWdvZTFTQzJvUFJoRG5GeEREbGM5RmliYm9hUEZLeU00N2t5dm91TmdrYUhTbzhBaHVvSDJybnRxejFNbUtYRC9IN2Y0KzduUjdMa3VYS2NjV2NYMXcvc2djTTB0dktrOEVyeHl4c0hSMFlobFlIWUlJOEVHcXhOd3U2TEpwUkt6eU5sT0VzL0h4TncvWjVkVEdKSlU2WjBVajhFcTltR2dTVjc5d0QzNlNwOTY2Mm1ucW9sS05lL3IxOEhJVkV2c1owVXJUMXl6WERIMVdGN3JOTSt3RDdWc0dCbmZ3ZVl2ZUhzMWo4L2pXUmJ2R1hVVjVibDE2bEVrYmgxSkh1TmdkcTh4UXFKT0Y4UkRFNFdvbHdOanZ2RlBpWC9BRG5CZnBNZjcxb2QyVStqNWxoM3JVYXJrUHZGUGlYL0FEbkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjhBT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUVQNXFmR0J6cDV5Y0lUY0Q4YjVIRnpZdWVhSzRkYmZIcEUvWEdkcitJZC9OWlpOREprUmI4R1ppblYwNm9nM0k4akNsYlpwbHBQdFVrcEh4ZUx1SVl1RjhCZFpaeWhsUmVpM1J2OGNwN0tOYkd4N25SMzBnMXIxTTlVOHB6SDdldlh3YkZQSzdlYkRMMSt2Njk4TDJOYlpwcGJpVjU1NVhrbGtZdTd1eExNeE95U1Q1Sk5jazI0bmQ1blhKS0ZXUmJVRWtvNWY4WXk4STVjR1RwTmhlTWtkMkNEdFZCT3BCb0U3WFpPdmNFanpvamNvcXAwc3pId3ZQOEFQc2FGZlNLcGw3eXZ2UTN0NStXT0dOcytHdHJtd1VNMFZ4RWx4YnlwSkZJb2RIUmd5c3BHd1FSNUJycVU3cTZPWmFhd1p5QTFPWjVhTHFnZ1VBb0JRQ2dGQUtBVUFvQlFGcE5Ua1NrY2MwMFZ2RTl4Y1NwSEZHcGQzZGdxcW9HeVNUNEFxRzBrMnozREM0bnVyTTE5NWdjWXk4WFpnbVBwRmhaczhkb0FPN0tTTnlIWUIyM1NEcjJHaDUyVHkxYlZPcW1YV1N5L0owdEJTS21sN3o4VVNWL0x5emF3dm1zK1JGNjB6ZkZBS0FuSEx2bUpMd3hLdUt5cnZKaXBHN0h1eld6RTkyVWU2aytWL3FPK3cxbFExenAzMmN6dy9YK2VYVHJhNmhWUXQrWDR2dnJoMWJPVU0wVnhFazhFcVNSU0tIUjBZRldVallJSThnaXVqVFRWMHpuR21uWm81QWZuVW5sb3JVRUZhQVVBb0JRQ2dGQVUzcXBCUW41VUpTT09hYUszaWU0dUpVamlqVXU3dXdDcW9HeVNUNEFGUTJsaXowbGQyUmczbUp6RWw0bWxiRllwM2p4VWJkejNEWExBOW1ZZXlqMlgrcDc2Qzg1WFZ6cUh1UWVINzY2OHVqb2FGVTY3U1B4ZlhYWG5CNnJTeUZBS0FVQW9DVThIOHc4MXduSXNKZDc3SGhDZ3M1WlNGVHVXM0dlL1FlcGlUb2FPenNiMFJ1VXRiTXBuYk9IVDhhRmZWYk9sMUY0b0xReE4zYnRua3NjcjRLeWZDeTRZR2JjQnhaZ09Kb2cySXlNY3NnUU84RGZobGo3S1R0VDNJQllBc05ydndUWFJTYW1WVUs4dCszSHI0T2ZtMDg2VCs1RGJGL2ZsZlBOWHh0bWs4RDY5WnpDVkRHcElzVjZoUVdHeDg2RVdHeDg2Q3c2aFFteFFzYUN4U29KUGtaL2kzaC9obU10bDhqSEZJVUxwQXY0cFpPekVhVWR4c3FRR09sMzVJckJQcVpWT3J6SDdjZXZnelNxZWJQOEEyNGI0cGNNT2RzczN4dGttOERDUEdQTURMOFhTK21TMW5ZQlFCYVJ5a3F4MkR0ejI2enNEV3hvYUdodlpQTzFWYk1xblo0TFQ4Nm5SVXRCTHBrbkZhS0xXM3JsbmJCMmV2d1JldE0zaFFDZ0ZBS0FVQW9DNkdhVzNsU2VDVjQ1WTJEbzZNUXlzRHNFRWVDRFVwdUYzUkRTaVZua1R6aDduRm44VkVMYkxRSmxZbFhTTTcrbktPd0EyNEI2aDJQa0ZpVHNtcktUdFNiTFZvMXZMNTYrZk1xNSt5cGN4M2x2ZDE0cmp5K3JLMWlmNHpteHdYa2VsWkw2V3lrZVQwMVM2aEs3OGFZc3ZVcWp2NUxEV2p2UTcxWnk5cFU4eDJ2YjE2Wld6Tm5WRXRYdGYwNlQrQ1MyR1d4V1ZFaHhlU3Rid1JhOVQwSmxrNk43MXZwSjF2Ui9zYTNJSmtFendOUDBkelRqbHh5N0tOTlgxTzNXUThDZ09wZjVmRTRybyswOG5hV2ZxN0tldk1zZlZyenJxSTM1SDk2eHh6SUpmamFYcXpKQkxqbWVCTitpSTFrK2EvQmVONmxTL2x2WkVsTWJKYXhGdkc5c0dicFJsN2VReDNzYTJPOWFjemFWUExkcjM5T2w4RzFMMmRVVEZlMXZYcHRjaUFjUWM0cy9sWWpiWW1CTVZFeTZka2YxSlRzRUhUa0FLTzQ4RHFCR3cxVmsvYWsyWmhCK2xmUE10Skd5cGN0NzB4NzJuQmNPZkh5eHk0a0RtbW11Sm51TGlWNVpaV0x1N3NXWm1KMlNTZTVKUHZWYTI0bmRsbWtvVlpaRnRRU0tBVUFvRC85az0nO1xuXG4gIGlzRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb21tYW5kRXZlbnQhOiBNZW51SXRlbUNvbW1hbmRFdmVudDtcblxuXG5cblxuICAgIHN0YXR1c2VzITogU2VsZWN0SXRlbVtdO1xuICBjbG9uZWREYXRhU291cmNlOiB7IFtzOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG5cblxuICAvKiogIEVtaXRlIGV2ZW50byBkZSBzYWx2YW1lbnRvIGRhIGxpbmhhICovXG4gIEBPdXRwdXQoKSBvblJvd1NhdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbUxvdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25QYWdpbmF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGZpbHRlckZpZWxkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uU3dpdGNoVGFibGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2RpZ29GaXBlUGlwZTogQ29kaWdvRmlwZVBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcGZDbnBqUGlwZTogQ3BmQ25walBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZWxlZm9uZVBpcGU6IFRlbGVmb25lUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2VcblxuICApIHtcbiAgICB0aGlzLmlzUm93U2VsZWN0YWJsZSA9IHRoaXMuaXNSb3dTZWxlY3RhYmxlLmJpbmQodGhpcyk7XG4gIH1cbiAgc2VsZWN0ZWRQcm9kdWN0OiBhbnkgPSB7XG4gICAgcm93RGF0YTp7fSxcbiAgICBlZGl0aW5nOiBmYWxzZVxuICB9O1xuXG4gIGl0ZW1zITogTWVudUl0ZW1bXTtcblxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcblxuXG4gICAgdGhpcy5pdGVtcyA9IFtcbiAgICAgIHsgbGFiZWw6ICdFZGl0YXIgbGluaGEnLCBpY29uOiAncGkgcGktZncgcGktcGVuY2lsJywgY29tbWFuZDogKCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvd0VkaXQnICsgdGhpcy5zZWxlY3RlZFByb2R1Y3Qucm93RGF0YVt0aGlzLmNvbmZpZy5kYXRhS2V5XSApO1xuICAgICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5jb25maWcuZGlzYWJsZUVkaXRSb3dGdW5jdGlvbj8uKHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGEpKSB7XG4gICAgICAgICAgICBlbGVtZW50LmNsaWNrKCk7IC8vIERpc3BhcmEgdW0gZXZlbnRvIGRlIGNsaXF1ZSBubyBlbGVtZW50byBjb20gSUQgJ3Rlc3RlJ1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RXYXJuKFwiQSBlZGnDp8OjbyBkZXNzYSBsaW5oYSBlc3RhIGRlc2FiaWxpdGFkYVwiKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Sb3dFZGl0SW5pdCh0aGlzLnNlbGVjdGVkUHJvZHVjdClcblxuICAgICAgfX0sXG4gICAgICB7IGxhYmVsOiAnQ2FuY2VsYXIgZWRpw6fDo28nLCBpY29uOiAncGkgcGktZncgcGktdGltZXMnLCBjb21tYW5kOiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm93Q2FuY2VsJyArIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGFbdGhpcy5jb25maWcuZGF0YUtleV0gKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2xpY2soKTsgLy8gRGlzcGFyYSB1bSBldmVudG8gZGUgY2xpcXVlIG5vIGVsZW1lbnRvIGNvbSBJRCAndGVzdGUnXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFdhcm4oXCJBIGVkacOnw6NvIGRlc3NhIGxpbmhhIGVzdGEgZGVzYWJpbGl0YWRhXCIpXG4gICAgICAgIH1cbiAgICAgIH19LFxuICAgICAgeyBsYWJlbDogJ1NhbHZhciBlZGnDp8OjbycsIGljb246ICdwaSBwaS1mdyBwaS1zYXZlJywgY29tbWFuZDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvd1NhdmUnICsgdGhpcy5zZWxlY3RlZFByb2R1Y3Qucm93RGF0YVt0aGlzLmNvbmZpZy5kYXRhS2V5XSApO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5jbGljaygpOyAvLyBEaXNwYXJhIHVtIGV2ZW50byBkZSBjbGlxdWUgbm8gZWxlbWVudG8gY29tIElEICd0ZXN0ZSdcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcbiAgICAgICAgfVxuICAgICAgfX0sXG4gICAgXTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zWzBdLnZpc2libGUgPSAhdGhpcy5zZWxlY3RlZFByb2R1Y3QuZWRpdGluZyAmJiB0aGlzLmlzRWRpdGFibGVUYWJsZSgpICE9PSBmYWxzZTtcbiAgICB0aGlzLml0ZW1zWzFdLnZpc2libGU9IHRoaXMuc2VsZWN0ZWRQcm9kdWN0LmVkaXRpbmcgJiYgdGhpcy5pc0VkaXRhYmxlVGFibGUoKSAhPT0gZmFsc2U7XG4gICAgdGhpcy5pdGVtc1syXS52aXNpYmxlPSB0aGlzLnNlbGVjdGVkUHJvZHVjdC5lZGl0aW5nICYmIHRoaXMuaXNFZGl0YWJsZVRhYmxlKCkgIT09IGZhbHNlO1xuICB9XG5cblxuICBkYkNsaWNrRWRpdCgpe1xuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm93RWRpdCcgKyB0aGlzLnNlbGVjdGVkSXRlbVt0aGlzLmNvbmZpZy5kYXRhS2V5XSApO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFdhcm4oXCJBIGVkacOnw6NvIGRlc3NhIGxpbmhhIGVzdGEgZGVzYWJpbGl0YWRhXCIpXG4gICAgfVxuICB9XG5cblxuXG5cblxuICBhY3RpdmF0ZUVkaXQoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0ZScpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuY2xpY2soKTsgLy8gRGlzcGFyYSB1bSBldmVudG8gZGUgY2xpcXVlIG5vIGVsZW1lbnRvIGNvbSBJRCAndGVzdGUnXG4gICAgfVxuICB9XG5cblxuXG4gIGlzUm93U2VsZWN0YWJsZShldmVudDogYW55KSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGlzYWJsZWRDaGVja2JveChldmVudC5kYXRhKTtcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy9DYWxsZWQgYmVmb3JlIGFueSBvdGhlciBsaWZlY3ljbGUgaG9vay4gVXNlIGl0IHRvIGluamVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhdm9pZCBhbnkgc2VyaW91cyB3b3JrIGhlcmUuXG4gICAgLy9BZGQgJyR7aW1wbGVtZW50cyBPbkNoYW5nZXN9JyB0byB0aGUgY2xhc3MuXG4gICAgaWYgKGNoYW5nZXNbJ3NldENvbmZpZyddICYmIHRoaXMuY29uZmlnKSB7XG5cbiAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaCgoZTpUYWJsZUVkaXRDb25maWdDb2x1bW4pID0+IHtcbiAgICAgICAgaWYoZS5maWVsZENvbnRyb2xUeXBlID09ICdkcm9wZG93bicpe1xuICAgICAgICAgIHRoaXMubGlzdGFyRHJvcChlLmZpZWxkRHJvcERvd25Db250cm9sPy5maWVsZENvbnRyb2xEcm9wZG93blNlcnZpY2UsIGUpXG5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBvblJvd0VkaXRJbml0KHJvd0RhdGE6IGFueSkge1xuICAgIHRoaXMuY2xvbmVkRGF0YVNvdXJjZVtyb3dEYXRhLmlkIGFzIHN0cmluZ10gPSB7IC4uLnJvd0RhdGEgfTtcbiAgfVxuICBvblJvd0VkaXRTYXZlKHJvd0RhdGE6IGFueSwgaW5kZXg6IGFueSkge1xuXG4gICAgbGV0IGVycm9ycyA9IFtdXG4gICAgLy9WYWxpZGHDp8OjbyBkbyBmb3JtdWxhcmlvIGZha2VcbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goKGNvbDpUYWJsZUVkaXRDb25maWdDb2x1bW4pID0+IHtcblxuICAgICAgaWYoY29sLnJlcXVpcmVkID8/IHRydWUpe1xuICAgICAgICBpZighcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFdhcm4oYE8gY2FtcG8gJHtjb2wuaGVhZGVyfSBlIG9icmlnYXTDs3JpbyEgYClcbiAgICAgIH1cblxuICAgICAgaWYoY29sLnZhbGlkYXRvcilcbiAgICAgIHtcbiAgICAgICAgY29uc3QgdGVtcEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKHJvd0RhdGFbY29sLmZpZWxkXSwgY29sLnZhbGlkYXRvciBhcyBWYWxpZGF0b3JGbik7XG4gICAgICAgIHRlbXBGb3JtQ29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKClcbiAgICAgICAgdGVtcEZvcm1Db250cm9sLnZhbGlkXG4gICAgICAgIGlmKHRlbXBGb3JtQ29udHJvbC5pbnZhbGlkKXtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RXYXJuKGBFcnJvIGFvIHZhbGlkYXIgZGFkb3MgZG8gY2FtcG86ICR7Y29sLmhlYWRlcn0hIGApXG4gICAgICAgICAgZXJyb3JzLnB1c2goIHsgZXJybzogXCJDYW1wbyBpbnZhbGlkb1wiLCBjYW1wbzogcm93RGF0YVtjb2wuZmllbGRdIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYoZXJyb3JzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLm9uUm93U2F2ZS5lbWl0KHJvd0RhdGEpXG4gICAgICBkZWxldGUgdGhpcy5jbG9uZWREYXRhU291cmNlW3Jvd0RhdGEuaWQgYXMgc3RyaW5nXTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFdhcm4oYEVycm8gZGUgdmFsaWRhw6fDo28gZGUgZGFkb3MhIGApXG4gICAgICAvLyB0aGlzLm9uUm93RWRpdENhbmNlbChyb3dEYXRhLCBpbmRleClcbiAgICAgIC8vIHRoaXMub25Sb3dFZGl0SW5pdChyb3dEYXRhKVxuICAgICAgdGhpcy5kYXRhU291cmNlW2luZGV4XSA9IHRoaXMuY2xvbmVkRGF0YVNvdXJjZVtyb3dEYXRhLmlkIGFzIHN0cmluZ107XG4gICAgICBkZWxldGUgdGhpcy5jbG9uZWREYXRhU291cmNlW3Jvd0RhdGEuaWQgYXMgc3RyaW5nXTtcbiAgICB9XG4gIH1cbiAgb25Sb3dFZGl0Q2FuY2VsKHByb2R1Y3Q6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZGF0YVNvdXJjZVtpbmRleF0gPSB0aGlzLmNsb25lZERhdGFTb3VyY2VbcHJvZHVjdC5pZCBhcyBzdHJpbmddO1xuICAgIGRlbGV0ZSB0aGlzLmNsb25lZERhdGFTb3VyY2VbcHJvZHVjdC5pZCBhcyBzdHJpbmddO1xufVxuXG4gIGFzeW5jIGxpc3RhckRyb3Aoc2VydmljZTogYW55LCBjb2w6YW55LCBpbmR0b2Rvcz86IGJvb2xlYW4pe1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnM/LmluZGV4T2YoY29sKTtcblxuICAgIGlmKCFjb2wuZmllbGREcm9wRG93bkNvbnRyb2wuZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2UpXG4gICAgICBhd2FpdCBzZXJ2aWNlLkxpc3RhcihpbmR0b2RvcyB8fCAnJykuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueVtdKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuY29sdW1ucyAmJiBjb2x1bW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnNbY29sdW1uXS5maWVsZERyb3BEb3duQ29udHJvbC5maWVsZENvbnRyb2xEcm9wZG93blNvdXJjZSA9IGRhdGE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zW2NvbHVtbl0uZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGVsc2UgcmV0dXJuIHRoaXMuY29uZmlnLmNvbHVtbnNbY29sdW1uXS5maWVsZERyb3BEb3duQ29udHJvbD8uZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2VcbiAgfVxuICByZXRvcm5hRGVzY3JpY2FvRHJvcChyb3dEYXRhOiBhbnlbXSwgY29sOiBUYWJsZUVkaXRDb25maWdDb2x1bW4pe1xuXG4gICAgY29uc3QgZGF0YSA9IGNvbC5maWVsZERyb3BEb3duQ29udHJvbD8uZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2VcbiAgICBjb25zdCBpZG9iamV0byA9IGNvbC5maWVsZERyb3BEb3duQ29udHJvbD8uaWRvYmpldG9cbiAgICBjb25zdCBkZXNjcmljYW9vYmpldG8gPSBjb2wuZmllbGREcm9wRG93bkNvbnRyb2w/LmRlc2NyaWNhb29iamV0b1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB2YWxvckF0dWFsID0gcm93RGF0YVtjb2wuZmllbGRdXG5cbiAgICBpZihkYXRhICYmIGlkb2JqZXRvICYmIGRlc2NyaWNhb29iamV0bylcbiAgICByZXR1cm4gZGF0YT8uZmluZCgoaXRlbTphbnkpID0+IGl0ZW1baWRvYmpldG9dID09IHZhbG9yQXR1YWwpW2Rlc2NyaWNhb29iamV0b11cbiAgICBlbHNlIHJldHVybiAnQ2FycmVnYW5kbydcbiAgfVxuXG5cbiAgcHVibGljIG9uR2xvYmFsRmlsdGVyKHRhYmxlOiBUYWJsZSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgIHRhYmxlLmZpbHRlckdsb2JhbCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25XaW5kb3dSZXNpemUoKSB7XG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XG4gIH1cbiAgYWRqdXN0VGFibGVTaXplKCkge1xuICAgIGlmICh0aGlzLnRhYmxlU2l6ZSA8IDgwMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFNpemUgPSAncC1kYXRhdGFibGUtc20nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9ICcnO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcGFnaW5hdGUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICBsZXQgcGFnaW5hSW5pY2lhbCA9XG4gICAgICAgICgkZXZlbnQ/LmZpcnN0ID4gMCA/ICRldmVudC5maXJzdCAvICRldmVudC5yb3dzIDogJGV2ZW50LmZpcnN0KSArIDE7XG4gICAgICBsZXQgdGVybW9QZXNxdWlzYSA9ICcnO1xuICAgICAgbGV0IG9yZGVuYWNhbyA9ICcnO1xuXG4gICAgICBpZiAoJGV2ZW50Lmdsb2JhbEZpbHRlcikgdGVybW9QZXNxdWlzYSA9ICRldmVudC5nbG9iYWxGaWx0ZXI7XG5cbiAgICAgIGlmICgkZXZlbnQuc29ydEZpZWxkKVxuICAgICAgICBvcmRlbmFjYW8gPSBgJHskZXZlbnQuc29ydEZpZWxkfSAke1xuICAgICAgICAgICRldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJ1xuICAgICAgICB9YDtcblxuICAgICAgY29uc3Qgb2JqZXRvOiBUYWJsZVBhZ2luYXRlID0ge1xuICAgICAgICBwYWdpbmFJbmljaWFsOiBwYWdpbmFJbmljaWFsLFxuICAgICAgICB0YW1hbmhvUGFnaW5hOiAkZXZlbnQucm93cyxcbiAgICAgICAgdGVybW9QZXNxdWlzYTogdGVybW9QZXNxdWlzYSxcbiAgICAgICAgb3JkZW5hY2FvOiBvcmRlbmFjYW8sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9uUGFnaW5hdGUuZW1pdChvYmpldG8pO1xuICAgIH1cbiAgfVxuXG4gIGlzQm9vbGVhbkZpZWxkKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2wuZmllbGRUeXBlID09ICdib29sZWFuJztcbiAgfVxuXG4gIGlzQ2hpcEZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sLmZpZWxkVHlwZSA9PSAnY2hpcCc7XG4gIH1cblxuICBpc0ltYWdlRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIGxldCByZXRvcm5vID0gY29sLmZpZWxkVHlwZSAmJiBjb2wuZmllbGRUeXBlID09PSAnaW1hZ2UnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHJldHVybiByZXRvcm5vO1xuICB9XG4gIHJldHVyblJvd0NsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcbiAgICBsZXQgcm93Q2xhc3M6IHN0cmluZztcblxuICAgIHRoaXMudGFibGVTaXplID4gODAwID8gKHJvd0NsYXNzID0gJ3RleHQtYmFzZScpIDogKHJvd0NsYXNzID0gJ3RleHQtc20nKTtcblxuICAgIGlmIChjb2wuZXhwaXJlZERhdGUgPT0gdHJ1ZSkge1xuICAgICAgbmV3IERhdGUodmFsdWUpIDwgbmV3IERhdGUoKVxuICAgICAgICA/IChyb3dDbGFzcyA9IHJvd0NsYXNzICsgJyB0ZXh0LXJlZC00MDAgZm9udC1zZW1pYm9sZCcpXG4gICAgICAgIDogJyc7XG4gICAgfVxuICAgIHJldHVybiByb3dDbGFzcztcbiAgfVxuICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XG5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKCFjb2wucGlwZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY29sLnBpcGUpIHtcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScpO1xuICAgICAgICBjYXNlICdkZWNpbWFsJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xuICAgICAgICBjYXNlICdjcGZjbnBqJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcGZDbnBqUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGVsZWZvbmVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ2NvZGlnb2ZpcGUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvZGlnb0ZpcGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ21vbmV5JzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRhclZhbG9yKHZhbHVlKTtcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XG4gICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfSAlYDtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBhbGlnbkNvbHVuYXNIZWFkZXIoY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChjb2wuYWxpZ24pIHtcbiAgICAgIGlmIChjb2wuYWxpZ24gPT0gJ3JpZ2h0JykgcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQ6IGVuZCc7XG4gICAgICBlbHNlIHJldHVybiAnJztcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xuICB9XG4gIGNlbnRyYWxpemFyQ29sdW5hcyhjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC5jZW50cmFsaXplKSB7XG4gICAgICByZXR1cm4gJ3RleHQtYWxpZ246IGNlbnRlcjsgJztcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xuICB9XG4gIGFsaWduQ29sdW5hcyhjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC5hbGlnbikge1xuICAgICAgcmV0dXJuIGB0ZXh0LWFsaWduOiAke2NvbC5hbGlnbn1gO1xuICAgIH0gZWxzZSByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ2ljb25yb3cnKTtcbiAgfVxuXG4gIHJldHVyblRvb2x0aXBJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3Rvb2x0aXBpY29ucm93Jyk7XG4gIH1cbiAgcmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgY2hpcC1zdHlsZSB3LWF1dG8gYm9yZGVyLXJvdW5kLTJ4bCBwLTIgdGV4dC0ke3RoaXMucmV0b3JuYXJSb3coXG4gICAgICByb3dEYXRhLFxuICAgICAgY29sLFxuICAgICAgJ3N0eWxlY2hpcCdcbiAgICApfSBib3JkZXItJHt0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3N0eWxlY2hpcCcpfWA7XG4gIH1cbiAgcmV0b3JuYXJSb3cocm93RGF0YTogYW55LCBjb2w6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgX3Jvd2FjdGlvbiA9IHRoaXMuY29uZmlnLnJvd3MgPyB0aGlzLmNvbmZpZy5yb3dzW2NvbC5maWVsZF0gOiBudWxsO1xuICAgIGNvbnN0IF9maWVsZDogc3RyaW5nID1cbiAgICAgIF9yb3dhY3Rpb24gJiYgX3Jvd2FjdGlvbltmaWVsZF1cbiAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb25cbiAgICAgICAgICA/IF9yb3dhY3Rpb25bZmllbGRdLmFwcGx5KHRoaXMsIFtyb3dEYXRhXSlcbiAgICAgICAgICA6IF9yb3dhY3Rpb25bZmllbGRdXG4gICAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gX2ZpZWxkO1xuICB9XG4gIHNlbGVjdGlvbkNoYW5nZSh2YWx1ZSA9IFtdKSB7XG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuICBmb3JtYXRhclZhbG9yKHZhbG9yOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgncHQtQlInLCB7XG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgIGN1cnJlbmN5OiAnQlJMJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbG9yKTtcbiAgfVxuICBsb2FkSW1hZ2Uocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcbiAgICAvKlxuICAgICAgTm9zc2EgY29sdW5hIGRlIGltYWdlbSB0cmFiYWxoYSBjb20gc3RyaW5ncyBkbyB0aXBvOiBiYXNlNjQgb3UgdXJsXG4gICAgKi9cbiAgICBsZXQgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7dGhpcy5pbWdEZWZhdWx0fWA7XG4gICAgaWYgKHJvd0RhdGEgJiYgY29sICYmIHJvd0RhdGFbY29sLmZpZWxkXSAmJiByb3dEYXRhW2NvbC5maWVsZF0gIT09ICcnKSB7XG4gICAgICBpZiAocm93RGF0YVtjb2wuZmllbGRdLmluY2x1ZGVzKCdodHRwJykpIHJldG9ybm8gPSByb3dEYXRhW2NvbC5maWVsZF07XG4gICAgICBlbHNlIHJldG9ybm8gPSBgZGF0YTppbWFnZS9qcGc7YmFzZTY0LCAke3Jvd0RhdGFbY29sLmZpZWxkXX1gO1xuICAgIH1cblxuICAgIHJldHVybiByZXRvcm5vO1xuICB9XG5cbiAgZ2V0Q3VzdG9tVGVtcGxhdGUodGVtcGxhdGVuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzW3RlbXBsYXRlbmFtZV07XG4gIH1cbiAgZXhpYmlyQ2FtcG8oZmllbGQ6IGFueSwgcm93RGF0YTogYW55KSB7XG4gICAgbGV0IHZpc2libGUgPSBmaWVsZC52aXNpYmxlID8gZmllbGQudmlzaWJsZShyb3dEYXRhKSA6IHRydWU7XG4gICAgcmV0dXJuIHZpc2libGU7XG4gIH1cbiAgcHVibGljIGFjdGl2ZUl0ZW0ocm93RGF0YTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSByb3dEYXRhO1xuICAgIHRoaXMub25BY3RpdmVJdGVtLmVtaXQoeyByb3dEYXRhOiByb3dEYXRhfSk7XG4gIH1cbiAgcHVibGljIGFjdGl2ZUl0ZW1Mb3RlKHJvd0RhdGE6IGFueSkge1xuICAgIHRoaXMub25BY3RpdmVJdGVtTG90ZS5lbWl0KHJvd0RhdGEpO1xuICB9XG5cbiAgcmV0b3JuYXJDYW1wbyhhY3Rpb246IEt2TWVudUl0ZW0sIHJvd0RhdGE6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgX2Z1bmN0aW9uID0gYWN0aW9uLmR5bmFtaWNmaWVsZHNcbiAgICAgID8gKGFjdGlvbi5keW5hbWljZmllbGRzW2ZpZWxkXSBhcyBGdW5jdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9IF9mdW5jdGlvblxuICAgICAgPyBfZnVuY3Rpb24uYXBwbHkoYWN0aW9uLCBbcm93RGF0YV0pXG4gICAgICA6IGFjdGlvbltmaWVsZF07XG4gICAgcmV0dXJuIF9maWVsZDtcbiAgfVxuICBjYWxsRGlzYWJsZWQoYWN0aW9uOiBLdk1lbnVJdGVtLCBkYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoYWN0aW9uPy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZChkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNyaWFyTWVudXNNb2RhbChkYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9ucyAmJiBkYXRhKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29uZmlnLmFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdpY29uJyk7XG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAndG9vbHRpcCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdsYWJlbCcpO1xuICAgICAgICBjb25zdCBjb21tYW5kOiBhbnkgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnY29tbWFuZCcpO1xuICAgICAgICBjb25zdCB2aXNpYmxlOiBib29sZWFuID0gYWN0aW9uLnZpc2libGVcbiAgICAgICAgICA/IGFjdGlvbi52aXNpYmxlKGRhdGEpXG4gICAgICAgICAgOiB0cnVlO1xuICAgICAgICBjb25zdCBkaXNhYmxlZDogYm9vbGVhbiA9IGFjdGlvbi5kaXNhYmxlZFxuICAgICAgICAgID8gYWN0aW9uLmRpc2FibGVkKGRhdGEpXG4gICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICBjb25zdCBtZW51SW5zZXJ0OiBLdk1lbnVJdGVtID0ge1xuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgdG9vbHRpcCxcbiAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgIGRpc2FibGVkLFxuICAgICAgICAgIHZpc2libGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoXG4gICAgICAgICAgKHgpID0+IHguY29tbWFuZCA9PSBtZW51SW5zZXJ0LmNvbW1hbmRcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT0gMCkgdGhpcy5tZW51SXRlbXMucHVzaChtZW51SW5zZXJ0KTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQubGFiZWwgIT0gaXRlbVswXS5sYWJlbCkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQudmlzaWJsZSAhPSBpdGVtWzBdLnZpc2libGUpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmRpc2FibGVkICE9IGl0ZW1bMF0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhTGluaGFBY2FvVmF6aWEocm93RGF0YTogYW55KSB7XG4gICAgdmFyIGFsZ3VtSXRlbVZpc2l2ZWwgPSB0aGlzLmNvbmZpZy5hY3Rpb25zLnNvbWUoKGEpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYS52aXNpYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBhLnZpc2libGUocm93RGF0YSkgPT09IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gUmV0b3JuYSB0cnVlIHNlIGEudmlzaWJsZShyb3dEYXRhKSBuw6NvIGV4aXN0aXJcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAhYWxndW1JdGVtVmlzaXZlbDtcbiAgfVxuXG5cblxuXG4gIGRvdWJsZUNsaWNrKGU6IGFueSwgcm93RGF0YTogYW55KSB7XG4gICAgbGV0IGV2ZW50RG91YmxlQ2xpY2sgPSB7IGV2ZW50OiBlLCByb3dEYXRhOiByb3dEYXRhfTtcblxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXTtcbiAgICBlLnRhcmdldC5jbGFzc0xpc3QuZm9yRWFjaCgoeDogYW55KSA9PiBhcnJheS5wdXNoKHgpKTtcblxuICAgIC8vaWYgKGFycmF5LmZpbmQoKHg6IGFueSkgPT4geCA9PSAnbmctc3Rhci1pbnNlcnRlZCcpICE9IHVuZGVmaW5lZClcbiAgICB0aGlzLmRvdWJsZUNsaWNrRXZlbnQuZW1pdChldmVudERvdWJsZUNsaWNrKTtcbiAgfVxuXG4gIGlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGlzYWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uXG4gICAgICA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhKVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG5cbiAgcmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhOiBhbnksIGNvbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwcm93Jyk7XG4gIH1cblxuICBpc1N3aXRjaEZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcbiAgICBsZXQgcmV0b3JubyA9IGNvbC5maWVsZFR5cGUgJiYgY29sLmZpZWxkVHlwZSA9PT0gJ3N3aXRjaCcgPyB0cnVlIDogZmFsc2U7XG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cbiAgb25Td2l0Y2hDaGFuZ2UoZXN0YWRvOiBhbnksIHJvd0RhdGE6IGJvb2xlYW4sIGNvbDogYW55KSB7XG4gICAgdGhpcy5vblN3aXRjaFRhYmxlQ2hhbmdlLmVtaXQoe1xuICAgICAgZXN0YWRvOiBlc3RhZG8sXG4gICAgICByb3dEYXRhOiByb3dEYXRhLFxuICAgICAgY29sOiBjb2xcbiAgICB9KVxuICB9XG4gIGlzQnV0dG9uRGlzYWJsZShhY3Rpb246IGFueSwgcm93RGF0YTogYW55LCBjb21tYW5kRXZlbnQ6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2UgcmV0dXJuIHRoaXMuYWN0aXZlSXRlbShyb3dEYXRhKSwgYWN0aW9uPy5jb21tYW5kKGNvbW1hbmRFdmVudCk7XG4gIH1cbiAgaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGE6IGFueSk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGlzYWJsZUVkaXRSb3dGdW5jdGlvbiA/IHRoaXMuY29uZmlnLmRpc2FibGVFZGl0Um93RnVuY3Rpb24ocm93RGF0YSkgOiBmYWxzZTtcbiAgfVxuICBpc0VkaXRhYmxlVGFibGUoKTogYm9vbGVhbiB8IG51bGwge1xuICAgIGlmICghdGhpcy5jb25maWcuY29sdW1ucykge1xuICAgICAgICByZXR1cm4gbnVsbDsgLy8gU2UgdGhpcy5jb25maWcuY29sdW1ucyBmb3IgbnVsbCwgcmV0b3JuYSBudWxsXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zLnNvbWUoKGNvbHVtbjogYW55KSA9PiAnZmllbGRDb250cm9sVHlwZScgaW4gY29sdW1uKTtcbiAgfVxuXG5cbn1cbiIsIlxuXG48ZGl2IGNsYXNzPVwiY2FyZFwiID5cbiAgPHAtdG9hc3Q+PC9wLXRvYXN0PlxuXG4gIDxwLXBhbmVsXG4gICAgKm5nSWY9XCJmaWx0cm9zQXZhbmNhZG9zXCJcbiAgICBoZWFkZXI9XCJGaWx0cm9zIGF2YW7Dp2Fkb3NcIlxuICAgIFt0b2dnbGVhYmxlXT1cInRydWVcIlxuICAgIFtjb2xsYXBzZWRdPVwidHJ1ZVwiXG4gICAgKGNvbGxhcHNlZENoYW5nZSk9XCJjb2xsYXBzZWQgPSAhY29sbGFwc2VkXCJcbiAgICBbc3R5bGVdPVwieyAnbWFyZ2luLWJvdHRvbSc6ICcycHgnIH1cIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlcmljb25zXCI+XG4gICAgICA8aVxuICAgICAgICAqbmdJZj1cIiFjb2xsYXBzZWRcIlxuICAgICAgICBjbGFzcz1cInBpIHBpLWZpbHRlclwiXG4gICAgICA+PC9pPlxuICAgICAgPCEtLSDDjWNvbmUgcXVhbmRvIG8gcGFpbmVsIGVzdMOhIGFiZXJ0byAtLT5cbiAgICAgIDxpXG4gICAgICAgICpuZ0lmPVwiY29sbGFwc2VkXCJcbiAgICAgICAgY2xhc3M9XCJwaSBwaS1taW51c1wiXG4gICAgICA+PC9pPlxuICAgICAgPCEtLSDDjWNvbmUgcXVhbmRvIG8gcGFpbmVsIGVzdMOhIGZlY2hhZG8gLS0+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvcC1wYW5lbD5cblxuICA8cC1jb250ZXh0TWVudSAjY20gW21vZGVsXT1cIml0ZW1zXCI+PC9wLWNvbnRleHRNZW51PlxuICA8cC10YWJsZVxuICAjdGVcbiAgW3Jlb3JkZXJhYmxlQ29sdW1uc109XCJjb25maWcucmVvcmRlcmFibGVDb2x1bW5zIHx8IGZhbHNlXCJcbiAgKm5nSWY9XCJjb25maWdcIlxuICBbdmFsdWVdPVwiZGF0YVNvdXJjZVwiXG4gIFtkYXRhS2V5XT1cImNvbmZpZy5kYXRhS2V5XCJcbiAgW3RhYmxlU3R5bGVdPVwieyAnbWluLXdpZHRoJzogJzUwcmVtJyB9XCJcbiAgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIlxuICBbZWRpdE1vZGVdPVwiJ3JvdydcIlxuICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgc2Nyb2xsSGVpZ2h0PVwiNDAwcHhcIlxuICBhcHBlbmRUbz1cImJvZHlcIlxuICBbc3R5bGVDbGFzc109XCIncC1kYXRhdGFibGUtc20nXCJcbiAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbXNcIlxuICBbcm93U2VsZWN0YWJsZV09XCJpc1Jvd1NlbGVjdGFibGVcIlxuICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXG4gIFtyb3dzXT1cInJvd3NcIlxuICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcbiAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcbiAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3sgdG90YWxSZWNvcmRzIH19XCJcbiAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gIFtyb3dIb3Zlcl09XCJ0cnVlXCJcbiAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICBbbGF6eV09XCJjb25maWcubGF6eVwiXG4gIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxuICBbZ3JvdXBSb3dzQnldPVwiY29uZmlnLmZpZWxkR3JvdXBcIlxuICBbc2hvd0ZpcnN0TGFzdEljb25dPVwic2hvd0ZpcnN0TGFzdEljb25cIlxuICBbcGFnZUxpbmtzXT1cInBhZ2VMaW5rc09wdGlvbnNcIlxuICBbc2Nyb2xsYWJsZV09XCJpc1RhYmxlU2Nyb2xsYWJsZVwiXG4gIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAgW3Jvd1RyYWNrQnldPVwicm93VHJhY2tCeSBcIlxuICBbKGNvbnRleHRNZW51U2VsZWN0aW9uKV09XCJzZWxlY3RlZFByb2R1Y3RcIlxuICBbY29udGV4dE1lbnVdPVwiIGlzRWRpdGFibGVUYWJsZSgpID8gY20gOiBudWxsXCJcbiAgPlxuXG5cblxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImNhcHRpb25cIlxuICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlQ2F0aW9uXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJjb25maWcudGl0bGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtYm9sZCBteS0zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBjb25maWcudGl0bGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5zdWJ0aXRsZVwiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc20gbWItNCBmb250LW1lZGl1bVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY29uZmlnLnN1YnRpdGxlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBtZDpjb2wtNiBsZzpjb2wtNCB7e1xuICAgICAgICAgICAgdGFtYW5ob1RlbGEgPCA3NjggPyAnY29sLTEwJyA6ICdjb2wtMTInXG4gICAgICAgICAgfX0gbXQtMSBtYi0yIFwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVGaWx0ZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJwLWlucHV0LWljb24tbGVmdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XG5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgIHBBdXRvRm9jdXNcbiAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIodGUsICRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlBlc3F1aXNhci4uLlwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaC0ycmVtXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0xIGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zTG90ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0bnMtb3B0aW9uc1wiXG4gICAgICAgICAgICBbc3R5bGVdPVwieyAnbWFyZ2luLXJpZ2h0JzogJzdweCcgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBpZD1cImFjdGlvbkxvdGVCdG5zXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgfHwgYWN0aW9uLnNob3dBY29lc0xvdGUpICYmXG4gICAgICAgICAgICAgICAgZXhpYmlyQ2FtcG8oYWN0aW9uLCB0aGlzLmFjdGlvbilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25Mb3RlQnRucyBwLWJ1dHRvbi1yYWlzZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAndG9vbHRpcCcpXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiXG4gICAgICAgICAgICAgICAgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdidG5Db2xvcicpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ2Rpc2FibGVkJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtZC0yMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIlxuICAgICAgICAgICAgICAgICAgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdpY29uQnRuQ29sb3InKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgXCJpY29uXCIpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImhlYWRlclwiXG4gICAgICBsZXQtY29sdW1uc1xuICAgID5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNHJlbTsgYm9yZGVyLWxlZnQ6IHNvbGlkIDRweCB0cmFuc3BhcmVudFwiXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCI+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICAgIDwvdGg+XG5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcbiAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICBwUmVvcmRlcmFibGVDb2x1bW5cbiAgICAgICAgICBjbGFzcz1cInRleHQtc21cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSAmJiBhbGlnbkNvbHVuYXNIZWFkZXIoY29sKSA9PSAnJ1xuICAgICAgICAgICAgICAgID8gJ2ZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlcidcbiAgICAgICAgICAgICAgICA6ICdmbGV4IGZsZXgtcm93J1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJhbGlnbkNvbHVuYXNIZWFkZXIoY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxwLXNvcnRJY29uXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLnNvcnRhYmxlID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4XCJcbiAgICAgICAgICAgID48L3Atc29ydEljb24+XG5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhlYWRlclRvb2x0aXBcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIlxuICAgICAgICAgICAgPmluZm88L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCAqbmdJZj1cImNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDBcIj48L3RoPlxuICAgICAgICA8dGggKm5nSWY9XCJpc0VkaXRhYmxlVGFibGUoKVwiICBpZD1cInRoLWVkaXRcIiBzdHlsZT1cIndpZHRoOiAyMHB4XCI+RWRpdGFyPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cblxuXG5cblxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvd0RhdGEgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIiBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgbGV0LXJvd2dyb3VwPVwicm93Z3JvdXBcIiBsZXQtcm93c3Bhbj1cInJvd3NwYW5cIj5cbiAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cInJvd0RhdGFcIiBbcEVkaXRhYmxlUm93RGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgW3BDb250ZXh0TWVudVJvd109XCJ7cm93RGF0YSwgZWRpdGluZ31cIlxuICAgICAgPlxuXG5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcbiAgICAgICAgICBbc3R5bGVdPVwiYXBwbHlTdHlsZShyb3dEYXRhLCB7IGZpZWxkOiAnY2hlY2stYm94JywgaGVhZGVyOiAnJyB9KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tPHAtdGFibGVDaGVja2JveCAqbmdJZj1cImlzVmlzaWJsZUNoZWNrYm94KHJvd0RhdGEpXCItLT5cbiAgICAgICAgICA8cC10YWJsZUNoZWNrYm94XG4gICAgICAgICAgICBbdmFsdWVdPVwicm93RGF0YVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuXG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpID0gaW5kZXhcIj5cblxuXG5cblxuXG5cbiAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cblxuICAgICAgICAgIDwhLS0gQ2VsdWxhIHF1ZSBhcm1hemVuYSBvcyBjb250cm9sZXMgZGUgZWRpw6fDo28gcGFyYSBvcyBjYW1wb3MgLS0+XG4gICAgICAgICAgPHRkICpuZ0lmPVwiY29sLmZpZWxkQ29udHJvbFR5cGVcIlxuICAgICAgICAgIFtpZF09XCIncm93VGFibGUnKyByb3dEYXRhW2NvbmZpZy5kYXRhS2V5XVwiXG4gICAgICAgICAgcFNlbGVjdGFibGVSb3dEYmxDbGljaz1cIlwiXG4gICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxuICAgICAgICAgIChkYmxjbGljayk9XCJkYkNsaWNrRWRpdCgpXCJcbiAgICAgICAgICBwU2VsZWN0YWJsZVJvd0RibENsaWNrPVwiXCJcbiAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCIgW3N0eWxlXT1cIlxuICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xuICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpIFwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwLWNlbGxFZGl0b3IgW25nQ2xhc3NdPVwieydzd2l0Y2gnOiBjb2wuZmllbGRDb250cm9sVHlwZSA9PSAnc3dpdGNoJ31cIj5cbiAgICAgICAgICAgICAgPCEtLSBDb250cm9sZSBkZSBlZGnDp8OjbyBkbyBjYW1wbyAtLT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRDb250cm9sVHlwZVwiPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMDBweFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxrdi1pbnB1dC10ZXh0IGNsYXNzPVwiY2VsbENvbnRyb2wgY29sXCIgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIiBbcmVxdWlyZWRdPVwiY29sLnJlcXVpcmVkID8/IHRydWVcIj48L2t2LWlucHV0LXRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzAwcHhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiID5cbiAgICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtbnVtYmVyIGNsYXNzPVwiY2VsbENvbnRyb2wgY29sXCIgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIiBbcmVxdWlyZWRdPVwiY29sLnJlcXVpcmVkID8/IHRydWVcIj48L2t2LWlucHV0LW51bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21hc2snXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzAwcHhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiID5cbiAgICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtbWFzayBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiIFttYXNrXT1cImNvbC5tYXNrXCIgW3JlcXVpcmVkXT1cImNvbC5yZXF1aXJlZCA/PyB0cnVlXCIgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIj48L2t2LWlucHV0LW1hc2s+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzd2l0Y2gnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzAwcHhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiID5cbiAgICAgICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoIGNsYXNzPVwiY2VsbENvbnRyb2wgY29sXCIgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIiA+PC9rdi1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjYWxlbmRhcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMDBweFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMwMHB4XCIgY2xhc3M9XCJncmlkIGZvcm1ncmlkIHAtZmx1aWRcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgPGt2LWlucHV0LWNhbGVuZGFyIGNsYXNzPVwiY2VsbENvbnRyb2wgY29sXCIgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIj48L2t2LWlucHV0LWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMDBweFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCIgPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbC5maWVsZERyb3BEb3duQ29udHJvbC5kZXNjcmljYW9vYmpldG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cImNvbC5maWVsZERyb3BEb3duQ29udHJvbC5pZG9iamV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjb2wuZmllbGREcm9wRG93bkNvbnRyb2wuZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICA8IS0tIFZhbG9yIGF0dWFsIGRvIGNhbXBvIC0tPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkQ29udHJvbFR5cGVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0RhdGFbY29sLmZpZWxkXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0b3JuYURlc2NyaWNhb0Ryb3AoXG4gICAgICAgICAgICAgICAgICAgICAgcm93RGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7cm93RGF0YVtjb2wuZmllbGRdfX0gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzd2l0Y2gnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2ggWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwva3Ytc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjYWxlbmRhcidcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdIHwgZGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgIDwvdGQ+XG5cblxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbiAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJyb3dncm91cCAmJiAhY29sLnRlbXBsYXRlICYmICFjb2wuZmllbGRDb250cm9sVHlwZVwiIFthdHRyLnJvd3NwYW5dPVwicm93Z3JvdXAgJiYgY29sLmdyb3VwZWQgPyByb3dzcGFuIDogbnVsbFwiXG4gICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCIgW3N0eWxlXT1cIlxuICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIGNvbCkgK1xuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXG4gICAgICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpXG4gICAgICAgICAgICBcIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCIgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sLmljb25cIiBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCI+PC9pPlxuICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cInJldHVybkNsYXNzQ2hpcChyb3dEYXRhLCBjb2wpXCIgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIj57e1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1pY29ucyc6IGNvbC5pbmRJY29uTWF0ZXJpYWwsXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXG4gICAgICAgICAgICAgIH1cIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiPlxuICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxuICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhY29sLmljb25GaWVsZCAmJiAhaXNTd2l0Y2hGaWVsZChjb2wpXCIgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcbiAgICAgICAgICAgICAgICBcIj48c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNTd2l0Y2hGaWVsZChjb2wpXCIgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIj5cbiAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbD8ub25seVJlYWRGaWVsZCA/PyB0cnVlXCIgW3N3aXRjaFZhbHVlXT1cInRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcIj5cbiAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgPHRkICpuZ0lmPVwiIXJvd2dyb3VwICYmICFjb2wuZ3JvdXBlZCAmJiAhY29sLnRlbXBsYXRlICYmICFjb2wuZmllbGRDb250cm9sVHlwZVwiIFtzdHlsZV09XCJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxuICAgICAgICAgICAgXCIgY2xhc3M9XCJyb3dUYWJsZVwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cblxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIiBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpXG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvblwiIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiPlxuICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1pY29ucyc6IGNvbC5pbmRJY29uTWF0ZXJpYWwsXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXG4gICAgICAgICAgICAgIH1cIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiPlxuICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxuICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhY29sLmljb25GaWVsZCAmJiAhaXNTd2l0Y2hGaWVsZChjb2wpXCIgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcbiAgICAgICAgICAgICAgICBcIj48c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNTd2l0Y2hGaWVsZChjb2wpXCIgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIj5cbiAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbD8ub25seVJlYWRGaWVsZCA/PyB0cnVlXCIgW3N3aXRjaFZhbHVlXT1cInRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcIj5cbiAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgPHRkICpuZ0lmPVwiY29sLnRlbXBsYXRlICYmICFjb2wuZmllbGRDb250cm9sVHlwZVwiIFtzdHlsZV09XCJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxuICAgICAgICAgICAgXCIgY2xhc3M9XCJyb3dUYWJsZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cblxuXG5cblxuXG5cbiAgICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbiAgICAgIDwhLS0gQ29udHJvbGUgZGUgYcOnw6NvICAtLT5cbiAgICAgIDx0ZCBbbmdDbGFzc109XCJ7J3RkLXRvb2xzJzogaXNFZGl0YWJsZVRhYmxlKCksICd0ZC10b29scy1zdGlja3knOiAhaXNFZGl0YWJsZVRhYmxlKCkgfVwiXG4gICAgICAgICpuZ0lmPVwiY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMCAmJiAhZWRpdGluZ1wiXG4gICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdidG5zLW9wdGlvbnMnLCBoZWFkZXI6ICcnIH0pXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbCBnYXAtMVwiXG4gICAgICAgICAgKm5nSWY9XCJhY29lc0xpbmhhVGFiZWxhXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJtci0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIDxidXR0b25cbiAgICAgICAgICAgICAgaWQ9XCJhY3Rpb25CdG5zXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImV4aWJpckNhbXBvKGFjdGlvbiwgcm93RGF0YSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkJ0bnMgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbShyb3dEYXRhKTsgYWN0aW9uPy5jb21tYW5kKGNvbW1hbmRFdmVudClcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsICd0b29sdGlwJylcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIlxuICAgICAgICAgICAgICAgIGFjdGlvbi50b29sdGlwUG9zaXRpb24gPyBhY3Rpb24udG9vbHRpcFBvc2l0aW9uIDogJ2JvdHRvbSdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTE5XCI+XG4gICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsIFwiaWNvblwiKSB9fTwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB7e1xuICAgICAgICAgICAgICAgIGNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpXG4gICAgICAgICAgICAgICAgICA/ICd0ZXh0LWdyYXktNDAwIGN1cnNvci1hdXRvJ1xuICAgICAgICAgICAgICAgICAgOiAnY3Vyc29yLXBvaW50ZXInXG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDIwcHhcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaXNCdXR0b25EaXNhYmxlKGFjdGlvbiwgcm93RGF0YSwgY29tbWFuZEV2ZW50KVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgJ3Rvb2x0aXAnKVwiXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiXG4gICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA/IGFjdGlvbi50b29sdGlwUG9zaXRpb24gOiAnYm90dG9tJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgXCJpY29uXCIpIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCJcbiAgICAgICAgICAqbmdJZj1cIiFhY29lc0xpbmhhVGFiZWxhXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gPGJ1dHRvblxuICAgICAgICAgICAgaWQ9XCJtb3JlVmVydEJ0blwiXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbkJ0bnMgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxuICAgICAgICAgID4gLS0+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciBpY29uLW1vcmUtaG9yaXpcIlxuICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDIwcHhcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIG1vcmVfaG9yaXpcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPCEtLSA8L2J1dHRvbj4gLS0+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cbiAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cbiAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxuICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDxwLW1lbnVcbiAgICAgICAgICAgICNtZW51XG4gICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbbW9kZWxdPVwibWVudUl0ZW1zXCJcbiAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgICAgPjwvcC1tZW51PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDx0ZFxuICAgICAgY2xhc3M9XCJ0ZC10b29sc1wiXG4gICAgICAqbmdJZj1cImNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDAgJiYgZWRpdGluZ1wiXG4gICAgICBbc3R5bGVdPVwiYXBwbHlTdHlsZShyb3dEYXRhLCB7IGZpZWxkOiAnYnRucy1vcHRpb25zJywgaGVhZGVyOiAnJyB9KVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGwgZ2FwLTFcIlxuICAgICAgICAqbmdJZj1cImFjb2VzTGluaGFUYWJlbGFcIlxuICAgICAgPlxuXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCJcbiAgICAgICAgKm5nSWY9XCIhYWNvZXNMaW5oYVRhYmVsYVwiXG4gICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG5cblxuXG4gICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG4gICAgICA8IS0tIENvbnRyb2xlIGRlIGVkacOnw6NvIC0tPlxuICAgICAgICA8dGQgY2xhc3M9XCJ0ZC1lZGl0XCIgKm5nSWY9XCJ0aGlzLmlzRWRpdGFibGVUYWJsZSgpXCIgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uIFtzdHlsZS5oZWlnaHRdPVwiJzI4cHgnXCIgW2lkXT1cIidyb3dFZGl0JyArIHJvd0RhdGFbY29uZmlnLmRhdGFLZXldIFwiIFtzdHlsZS53aWR0aF09XCInMjhweCdcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpXCIgKm5nSWY9XCIhZWRpdGluZ1wiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgcEluaXRFZGl0YWJsZVJvdyBpY29uPVwicGkgcGktcGVuY2lsXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RWRpdEluaXQocm93RGF0YSlcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBbc3R5bGUuaGVpZ2h0XT1cIicyOHB4J1wiIFtzdHlsZS53aWR0aF09XCInMjhweCdcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpXCIgKm5nSWY9XCJlZGl0aW5nXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBwU2F2ZUVkaXRhYmxlUm93IGljb249XCJwaSBwaS1jaGVja1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0VkaXRTYXZlKHJvd0RhdGEsIHJpKVwiIFtpZF09XCIncm93U2F2ZScgKyByb3dEYXRhW2NvbmZpZy5kYXRhS2V5XSBcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1zdWNjZXNzIG1yLTJcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gW3N0eWxlLmhlaWdodF09XCInMjhweCdcIiBbc3R5bGUud2lkdGhdPVwiJzI4cHgnXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUVkaXRSb3dGdW5jdGlvbihyb3dEYXRhKVwiICpuZ0lmPVwiZWRpdGluZ1wiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgcENhbmNlbEVkaXRhYmxlUm93IGljb249XCJwaSBwaS10aW1lc1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0VkaXRDYW5jZWwocm93RGF0YSwgcmkpXCIgW2lkXT1cIidyb3dDYW5jZWwnICsgcm93RGF0YVtjb25maWcuZGF0YUtleV0gXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCI+PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG5cblxuXG5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuPC9kaXY+XG4iXX0=