keevo-components 1.5.142 → 1.5.143

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/README.md +24 -24
  2. package/esm2020/keevo-components.mjs +4 -4
  3. package/esm2020/lib/api/base-components/base-component-button.mjs +36 -36
  4. package/esm2020/lib/api/base-components/base-component-chart.mjs +92 -92
  5. package/esm2020/lib/api/base-components/base-component-crud-form.mjs +278 -278
  6. package/esm2020/lib/api/base-components/base-component-crud-list.mjs +67 -67
  7. package/esm2020/lib/api/base-components/base-component-crud.mjs +65 -65
  8. package/esm2020/lib/api/base-components/base-component-dropdown.mjs +161 -161
  9. package/esm2020/lib/api/base-components/base-component-input.mjs +93 -93
  10. package/esm2020/lib/api/base-components/base-component-multi-select.mjs +128 -128
  11. package/esm2020/lib/api/base-components/base-component.mjs +49 -49
  12. package/esm2020/lib/api/components/chart/chart.config.mjs +2 -2
  13. package/esm2020/lib/api/components/chart/chart.model.mjs +2 -2
  14. package/esm2020/lib/api/components/chart/orchart.config.mjs +2 -2
  15. package/esm2020/lib/api/components/chart/orchart.item.mjs +2 -2
  16. package/esm2020/lib/api/components/dropdown/filtro.combo.mjs +2 -2
  17. package/esm2020/lib/api/components/error/error.component.mjs +26 -26
  18. package/esm2020/lib/api/components/error/kverror.module.mjs +35 -35
  19. package/esm2020/lib/api/components/table/action-item.mjs +2 -2
  20. package/esm2020/lib/api/components/table/kv-menuitem.mjs +3 -3
  21. package/esm2020/lib/api/components/table/table.config.column.mjs +2 -2
  22. package/esm2020/lib/api/components/table/table.config.mjs +2 -2
  23. package/esm2020/lib/api/components/table/table.paginate.mjs +9 -9
  24. package/esm2020/lib/api/helpers/component-providers.mjs +16 -16
  25. package/esm2020/lib/api/helpers/translate-primeng.mjs +23 -23
  26. package/esm2020/lib/api/models/menu/master.model.mjs +2 -2
  27. package/esm2020/lib/api/models/menu/menu.model.mjs +2 -2
  28. package/esm2020/lib/api/models/menu/menucompleto.model.mjs +2 -2
  29. package/esm2020/lib/api/models/menu/sistemamenu.model.mjs +2 -2
  30. package/esm2020/lib/api/modules/primeng.module.mjs +247 -247
  31. package/esm2020/lib/api/services/base.api.service.mjs +74 -74
  32. package/esm2020/lib/api/services/component.service.mjs +27 -27
  33. package/esm2020/lib/api/services/form.service.mjs +102 -102
  34. package/esm2020/lib/api/services/imagens.service.mjs +22 -22
  35. package/esm2020/lib/api/services/notification.service.mjs +67 -67
  36. package/esm2020/lib/api/services/object.service.mjs +26 -26
  37. package/esm2020/lib/buttons/button-personalize/button-personalize.component.mjs +17 -17
  38. package/esm2020/lib/buttons/button-popup/button-popup.component.mjs +30 -30
  39. package/esm2020/lib/buttons/button-secondary/button-secondary.component.mjs +17 -17
  40. package/esm2020/lib/buttons/button-success/button-success.component.mjs +17 -17
  41. package/esm2020/lib/buttons/kvbutton.module.mjs +39 -39
  42. package/esm2020/lib/chart/chart.component.mjs +145 -145
  43. package/esm2020/lib/chart/kvchart.module.mjs +32 -32
  44. package/esm2020/lib/directives/template.directive.mjs +24 -24
  45. package/esm2020/lib/inputs/check/check.component.mjs +26 -26
  46. package/esm2020/lib/inputs/dropdown/dropdown.component.mjs +37 -36
  47. package/esm2020/lib/inputs/input-calendar/input-calendar.component.mjs +89 -88
  48. package/esm2020/lib/inputs/input-mask/input-mask.component.mjs +23 -22
  49. package/esm2020/lib/inputs/input-number/input-number.component.mjs +57 -56
  50. package/esm2020/lib/inputs/input-password/input-password.component.mjs +33 -32
  51. package/esm2020/lib/inputs/input-text/input-text.component.mjs +21 -20
  52. package/esm2020/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +38 -37
  53. package/esm2020/lib/inputs/input-textarea/input-textarea.component.mjs +43 -42
  54. package/esm2020/lib/inputs/input-time/input-time.component.mjs +24 -23
  55. package/esm2020/lib/inputs/kvinputs.module.mjs +103 -99
  56. package/esm2020/lib/inputs/multi-select/multi-select.component.mjs +38 -37
  57. package/esm2020/lib/inputs/radio-group/radio-group.component.mjs +49 -49
  58. package/esm2020/lib/inputs/switch/switch.component.mjs +32 -32
  59. package/esm2020/lib/keevo-components.module.mjs +91 -91
  60. package/esm2020/lib/label/label.component.mjs +15 -0
  61. package/esm2020/lib/label/label.module.mjs +24 -0
  62. package/esm2020/lib/login/kvlogin.module.mjs +47 -47
  63. package/esm2020/lib/login/login.component.mjs +38 -38
  64. package/esm2020/lib/menu/kvmenu.module.mjs +43 -43
  65. package/esm2020/lib/menu/menu.component.mjs +220 -212
  66. package/esm2020/lib/orgchart/orgchart.component.mjs +100 -100
  67. package/esm2020/lib/orgchart/orgchart.module.mjs +24 -24
  68. package/esm2020/lib/picklist/kvpicklist.module.mjs +32 -32
  69. package/esm2020/lib/picklist/picklist.component.mjs +48 -48
  70. package/esm2020/lib/pipes/codigofile.pipe.mjs +19 -19
  71. package/esm2020/lib/pipes/cpfcnpj.pipe.mjs +25 -25
  72. package/esm2020/lib/pipes/pipes.module.mjs +34 -34
  73. package/esm2020/lib/pipes/telefone.pipe.mjs +45 -45
  74. package/esm2020/lib/table/kvtable.module.mjs +32 -32
  75. package/esm2020/lib/table/table.component.mjs +476 -476
  76. package/esm2020/lib/tree-table/kv-treetable.component.mjs +290 -290
  77. package/esm2020/lib/tree-table/kv-treetable.module.mjs +32 -32
  78. package/esm2020/lib/tree-view/kvtree-view.module.mjs +28 -28
  79. package/esm2020/lib/tree-view/tree-view.component.mjs +29 -29
  80. package/esm2020/lib/workspace/kvworkspace.module.mjs +47 -47
  81. package/esm2020/lib/workspace/workspace.component.mjs +77 -77
  82. package/esm2020/public-api.mjs +124 -124
  83. package/fesm2015/keevo-components.mjs +3800 -3756
  84. package/fesm2015/keevo-components.mjs.map +1 -1
  85. package/fesm2020/keevo-components.mjs +3791 -3747
  86. package/fesm2020/keevo-components.mjs.map +1 -1
  87. package/index.d.ts +5 -5
  88. package/lib/api/base-components/base-component-button.d.ts +14 -14
  89. package/lib/api/base-components/base-component-chart.d.ts +40 -40
  90. package/lib/api/base-components/base-component-crud-form.d.ts +134 -134
  91. package/lib/api/base-components/base-component-crud-list.d.ts +63 -63
  92. package/lib/api/base-components/base-component-crud.d.ts +36 -36
  93. package/lib/api/base-components/base-component-dropdown.d.ts +42 -42
  94. package/lib/api/base-components/base-component-input.d.ts +31 -31
  95. package/lib/api/base-components/base-component-multi-select.d.ts +35 -35
  96. package/lib/api/base-components/base-component.d.ts +21 -21
  97. package/lib/api/components/chart/chart.config.d.ts +11 -11
  98. package/lib/api/components/chart/chart.model.d.ts +9 -9
  99. package/lib/api/components/chart/orchart.config.d.ts +35 -35
  100. package/lib/api/components/chart/orchart.item.d.ts +26 -26
  101. package/lib/api/components/dropdown/filtro.combo.d.ts +4 -4
  102. package/lib/api/components/error/error.component.d.ts +12 -12
  103. package/lib/api/components/error/kverror.module.d.ts +10 -10
  104. package/lib/api/components/table/action-item.d.ts +5 -5
  105. package/lib/api/components/table/kv-menuitem.d.ts +9 -9
  106. package/lib/api/components/table/table.config.column.d.ts +21 -21
  107. package/lib/api/components/table/table.config.d.ts +17 -17
  108. package/lib/api/components/table/table.paginate.d.ts +6 -6
  109. package/lib/api/helpers/component-providers.d.ts +2 -2
  110. package/lib/api/helpers/translate-primeng.d.ts +4 -4
  111. package/lib/api/models/menu/master.model.d.ts +6 -6
  112. package/lib/api/models/menu/menu.model.d.ts +10 -10
  113. package/lib/api/models/menu/menucompleto.model.d.ts +6 -6
  114. package/lib/api/models/menu/sistemamenu.model.d.ts +8 -8
  115. package/lib/api/modules/primeng.module.d.ts +60 -60
  116. package/lib/api/services/base.api.service.d.ts +25 -25
  117. package/lib/api/services/component.service.d.ts +11 -11
  118. package/lib/api/services/form.service.d.ts +27 -27
  119. package/lib/api/services/imagens.service.d.ts +8 -8
  120. package/lib/api/services/notification.service.d.ts +25 -25
  121. package/lib/api/services/object.service.d.ts +8 -8
  122. package/lib/buttons/button-personalize/button-personalize.component.d.ts +7 -7
  123. package/lib/buttons/button-popup/button-popup.component.d.ts +13 -13
  124. package/lib/buttons/button-secondary/button-secondary.component.d.ts +7 -7
  125. package/lib/buttons/button-success/button-success.component.d.ts +7 -7
  126. package/lib/buttons/kvbutton.module.d.ts +11 -11
  127. package/lib/chart/chart.component.d.ts +56 -56
  128. package/lib/chart/kvchart.module.d.ts +10 -10
  129. package/lib/directives/template.directive.d.ts +11 -11
  130. package/lib/inputs/check/check.component.d.ts +11 -11
  131. package/lib/inputs/dropdown/dropdown.component.d.ts +14 -14
  132. package/lib/inputs/input-calendar/input-calendar.component.d.ts +27 -27
  133. package/lib/inputs/input-mask/input-mask.component.d.ts +10 -10
  134. package/lib/inputs/input-number/input-number.component.d.ts +18 -18
  135. package/lib/inputs/input-password/input-password.component.d.ts +13 -13
  136. package/lib/inputs/input-text/input-text.component.d.ts +9 -9
  137. package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +15 -15
  138. package/lib/inputs/input-textarea/input-textarea.component.d.ts +16 -16
  139. package/lib/inputs/input-time/input-time.component.d.ts +10 -10
  140. package/lib/inputs/kvinputs.module.d.ts +24 -23
  141. package/lib/inputs/multi-select/multi-select.component.d.ts +12 -12
  142. package/lib/inputs/radio-group/radio-group.component.d.ts +17 -17
  143. package/lib/inputs/switch/switch.component.d.ts +13 -13
  144. package/lib/keevo-components.module.d.ts +17 -17
  145. package/lib/label/label.component.d.ts +7 -0
  146. package/lib/label/label.module.d.ts +8 -0
  147. package/lib/login/kvlogin.module.d.ts +13 -13
  148. package/lib/login/login.component.d.ts +17 -17
  149. package/lib/menu/kvmenu.module.d.ts +12 -12
  150. package/lib/menu/menu.component.d.ts +70 -67
  151. package/lib/orgchart/orgchart.component.d.ts +27 -27
  152. package/lib/orgchart/orgchart.module.d.ts +9 -9
  153. package/lib/picklist/kvpicklist.module.d.ts +10 -10
  154. package/lib/picklist/picklist.component.d.ts +20 -20
  155. package/lib/pipes/codigofile.pipe.d.ts +7 -7
  156. package/lib/pipes/cpfcnpj.pipe.d.ts +7 -7
  157. package/lib/pipes/pipes.module.d.ts +10 -10
  158. package/lib/pipes/telefone.pipe.d.ts +7 -7
  159. package/lib/table/kvtable.module.d.ts +10 -10
  160. package/lib/table/table.component.d.ts +103 -103
  161. package/lib/tree-table/kv-treetable.component.d.ts +69 -69
  162. package/lib/tree-table/kv-treetable.module.d.ts +11 -11
  163. package/lib/tree-view/kvtree-view.module.d.ts +9 -9
  164. package/lib/tree-view/tree-view.component.d.ts +14 -14
  165. package/lib/workspace/kvworkspace.module.d.ts +13 -13
  166. package/lib/workspace/workspace.component.d.ts +28 -28
  167. package/package.json +1 -1
  168. package/public-api.d.ts +120 -120
@@ -1,290 +1,290 @@
1
- import { Component, ContentChildren, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { TemplateDirective } from '../directives/template.directive';
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/button";
8
- import * as i5 from "primeng/tooltip";
9
- import * as i6 from "primeng/inputtext";
10
- import * as i7 from "primeng/menu";
11
- import * as i8 from "primeng/treetable";
12
- import * as i9 from "../buttons/button-personalize/button-personalize.component";
13
- export class TreeTableComponent {
14
- constructor(datePipe, decimalPipe, codigoFipePipe, cpfCnpjPipe, telefonePipe) {
15
- this.datePipe = datePipe;
16
- this.decimalPipe = decimalPipe;
17
- this.codigoFipePipe = codigoFipePipe;
18
- this.cpfCnpjPipe = cpfCnpjPipe;
19
- this.telefonePipe = telefonePipe;
20
- this.selectedItems = [];
21
- this.acoesLinhaTabela = true;
22
- this.espacamentoPai = '2px';
23
- this.espacamentoLateral = true;
24
- this.rows = 5;
25
- this.paginator = true;
26
- this.rightCollapse = false;
27
- this.applyStyle = (rowData, col) => '';
28
- this.colorButtonToggleNodes = "surface-600";
29
- this.onFilter = new EventEmitter();
30
- this.onPaginate = new EventEmitter();
31
- this.onActiveItem = new EventEmitter();
32
- this.onActiveItemLote = new EventEmitter();
33
- this.nodeContext = { $implicit: 'rowData', rowNode: 'rowNode' };
34
- this.menuItems = [];
35
- this.imgDefault = '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';
36
- this.isExpanded = false;
37
- }
38
- ngOnInit() {
39
- }
40
- onGlobalFilter(table, event) {
41
- this.onFilter.emit(event.target.value);
42
- table.filterGlobal(event.target.value, 'contains');
43
- }
44
- paginate($event) {
45
- if ($event) {
46
- let paginaInicial = ($event?.first > 0 ? $event.first / $event.rows : $event.first) + 1;
47
- let termoPesquisa = '';
48
- let ordenacao = '';
49
- if ($event.globalFilter)
50
- termoPesquisa = $event.globalFilter;
51
- if ($event.sortField)
52
- ordenacao = `${$event.sortField} ${$event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
53
- const objeto = {
54
- paginaInicial: paginaInicial,
55
- tamanhoPagina: $event.rows,
56
- termoPesquisa: termoPesquisa,
57
- ordenacao: ordenacao,
58
- };
59
- this.onPaginate.emit(objeto);
60
- }
61
- }
62
- isBooleanField(rowData, col) {
63
- return col.fieldType == 'boolean';
64
- }
65
- isChipField(col) {
66
- return col.fieldType == 'chip';
67
- }
68
- isImageField(col) {
69
- let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
70
- return retorno;
71
- }
72
- returnRowClass(rowData, col) {
73
- let value = rowData[col.field];
74
- let rowClass;
75
- this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
76
- if (col.expiredDate == true) {
77
- new Date(value) < new Date()
78
- ? (rowClass = rowClass + ' text-red-400 font-semibold')
79
- : '';
80
- }
81
- return rowClass;
82
- }
83
- transformValue(rowData, col) {
84
- let value = rowData[col.field];
85
- if (value != null) {
86
- if (!col.pipe) {
87
- return value;
88
- }
89
- switch (col.pipe) {
90
- case 'date':
91
- return this.datePipe.transform(value, 'dd/MM/yyyy');
92
- case 'decimal':
93
- return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
94
- case 'cpfcnpj':
95
- return this.cpfCnpjPipe.transform(value);
96
- case 'telefone':
97
- return this.telefonePipe.transform(value);
98
- case 'codigofipe':
99
- return this.codigoFipePipe.transform(value);
100
- case 'money':
101
- return this.formatarValor(value);
102
- case 'percentage':
103
- return `${value} %`;
104
- default:
105
- break;
106
- }
107
- }
108
- }
109
- formatarValor(valor) {
110
- const formatter = new Intl.NumberFormat('pt-BR', {
111
- style: 'currency',
112
- currency: 'BRL',
113
- });
114
- return formatter.format(valor);
115
- }
116
- loadImage(rowData, col) {
117
- /*
118
- Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
119
- */
120
- let retorno = `data:image/jpg;base64, ${this.imgDefault}`;
121
- if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
122
- if (rowData[col.field].includes('http'))
123
- retorno = rowData[col.field];
124
- else
125
- retorno = `data:image/jpg;base64, ${rowData[col.field]}`;
126
- }
127
- return retorno;
128
- }
129
- getCustomTemplate(templatename) {
130
- return this._templates[templatename];
131
- }
132
- exibirCampo(field, rowData) {
133
- let visible = field.visible ? field.visible(rowData) : true;
134
- return visible;
135
- }
136
- activeItem(rowNode, rowData) {
137
- this.onActiveItem.emit({ rowData: rowData, rowNode: rowNode });
138
- }
139
- activeItemLote(rowData) {
140
- this.onActiveItemLote.emit(rowData);
141
- }
142
- retornarCampo(action, rowData, field) {
143
- const _function = action.dynamicfields
144
- ? action.dynamicfields[field]
145
- : null;
146
- const _field = _function
147
- ? _function.apply(action, [rowData])
148
- : action[field];
149
- return _field;
150
- }
151
- callDisabled(action, data) {
152
- if (action?.disabled) {
153
- return action.disabled(data);
154
- }
155
- return false;
156
- }
157
- criarMenusModal(data, rowNode) {
158
- if (this.config.actions && data) {
159
- const items = this.config.actions.map((action) => {
160
- const icon = this.retornarCampo(action, data, 'icon');
161
- const tooltip = this.retornarCampo(action, data, 'tooltip');
162
- const label = this.retornarCampo(action, data, 'label');
163
- const command = this.retornarCampo(action, data, 'command');
164
- const visible = action.visible ? action.visible(data, rowNode) : true;
165
- const disabled = action.disabled
166
- ? action.disabled(data)
167
- : false;
168
- const menuInsert = {
169
- label,
170
- icon,
171
- tooltip,
172
- command,
173
- disabled,
174
- visible,
175
- };
176
- let item = this.menuItems.filter((x) => x.command == menuInsert.command);
177
- if (item.length == 0)
178
- this.menuItems.push(menuInsert);
179
- else {
180
- if (menuInsert.label != item[0].label) {
181
- let index = this.menuItems.indexOf(item[0]);
182
- this.menuItems.splice(index, 1);
183
- }
184
- if (menuInsert.visible != item[0].visible) {
185
- let index = this.menuItems.indexOf(item[0]);
186
- this.menuItems.splice(index, 1);
187
- }
188
- if (menuInsert.disabled != item[0].disabled) {
189
- let index = this.menuItems.indexOf(item[0]);
190
- this.menuItems.splice(index, 1);
191
- }
192
- }
193
- });
194
- }
195
- }
196
- recuperarRowNode(rowNode) {
197
- return rowNode;
198
- }
199
- validaLinhaAcaoVazia(rowData, rowNode) {
200
- var algumItemVisivel = this.config.actions.some(a => {
201
- if (typeof a.visible === 'function') {
202
- return a.visible(rowData, rowNode) === true;
203
- }
204
- else {
205
- return true; // Retorna true se a.visible(rowData) não existir
206
- }
207
- });
208
- return !algumItemVisivel;
209
- }
210
- toggleNodes() {
211
- if (this.isExpanded) {
212
- this.collapseAll();
213
- }
214
- else {
215
- this.expandAll();
216
- }
217
- this.isExpanded = !this.isExpanded;
218
- }
219
- expandAll() {
220
- this.dataSource.forEach((node) => {
221
- this.expandCollapseRecursive(node, true);
222
- });
223
- }
224
- collapseAll() {
225
- this.dataSource.forEach((node) => {
226
- this.expandCollapseRecursive(node, false);
227
- });
228
- }
229
- expandCollapseRecursive(node, isExpand) {
230
- node.expanded = isExpand;
231
- if (node.children) {
232
- node.children.forEach((childNode) => {
233
- this.expandCollapseRecursive(childNode, isExpand);
234
- });
235
- this.dataSource = [...this.dataSource];
236
- }
237
- }
238
- }
239
- TreeTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: TreeTableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CodigoFipePipe }, { token: i2.CpfCnpjPipe }, { token: i2.TelefonePipe }], target: i0.ɵɵFactoryTarget.Component });
240
- TreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: TreeTableComponent, selector: "kv-treetable", inputs: { config: "config", dataSource: "dataSource", selectedItems: "selectedItems", acoesLinhaTabela: "acoesLinhaTabela", espacamentoPai: "espacamentoPai", espacamentoLateral: "espacamentoLateral", tamanhoTotalTree: "tamanhoTotalTree", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", tableSize: "tableSize", paginator: "paginator", rightCollapse: "rightCollapse", applyStyle: "applyStyle", _templates: ["templates", "_templates"], colorButtonToggleNodes: "colorButtonToggleNodes" }, outputs: { onFilter: "onFilter", onPaginate: "onPaginate", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote" }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<div>\n\n <p-treeTable #tt [value]=\"dataSource\" [columns]=\"config.columns\" [(selection)]=\"selectedItems\" [scrollable]=\"true\"\n selectionMode=\"checkbox\" [(selection)]=\"selectedNodes\" [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [paginator]=\"paginator\" [rows]=\"rows\" [totalRecords]=\"tamanhoTotalTree\" [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\" rowGroupMode=\"subheader\" groupRowsBy=\"id\" >\n\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableToggleNodes || config.enableFilter\">\n <div class=\"flex justify-content-between\" *ngIf=\"config.enableSelect\">\n\n <div *ngIf=\"config.enableToggleNodes\">\n <kv-button-personalize (click)=\"toggleNodes()\" [color]=\"colorButtonToggleNodes+ ' border-none'\" [label]=\"isExpanded ? 'Recolher Todos' : 'Expandir Todos'\" [icon]=\"isExpanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"></kv-button-personalize>\n </div>\n\n <div class=\"p-input-icon-left\" *ngIf=\"config.enableFilter\">\n <i class=\"pi pi-search\"></i>\n <input type=\"text\" pInputText placeholder=\"Global Search\" (input)=\"onGlobalFilter(tt,$event)\" />\n </div>\n\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngIf=\"config.enableSelect\" style=\"width: 30px;\">\n <p-treeTableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-treeTableHeaderCheckbox>\n </th>\n\n <th [style.width]=\"col.width\" *ngFor=\"let col of columns\" [ttSortableColumn]=\"col.sortable ? col.field : false\"\n [ttSortableColumnDisabled]=\"col.sortable == false\">\n\n\n <div [class]=\"'flex flex-row ml-2'\">\n {{ col.header }}\n\n <p-treeTableSortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-treeTableSortIcon>\n\n <span *ngIf=\"col.headerTooltip\" class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\">info</span>\n\n </div>\n </th>\n <th [style.width]=\"'20px'\" *ngIf=\"config.actions && config.actions.length > 0\"></th>\n </tr>\n </ng-template>\n\n\n\n <ng-template pTemplate=\"body\" let-rowNode let-rowData=\"rowData\" let-columns=\"columns\">\n\n\n <tr *ngIf=\"rowNode.level == 0\" [style.height]=\"espacamentoPai\">\n </tr>\n\n\n <tr [ttRow]=\"rowNode\">\n <td [style]=\"applyStyle(rowData, col)\" *ngFor=\"let col of config.columns; let i = index,\" class=\"rowTable\" [ngClass]=\"{'flex': i == 0, 'margem-filho': i == 0 && rowNode.level != 0 && espacamentoLateral }\" >\n\n\n <!-- // Collapse -->\n <p-treeTableToggler [rowNode]=\"rowNode\" *ngIf=\"!rightCollapse && i == 0\"></p-treeTableToggler>\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\"\n *ngIf=\"rightCollapse && i == 0\"></p-treeTableToggler>\n\n\n <!-- // Checkbox para multisele\u00E7\u00E3o-->\n <p-treeTableCheckbox (click)=\"activeItemLote(selectedItems)\" [value]=\"rowNode\"\n *ngIf=\"config.enableSelect == true && i === 0\"></p-treeTableCheckbox>\n\n <!-- // Campo com tipo booleano -->\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\n\n <!-- // Campo com tipo padr\u00E3o -->\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col) && !col.template\"\n [ngClass]=\"{'flex align-items-center max-w-max': i == config.columns.length-1}\">\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n\n <!-- // Campo com tipo imagem -->\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <!-- // Campo com tipo de chip -->\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span class=\"p-element border-null border-round-2xl chip-style p-2 text-null w-auto\"\n [pTooltip]=\"rowData[col.field]\">{{\n transformValue(rowData, col)\n }} teste</span>\n </div>\n\n </span>\n\n\n <!-- // Template campo booleano -->\n <ng-template #booleanField>\n <i *ngIf=\"!col.iconField\" [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 </ng-template>\n\n\n <!-- // Template campo personalizado -->\n <ng-container *ngIf=\"col.template && getCustomTemplate(col.template.name) \"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData, rowNodeLevel: rowNode.level }\">\n </ng-container>\n\n </td>\n\n\n\n <td *ngIf=\"config.actions && config.actions.length > 0 && !validaLinhaAcaoVazia(rowData, rowNode)\" style=\"width: 20px;\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\">\n\n\n <div class=\"flex flex-row justify-content-end w-full\" *ngIf=\"acoesLinhaTabela\">\n <div *ngFor=\"let action of config.actions\">\n <button id=\"actionBtns\" pButton *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowNode, rowData); action?.command()\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\" [tooltipPosition]=\"'bottom'\"\n [disabled]=\"callDisabled(action, rowData)\">\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"flex flex-row justify-content-end w-full\" *ngIf=\"!acoesLinhaTabela\">\n <button id=\"moreVertBtn\" pButton class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowNode, rowData)\">\n <span class=\"material-symbols-outlined\" style=\"font-size: 20px\">\n more_horiz\n </span>\n </button>\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData, rowNode) }}\n </div>\n\n <p-menu #menu [popup]=\"true\" [model]=\"menuItems\" appendTo=\"body\"></p-menu>\n\n <!-- :: Icone de collapse na direita :: -->\n <p-treeTableToggler [rowNode]=\"rowNode\" *ngIf=\"rightCollapse\"></p-treeTableToggler>\n </div>\n\n </td>\n\n\n\n\n </tr>\n\n\n\n </ng-template>\n\n\n <!-- :: Template para icone de collapse na direita -->\n <ng-template *ngIf=\"rightCollapse\" pTemplate=\"togglericon\" let-open>\n <span *ngIf=\"open\" class=\"pi pi-angle-left\"></span>\n <span *ngIf=\"!open\" class=\"pi pi-angle-down\"></span>\n </ng-template>\n\n\n\n\n <!-- :: Hotfix do bug da vers\u00E3o 15 do primeng, ao retirar esse bloco de codigo na vers\u00E3o 15 do primeng os icones de prev e next do paginator ir\u00E3o sumir ( resolvido na vers\u00E3o 16.0) :: -->\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <span class=\"pi pi-angle-double-left\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <span class=\"pi pi-angle-left\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <span class=\"pi pi-angle-right\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <span class=\"pi pi-angle-double-right\"></span>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td [attr.colspan]=\"columns.length + 2\" style=\"text-align: center\">\n Nenhum registro encontrado\n </td>\n </tr>\n </ng-template>\n\n\n </p-treeTable>\n\n</div>\n\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n/>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\n/>\n", styles: [".error-show{background-color:red;width:5px;height:10px}.input-search{position:relative;right:8px}.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:19px}.material-symbols-outlined.md-22{font-size:22px}.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}#actionLoteBtns:hover{color:#a9a9a9}.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;font-size:17px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover,#moreVertBtn:hover{color:#a9a9a9}.icon-search{top:20px}.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}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}}:host ::ng-deep .hiddenVisible span{visibility:hidden!important;cursor:hidden}.margem-filho{margin-left:25px!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: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.InputText, selector: "[pInputText]" }, { kind: "component", type: i7.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i8.TreeTable, selector: "p-treeTable", inputs: ["columns", "style", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "virtualRowHeight", "value", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel"] }, { kind: "component", type: i8.TreeTableToggler, selector: "p-treeTableToggler", inputs: ["rowNode"] }, { kind: "directive", type: i8.TTSortableColumn, selector: "[ttSortableColumn]", inputs: ["ttSortableColumn", "ttSortableColumnDisabled"] }, { kind: "component", type: i8.TTSortIcon, selector: "p-treeTableSortIcon", inputs: ["field", "ariaLabelDesc", "ariaLabelAsc"] }, { kind: "directive", type: i8.TTRow, selector: "[ttRow]", inputs: ["ttRow"] }, { kind: "component", type: i8.TTCheckbox, selector: "p-treeTableCheckbox", inputs: ["disabled", "value"] }, { kind: "component", type: i8.TTHeaderCheckbox, selector: "p-treeTableHeaderCheckbox" }, { kind: "component", type: i9.ButtonPersonalizeComponent, selector: "kv-button-personalize" }] });
241
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: TreeTableComponent, decorators: [{
242
- type: Component,
243
- args: [{ selector: 'kv-treetable', template: "<div>\n\n <p-treeTable #tt [value]=\"dataSource\" [columns]=\"config.columns\" [(selection)]=\"selectedItems\" [scrollable]=\"true\"\n selectionMode=\"checkbox\" [(selection)]=\"selectedNodes\" [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [paginator]=\"paginator\" [rows]=\"rows\" [totalRecords]=\"tamanhoTotalTree\" [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\" rowGroupMode=\"subheader\" groupRowsBy=\"id\" >\n\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableToggleNodes || config.enableFilter\">\n <div class=\"flex justify-content-between\" *ngIf=\"config.enableSelect\">\n\n <div *ngIf=\"config.enableToggleNodes\">\n <kv-button-personalize (click)=\"toggleNodes()\" [color]=\"colorButtonToggleNodes+ ' border-none'\" [label]=\"isExpanded ? 'Recolher Todos' : 'Expandir Todos'\" [icon]=\"isExpanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"></kv-button-personalize>\n </div>\n\n <div class=\"p-input-icon-left\" *ngIf=\"config.enableFilter\">\n <i class=\"pi pi-search\"></i>\n <input type=\"text\" pInputText placeholder=\"Global Search\" (input)=\"onGlobalFilter(tt,$event)\" />\n </div>\n\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n <th *ngIf=\"config.enableSelect\" style=\"width: 30px;\">\n <p-treeTableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-treeTableHeaderCheckbox>\n </th>\n\n <th [style.width]=\"col.width\" *ngFor=\"let col of columns\" [ttSortableColumn]=\"col.sortable ? col.field : false\"\n [ttSortableColumnDisabled]=\"col.sortable == false\">\n\n\n <div [class]=\"'flex flex-row ml-2'\">\n {{ col.header }}\n\n <p-treeTableSortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-treeTableSortIcon>\n\n <span *ngIf=\"col.headerTooltip\" class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\">info</span>\n\n </div>\n </th>\n <th [style.width]=\"'20px'\" *ngIf=\"config.actions && config.actions.length > 0\"></th>\n </tr>\n </ng-template>\n\n\n\n <ng-template pTemplate=\"body\" let-rowNode let-rowData=\"rowData\" let-columns=\"columns\">\n\n\n <tr *ngIf=\"rowNode.level == 0\" [style.height]=\"espacamentoPai\">\n </tr>\n\n\n <tr [ttRow]=\"rowNode\">\n <td [style]=\"applyStyle(rowData, col)\" *ngFor=\"let col of config.columns; let i = index,\" class=\"rowTable\" [ngClass]=\"{'flex': i == 0, 'margem-filho': i == 0 && rowNode.level != 0 && espacamentoLateral }\" >\n\n\n <!-- // Collapse -->\n <p-treeTableToggler [rowNode]=\"rowNode\" *ngIf=\"!rightCollapse && i == 0\"></p-treeTableToggler>\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\"\n *ngIf=\"rightCollapse && i == 0\"></p-treeTableToggler>\n\n\n <!-- // Checkbox para multisele\u00E7\u00E3o-->\n <p-treeTableCheckbox (click)=\"activeItemLote(selectedItems)\" [value]=\"rowNode\"\n *ngIf=\"config.enableSelect == true && i === 0\"></p-treeTableCheckbox>\n\n <!-- // Campo com tipo booleano -->\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\n\n <!-- // Campo com tipo padr\u00E3o -->\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col) && !col.template\"\n [ngClass]=\"{'flex align-items-center max-w-max': i == config.columns.length-1}\">\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n\n <!-- // Campo com tipo imagem -->\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n\n <!-- // Campo com tipo de chip -->\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span class=\"p-element border-null border-round-2xl chip-style p-2 text-null w-auto\"\n [pTooltip]=\"rowData[col.field]\">{{\n transformValue(rowData, col)\n }} teste</span>\n </div>\n\n </span>\n\n\n <!-- // Template campo booleano -->\n <ng-template #booleanField>\n <i *ngIf=\"!col.iconField\" [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 </ng-template>\n\n\n <!-- // Template campo personalizado -->\n <ng-container *ngIf=\"col.template && getCustomTemplate(col.template.name) \"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData, rowNodeLevel: rowNode.level }\">\n </ng-container>\n\n </td>\n\n\n\n <td *ngIf=\"config.actions && config.actions.length > 0 && !validaLinhaAcaoVazia(rowData, rowNode)\" style=\"width: 20px;\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\">\n\n\n <div class=\"flex flex-row justify-content-end w-full\" *ngIf=\"acoesLinhaTabela\">\n <div *ngFor=\"let action of config.actions\">\n <button id=\"actionBtns\" pButton *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowNode, rowData); action?.command()\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\" [tooltipPosition]=\"'bottom'\"\n [disabled]=\"callDisabled(action, rowData)\">\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"flex flex-row justify-content-end w-full\" *ngIf=\"!acoesLinhaTabela\">\n <button id=\"moreVertBtn\" pButton class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowNode, rowData)\">\n <span class=\"material-symbols-outlined\" style=\"font-size: 20px\">\n more_horiz\n </span>\n </button>\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData, rowNode) }}\n </div>\n\n <p-menu #menu [popup]=\"true\" [model]=\"menuItems\" appendTo=\"body\"></p-menu>\n\n <!-- :: Icone de collapse na direita :: -->\n <p-treeTableToggler [rowNode]=\"rowNode\" *ngIf=\"rightCollapse\"></p-treeTableToggler>\n </div>\n\n </td>\n\n\n\n\n </tr>\n\n\n\n </ng-template>\n\n\n <!-- :: Template para icone de collapse na direita -->\n <ng-template *ngIf=\"rightCollapse\" pTemplate=\"togglericon\" let-open>\n <span *ngIf=\"open\" class=\"pi pi-angle-left\"></span>\n <span *ngIf=\"!open\" class=\"pi pi-angle-down\"></span>\n </ng-template>\n\n\n\n\n <!-- :: Hotfix do bug da vers\u00E3o 15 do primeng, ao retirar esse bloco de codigo na vers\u00E3o 15 do primeng os icones de prev e next do paginator ir\u00E3o sumir ( resolvido na vers\u00E3o 16.0) :: -->\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <span class=\"pi pi-angle-double-left\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <span class=\"pi pi-angle-left\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <span class=\"pi pi-angle-right\"></span>\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <span class=\"pi pi-angle-double-right\"></span>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td [attr.colspan]=\"columns.length + 2\" style=\"text-align: center\">\n Nenhum registro encontrado\n </td>\n </tr>\n </ng-template>\n\n\n </p-treeTable>\n\n</div>\n\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n/>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\n/>\n", styles: [".error-show{background-color:red;width:5px;height:10px}.input-search{position:relative;right:8px}.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:19px}.material-symbols-outlined.md-22{font-size:22px}.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}#actionLoteBtns:hover{color:#a9a9a9}.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;font-size:17px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover,#moreVertBtn:hover{color:#a9a9a9}.icon-search{top:20px}.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}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}}:host ::ng-deep .hiddenVisible span{visibility:hidden!important;cursor:hidden}.margem-filho{margin-left:25px!important}\n"] }]
244
- }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CodigoFipePipe }, { type: i2.CpfCnpjPipe }, { type: i2.TelefonePipe }]; }, propDecorators: { config: [{
245
- type: Input
246
- }], dataSource: [{
247
- type: Input
248
- }], selectedItems: [{
249
- type: Input
250
- }], acoesLinhaTabela: [{
251
- type: Input
252
- }], espacamentoPai: [{
253
- type: Input
254
- }], espacamentoLateral: [{
255
- type: Input
256
- }], tamanhoTotalTree: [{
257
- type: Input
258
- }], rowsPerPageOptions: [{
259
- type: Input
260
- }], rows: [{
261
- type: Input
262
- }], tableSize: [{
263
- type: Input
264
- }], paginator: [{
265
- type: Input
266
- }], rightCollapse: [{
267
- type: Input
268
- }], applyStyle: [{
269
- type: Input
270
- }], _templates: [{
271
- type: Input,
272
- args: ['templates']
273
- }], colorButtonToggleNodes: [{
274
- type: Input
275
- }], templates: [{
276
- type: ContentChildren,
277
- args: [TemplateDirective]
278
- }], table: [{
279
- type: ViewChild,
280
- args: ['table', { static: false }]
281
- }], onFilter: [{
282
- type: Output
283
- }], onPaginate: [{
284
- type: Output
285
- }], onActiveItem: [{
286
- type: Output
287
- }], onActiveItemLote: [{
288
- type: Output
289
- }] } });
290
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90cmVlLXRhYmxlL2t2LXRyZWV0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvdHJlZS10YWJsZS9rdi10cmVldGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQXFDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU8xSixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7QUFhckUsTUFBTSxPQUFPLGtCQUFrQjtJQXdDN0IsWUFDbUIsUUFBa0IsRUFDbEIsV0FBd0IsRUFDeEIsY0FBOEIsRUFDOUIsV0FBd0IsRUFDeEIsWUFBMEI7UUFKMUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUF6Q3BDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBRTFCLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUVqQyxtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUMvQix1QkFBa0IsR0FBWSxJQUFJLENBQUM7UUFJbkMsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUVqQixjQUFTLEdBQVksSUFBSSxDQUFDO1FBRTFCLGtCQUFhLEdBQVcsS0FBSyxDQUFDO1FBQzlCLGVBQVUsR0FBYSxDQUFDLE9BQVksRUFBRSxHQUFzQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7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TDlCLFNBQVM7K0JBQ0UsY0FBYzsyTUFNZixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVjLFVBQVU7c0JBQTdCLEtBQUs7dUJBQUMsV0FBVztnQkFFVCxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBRThCLFNBQVM7c0JBQTVDLGVBQWU7dUJBQUMsaUJBQWlCO2dCQUNLLEtBQUs7c0JBQTNDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFM0IsUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IENvZGlnb0ZpcGVQaXBlLCBDcGZDbnBqUGlwZSwgS3ZNZW51SXRlbSwgVGFibGVDb25maWcsIFRhYmxlQ29uZmlnQ29sdW1uLCBUYWJsZVBhZ2luYXRlLCBUZWxlZm9uZVBpcGUgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUcmVlVGFibGUgfSBmcm9tICdwcmltZW5nL3RyZWV0YWJsZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcblxuXG5pbnRlcmZhY2UgQ29sdW1uIHtcbiAgZmllbGQ6IHN0cmluZztcbiAgaGVhZGVyOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2t2LXRyZWV0YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi10cmVldGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9rdi10cmVldGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVHJlZVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBjb25maWchOiBUYWJsZUNvbmZpZztcbiAgQElucHV0KCkgZGF0YVNvdXJjZSE6IFRyZWVOb2RlW107XG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XG5cbiAgQElucHV0KCkgYWNvZXNMaW5oYVRhYmVsYTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgZXNwYWNhbWVudG9QYWk6IHN0cmluZyA9ICcycHgnO1xuICBASW5wdXQoKSBlc3BhY2FtZW50b0xhdGVyYWw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHRhbWFuaG9Ub3RhbFRyZWUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9ucyE6IG51bWJlcltdO1xuICBASW5wdXQoKSByb3dzOiBudW1iZXIgPSA1O1xuICBASW5wdXQoKSB0YWJsZVNpemUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgcmlnaHRDb2xsYXBzZTpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFwcGx5U3R5bGU6IEZ1bmN0aW9uID0gKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4gJyc7XG5cbiAgQElucHV0KCd0ZW1wbGF0ZXMnKSBfdGVtcGxhdGVzITogYW55O1xuXG4gIEBJbnB1dCgpIGNvbG9yQnV0dG9uVG9nZ2xlTm9kZXM6IHN0cmluZyA9IFwic3VyZmFjZS02MDBcIjtcblxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKSB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8YW55PjtcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGUhOiBUYWJsZTtcblxuICBAT3V0cHV0KCkgb25GaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25QYWdpbmF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvbkFjdGl2ZUl0ZW06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtTG90ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgbm9kZUNvbnRleHQgPSB7JGltcGxpY2l0OiAncm93RGF0YScsIHJvd05vZGU6ICdyb3dOb2RlJ307XG5cbiAgc2VsZWN0ZWROb2RlcyE6IFRyZWVOb2RlW107XG4gIG1lbnVJdGVtczogS3ZNZW51SXRlbVtdID0gW107XG4gIGltZ0RlZmF1bHQ6c3RyaW5nID0gJy85ai80QUFRU2taSlJnQUJBUUlBZGdCMkFBRC80UUJpUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVNnRWJBQVVBQUFBQkFBQUFVZ0VvQUFNQUFBQUJBQU1BQUFJVEFBTUFBQUFCQUFFQUFBQUFBQUFBQUFCMkFBQUFBUUFBQUhZQUFBQUIvOXNBUXdBREFnSUNBZ0lEQWdJQ0F3TURBd1FHQkFRRUJBUUlCZ1lGQmdrSUNnb0pDQWtKQ2d3UERBb0xEZ3NKQ1EwUkRRNFBFQkFSRUFvTUVoTVNFQk1QRUJBUS85c0FRd0VEQXdNRUF3UUlCQVFJRUFzSkN4QVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRLzhBQUVRZ0FrQUNRQXdFUkFBSVJBUU1SQWYvRUFCMEFBUUFCQkFNQkFBQUFBQUFBQUFBQUFBQUdBUUlIQ0FNRUNRWC94QUJCRUFBQ0FRUUFCUUlDQ0FRREJBc0FBQUFCQWdNQUJBVVJCZ2NTSVRFVFFRaFJDUlFWR1NKVmxkRXlZWUdSUWxKaUZpTTNPRk5qY1hOMWRwS1RzYk8wLzhRQUdnRUJBQUlEQVFBQUFBQUFBQUFBQUFBQUFBRUZBd1FHQXYvRUFESVJBQUlBQkFNRkNBRUZBUUVCQUFBQUFBQUJBZ01FRVNFeFVRVVNRWkh3RXhVeVlYR0JvYkhSSWpOQ3dlRTA4U1AvMmdBTUF3RUFBaEVERVFBL0FQS3FnRkFLQVVCZERETGNTcEJCRThrc2pCRVJGSlptSjBBQVBKSnFVbkU3SWh0UXE3eUo1dzl5ZHoyVmkrczVlNFhGUk11MFYwOVNVNzBSdEFSMGpSUGs5UUkwVjk2czVHeXBreFhtUGQrWC9uMzVGYk8ycEtsNFFmcWZ4eko5ak9VL0JtTzZXa3NaYjZSSkJJcjNVcE90YTBwVmVsU08zZ2c3MmQ3SGFyT1hzMm5nelYvWHBJcTQ5cFZNZkczb3Z6ZGttc01UaXNYMS9abU10TFAxZGRmb1FMSDFhM3JmU0J2V3ovZXR1Q1hCTHZ1SksrbUJweHpJNWx0OXQyMXhPM1dROENnT3BmNG5GWlRvKzA4WmFYbnBiNlByRUN5ZE85YjExQTYzb2YyckhITGdtZU5KK3FQY0V5T1hmY2JWOU1DTTVQbFB3WmtlcG83R1d4a2VReU05cktSdmU5cUZicVVMMzhBRFdoclE3VnFUTm0wOGVTdDZQLzFHNUJ0S29nNDM5VitMTWdQRVBKM1BZcUw2emlMaGNyR3E3ZEVUMDVSclpPa0pQVU5BZUQxRW5RWDNxc243S21TMXZTM3ZmRC8zNzhpMGs3VWxUSHV4cmRmeHovd2djME0xdk05dmNSUEZMRXhSMGRTckt3T2lDRDRJUHRWWTA0WFpsa21vbGRaRnRRU0tBVUFvQlFDZ0ZBU2pnL2w5bWVMWlJLRmV5c09rc2J1U0lsVzdrYVFkdXM3QkIwZERSMmQ2QjNhV2htVk9PVU92NDFOS3NyWWFWWVl4YWRYL0FOK1Ztemg3aEhBY01SQk1UWUlrcFhwZTRmOEFGSy9ZYjJ4OWowZzlJMHUvWVYwTWltbFU2dEFzZGVKenMycG16LzNJci9YU3kxMVo5bXM1Z0toVFVrWEs2RkJjYUZDTGpRb0xqUW9UY29WTkJjcFVFbnh1SWVFY0J4UkNVeTFnalNoZWxMaFB3eXAyT3RNTzVBNmllazdYZnRXQ2ZTeXFoZnJXT3ZFenlhaWJJZjhBODRyZVhEcDVYejBaaFBqSGwvbCtFWmZVSWE4c0NvSXU0NHlGVTdBMDQ3OUIyUnJaMGRqUjNzRG5hcWltVXJ1OFZyK2REb0tTdmwxS3RGYUdLK1Y4ODhzcjRLNzArU0wxcG0rS0FVQW9CUUU1NWRjdTVlSnBseXVXUjQ4VEczWWJLdGNzRDNWVDdLRDJMZjBIZlpXeW9hRjFEMzQvRDk5Y2VyVnRkWEtuWFp5L0Y5ZjdwMWZPTU1NVnZFbHZieEpIRkdvUkVSUUZWUU5BQUR3QVBhdWlTVUtzc2puVzNFN3Q0bklCODY5SGhzclFnclVBVUFvQlFDZ0ZBVXFRVUlvVGM0NW9ZcDRuZ25pU1NPUlNqbzZobFpTTkVFSHNRUjdWRFNpVm5rZWszQzdwNG1EZVluTHVYaGlWc3Jpa2VURlNOM0hjdGJNVDJWajdxVDRiK2g3NkxjNVhVTHAzMmt2dy9YK2VmVDZPaHJsVUxzNW5pKy85MTZ0QjZyU3lGQUtBbEhML0FJT2w0dXkrcENxMkZteVNYWkpPMlVudEdORUhiYUkzN0FFK2RBN2xGU3VxbVdlU3ovSHVhRmZWcW1sN3F2dlJYdDVlZVRXRjhubnBhNXNGREZGQkVrRUVTUnh4cUVSRVVCVlVEUUFBOEFEMnJxVWtsWkhNdHQ0czVRS2s4dGxhZ2dVQW9DZmNwdVJQTkxuYmtueC9MdmhhNHlFY0RCYm05Y2lLMXR0LzlKSzJsQjEzNlJ0aVBBTllaMVJMcDFlWXpQSXBwdFE3UzBiUDRUNkxianU0dEZrNGg1cVlLd3VTTm1LenNacnBBZmwxc1kvL0FJcXVpMnZBbittRmxsRHNlTnI5VVNJcnpCK2piNTI4SzJjdVI0U3llRzR0aWlCWTI5czdXMTJRUGNSeWZnUC9BR0NUWjlnYXlTdHF5WTNhSzZNVTNaTTZCWGdhWnF2bHNUbGNEa3JuRFp2RzNXUHY3T1F4WEZyZFJORkxFNDhxeU1BVlA4alZrbW9sZFpGWkZDNFhhTE02bFNRS0FVQmFSVTVrcG5ITkRGY1JQYjNFU1NSU0tVZEhVTXJLUm9nZytRYWhwTk5NOXd4T0Y3eXpOZmVZSEIwdkNPWUlqNlRZWGpQSmFFSHVxZ2phSFpKMnV3Tis0MGZPd09XcmFWMHN6RHd2TDhleDB0QlZxcGw3cjhVS1YvUHp5U3h0a3N1UkY2MHpmTG9ZWmJpVklJSW5rbGtZSWlJcExNeE9nQUI1Sk5TazRuWkVOcUZYZVJzcHduZ0l1R2VIN1REb0l6SkVuVk82QWY3eVZ1N0hZQUxEZllFamZTRkh0WFcwMGhVOHBTMTcrdlh3Y2hVVGUybXhUTWNYcS9UVjJ5eFN3dmQ1dG4yQUsyREF5Nm9JRkFLQXlwOE5YSXpKZkVCelFzdUM0SlpMWEZ3SWIzTDNpQWJndEVJRGRPKzNXeEtvdm51MnlDQWExNnFvVk5MY2ZIZ2JOSlRPcG1xRGh4UFluZ3pndmhmbDd3MVk4SWNIWWEzeG1KeDhZamd0NFYwQjgyWStXWW51V095U1NTU2E1V1pNaW14T0tOM1oxa3VYREtoVUVDc2o3ZGVEMktBMXkrTVQ0VzhOeno0TnV1SStIOGRGRHh6aHJkcGJDNGpVSzEvR2cyYldRLzR0amZRVC9DMnU0QmJlL1ExanA0OTJMd3Y0OHpRcnFOVk1HOUN2MUw1OGp5VmRIamRvNUZLc3BJWlNORUg1R3VtT1dLVUFvQlFGcEh2VWtvK054ZHc5RHhSZ0xyRXlCUks2OWR1N2FIUktQNFR2UjBOOWpvYjZTUjcxcjFVaFZFcHkzN2Vwc1UwM3NKc016VDYvdjM0MlpyWk5ETmJ6UGIzRVR4U3hNVWRIVXF5c0RvZ2crQ0Q3VnlUVGhkbWRjbW9sZFpFODVPOFBSWlhQeTVhNUN0RmlsVjFRNk81WDJFT2lEMkFWanZZSVlLYXN0bHlWTW03Ny9qOTlmSldiVXFITGxxV3Y1Y2ZKVysvcTVtK3VqT2RMcUhrclVBVUFvRDBpK2k3NFZzN1RscnhkeHI2Uy9XOGxtMXhwY2p1SXJlQkpBQjhnV3VXL3NQbFZEdGVOdVpEQm9yOWNqb05qd0pTNG85WDlmK202MVZCY0NnRkFLQThZL2kyNFZ0T0RQaVA0OHdWaEVzVnY5cC9Ya1JSb0lMbU5ManBBOWdQVzBCOHE2eWlqY3lSREU5UHJBNUd1Z1V1b2poV3YzaVlqclpOVVVBb0NsU0Myb1BSaERuRnc5RmlzL0ZsN2JvV1BLcXpzZzdhbFRRYzZBQTBReW5leVN4WW4ycm50cVNGTG1LWXY1ZmEvUDNjNlBaYzV6Slc0ODRmcmgvWlB1VStNK3p1RExhUmtsU1Mra2t1bldRYTFzOUtsUnIrRW9pa2VkNzM0SXF6MmJMM0tkUFc3NjlrVmUwbzkrb2ZsWmYzOXNtUUZiNW9NdXFEeUtBVUFvRDBiK2k2NHhzN25nUGpEZ0ZwVkYzajhzbVdWQ2U3UlR3cEVTUG1BMXVOL0xySHpxaDJ2TGFqaGo4ckhRYkhtSndSUWFPNXU3VlFYQW9CUUNnUEZ6NHFPTWJQano0aHVPdUpjZktzdHJKbEd0SUpGTzFranQwVzNWd2ZrUkVDUDVHdXNvNWJseUlZWHA5NG5JMXN4VEtpS0phL1dCaXF0azFSUUNnRkFXa1ZKS0lkell4bjJqd1hjeUtrenlXVWtkMGl4OS9CNldMRFI3QkhjKzJ0YjNvR3EvYVV0ektkMjRZOWN5dzJkTVV1b1YrT0hYdWtTWEVXSDJWaXJMR2VyNnYxTzNqZzYrbnA2dWhRdTliT3Q2OGJyY2x3ZG5Bb05GWTA1a2ZhUnVQVjM1bmRIaXNoalpXb0lGQUtBVUJrYmtCem96ZklYbVpqdVBjUkdiaUNNRzJ5Vm4xZEl1N055UFVqMzdIc3JLZlprVW5ZMkRncVpDcVpiZ1pzVTFSRlRURkdqMko1YmN6T0MrYlhDbHJ4bHdMbW9jampycFJ2cElFa0VtdG1LVlBLT045MVA4aU5nZ25sWnNxT1RGdVJyRTZ5Vk9nbnc3OER1aVUxak1nb0RWajQwdml6dzNLUGhlKzVlOEY1U080NDR5MEJnUG9QdjdKaGNhTXprZnd5bFQrQmZJSkRuc0FHc3FDaWM2SlRJMStsZkpXMTlhcEVMZ2dmNm44SGxkNXJvem1SUUNnRkFLQW8zaXBKUjBzdFlESzRxOHhabTlJWGx2SkI2blQxZEhXcFhldGpldCtOMWptUWRwQTROVTF6TWt1UHM0MUdsZXp1ZHVzaDRSY1BGRHl5dFFCUUNnRkFLQWxQTHptanpCNVVaci9hRGw1eFZmWVM5SUN5R0J3WTVsQjJGa2pZRkpGMzdNQ0t4elpNRTVic3hYTXNxZE1rUGVsdXhzbmhQcE51ZWVQdEZ0c3Z3MXdqbFpFR3ZyRDJzOE1qSDVzRWxDZjJVVlh4YkprdDROb3NJZHJ6a3NVbVJUbUQ5SUQ4UlBIVm5MamJMTTQ3aGExbUJWeGc3Wm9wbVgvdnBHZVJUL05DcHJMTDJiSWx1N1YvVXhUZHAxRXhXVHQ2R3VWemMzRjVjUzNkM1BKUFBNNWtrbGtZczdzVHNzeFBja24zTmI2VnNFVjdiZUxPT2dGQUtBVUFvQ2g4VklSYlE5Q2dSY1BGRHl5dFFCUUNnRkFTZmcvbGZ6SDVneWVud1B3TG5jNE9ycFo3R3drbGpRLzZuVWRLLzFJckhIT2x5dkhFa1pKY21aTjhFTFptREEvQUo4VCtiUlpadUJyWEZSdjNEWCtVdDFPdjVxanN3L3FCV3JGdEtuaC9sZjJOdUhabFRGL0czdVN1SDZNLzRoSlVEU1pmZ3VFLzVYeVU1SS84QVRBUldQdldSbyt2Y3lyWk0vVmRleDFiL0FPamIrSTJ6UXRidHdyZkVEK0czeWpnbi93QnlOUlVyYXNoNjhpSHNtb1duTXg5eFI4RzN4TDhKSTgyUjVUNVc2aVFiNjhZOFYvc2ZNTEF6dC9jVm5ncnFlUEtMK3Zzd1IwRlJCbkR5eCtqRU9UeGVUd3Q3SmpzeGpycXh1NFRxU0M1aGFLUkQvTldBSXJaVFVTdWpVY0xoZG1kYXBJRkFLQVVCUStLa0l0b2VqcVltL3dEdFRGV1dUOUwwdnJsdkhQMGRYVjA5YWh0YjBONjM1MVdPWEgya0NqMVNaN21RZG5HNEwzczdjanVqeFdReHNyVUVDZ01qOGtPUVBNUG43eEljRHdSamxGdmJkTFgrU3VkcmEyU0h3WFlBN1k2T2tVRmpvOXRBa1lLaXBsMDBPOUdiRlBUVEttTGRnNW5vOXliK0F2a2p5d2dndnVJc1d2R21jUUF2ZDVhSU5iSzMvVjJ1eWdIaitQcmI1RWVLb1orMFowN0NGN3E4dnlkQkkyYkprNHhMZWZuK0RZNjJ0YmF5dDQ3U3p0NG9JSWxDUnhSSUZSRkhnQURzQldnMjNpeXdTdGdqbHFBS0FVQW9DT2NhOHVPQXVZK09PSzQ3NFF4V2N0dEVLdDdiTEkwZS9kSEk2a1A4MUlOWkpjMk9VN3dPeGptU29KcXRHcm1rL1A3Nk51M2p0TG5pYmtIZlRlckdHa2ZoNi9tNnVzZkszbmJ2djVMSVR2OEF6anNEYjAyMWNkMmZ6L0pUMU95VmJla2N2d2FGWkhIWkRENUM1eFdXc3A3TzlzNVdndUxlZU1wSkZJcDB5TXA3Z2dnZ2cxZEpxSlhSU05PRjJlWjE2RUNnS0h4VWtvNldXdnhpc1ZlWlF3K3FMTzNrbjlQcTZldm9VdHJlanJldk9xeHpJK3pnY2VpYjVHU1hBNWthZ1R0ZDI1a2E1VDVNWkhndTFqWjVua3NaSkxWMmtPL0I2bENuWi9DRWRBUEd0YThBVnA3Tm1PWlRwUGhoMXpOemFNdnM2aDI0NDllNlpNUWFzQ3ZaZFVFSFp4bU91OHZrclRFMkVmcVhON1BIYndwdlhWSTdCVkg5eUtodFFxN0pTY1RzajIyNUw4cGVIT1NuTHZGY0JjT1c4WVd6aURYbHlGMDk1ZEVEMVozUGtsajQzNFVLbzdBVnlOUk9pcUpqamlPeHA1RU5QTFVFSk9hd21ZVUFvQlFDZ0ZBS0FVQm9WOUpmeVZ3OFdNeFhQSEMya2NGKzEwbUp6UHBycjZ3ckl4Z21iL1V2UVVKOGtNZzhMVjFzcW9kM0pmcWlrMnZUcXluTFBKbm41VjJVUW9DMG1wSlJEdWJHVCt6dUM3cU5YbVNTOWtqdFVhTTYxczlUQmpzZmhLSTQ5OTcxclJOViswcGpsMDd0eHc2NUcvczZXcGxRcjhNZXZkb2dISjNpQ0xGWitYRTNKVllzcXFvcm5RMU1teWcyU094RE1QQkpZcUtyTmx6MUxtN2p5aSsrQlo3VmtPWkxVeUgrUER5ZnR3NVd2NUdiNjZJNTR1cVR5U3psTC94VjRNLzh3WTcvQVBUSFdLZCsxRjZNeXlQM1lmVkh1YlhISFppZ0ZBS0FVQW9CUUNnRkFheS9TSi84cytTLzhWc1Avc3F3MlovMEwwWlhiVS81bjZvOG9hNlU1Z29lMVNDMm9QUmhEbkZ4RERsYzlGaWJib2FQRkt5TTQ3a3l2b3VOZ2thSFNvOEFodW9IMnJudHF6MU1tS1hEL0g3ZjQrN25SN0xrdVhLY2NXY1gxdy9zZ2NNMHR2S2s4RXJ4eXhzSFIwWWhsWUhZSUk4RUdxeE53dTZMSnBSS3p5TmxPRXMvSHhOdy9aNWRUR0pKVTZaMFVqOEVxOW1HZ1NWNzl3RDM2U3A5NjYybW5xb2xLTmUvcjE4SElWRXZzWjBVclQxeXpYREgxV0Y3ck5NK3dEN1ZzR0JuZndlWXZlSHMxajgvaldSYnZHWFVWNWJsMTZsRWtiaDFKSHVOZ2RxOHhRcUpPRjhSREU0V29sd05qdnZGUGlYL0FEbkJmcE1mNzFvZDJVK2o1bGgzclVhcmtQdkZQaVgvQURuQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUQ3eFQ0bC96bkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmOEFPY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjg1d1g2VEgrOU83S2ZSOHgzclVhcmtQdkZQaVgvT2NGK2t4L3ZUdXluMGZNZDYxR3E1RVA1cWZHQnpwNXljSVRjRDhiNUhGell1ZWFLNGRiZkhwRS9YR2RyK0lkL05aWk5ESmtSYjhHWmluVjA2b2czSThqQ2xiWnBscFB0VWtwSHhlTHVJWXVGOEJkWlp5aGxSZWkzUnY4Y3A3S05iR3g3blIzMGcxcjFNOVU4cHpIN2V2WHdiRlBLN2ViREwxK3Y2OThMMk5iWnBwYmlWNTU1WGtsa1l1N3V4TE14T3lTVDVKTmNrMjRuZDVuWEpLRldSYlVFa281ZjhZeThJNWNHVHBOaGVNa2QyQ0R0VkJPcEJvRTdYWk92Y0Vqem9qY29xcDBzekh3dlA4QVBzYUZmU0twbDd5dnZRM3Q1K1dPR05zK0d0cm13VU0wVnhFbHhieXBKRklvZEhSZ3lzcEd3UVI1QnJxVTdxNk9aYWF3WnlBMU9aNWFMcWdnVUFvQlFDZ0ZBS0FVQW9CUUZwTlRrU2tjYzAwVnZFOXhjU3BIRkdwZDNkZ3Fxb0d5U1Q0QXFHMGsyejNEQzRudXJNMTk1Z2NZeThYWmdtUHBGaFpzOGRvQU83S1NOeUhZQjIzU0RyMkdoNTJUeTFiVk9xbVhXU3kvSjB0QlNLbWw3ejhVU1YvTHl6YXd2bXMrUkY2MHpmRkFLQW5ITHZtSkx3eEt1S3lydkppcEc3SHV6V3pFOTJVZTZrK1YvcU8rdzFsUTF6cDMyY3p3L1grZVhUcmE2aFZRdCtYNHZ2cmgxYk9VTTBWeEVrOEVxU1JTS0hSMFlGV1VqWUlJOGdpdWpUVFYwem5HbW5abzVBZm5VbmxvclVFRmFBVUFvQlFDZ0ZBVTNxcEJRbjVVSlNPT2FhSzNpZTR1SlVqaWpVdTd1d0Nxb0d5U1Q0QUZRMmxpejBsZDJSZzNtSnpFbDRtbGJGWXAzanhVYmR6M0RYTEE5bVlleWoyWCtwNzZDODVYVnpxSHVRZUg3NjY4dWpvYUZVNjdTUHhmWFhYbkI2clN5RkFLQVVBb0NVOEg4dzgxd25Jc0pkNzdIaENnczVaU0ZUdVczR2UvUWVwaVRvYU96c2IwUnVVdGJNcG5iT0hUOGFGZlZiT2wxRjRvTFF4TjNidG5rc2NyNEt5ZkN5NFlHYmNCeFpnT0pvZzJJeU1jc2dRTzhEZmhsajdLVHRUM0lCWUFzTnJ2d1RYUlNhbVZVSzh0KzNIcjRPZm0wODZUKzVEYkYvZmxmUE5YeHRtazhENjlaekNWREdwSXNWNmhRV0d4ODZFV0d4ODZDdzZoUW14UXNhQ3hTb0pQa1ovaTNoL2htTXRsOGpIRklVTHBBdjRwWk96RWFVZHhzcVFHT2wzNUlyQlBxWlZPcnpIN2Nldmd6U3FlYlA4QTI0YjRwY01PZHNzM3h0a204RENQR1BNREw4WFMrbVMxbllCUUJhUnlrcXgyRHR6MjZ6c0RXeG9hR2h2WlBPMVZiTXFuWjRMVDg2blJVdEJMcGtuRmFLTFczcmxuYkIyZXZ3UmV0TTNoUUNnRkFLQVVBb0M2R2FXM2xTZUNWNDVZMkRvNk1ReXNEc0VFZUNEVXB1RjNSRFNpVm5rVHpoN25GbjhWRUxiTFFKbFlsWFNNNytuS093QTI0QjZoMlBrRmlUc21yS1R0U2JMVm8xdkw1NitmTXE1K3lwY3gzbHZkMTRyankrcksxaWY0em14d1hrZWxaTDZXeWtlVDAxUzZoSzc4YVlzdlVxanY1TERXanZRNzFaeTlwVTh4MnZiMTZaV3pOblZFdFh0ZjA2VCtDUzJHV3hXVkVoeGVTdGJ3UmE5VDBKbGs2TjcxdnBKMXZSL3NhM0lKa0V6d05QMGR6VGpseHk3S05OWDFPM1dROENnT3BmNWZFNHJvKzA4bmFXZnE3S2V2TXNmVnJ6cnFJMzVIOTZ4eHpJSmZqYVhxekpCTGptZUJOK2lJMWsrYS9CZU42bFMvbHZaRWxNYkpheEZ2RzlzR2JwUmw3ZVF4M3NhMk85YWN6YVZQTGRyMzlPbDhHMUwyZFVURmUxdlhwdGNpQWNRYzRzL2xZamJZbUJNVkV5NmRrZjFKVHNFSFRrQUtPNDhEcUJHdzFWay9hazJaaEIrbGZQTXRKR3lwY3Q3MHg3Mm5CY09mSHl4eTRrRG1tbXVKbnVMaVY1WlpXTHU3c1dabUoyU1NlNUpQdlZhMjRuZGxta29WWlpGdFFTS0FVQW9ELzlrPSc7XG5cbiAgaXNFeHBhbmRlZDpib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2RpZ29GaXBlUGlwZTogQ29kaWdvRmlwZVBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcGZDbnBqUGlwZTogQ3BmQ25walBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZWxlZm9uZVBpcGU6IFRlbGVmb25lUGlwZSxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICB9XG5cbiAgcHVibGljIG9uR2xvYmFsRmlsdGVyKHRhYmxlOiBUcmVlVGFibGUsIGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMub25GaWx0ZXIuZW1pdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICB0YWJsZS5maWx0ZXJHbG9iYWwoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSwgJ2NvbnRhaW5zJyk7XG4gIH1cblxuICBwdWJsaWMgcGFnaW5hdGUoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICBsZXQgcGFnaW5hSW5pY2lhbCA9XG4gICAgICAgICgkZXZlbnQ/LmZpcnN0ID4gMCA/ICRldmVudC5maXJzdCAvICRldmVudC5yb3dzIDogJGV2ZW50LmZpcnN0KSArIDE7XG4gICAgICBsZXQgdGVybW9QZXNxdWlzYSA9ICcnO1xuICAgICAgbGV0IG9yZGVuYWNhbyA9ICcnO1xuXG4gICAgICBpZiAoJGV2ZW50Lmdsb2JhbEZpbHRlcikgdGVybW9QZXNxdWlzYSA9ICRldmVudC5nbG9iYWxGaWx0ZXI7XG5cbiAgICAgIGlmICgkZXZlbnQuc29ydEZpZWxkKVxuICAgICAgICBvcmRlbmFjYW8gPSBgJHskZXZlbnQuc29ydEZpZWxkfSAkeyRldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJ1xuICAgICAgICAgIH1gO1xuXG4gICAgICBjb25zdCBvYmpldG86IFRhYmxlUGFnaW5hdGUgPSB7XG4gICAgICAgIHBhZ2luYUluaWNpYWw6IHBhZ2luYUluaWNpYWwsXG4gICAgICAgIHRhbWFuaG9QYWdpbmE6ICRldmVudC5yb3dzLFxuICAgICAgICB0ZXJtb1Blc3F1aXNhOiB0ZXJtb1Blc3F1aXNhLFxuICAgICAgICBvcmRlbmFjYW86IG9yZGVuYWNhbyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub25QYWdpbmF0ZS5lbWl0KG9iamV0byk7XG4gICAgfVxuICB9XG5cbiAgaXNCb29sZWFuRmllbGQocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbC5maWVsZFR5cGUgPT0gJ2Jvb2xlYW4nO1xuICB9XG5cbiAgaXNDaGlwRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2wuZmllbGRUeXBlID09ICdjaGlwJztcbiAgfVxuXG4gIGlzSW1hZ2VGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgbGV0IHJldG9ybm8gPSBjb2wuZmllbGRUeXBlICYmIGNvbC5maWVsZFR5cGUgPT09ICdpbWFnZScgPyB0cnVlIDogZmFsc2U7XG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cbiAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xuICAgIGxldCByb3dDbGFzczogc3RyaW5nO1xuXG4gICAgdGhpcy50YWJsZVNpemUgPiA4MDAgPyAocm93Q2xhc3MgPSAndGV4dC1iYXNlJykgOiAocm93Q2xhc3MgPSAndGV4dC1zbScpO1xuXG4gICAgaWYgKGNvbC5leHBpcmVkRGF0ZSA9PSB0cnVlKSB7XG4gICAgICBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpXG4gICAgICAgID8gKHJvd0NsYXNzID0gcm93Q2xhc3MgKyAnIHRleHQtcmVkLTQwMCBmb250LXNlbWlib2xkJylcbiAgICAgICAgOiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHJvd0NsYXNzO1xuICB9XG4gIHRyYW5zZm9ybVZhbHVlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcblxuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBpZiAoIWNvbC5waXBlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjb2wucGlwZSkge1xuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5Jyk7XG4gICAgICAgIGNhc2UgJ2RlY2ltYWwnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJzEuMi0yJywgJ3B0LUJSJyk7XG4gICAgICAgIGNhc2UgJ2NwZmNucGonOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNwZkNucGpQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ3RlbGVmb25lJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZWxlZm9uZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgY2FzZSAnY29kaWdvZmlwZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29kaWdvRmlwZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgY2FzZSAnbW9uZXknOlxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGFyVmFsb3IodmFsdWUpO1xuICAgICAgICBjYXNlICdwZXJjZW50YWdlJzpcbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9ICVgO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZvcm1hdGFyVmFsb3IodmFsb3I6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHtcbiAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgY3VycmVuY3k6ICdCUkwnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsb3IpO1xuICB9XG4gIGxvYWRJbWFnZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBzdHJpbmcge1xuICAgIC8qXG4gICAgICBOb3NzYSBjb2x1bmEgZGUgaW1hZ2VtIHRyYWJhbGhhIGNvbSBzdHJpbmdzIGRvIHRpcG86IGJhc2U2NCBvdSB1cmxcbiAgICAqL1xuICAgIGxldCByZXRvcm5vID0gYGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCwgJHt0aGlzLmltZ0RlZmF1bHR9YDtcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcbiAgICAgIGlmIChyb3dEYXRhW2NvbC5maWVsZF0uaW5jbHVkZXMoJ2h0dHAnKSlcbiAgICAgICAgcmV0b3JubyA9IHJvd0RhdGFbY29sLmZpZWxkXTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7cm93RGF0YVtjb2wuZmllbGRdfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cblxuICBnZXRDdXN0b21UZW1wbGF0ZSh0ZW1wbGF0ZW5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcbiAgfVxuICBleGliaXJDYW1wbyhmaWVsZDogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICBsZXQgdmlzaWJsZSA9IGZpZWxkLnZpc2libGUgPyBmaWVsZC52aXNpYmxlKHJvd0RhdGEpIDogdHJ1ZTtcbiAgICByZXR1cm4gdmlzaWJsZTtcbiAgfVxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dOb2RlOiBhbnkgLHJvd0RhdGE6IGFueSkge1xuICAgIHRoaXMub25BY3RpdmVJdGVtLmVtaXQoe3Jvd0RhdGE6IHJvd0RhdGEsIHJvd05vZGU6IHJvd05vZGV9KTtcbiAgfVxuICBwdWJsaWMgYWN0aXZlSXRlbUxvdGUocm93RGF0YTogYW55KSB7XG4gICAgdGhpcy5vbkFjdGl2ZUl0ZW1Mb3RlLmVtaXQocm93RGF0YSk7XG4gIH1cblxuICByZXRvcm5hckNhbXBvKGFjdGlvbjogS3ZNZW51SXRlbSwgcm93RGF0YTogYW55LCBmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBfZnVuY3Rpb24gPSBhY3Rpb24uZHluYW1pY2ZpZWxkc1xuICAgICAgPyAoYWN0aW9uLmR5bmFtaWNmaWVsZHNbZmllbGRdIGFzIEZ1bmN0aW9uKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IF9maWVsZDogc3RyaW5nID0gX2Z1bmN0aW9uXG4gICAgICA/IF9mdW5jdGlvbi5hcHBseShhY3Rpb24sIFtyb3dEYXRhXSlcbiAgICAgIDogYWN0aW9uW2ZpZWxkXTtcbiAgICByZXR1cm4gX2ZpZWxkO1xuICB9XG4gIGNhbGxEaXNhYmxlZChhY3Rpb246IEt2TWVudUl0ZW0sIGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChhY3Rpb24/LmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gYWN0aW9uLmRpc2FibGVkKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY3JpYXJNZW51c01vZGFsKGRhdGE6IGFueSwgcm93Tm9kZTphbnkpIHtcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9ucyAmJiBkYXRhKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29uZmlnLmFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdpY29uJyk7XG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAndG9vbHRpcCcpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdsYWJlbCcpO1xuICAgICAgICBjb25zdCBjb21tYW5kOiBhbnkgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnY29tbWFuZCcpO1xuICAgICAgICBjb25zdCB2aXNpYmxlOiBib29sZWFuID0gYWN0aW9uLnZpc2libGUgPyBhY3Rpb24udmlzaWJsZShkYXRhLCByb3dOb2RlKSA6IHRydWU7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkOiBib29sZWFuID0gYWN0aW9uLmRpc2FibGVkXG4gICAgICAgICAgPyBhY3Rpb24uZGlzYWJsZWQoZGF0YSlcbiAgICAgICAgICA6IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG1lbnVJbnNlcnQ6IEt2TWVudUl0ZW0gPSB7XG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICB0b29sdGlwLFxuICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMubWVudUl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoeCkgPT4geC5jb21tYW5kID09IG1lbnVJbnNlcnQuY29tbWFuZFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpdGVtLmxlbmd0aCA9PSAwKSB0aGlzLm1lbnVJdGVtcy5wdXNoKG1lbnVJbnNlcnQpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAobWVudUluc2VydC5sYWJlbCAhPSBpdGVtWzBdLmxhYmVsKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobWVudUluc2VydC52aXNpYmxlICE9IGl0ZW1bMF0udmlzaWJsZSkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQuZGlzYWJsZWQgIT0gaXRlbVswXS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWN1cGVyYXJSb3dOb2RlKHJvd05vZGU6IGFueSl7XG4gICAgcmV0dXJuIHJvd05vZGVcbiAgfVxuXG4gIHZhbGlkYUxpbmhhQWNhb1ZhemlhKHJvd0RhdGE6IGFueSwgcm93Tm9kZTogYW55KSB7XG4gICAgdmFyIGFsZ3VtSXRlbVZpc2l2ZWwgPSB0aGlzLmNvbmZpZy5hY3Rpb25zLnNvbWUoYSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgYS52aXNpYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gYS52aXNpYmxlKHJvd0RhdGEsIHJvd05vZGUpID09PSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIFJldG9ybmEgdHJ1ZSBzZSBhLnZpc2libGUocm93RGF0YSkgbsOjbyBleGlzdGlyXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiAhYWxndW1JdGVtVmlzaXZlbDtcbiAgfVxuXG4gIHRvZ2dsZU5vZGVzKCkge1xuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VBbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICB9XG4gICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcbiAgfVxuXG4gIGV4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgdGhpcy5leHBhbmRDb2xsYXBzZVJlY3Vyc2l2ZShub2RlLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICB0aGlzLmV4cGFuZENvbGxhcHNlUmVjdXJzaXZlKG5vZGUsIGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kQ29sbGFwc2VSZWN1cnNpdmUobm9kZTogVHJlZU5vZGUsIGlzRXhwYW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgbm9kZS5leHBhbmRlZCA9IGlzRXhwYW5kO1xuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkTm9kZSkgPT4ge1xuICAgICAgICB0aGlzLmV4cGFuZENvbGxhcHNlUmVjdXJzaXZlKGNoaWxkTm9kZSwgaXNFeHBhbmQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcbiAgICB9XG4gIH0gIFxuXG59XG4iLCI8ZGl2PlxuXG4gIDxwLXRyZWVUYWJsZSAjdHQgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIiBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXG4gICAgc2VsZWN0aW9uTW9kZT1cImNoZWNrYm94XCIgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkTm9kZXNcIiBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlT3B0aW9uc1wiXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIiBbcm93c109XCJyb3dzXCIgW3RvdGFsUmVjb3Jkc109XCJ0YW1hbmhvVG90YWxUcmVlXCIgW2xhenldPVwiY29uZmlnLmxhenlcIlxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIiByb3dHcm91cE1vZGU9XCJzdWJoZWFkZXJcIiBncm91cFJvd3NCeT1cImlkXCIgPlxuXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIiAqbmdJZj1cImNvbmZpZy5lbmFibGVUb2dnbGVOb2RlcyB8fCBjb25maWcuZW5hYmxlRmlsdGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiICpuZ0lmPVwiY29uZmlnLmVuYWJsZVNlbGVjdFwiPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb25maWcuZW5hYmxlVG9nZ2xlTm9kZXNcIj5cbiAgICAgICAgICA8a3YtYnV0dG9uLXBlcnNvbmFsaXplIChjbGljayk9XCJ0b2dnbGVOb2RlcygpXCIgW2NvbG9yXT1cImNvbG9yQnV0dG9uVG9nZ2xlTm9kZXMrICcgYm9yZGVyLW5vbmUnXCIgW2xhYmVsXT1cImlzRXhwYW5kZWQgPyAnUmVjb2xoZXIgVG9kb3MnIDogJ0V4cGFuZGlyIFRvZG9zJ1wiIFtpY29uXT1cImlzRXhwYW5kZWQgPyAncGkgcGktY2hldnJvbi1kb3duJyA6ICdwaSBwaS1jaGV2cm9uLXJpZ2h0J1wiPjwva3YtYnV0dG9uLXBlcnNvbmFsaXplPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnRcIiAqbmdJZj1cImNvbmZpZy5lbmFibGVGaWx0ZXJcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNlYXJjaFwiPjwvaT5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0IHBsYWNlaG9sZGVyPVwiR2xvYmFsIFNlYXJjaFwiIChpbnB1dCk9XCJvbkdsb2JhbEZpbHRlcih0dCwkZXZlbnQpXCIgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCAqbmdJZj1cImNvbmZpZy5lbmFibGVTZWxlY3RcIiBzdHlsZT1cIndpZHRoOiAzMHB4O1wiPlxuICAgICAgICAgIDxwLXRyZWVUYWJsZUhlYWRlckNoZWNrYm94IChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiPjwvcC10cmVlVGFibGVIZWFkZXJDaGVja2JveD5cbiAgICAgICAgPC90aD5cblxuICAgICAgICA8dGggW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIFt0dFNvcnRhYmxlQ29sdW1uXT1cImNvbC5zb3J0YWJsZSA/IGNvbC5maWVsZCA6IGZhbHNlXCJcbiAgICAgICAgICBbdHRTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PSBmYWxzZVwiPlxuXG5cbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCInZmxleCBmbGV4LXJvdyBtbC0yJ1wiPlxuICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuXG4gICAgICAgICAgICA8cC10cmVlVGFibGVTb3J0SWNvbiAqbmdJZj1cImNvbC5zb3J0YWJsZVwiIFtmaWVsZF09XCJjb2wuZmllbGRcIj48L3AtdHJlZVRhYmxlU29ydEljb24+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLmhlYWRlclRvb2x0aXBcIiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIj5pbmZvPC9zcGFuPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBbc3R5bGUud2lkdGhdPVwiJzIwcHgnXCIgKm5nSWY9XCJjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwXCI+PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuXG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3dOb2RlIGxldC1yb3dEYXRhPVwicm93RGF0YVwiIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiPlxuXG5cbiAgICAgIDx0ciAqbmdJZj1cInJvd05vZGUubGV2ZWwgPT0gMFwiIFtzdHlsZS5oZWlnaHRdPVwiZXNwYWNhbWVudG9QYWlcIj5cbiAgICAgIDwvdHI+XG5cblxuICAgICAgICA8dHIgW3R0Um93XT1cInJvd05vZGVcIj5cbiAgICAgICAgICA8dGQgW3N0eWxlXT1cImFwcGx5U3R5bGUocm93RGF0YSwgY29sKVwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29uZmlnLmNvbHVtbnM7IGxldCBpID0gaW5kZXgsXCIgY2xhc3M9XCJyb3dUYWJsZVwiIFtuZ0NsYXNzXT1cInsnZmxleCc6IGkgPT0gMCwgJ21hcmdlbS1maWxobyc6IGkgPT0gMCAmJiByb3dOb2RlLmxldmVsICE9IDAgJiYgZXNwYWNhbWVudG9MYXRlcmFsIH1cIiA+XG5cblxuICAgICAgICAgICAgPCEtLSAvLyBDb2xsYXBzZSAtLT5cbiAgICAgICAgICAgIDxwLXRyZWVUYWJsZVRvZ2dsZXIgW3Jvd05vZGVdPVwicm93Tm9kZVwiICpuZ0lmPVwiIXJpZ2h0Q29sbGFwc2UgJiYgaSA9PSAwXCI+PC9wLXRyZWVUYWJsZVRvZ2dsZXI+XG4gICAgICAgICAgICA8cC10cmVlVGFibGVUb2dnbGVyIGNsYXNzPVwiaGlkZGVuVmlzaWJsZVwiIFtyb3dOb2RlXT1cInJvd05vZGVcIlxuICAgICAgICAgICAgICAqbmdJZj1cInJpZ2h0Q29sbGFwc2UgJiYgaSA9PSAwXCI+PC9wLXRyZWVUYWJsZVRvZ2dsZXI+XG5cblxuICAgICAgICAgICAgPCEtLSAvLyBDaGVja2JveCBwYXJhIG11bHRpc2VsZcOnw6NvLS0+XG4gICAgICAgICAgICA8cC10cmVlVGFibGVDaGVja2JveCAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIiBbdmFsdWVdPVwicm93Tm9kZVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmVuYWJsZVNlbGVjdCA9PSB0cnVlICYmIGkgPT09IDBcIj48L3AtdHJlZVRhYmxlQ2hlY2tib3g+XG5cbiAgICAgICAgICAgIDwhLS0gLy8gQ2FtcG8gY29tIHRpcG8gYm9vbGVhbm8gLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCI+XG5cbiAgICAgICAgICAgICAgPCEtLSAvLyBDYW1wbyBjb20gdGlwbyBwYWRyw6NvIC0tPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKSAmJiAhY29sLnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1heC13LW1heCc6IGkgPT0gY29uZmlnLmNvbHVtbnMubGVuZ3RoLTF9XCI+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvblwiIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG5cblxuICAgICAgICAgICAgICA8IS0tIC8vIENhbXBvIGNvbSB0aXBvIGltYWdlbSAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0ltYWdlRmllbGQoY29sKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPCEtLSAvLyBDYW1wbyBjb20gdGlwbyBkZSBjaGlwIC0tPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1lbGVtZW50IGJvcmRlci1udWxsIGJvcmRlci1yb3VuZC0yeGwgY2hpcC1zdHlsZSBwLTIgdGV4dC1udWxsIHctYXV0b1wiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicm93RGF0YVtjb2wuZmllbGRdXCI+e3tcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcbiAgICAgICAgICAgICAgICAgIH19IHRlc3RlPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9zcGFuPlxuXG5cbiAgICAgICAgICAgIDwhLS0gLy8gVGVtcGxhdGUgY2FtcG8gYm9vbGVhbm8gLS0+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhY29sLmljb25GaWVsZFwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcbiAgICAgICAgICAgICAgICAgIFwiPjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxuICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG5cbiAgICAgICAgICAgIDwhLS0gLy8gVGVtcGxhdGUgY2FtcG8gcGVyc29uYWxpemFkbyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wudGVtcGxhdGUgJiYgZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpIFwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSwgcm93Tm9kZUxldmVsOiByb3dOb2RlLmxldmVsIH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPC90ZD5cblxuXG5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwICYmICF2YWxpZGFMaW5oYUFjYW9WYXppYShyb3dEYXRhLCByb3dOb2RlKVwiIHN0eWxlPVwid2lkdGg6IDIwcHg7XCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdidG5zLW9wdGlvbnMnLCBoZWFkZXI6ICcnIH0pXCI+XG5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIiAqbmdJZj1cImFjb2VzTGluaGFUYWJlbGFcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImFjdGlvbkJ0bnNcIiBwQnV0dG9uICpuZ0lmPVwiZXhpYmlyQ2FtcG8oYWN0aW9uLCByb3dEYXRhKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkJ0bnMgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93Tm9kZSwgcm93RGF0YSk7IGFjdGlvbj8uY29tbWFuZCgpXCJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgJ3Rvb2x0aXAnKVwiIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbWQtMTlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsIFwiaWNvblwiKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIiAqbmdJZj1cIiFhY29lc0xpbmhhVGFiZWxhXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJtb3JlVmVydEJ0blwiIHBCdXR0b24gY2xhc3M9XCJhY3Rpb25CdG5zIHAtYnV0dG9uLXRleHQgcC1idXR0b24tcmFpc2VkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dOb2RlLCByb3dEYXRhKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4XCI+XG4gICAgICAgICAgICAgICAgICBtb3JlX2hvcml6XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSwgcm93Tm9kZSkgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPHAtbWVudSAjbWVudSBbcG9wdXBdPVwidHJ1ZVwiIFttb2RlbF09XCJtZW51SXRlbXNcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cblxuICAgICAgICAgICAgICA8IS0tIDo6IEljb25lIGRlIGNvbGxhcHNlIG5hIGRpcmVpdGEgOjogLS0+XG4gICAgICAgICAgICAgIDxwLXRyZWVUYWJsZVRvZ2dsZXIgW3Jvd05vZGVdPVwicm93Tm9kZVwiICpuZ0lmPVwicmlnaHRDb2xsYXBzZVwiPjwvcC10cmVlVGFibGVUb2dnbGVyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L3RkPlxuXG5cblxuXG4gICAgICAgIDwvdHI+XG5cblxuXG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuXG4gICAgPCEtLSA6OiBUZW1wbGF0ZSBwYXJhIGljb25lIGRlIGNvbGxhcHNlIG5hIGRpcmVpdGEgLS0+XG4gICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwicmlnaHRDb2xsYXBzZVwiIHBUZW1wbGF0ZT1cInRvZ2dsZXJpY29uXCIgbGV0LW9wZW4+XG4gICAgICA8c3BhbiAqbmdJZj1cIm9wZW5cIiBjbGFzcz1cInBpIHBpLWFuZ2xlLWxlZnRcIj48L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFvcGVuXCIgY2xhc3M9XCJwaSBwaS1hbmdsZS1kb3duXCI+PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cblxuXG5cbiAgICA8IS0tIDo6IEhvdGZpeCBkbyBidWcgZGEgdmVyc8OjbyAxNSBkbyBwcmltZW5nLCBhbyByZXRpcmFyIGVzc2UgYmxvY28gZGUgY29kaWdvIG5hIHZlcnPDo28gMTUgZG8gcHJpbWVuZyBvcyBpY29uZXMgZGUgcHJldiBlIG5leHQgZG8gcGFnaW5hdG9yIGlyw6NvIHN1bWlyICggcmVzb2x2aWRvIG5hIHZlcnPDo28gMTYuMCkgIDo6IC0tPlxuXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmZpcnN0cGFnZWxpbmtpY29uXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBpIHBpLWFuZ2xlLWRvdWJsZS1sZWZ0XCI+PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInBhZ2luYXRvcnByZXZpb3VzcGFnZWxpbmtpY29uXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBpIHBpLWFuZ2xlLWxlZnRcIj48L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ybmV4dHBhZ2VsaW5raWNvblwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwaSBwaS1hbmdsZS1yaWdodFwiPjwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JsYXN0cGFnZWxpbmtpY29uXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBpIHBpLWFuZ2xlLWRvdWJsZS1yaWdodFwiPjwvc3Bhbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiIGxldC1jb2x1bW5zPlxuICAgICAgPHRyPlxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIDJcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlclwiPlxuICAgICAgICAgIE5lbmh1bSByZWdpc3RybyBlbmNvbnRyYWRvXG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cblxuICA8L3AtdHJlZVRhYmxlPlxuXG48L2Rpdj5cblxuXG48bGlua1xuICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vaWNvbj9mYW1pbHk9TWF0ZXJpYWwrSWNvbnNcIlxuLz5cblxuPGxpbmtcbiAgcmVsPVwic3R5bGVzaGVldFwiXG4gIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PU1hdGVyaWFsK1N5bWJvbHMrT3V0bGluZWQ6b3Bzeix3Z2h0LEZJTEwsR1JBREA0OCw0MDAsMCwwXCJcbi8+XG4iXX0=
1
+ import { Component, ContentChildren, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { TemplateDirective } from '../directives/template.directive';
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/button";
8
+ import * as i5 from "primeng/tooltip";
9
+ import * as i6 from "primeng/inputtext";
10
+ import * as i7 from "primeng/menu";
11
+ import * as i8 from "primeng/treetable";
12
+ import * as i9 from "../buttons/button-personalize/button-personalize.component";
13
+ export class TreeTableComponent {
14
+ constructor(datePipe, decimalPipe, codigoFipePipe, cpfCnpjPipe, telefonePipe) {
15
+ this.datePipe = datePipe;
16
+ this.decimalPipe = decimalPipe;
17
+ this.codigoFipePipe = codigoFipePipe;
18
+ this.cpfCnpjPipe = cpfCnpjPipe;
19
+ this.telefonePipe = telefonePipe;
20
+ this.selectedItems = [];
21
+ this.acoesLinhaTabela = true;
22
+ this.espacamentoPai = '2px';
23
+ this.espacamentoLateral = true;
24
+ this.rows = 5;
25
+ this.paginator = true;
26
+ this.rightCollapse = false;
27
+ this.applyStyle = (rowData, col) => '';
28
+ this.colorButtonToggleNodes = "surface-600";
29
+ this.onFilter = new EventEmitter();
30
+ this.onPaginate = new EventEmitter();
31
+ this.onActiveItem = new EventEmitter();
32
+ this.onActiveItemLote = new EventEmitter();
33
+ this.nodeContext = { $implicit: 'rowData', rowNode: 'rowNode' };
34
+ this.menuItems = [];
35
+ this.imgDefault = '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';
36
+ this.isExpanded = false;
37
+ }
38
+ ngOnInit() {
39
+ }
40
+ onGlobalFilter(table, event) {
41
+ this.onFilter.emit(event.target.value);
42
+ table.filterGlobal(event.target.value, 'contains');
43
+ }
44
+ paginate($event) {
45
+ if ($event) {
46
+ let paginaInicial = ($event?.first > 0 ? $event.first / $event.rows : $event.first) + 1;
47
+ let termoPesquisa = '';
48
+ let ordenacao = '';
49
+ if ($event.globalFilter)
50
+ termoPesquisa = $event.globalFilter;
51
+ if ($event.sortField)
52
+ ordenacao = `${$event.sortField} ${$event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
53
+ const objeto = {
54
+ paginaInicial: paginaInicial,
55
+ tamanhoPagina: $event.rows,
56
+ termoPesquisa: termoPesquisa,
57
+ ordenacao: ordenacao,
58
+ };
59
+ this.onPaginate.emit(objeto);
60
+ }
61
+ }
62
+ isBooleanField(rowData, col) {
63
+ return col.fieldType == 'boolean';
64
+ }
65
+ isChipField(col) {
66
+ return col.fieldType == 'chip';
67
+ }
68
+ isImageField(col) {
69
+ let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
70
+ return retorno;
71
+ }
72
+ returnRowClass(rowData, col) {
73
+ let value = rowData[col.field];
74
+ let rowClass;
75
+ this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
76
+ if (col.expiredDate == true) {
77
+ new Date(value) < new Date()
78
+ ? (rowClass = rowClass + ' text-red-400 font-semibold')
79
+ : '';
80
+ }
81
+ return rowClass;
82
+ }
83
+ transformValue(rowData, col) {
84
+ let value = rowData[col.field];
85
+ if (value != null) {
86
+ if (!col.pipe) {
87
+ return value;
88
+ }
89
+ switch (col.pipe) {
90
+ case 'date':
91
+ return this.datePipe.transform(value, 'dd/MM/yyyy');
92
+ case 'decimal':
93
+ return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
94
+ case 'cpfcnpj':
95
+ return this.cpfCnpjPipe.transform(value);
96
+ case 'telefone':
97
+ return this.telefonePipe.transform(value);
98
+ case 'codigofipe':
99
+ return this.codigoFipePipe.transform(value);
100
+ case 'money':
101
+ return this.formatarValor(value);
102
+ case 'percentage':
103
+ return `${value} %`;
104
+ default:
105
+ break;
106
+ }
107
+ }
108
+ }
109
+ formatarValor(valor) {
110
+ const formatter = new Intl.NumberFormat('pt-BR', {
111
+ style: 'currency',
112
+ currency: 'BRL',
113
+ });
114
+ return formatter.format(valor);
115
+ }
116
+ loadImage(rowData, col) {
117
+ /*
118
+ Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
119
+ */
120
+ let retorno = `data:image/jpg;base64, ${this.imgDefault}`;
121
+ if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
122
+ if (rowData[col.field].includes('http'))
123
+ retorno = rowData[col.field];
124
+ else
125
+ retorno = `data:image/jpg;base64, ${rowData[col.field]}`;
126
+ }
127
+ return retorno;
128
+ }
129
+ getCustomTemplate(templatename) {
130
+ return this._templates[templatename];
131
+ }
132
+ exibirCampo(field, rowData) {
133
+ let visible = field.visible ? field.visible(rowData) : true;
134
+ return visible;
135
+ }
136
+ activeItem(rowNode, rowData) {
137
+ this.onActiveItem.emit({ rowData: rowData, rowNode: rowNode });
138
+ }
139
+ activeItemLote(rowData) {
140
+ this.onActiveItemLote.emit(rowData);
141
+ }
142
+ retornarCampo(action, rowData, field) {
143
+ const _function = action.dynamicfields
144
+ ? action.dynamicfields[field]
145
+ : null;
146
+ const _field = _function
147
+ ? _function.apply(action, [rowData])
148
+ : action[field];
149
+ return _field;
150
+ }
151
+ callDisabled(action, data) {
152
+ if (action?.disabled) {
153
+ return action.disabled(data);
154
+ }
155
+ return false;
156
+ }
157
+ criarMenusModal(data, rowNode) {
158
+ if (this.config.actions && data) {
159
+ const items = this.config.actions.map((action) => {
160
+ const icon = this.retornarCampo(action, data, 'icon');
161
+ const tooltip = this.retornarCampo(action, data, 'tooltip');
162
+ const label = this.retornarCampo(action, data, 'label');
163
+ const command = this.retornarCampo(action, data, 'command');
164
+ const visible = action.visible ? action.visible(data, rowNode) : true;
165
+ const disabled = action.disabled
166
+ ? action.disabled(data)
167
+ : false;
168
+ const menuInsert = {
169
+ label,
170
+ icon,
171
+ tooltip,
172
+ command,
173
+ disabled,
174
+ visible,
175
+ };
176
+ let item = this.menuItems.filter((x) => x.command == menuInsert.command);
177
+ if (item.length == 0)
178
+ this.menuItems.push(menuInsert);
179
+ else {
180
+ if (menuInsert.label != item[0].label) {
181
+ let index = this.menuItems.indexOf(item[0]);
182
+ this.menuItems.splice(index, 1);
183
+ }
184
+ if (menuInsert.visible != item[0].visible) {
185
+ let index = this.menuItems.indexOf(item[0]);
186
+ this.menuItems.splice(index, 1);
187
+ }
188
+ if (menuInsert.disabled != item[0].disabled) {
189
+ let index = this.menuItems.indexOf(item[0]);
190
+ this.menuItems.splice(index, 1);
191
+ }
192
+ }
193
+ });
194
+ }
195
+ }
196
+ recuperarRowNode(rowNode) {
197
+ return rowNode;
198
+ }
199
+ validaLinhaAcaoVazia(rowData, rowNode) {
200
+ var algumItemVisivel = this.config.actions.some(a => {
201
+ if (typeof a.visible === 'function') {
202
+ return a.visible(rowData, rowNode) === true;
203
+ }
204
+ else {
205
+ return true; // Retorna true se a.visible(rowData) não existir
206
+ }
207
+ });
208
+ return !algumItemVisivel;
209
+ }
210
+ toggleNodes() {
211
+ if (this.isExpanded) {
212
+ this.collapseAll();
213
+ }
214
+ else {
215
+ this.expandAll();
216
+ }
217
+ this.isExpanded = !this.isExpanded;
218
+ }
219
+ expandAll() {
220
+ this.dataSource.forEach((node) => {
221
+ this.expandCollapseRecursive(node, true);
222
+ });
223
+ }
224
+ collapseAll() {
225
+ this.dataSource.forEach((node) => {
226
+ this.expandCollapseRecursive(node, false);
227
+ });
228
+ }
229
+ expandCollapseRecursive(node, isExpand) {
230
+ node.expanded = isExpand;
231
+ if (node.children) {
232
+ node.children.forEach((childNode) => {
233
+ this.expandCollapseRecursive(childNode, isExpand);
234
+ });
235
+ this.dataSource = [...this.dataSource];
236
+ }
237
+ }
238
+ }
239
+ TreeTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: TreeTableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CodigoFipePipe }, { token: i2.CpfCnpjPipe }, { token: i2.TelefonePipe }], target: i0.ɵɵFactoryTarget.Component });
240
+ TreeTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: TreeTableComponent, selector: "kv-treetable", inputs: { config: "config", dataSource: "dataSource", selectedItems: "selectedItems", acoesLinhaTabela: "acoesLinhaTabela", espacamentoPai: "espacamentoPai", espacamentoLateral: "espacamentoLateral", tamanhoTotalTree: "tamanhoTotalTree", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", tableSize: "tableSize", paginator: "paginator", rightCollapse: "rightCollapse", applyStyle: "applyStyle", _templates: ["templates", "_templates"], colorButtonToggleNodes: "colorButtonToggleNodes" }, outputs: { onFilter: "onFilter", onPaginate: "onPaginate", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote" }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<div>\r\n\r\n <p-treeTable #tt [value]=\"dataSource\" [columns]=\"config.columns\" [(selection)]=\"selectedItems\" [scrollable]=\"true\"\r\n selectionMode=\"checkbox\" [(selection)]=\"selectedNodes\" [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [paginator]=\"paginator\" [rows]=\"rows\" [totalRecords]=\"tamanhoTotalTree\" [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\" rowGroupMode=\"subheader\" groupRowsBy=\"id\" >\r\n\r\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableToggleNodes || config.enableFilter\">\r\n <div class=\"flex justify-content-between\" *ngIf=\"config.enableSelect\">\r\n\r\n <div *ngIf=\"config.enableToggleNodes\">\r\n <kv-button-personalize (click)=\"toggleNodes()\" [color]=\"colorButtonToggleNodes+ ' border-none'\" [label]=\"isExpanded ? 'Recolher Todos' : 'Expandir Todos'\" [icon]=\"isExpanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"></kv-button-personalize>\r\n </div>\r\n\r\n <div class=\"p-input-icon-left\" *ngIf=\"config.enableFilter\">\r\n <i class=\"pi pi-search\"></i>\r\n <input type=\"text\" pInputText placeholder=\"Global Search\" (input)=\"onGlobalFilter(tt,$event)\" />\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngIf=\"config.enableSelect\" style=\"width: 30px;\">\r\n <p-treeTableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-treeTableHeaderCheckbox>\r\n </th>\r\n\r\n <th [style.width]=\"col.width\" *ngFor=\"let col of columns\" [ttSortableColumn]=\"col.sortable ? col.field : false\"\r\n [ttSortableColumnDisabled]=\"col.sortable == false\">\r\n\r\n\r\n <div [class]=\"'flex flex-row ml-2'\">\r\n {{ col.header }}\r\n\r\n <p-treeTableSortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-treeTableSortIcon>\r\n\r\n <span *ngIf=\"col.headerTooltip\" class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\">info</span>\r\n\r\n </div>\r\n </th>\r\n <th [style.width]=\"'20px'\" *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n </tr>\r\n </ng-template>\r\n\r\n\r\n\r\n <ng-template pTemplate=\"body\" let-rowNode let-rowData=\"rowData\" let-columns=\"columns\">\r\n\r\n\r\n <tr *ngIf=\"rowNode.level == 0\" [style.height]=\"espacamentoPai\">\r\n </tr>\r\n\r\n\r\n <tr [ttRow]=\"rowNode\">\r\n <td [style]=\"applyStyle(rowData, col)\" *ngFor=\"let col of config.columns; let i = index,\" class=\"rowTable\" [ngClass]=\"{'flex': i == 0, 'margem-filho': i == 0 && rowNode.level != 0 && espacamentoLateral }\" >\r\n\r\n\r\n <!-- // Collapse -->\r\n <p-treeTableToggler [rowNode]=\"rowNode\" *ngIf=\"!rightCollapse && i == 0\"></p-treeTableToggler>\r\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\"\r\n *ngIf=\"rightCollapse && i == 0\"></p-treeTableToggler>\r\n\r\n\r\n <!-- // Checkbox para multisele\u00E7\u00E3o-->\r\n <p-treeTableCheckbox (click)=\"activeItemLote(selectedItems)\" [value]=\"rowNode\"\r\n *ngIf=\"config.enableSelect == true && i === 0\"></p-treeTableCheckbox>\r\n\r\n <!-- // Campo com tipo booleano -->\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n\r\n <!-- // Campo com tipo padr\u00E3o -->\r\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col) && !col.template\"\r\n [ngClass]=\"{'flex align-items-center max-w-max': i == config.columns.length-1}\">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n\r\n <!-- // Campo com tipo imagem -->\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 <!-- // Campo com tipo de chip -->\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span class=\"p-element border-null border-round-2xl chip-style p-2 text-null w-auto\"\r\n [pTooltip]=\"rowData[col.field]\">{{\r\n transformValue(rowData, col)\r\n }} teste</span>\r\n </div>\r\n\r\n </span>\r\n\r\n\r\n <!-- // Template campo booleano -->\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField\" [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 </ng-template>\r\n\r\n\r\n <!-- // Template campo personalizado -->\r\n <ng-container *ngIf=\"col.template && getCustomTemplate(col.template.name) \"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData, rowNodeLevel: rowNode.level }\">\r\n </ng-container>\r\n\r\n </td>\r\n\r\n\r\n\r\n <td *ngIf=\"config.actions && config.actions.length > 0 && !validaLinhaAcaoVazia(rowData, rowNode)\" style=\"width: 20px;\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\">\r\n\r\n\r\n <div class=\"flex flex-row justify-content-end w-full\" *ngIf=\"acoesLinhaTabela\">\r\n <div *ngFor=\"let action of config.actions\">\r\n <button id=\"actionBtns\" pButton *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowNode, rowData); action?.command()\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\" [tooltipPosition]=\"'bottom'\"\r\n [disabled]=\"callDisabled(action, rowData)\">\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row justify-content-end w-full\" *ngIf=\"!acoesLinhaTabela\">\r\n <button id=\"moreVertBtn\" pButton class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowNode, rowData)\">\r\n <span class=\"material-symbols-outlined\" style=\"font-size: 20px\">\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, rowNode) }}\r\n </div>\r\n\r\n <p-menu #menu [popup]=\"true\" [model]=\"menuItems\" appendTo=\"body\"></p-menu>\r\n\r\n <!-- :: Icone de collapse na direita :: -->\r\n <p-treeTableToggler [rowNode]=\"rowNode\" *ngIf=\"rightCollapse\"></p-treeTableToggler>\r\n </div>\r\n\r\n </td>\r\n\r\n\r\n\r\n\r\n </tr>\r\n\r\n\r\n\r\n </ng-template>\r\n\r\n\r\n <!-- :: Template para icone de collapse na direita -->\r\n <ng-template *ngIf=\"rightCollapse\" pTemplate=\"togglericon\" let-open>\r\n <span *ngIf=\"open\" class=\"pi pi-angle-left\"></span>\r\n <span *ngIf=\"!open\" class=\"pi pi-angle-down\"></span>\r\n </ng-template>\r\n\r\n\r\n\r\n\r\n <!-- :: Hotfix do bug da vers\u00E3o 15 do primeng, ao retirar esse bloco de codigo na vers\u00E3o 15 do primeng os icones de prev e next do paginator ir\u00E3o sumir ( resolvido na vers\u00E3o 16.0) :: -->\r\n\r\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\r\n <span class=\"pi pi-angle-double-left\"></span>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\r\n <span class=\"pi pi-angle-left\"></span>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\r\n <span class=\"pi pi-angle-right\"></span>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\r\n <span class=\"pi pi-angle-double-right\"></span>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + 2\" style=\"text-align: center\">\r\n Nenhum registro encontrado\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n\r\n </p-treeTable>\r\n\r\n</div>\r\n\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>\r\n", styles: [".error-show{background-color:red;width:5px;height:10px}.input-search{position:relative;right:8px}.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:19px}.material-symbols-outlined.md-22{font-size:22px}.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}#actionLoteBtns:hover{color:#a9a9a9}.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;font-size:17px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover,#moreVertBtn:hover{color:#a9a9a9}.icon-search{top:20px}.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}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}}:host ::ng-deep .hiddenVisible span{visibility:hidden!important;cursor:hidden}.margem-filho{margin-left:25px!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: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.InputText, selector: "[pInputText]" }, { kind: "component", type: i7.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i8.TreeTable, selector: "p-treeTable", inputs: ["columns", "style", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "virtualRowHeight", "value", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel"] }, { kind: "component", type: i8.TreeTableToggler, selector: "p-treeTableToggler", inputs: ["rowNode"] }, { kind: "directive", type: i8.TTSortableColumn, selector: "[ttSortableColumn]", inputs: ["ttSortableColumn", "ttSortableColumnDisabled"] }, { kind: "component", type: i8.TTSortIcon, selector: "p-treeTableSortIcon", inputs: ["field", "ariaLabelDesc", "ariaLabelAsc"] }, { kind: "directive", type: i8.TTRow, selector: "[ttRow]", inputs: ["ttRow"] }, { kind: "component", type: i8.TTCheckbox, selector: "p-treeTableCheckbox", inputs: ["disabled", "value"] }, { kind: "component", type: i8.TTHeaderCheckbox, selector: "p-treeTableHeaderCheckbox" }, { kind: "component", type: i9.ButtonPersonalizeComponent, selector: "kv-button-personalize" }] });
241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: TreeTableComponent, decorators: [{
242
+ type: Component,
243
+ args: [{ selector: 'kv-treetable', template: "<div>\r\n\r\n <p-treeTable #tt [value]=\"dataSource\" [columns]=\"config.columns\" [(selection)]=\"selectedItems\" [scrollable]=\"true\"\r\n selectionMode=\"checkbox\" [(selection)]=\"selectedNodes\" [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [paginator]=\"paginator\" [rows]=\"rows\" [totalRecords]=\"tamanhoTotalTree\" [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\" rowGroupMode=\"subheader\" groupRowsBy=\"id\" >\r\n\r\n <ng-template pTemplate=\"caption\" *ngIf=\"config.enableToggleNodes || config.enableFilter\">\r\n <div class=\"flex justify-content-between\" *ngIf=\"config.enableSelect\">\r\n\r\n <div *ngIf=\"config.enableToggleNodes\">\r\n <kv-button-personalize (click)=\"toggleNodes()\" [color]=\"colorButtonToggleNodes+ ' border-none'\" [label]=\"isExpanded ? 'Recolher Todos' : 'Expandir Todos'\" [icon]=\"isExpanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"></kv-button-personalize>\r\n </div>\r\n\r\n <div class=\"p-input-icon-left\" *ngIf=\"config.enableFilter\">\r\n <i class=\"pi pi-search\"></i>\r\n <input type=\"text\" pInputText placeholder=\"Global Search\" (input)=\"onGlobalFilter(tt,$event)\" />\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n <th *ngIf=\"config.enableSelect\" style=\"width: 30px;\">\r\n <p-treeTableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-treeTableHeaderCheckbox>\r\n </th>\r\n\r\n <th [style.width]=\"col.width\" *ngFor=\"let col of columns\" [ttSortableColumn]=\"col.sortable ? col.field : false\"\r\n [ttSortableColumnDisabled]=\"col.sortable == false\">\r\n\r\n\r\n <div [class]=\"'flex flex-row ml-2'\">\r\n {{ col.header }}\r\n\r\n <p-treeTableSortIcon *ngIf=\"col.sortable\" [field]=\"col.field\"></p-treeTableSortIcon>\r\n\r\n <span *ngIf=\"col.headerTooltip\" class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\">info</span>\r\n\r\n </div>\r\n </th>\r\n <th [style.width]=\"'20px'\" *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n </tr>\r\n </ng-template>\r\n\r\n\r\n\r\n <ng-template pTemplate=\"body\" let-rowNode let-rowData=\"rowData\" let-columns=\"columns\">\r\n\r\n\r\n <tr *ngIf=\"rowNode.level == 0\" [style.height]=\"espacamentoPai\">\r\n </tr>\r\n\r\n\r\n <tr [ttRow]=\"rowNode\">\r\n <td [style]=\"applyStyle(rowData, col)\" *ngFor=\"let col of config.columns; let i = index,\" class=\"rowTable\" [ngClass]=\"{'flex': i == 0, 'margem-filho': i == 0 && rowNode.level != 0 && espacamentoLateral }\" >\r\n\r\n\r\n <!-- // Collapse -->\r\n <p-treeTableToggler [rowNode]=\"rowNode\" *ngIf=\"!rightCollapse && i == 0\"></p-treeTableToggler>\r\n <p-treeTableToggler class=\"hiddenVisible\" [rowNode]=\"rowNode\"\r\n *ngIf=\"rightCollapse && i == 0\"></p-treeTableToggler>\r\n\r\n\r\n <!-- // Checkbox para multisele\u00E7\u00E3o-->\r\n <p-treeTableCheckbox (click)=\"activeItemLote(selectedItems)\" [value]=\"rowNode\"\r\n *ngIf=\"config.enableSelect == true && i === 0\"></p-treeTableCheckbox>\r\n\r\n <!-- // Campo com tipo booleano -->\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n\r\n <!-- // Campo com tipo padr\u00E3o -->\r\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col) && !col.template\"\r\n [ngClass]=\"{'flex align-items-center max-w-max': i == config.columns.length-1}\">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n\r\n <!-- // Campo com tipo imagem -->\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 <!-- // Campo com tipo de chip -->\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span class=\"p-element border-null border-round-2xl chip-style p-2 text-null w-auto\"\r\n [pTooltip]=\"rowData[col.field]\">{{\r\n transformValue(rowData, col)\r\n }} teste</span>\r\n </div>\r\n\r\n </span>\r\n\r\n\r\n <!-- // Template campo booleano -->\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField\" [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 </ng-template>\r\n\r\n\r\n <!-- // Template campo personalizado -->\r\n <ng-container *ngIf=\"col.template && getCustomTemplate(col.template.name) \"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData, rowNodeLevel: rowNode.level }\">\r\n </ng-container>\r\n\r\n </td>\r\n\r\n\r\n\r\n <td *ngIf=\"config.actions && config.actions.length > 0 && !validaLinhaAcaoVazia(rowData, rowNode)\" style=\"width: 20px;\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\">\r\n\r\n\r\n <div class=\"flex flex-row justify-content-end w-full\" *ngIf=\"acoesLinhaTabela\">\r\n <div *ngFor=\"let action of config.actions\">\r\n <button id=\"actionBtns\" pButton *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowNode, rowData); action?.command()\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\" [tooltipPosition]=\"'bottom'\"\r\n [disabled]=\"callDisabled(action, rowData)\">\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row justify-content-end w-full\" *ngIf=\"!acoesLinhaTabela\">\r\n <button id=\"moreVertBtn\" pButton class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowNode, rowData)\">\r\n <span class=\"material-symbols-outlined\" style=\"font-size: 20px\">\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, rowNode) }}\r\n </div>\r\n\r\n <p-menu #menu [popup]=\"true\" [model]=\"menuItems\" appendTo=\"body\"></p-menu>\r\n\r\n <!-- :: Icone de collapse na direita :: -->\r\n <p-treeTableToggler [rowNode]=\"rowNode\" *ngIf=\"rightCollapse\"></p-treeTableToggler>\r\n </div>\r\n\r\n </td>\r\n\r\n\r\n\r\n\r\n </tr>\r\n\r\n\r\n\r\n </ng-template>\r\n\r\n\r\n <!-- :: Template para icone de collapse na direita -->\r\n <ng-template *ngIf=\"rightCollapse\" pTemplate=\"togglericon\" let-open>\r\n <span *ngIf=\"open\" class=\"pi pi-angle-left\"></span>\r\n <span *ngIf=\"!open\" class=\"pi pi-angle-down\"></span>\r\n </ng-template>\r\n\r\n\r\n\r\n\r\n <!-- :: Hotfix do bug da vers\u00E3o 15 do primeng, ao retirar esse bloco de codigo na vers\u00E3o 15 do primeng os icones de prev e next do paginator ir\u00E3o sumir ( resolvido na vers\u00E3o 16.0) :: -->\r\n\r\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\r\n <span class=\"pi pi-angle-double-left\"></span>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\r\n <span class=\"pi pi-angle-left\"></span>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\r\n <span class=\"pi pi-angle-right\"></span>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\r\n <span class=\"pi pi-angle-double-right\"></span>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + 2\" style=\"text-align: center\">\r\n Nenhum registro encontrado\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n\r\n </p-treeTable>\r\n\r\n</div>\r\n\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>\r\n", styles: [".error-show{background-color:red;width:5px;height:10px}.input-search{position:relative;right:8px}.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:19px}.material-symbols-outlined.md-22{font-size:22px}.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}#actionLoteBtns:hover{color:#a9a9a9}.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;font-size:17px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover,#moreVertBtn:hover{color:#a9a9a9}.icon-search{top:20px}.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}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}}:host ::ng-deep .hiddenVisible span{visibility:hidden!important;cursor:hidden}.margem-filho{margin-left:25px!important}\n"] }]
244
+ }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CodigoFipePipe }, { type: i2.CpfCnpjPipe }, { type: i2.TelefonePipe }]; }, propDecorators: { config: [{
245
+ type: Input
246
+ }], dataSource: [{
247
+ type: Input
248
+ }], selectedItems: [{
249
+ type: Input
250
+ }], acoesLinhaTabela: [{
251
+ type: Input
252
+ }], espacamentoPai: [{
253
+ type: Input
254
+ }], espacamentoLateral: [{
255
+ type: Input
256
+ }], tamanhoTotalTree: [{
257
+ type: Input
258
+ }], rowsPerPageOptions: [{
259
+ type: Input
260
+ }], rows: [{
261
+ type: Input
262
+ }], tableSize: [{
263
+ type: Input
264
+ }], paginator: [{
265
+ type: Input
266
+ }], rightCollapse: [{
267
+ type: Input
268
+ }], applyStyle: [{
269
+ type: Input
270
+ }], _templates: [{
271
+ type: Input,
272
+ args: ['templates']
273
+ }], colorButtonToggleNodes: [{
274
+ type: Input
275
+ }], templates: [{
276
+ type: ContentChildren,
277
+ args: [TemplateDirective]
278
+ }], table: [{
279
+ type: ViewChild,
280
+ args: ['table', { static: false }]
281
+ }], onFilter: [{
282
+ type: Output
283
+ }], onPaginate: [{
284
+ type: Output
285
+ }], onActiveItem: [{
286
+ type: Output
287
+ }], onActiveItemLote: [{
288
+ type: Output
289
+ }] } });
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90cmVlLXRhYmxlL2t2LXRyZWV0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvdHJlZS10YWJsZS9rdi10cmVldGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQXFDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU8xSixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7QUFhckUsTUFBTSxPQUFPLGtCQUFrQjtJQXdDN0IsWUFDbUIsUUFBa0IsRUFDbEIsV0FBd0IsRUFDeEIsY0FBOEIsRUFDOUIsV0FBd0IsRUFDeEIsWUFBMEI7UUFKMUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUF6Q3BDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBRTFCLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUVqQyxtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUMvQix1QkFBa0IsR0FBWSxJQUFJLENBQUM7UUFJbkMsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUVqQixjQUFTLEdBQVksSUFBSSxDQUFDO1FBRTFCLGtCQUFhLEdBQVcsS0FBSyxDQUFDO1FBQzlCLGVBQVUsR0FBYSxDQUFDLE9BQVksRUFBRSxHQUFzQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFJcEUsMkJBQXNCLEdBQVcsYUFBYSxDQUFDO1FBSzlDLGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxlQUFVLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkQsaUJBQVksR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyRCxxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuRSxnQkFBVyxHQUFHLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFDLENBQUM7UUFHekQsY0FBUyxHQUFpQixFQUFFLENBQUM7UUFDN0IsZUFBVSxHQUFVLDBxUEFBMHFQLENBQUM7UUFFL3JQLGVBQVUsR0FBVyxLQUFLLENBQUM7SUFReEIsQ0FBQztJQUVKLFFBQVE7SUFDUixDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQWdCLEVBQUUsS0FBWTtRQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBRSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxLQUFLLENBQUMsWUFBWSxDQUFFLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU0sUUFBUSxDQUFDLE1BQVc7UUFDekIsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLGFBQWEsR0FDZixDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEUsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUVuQixJQUFJLE1BQU0sQ0FBQyxZQUFZO2dCQUFFLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1lBRTdELElBQUksTUFBTSxDQUFDLFNBQVM7Z0JBQ2xCLFNBQVMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFDbEUsRUFBRSxDQUFDO1lBRVAsTUFBTSxNQUFNLEdBQWtCO2dCQUM1QixhQUFhLEVBQUUsYUFBYTtnQkFDNUIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUMxQixhQUFhLEVBQUUsYUFBYTtnQkFDNUIsU0FBUyxFQUFFLFNBQVM7YUFDckIsQ0FBQztZQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDakQsT0FBTyxHQUFHLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQXNCO1FBQ2hDLE9BQU8sR0FBRyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFzQjtRQUNqQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN4RSxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0QsY0FBYyxDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUNqRCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksUUFBZ0IsQ0FBQztRQUVyQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBRXpFLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsNkJBQTZCLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxjQUFjLENBQUMsT0FBWSxFQUFFLEdBQXNCO1FBQ2pELElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFL0IsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNiLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hCLEtBQUssTUFBTTtvQkFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztnQkFDdEQsS0FBSyxTQUFTO29CQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0QsS0FBSyxTQUFTO29CQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNDLEtBQUssVUFBVTtvQkFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxLQUFLLFlBQVk7b0JBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUMsS0FBSyxPQUFPO29CQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxZQUFZO29CQUNmLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQztnQkFFdEI7b0JBQ0UsTUFBTTthQUNUO1NBQ0Y7SUFDSCxDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQWE7UUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUMvQyxLQUFLLEVBQUUsVUFBVTtZQUNqQixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFFSCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELFNBQVMsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDNUM7O1VBRUU7UUFDRixJQUFJLE9BQU8sR0FBRywwQkFBMEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFELElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUNyQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7Z0JBRTdCLE9BQU8sR0FBRywwQkFBMEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQzVEO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGlCQUFpQixDQUFDLFlBQW9CO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQVUsRUFBRSxPQUFZO1FBQ2xDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM1RCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ00sVUFBVSxDQUFDLE9BQVksRUFBRSxPQUFZO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ00sY0FBYyxDQUFDLE9BQVk7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWtCLEVBQUUsT0FBWSxFQUFFLEtBQWE7UUFDM0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGFBQWE7WUFDcEMsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFjO1lBQzNDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxNQUFNLE1BQU0sR0FBVyxTQUFTO1lBQzlCLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELFlBQVksQ0FBQyxNQUFrQixFQUFFLElBQVM7UUFDeEMsSUFBSSxNQUFNLEVBQUUsUUFBUSxFQUFFO1lBQ3BCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELGVBQWUsQ0FBQyxJQUFTLEVBQUUsT0FBVztRQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDeEQsTUFBTSxPQUFPLEdBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLE9BQU8sR0FBWSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMvRSxNQUFNLFFBQVEsR0FBWSxNQUFNLENBQUMsUUFBUTtvQkFDdkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUN2QixDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUVWLE1BQU0sVUFBVSxHQUFlO29CQUM3QixLQUFLO29CQUNMLElBQUk7b0JBQ0osT0FBTztvQkFDUCxPQUFPO29CQUNQLFFBQVE7b0JBQ1IsT0FBTztpQkFDUixDQUFDO2dCQUVGLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUM5QixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUN2QyxDQUFDO2dCQUVGLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO29CQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUNqRDtvQkFDSCxJQUFJLFVBQVUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTt3QkFDckMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDakM7b0JBRUQsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7d0JBQ3pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ2pDO29CQUVELElBQUksVUFBVSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO3dCQUMzQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUNqQztpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBWTtRQUMzQixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBWSxFQUFFLE9BQVk7UUFDN0MsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEQsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFO2dCQUNqQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQzthQUMvQztpQkFBTTtnQkFDSCxPQUFPLElBQUksQ0FBQyxDQUFDLGlEQUFpRDthQUNqRTtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxJQUFjLEVBQUUsUUFBaUI7UUFDL0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDOzsrR0FyUlUsa0JBQWtCO21HQUFsQixrQkFBa0IsNHJCQXdCWixpQkFBaUIsNkhDN0NwQyxpL1JBcU5BOzJGRGhNYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsY0FBYzsyTUFNZixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVjLFVBQVU7c0JBQTdCLEtBQUs7dUJBQUMsV0FBVztnQkFFVCxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBRThCLFNBQVM7c0JBQTVDLGVBQWU7dUJBQUMsaUJBQWlCO2dCQUNLLEtBQUs7c0JBQTNDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFM0IsUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IENvZGlnb0ZpcGVQaXBlLCBDcGZDbnBqUGlwZSwgS3ZNZW51SXRlbSwgVGFibGVDb25maWcsIFRhYmxlQ29uZmlnQ29sdW1uLCBUYWJsZVBhZ2luYXRlLCBUZWxlZm9uZVBpcGUgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgVHJlZVRhYmxlIH0gZnJvbSAncHJpbWVuZy90cmVldGFibGUnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcblxyXG5cclxuaW50ZXJmYWNlIENvbHVtbiB7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICBoZWFkZXI6IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi10cmVldGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi10cmVldGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LXRyZWV0YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgY29uZmlnITogVGFibGVDb25maWc7XHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZSE6IFRyZWVOb2RlW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgYWNvZXNMaW5oYVRhYmVsYTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGVzcGFjYW1lbnRvUGFpOiBzdHJpbmcgPSAnMnB4JztcclxuICBASW5wdXQoKSBlc3BhY2FtZW50b0xhdGVyYWw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSB0YW1hbmhvVG90YWxUcmVlITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9ucyE6IG51bWJlcltdO1xyXG4gIEBJbnB1dCgpIHJvd3M6IG51bWJlciA9IDU7XHJcbiAgQElucHV0KCkgdGFibGVTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHJpZ2h0Q29sbGFwc2U6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFwcGx5U3R5bGU6IEZ1bmN0aW9uID0gKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4gJyc7XHJcblxyXG4gIEBJbnB1dCgndGVtcGxhdGVzJykgX3RlbXBsYXRlcyE6IGFueTtcclxuXHJcbiAgQElucHV0KCkgY29sb3JCdXR0b25Ub2dnbGVOb2Rlczogc3RyaW5nID0gXCJzdXJmYWNlLTYwMFwiO1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKSB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8YW55PjtcclxuICBAVmlld0NoaWxkKCd0YWJsZScsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZSE6IFRhYmxlO1xyXG5cclxuICBAT3V0cHV0KCkgb25GaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2luYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtTG90ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIG5vZGVDb250ZXh0ID0geyRpbXBsaWNpdDogJ3Jvd0RhdGEnLCByb3dOb2RlOiAncm93Tm9kZSd9O1xyXG5cclxuICBzZWxlY3RlZE5vZGVzITogVHJlZU5vZGVbXTtcclxuICBtZW51SXRlbXM6IEt2TWVudUl0ZW1bXSA9IFtdO1xyXG4gIGltZ0RlZmF1bHQ6c3RyaW5nID0gJy85ai80QUFRU2taSlJnQUJBUUlBZGdCMkFBRC80UUJpUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVTQUFNQUFBQUJBQUVBQUFFYUFBVUFBQUFCQUFBQVNnRWJBQVVBQUFBQkFBQUFVZ0VvQUFNQUFBQUJBQU1BQUFJVEFBTUFBQUFCQUFFQUFBQUFBQUFBQUFCMkFBQUFBUUFBQUhZQUFBQUIvOXNBUXdBREFnSUNBZ0lEQWdJQ0F3TURBd1FHQkFRRUJBUUlCZ1lGQmdrSUNnb0pDQWtKQ2d3UERBb0xEZ3NKQ1EwUkRRNFBFQkFSRUFvTUVoTVNFQk1QRUJBUS85c0FRd0VEQXdNRUF3UUlCQVFJRUFzSkN4QVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRLzhBQUVRZ0FrQUNRQXdFUkFBSVJBUU1SQWYvRUFCMEFBUUFCQkFNQkFBQUFBQUFBQUFBQUFBQUdBUUlIQ0FNRUNRWC94QUJCRUFBQ0FRUUFCUUlDQ0FRREJBc0FBQUFCQWdNQUJBVVJCZ2NTSVRFVFFRaFJDUlFWR1NKVmxkRXlZWUdSUWxKaUZpTTNPRk5qY1hOMWRwS1RzYk8wLzhRQUdnRUJBQUlEQVFBQUFBQUFBQUFBQUFBQUFBRUZBd1FHQXYvRUFESVJBQUlBQkFNRkNBRUZBUUVCQUFBQUFBQUJBZ01FRVNFeFVRVVNRWkh3RXhVeVlYR0JvYkhSSWpOQ3dlRTA4U1AvMmdBTUF3RUFBaEVERVFBL0FQS3FnRkFLQVVCZERETGNTcEJCRThrc2pCRVJGSlptSjBBQVBKSnFVbkU3SWh0UXE3eUo1dzl5ZHoyVmkrczVlNFhGUk11MFYwOVNVNzBSdEFSMGpSUGs5UUkwVjk2czVHeXBreFhtUGQrWC9uMzVGYk8ycEtsNFFmcWZ4eko5ak9VL0JtTzZXa3NaYjZSSkJJcjNVcE90YTBwVmVsU08zZ2c3MmQ3SGFyT1hzMm5nelYvWHBJcTQ5cFZNZkczb3Z6ZGttc01UaXNYMS9abU10TFAxZGRmb1FMSDFhM3JmU0J2V3ovZXR1Q1hCTHZ1SksrbUJweHpJNWx0OXQyMXhPM1dROENnT3BmNG5GWlRvKzA4WmFYbnBiNlByRUN5ZE85YjExQTYzb2YyckhITGdtZU5KK3FQY0V5T1hmY2JWOU1DTTVQbFB3WmtlcG83R1d4a2VReU05cktSdmU5cUZicVVMMzhBRFdoclE3VnFUTm0wOGVTdDZQLzFHNUJ0S29nNDM5VitMTWdQRVBKM1BZcUw2emlMaGNyR3E3ZEVUMDVSclpPa0pQVU5BZUQxRW5RWDNxc243S21TMXZTM3ZmRC8zNzhpMGs3VWxUSHV4cmRmeHovd2djME0xdk05dmNSUEZMRXhSMGRTckt3T2lDRDRJUHRWWTA0WFpsa21vbGRaRnRRU0tBVUFvQlFDZ0ZBU2pnL2w5bWVMWlJLRmV5c09rc2J1U0lsVzdrYVFkdXM3QkIwZERSMmQ2QjNhV2htVk9PVU92NDFOS3NyWWFWWVl4YWRYL0FOK1Ztemg3aEhBY01SQk1UWUlrcFhwZTRmOEFGSy9ZYjJ4OWowZzlJMHUvWVYwTWltbFU2dEFzZGVKenMycG16LzNJci9YU3kxMVo5bXM1Z0toVFVrWEs2RkJjYUZDTGpRb0xqUW9UY29WTkJjcFVFbnh1SWVFY0J4UkNVeTFnalNoZWxMaFB3eXAyT3RNTzVBNmllazdYZnRXQ2ZTeXFoZnJXT3ZFenlhaWJJZjhBODRyZVhEcDVYejBaaFBqSGwvbCtFWmZVSWE4c0NvSXU0NHlGVTdBMDQ3OUIyUnJaMGRqUjNzRG5hcWltVXJ1OFZyK2REb0tTdmwxS3RGYUdLK1Y4ODhzcjRLNzArU0wxcG0rS0FVQW9CUUU1NWRjdTVlSnBseXVXUjQ4VEczWWJLdGNzRDNWVDdLRDJMZjBIZlpXeW9hRjFEMzQvRDk5Y2VyVnRkWEtuWFp5L0Y5ZjdwMWZPTU1NVnZFbHZieEpIRkdvUkVSUUZWUU5BQUR3QVBhdWlTVUtzc2puVzNFN3Q0bklCODY5SGhzclFnclVBVUFvQlFDZ0ZBVXFRVUlvVGM0NW9ZcDRuZ25pU1NPUlNqbzZobFpTTkVFSHNRUjdWRFNpVm5rZWszQzdwNG1EZVluTHVYaGlWc3Jpa2VURlNOM0hjdGJNVDJWajdxVDRiK2g3NkxjNVhVTHAzMmt2dy9YK2VmVDZPaHJsVUxzNW5pKy85MTZ0QjZyU3lGQUtBbEhML0FJT2w0dXkrcENxMkZteVNYWkpPMlVudEdORUhiYUkzN0FFK2RBN2xGU3VxbVdlU3ovSHVhRmZWcW1sN3F2dlJYdDVlZVRXRjhubnBhNXNGREZGQkVrRUVTUnh4cUVSRVVCVlVEUUFBOEFEMnJxVWtsWkhNdHQ0czVRS2s4dGxhZ2dVQW9DZmNwdVJQTkxuYmtueC9MdmhhNHlFY0RCYm05Y2lLMXR0LzlKSzJsQjEzNlJ0aVBBTllaMVJMcDFlWXpQSXBwdFE3UzBiUDRUNkxianU0dEZrNGg1cVlLd3VTTm1LenNacnBBZmwxc1kvL0FJcXVpMnZBbittRmxsRHNlTnI5VVNJcnpCK2piNTI4SzJjdVI0U3llRzR0aWlCWTI5czdXMTJRUGNSeWZnUC9BR0NUWjlnYXlTdHF5WTNhSzZNVTNaTTZCWGdhWnF2bHNUbGNEa3JuRFp2RzNXUHY3T1F4WEZyZFJORkxFNDhxeU1BVlA4alZrbW9sZFpGWkZDNFhhTE02bFNRS0FVQmFSVTVrcG5ITkRGY1JQYjNFU1NSU0tVZEhVTXJLUm9nZytRYWhwTk5NOXd4T0Y3eXpOZmVZSEIwdkNPWUlqNlRZWGpQSmFFSHVxZ2phSFpKMnV3Tis0MGZPd09XcmFWMHN6RHd2TDhleDB0QlZxcGw3cjhVS1YvUHp5U3h0a3N1UkY2MHpmTG9ZWmJpVklJSW5rbGtZSWlJcExNeE9nQUI1Sk5TazRuWkVOcUZYZVJzcHduZ0l1R2VIN1REb0l6SkVuVk82QWY3eVZ1N0hZQUxEZllFamZTRkh0WFcwMGhVOHBTMTcrdlh3Y2hVVGUybXhUTWNYcS9UVjJ5eFN3dmQ1dG4yQUsyREF5Nm9JRkFLQXlwOE5YSXpKZkVCelFzdUM0SlpMWEZ3SWIzTDNpQWJndEVJRGRPKzNXeEtvdm51MnlDQWExNnFvVk5MY2ZIZ2JOSlRPcG1xRGh4UFluZ3pndmhmbDd3MVk4SWNIWWEzeG1KeDhZamd0NFYwQjgyWStXWW51V095U1NTU2E1V1pNaW14T0tOM1oxa3VYREtoVUVDc2o3ZGVEMktBMXkrTVQ0VzhOeno0TnV1SStIOGRGRHh6aHJkcGJDNGpVSzEvR2cyYldRLzR0amZRVC9DMnU0QmJlL1ExanA0OTJMd3Y0OHpRcnFOVk1HOUN2MUw1OGp5VmRIamRvNUZLc3BJWlNORUg1R3VtT1dLVUFvQlFGcEh2VWtvK054ZHc5RHhSZ0xyRXlCUks2OWR1N2FIUktQNFR2UjBOOWpvYjZTUjcxcjFVaFZFcHkzN2Vwc1UwM3NKc016VDYvdjM0MlpyWk5ETmJ6UGIzRVR4U3hNVWRIVXF5c0RvZ2crQ0Q3VnlUVGhkbWRjbW9sZFpFODVPOFBSWlhQeTVhNUN0RmlsVjFRNk81WDJFT2lEMkFWanZZSVlLYXN0bHlWTW03Ny9qOTlmSldiVXFITGxxV3Y1Y2ZKVysvcTVtK3VqT2RMcUhrclVBVUFvRDBpK2k3NFZzN1RscnhkeHI2Uy9XOGxtMXhwY2p1SXJlQkpBQjhnV3VXL3NQbFZEdGVOdVpEQm9yOWNqb05qd0pTNG85WDlmK202MVZCY0NnRkFLQThZL2kyNFZ0T0RQaVA0OHdWaEVzVnY5cC9Ya1JSb0lMbU5ManBBOWdQVzBCOHE2eWlqY3lSREU5UHJBNUd1Z1V1b2poV3YzaVlqclpOVVVBb0NsU0Myb1BSaERuRnc5RmlzL0ZsN2JvV1BLcXpzZzdhbFRRYzZBQTBReW5leVN4WW4ycm50cVNGTG1LWXY1ZmEvUDNjNlBaYzV6Slc0ODRmcmgvWlB1VStNK3p1RExhUmtsU1Mra2t1bldRYTFzOUtsUnIrRW9pa2VkNzM0SXF6MmJMM0tkUFc3NjlrVmUwbzkrb2ZsWmYzOXNtUUZiNW9NdXFEeUtBVUFvRDBiK2k2NHhzN25nUGpEZ0ZwVkYzajhzbVdWQ2U3UlR3cEVTUG1BMXVOL0xySHpxaDJ2TGFqaGo4ckhRYkhtSndSUWFPNXU3VlFYQW9CUUNnUEZ6NHFPTWJQano0aHVPdUpjZktzdHJKbEd0SUpGTzFranQwVzNWd2ZrUkVDUDVHdXNvNWJseUlZWHA5NG5JMXN4VEtpS0phL1dCaXF0azFSUUNnRkFXa1ZKS0lkell4bjJqd1hjeUtrenlXVWtkMGl4OS9CNldMRFI3QkhjKzJ0YjNvR3EvYVV0ektkMjRZOWN5dzJkTVV1b1YrT0hYdWtTWEVXSDJWaXJMR2VyNnYxTzNqZzYrbnA2dWhRdTliT3Q2OGJyY2x3ZG5Bb05GWTA1a2ZhUnVQVjM1bmRIaXNoalpXb0lGQUtBVUJrYmtCem96ZklYbVpqdVBjUkdiaUNNRzJ5Vm4xZEl1N055UFVqMzdIc3JLZlprVW5ZMkRncVpDcVpiZ1pzVTFSRlRURkdqMko1YmN6T0MrYlhDbHJ4bHdMbW9jampycFJ2cElFa0VtdG1LVlBLT045MVA4aU5nZ25sWnNxT1RGdVJyRTZ5Vk9nbnc3OER1aVUxak1nb0RWajQwdml6dzNLUGhlKzVlOEY1U080NDR5MEJnUG9QdjdKaGNhTXprZnd5bFQrQmZJSkRuc0FHc3FDaWM2SlRJMStsZkpXMTlhcEVMZ2dmNm44SGxkNXJvem1SUUNnRkFLQW8zaXBKUjBzdFlESzRxOHhabTlJWGx2SkI2blQxZEhXcFhldGpldCtOMWptUWRwQTROVTF6TWt1UHM0MUdsZXp1ZHVzaDRSY1BGRHl5dFFCUUNnRkFLQWxQTHptanpCNVVaci9hRGw1eFZmWVM5SUN5R0J3WTVsQjJGa2pZRkpGMzdNQ0t4elpNRTVic3hYTXNxZE1rUGVsdXhzbmhQcE51ZWVQdEZ0c3Z3MXdqbFpFR3ZyRDJzOE1qSDVzRWxDZjJVVlh4YkprdDROb3NJZHJ6a3NVbVJUbUQ5SUQ4UlBIVm5MamJMTTQ3aGExbUJWeGc3Wm9wbVgvdnBHZVJUL05DcHJMTDJiSWx1N1YvVXhUZHAxRXhXVHQ2R3VWemMzRjVjUzNkM1BKUFBNNWtrbGtZczdzVHNzeFBja24zTmI2VnNFVjdiZUxPT2dGQUtBVUFvQ2g4VklSYlE5Q2dSY1BGRHl5dFFCUUNnRkFTZmcvbGZ6SDVneWVud1B3TG5jNE9ycFo3R3drbGpRLzZuVWRLLzFJckhIT2x5dkhFa1pKY21aTjhFTFptREEvQUo4VCtiUlpadUJyWEZSdjNEWCtVdDFPdjVxanN3L3FCV3JGdEtuaC9sZjJOdUhabFRGL0czdVN1SDZNLzRoSlVEU1pmZ3VFLzVYeVU1SS84QVRBUldQdldSbyt2Y3lyWk0vVmRleDFiL0FPamIrSTJ6UXRidHdyZkVEK0czeWpnbi93QnlOUlVyYXNoNjhpSHNtb1duTXg5eFI4RzN4TDhKSTgyUjVUNVc2aVFiNjhZOFYvc2ZNTEF6dC9jVm5ncnFlUEtMK3Zzd1IwRlJCbkR5eCtqRU9UeGVUd3Q3SmpzeGpycXh1NFRxU0M1aGFLUkQvTldBSXJaVFVTdWpVY0xoZG1kYXBJRkFLQVVCUStLa0l0b2VqcVltL3dEdFRGV1dUOUwwdnJsdkhQMGRYVjA5YWh0YjBONjM1MVdPWEgya0NqMVNaN21RZG5HNEwzczdjanVqeFdReHNyVUVDZ01qOGtPUVBNUG43eEljRHdSamxGdmJkTFgrU3VkcmEyU0h3WFlBN1k2T2tVRmpvOXRBa1lLaXBsMDBPOUdiRlBUVEttTGRnNW5vOXliK0F2a2p5d2dndnVJc1d2R21jUUF2ZDVhSU5iSzMvVjJ1eWdIaitQcmI1RWVLb1orMFowN0NGN3E4dnlkQkkyYkprNHhMZWZuK0RZNjJ0YmF5dDQ3U3p0NG9JSWxDUnhSSUZSRkhnQURzQldnMjNpeXdTdGdqbHFBS0FVQW9DT2NhOHVPQXVZK09PSzQ3NFF4V2N0dEVLdDdiTEkwZS9kSEk2a1A4MUlOWkpjMk9VN3dPeGptU29KcXRHcm1rL1A3Nk51M2p0TG5pYmtIZlRlckdHa2ZoNi9tNnVzZkszbmJ2djVMSVR2OEF6anNEYjAyMWNkMmZ6L0pUMU95VmJla2N2d2FGWkhIWkRENUM1eFdXc3A3TzlzNVdndUxlZU1wSkZJcDB5TXA3Z2dnZ2cxZEpxSlhSU05PRjJlWjE2RUNnS0h4VWtvNldXdnhpc1ZlWlF3K3FMTzNrbjlQcTZldm9VdHJlanJldk9xeHpJK3pnY2VpYjVHU1hBNWthZ1R0ZDI1a2E1VDVNWkhndTFqWjVua3NaSkxWMmtPL0I2bENuWi9DRWRBUEd0YThBVnA3Tm1PWlRwUGhoMXpOemFNdnM2aDI0NDllNlpNUWFzQ3ZaZFVFSFp4bU91OHZrclRFMkVmcVhON1BIYndwdlhWSTdCVkg5eUtodFFxN0pTY1RzajIyNUw4cGVIT1NuTHZGY0JjT1c4WVd6aURYbHlGMDk1ZEVEMVozUGtsajQzNFVLbzdBVnlOUk9pcUpqamlPeHA1RU5QTFVFSk9hd21ZVUFvQlFDZ0ZBS0FVQm9WOUpmeVZ3OFdNeFhQSEMya2NGKzEwbUp6UHBycjZ3ckl4Z21iL1V2UVVKOGtNZzhMVjFzcW9kM0pmcWlrMnZUcXluTFBKbm41VjJVUW9DMG1wSlJEdWJHVCt6dUM3cU5YbVNTOWtqdFVhTTYxczlUQmpzZmhLSTQ5OTcxclJOViswcGpsMDd0eHc2NUcvczZXcGxRcjhNZXZkb2dISjNpQ0xGWitYRTNKVllzcXFvcm5RMU1teWcyU094RE1QQkpZcUtyTmx6MUxtN2p5aSsrQlo3VmtPWkxVeUgrUER5ZnR3NVd2NUdiNjZJNTR1cVR5U3psTC94VjRNLzh3WTcvQVBUSFdLZCsxRjZNeXlQM1lmVkh1YlhISFppZ0ZBS0FVQW9CUUNnRkFheS9TSi84cytTLzhWc1Avc3F3MlovMEwwWlhiVS81bjZvOG9hNlU1Z29lMVNDMm9QUmhEbkZ4RERsYzlGaWJib2FQRkt5TTQ3a3l2b3VOZ2thSFNvOEFodW9IMnJudHF6MU1tS1hEL0g3ZjQrN25SN0xrdVhLY2NXY1gxdy9zZ2NNMHR2S2s4RXJ4eXhzSFIwWWhsWUhZSUk4RUdxeE53dTZMSnBSS3p5TmxPRXMvSHhOdy9aNWRUR0pKVTZaMFVqOEVxOW1HZ1NWNzl3RDM2U3A5NjYybW5xb2xLTmUvcjE4SElWRXZzWjBVclQxeXpYREgxV0Y3ck5NK3dEN1ZzR0JuZndlWXZlSHMxajgvaldSYnZHWFVWNWJsMTZsRWtiaDFKSHVOZ2RxOHhRcUpPRjhSREU0V29sd05qdnZGUGlYL0FEbkJmcE1mNzFvZDJVK2o1bGgzclVhcmtQdkZQaVgvQURuQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUQ3eFQ0bC96bkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmOEFPY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjg1d1g2VEgrOU83S2ZSOHgzclVhcmtQdkZQaVgvT2NGK2t4L3ZUdXluMGZNZDYxR3E1RVA1cWZHQnpwNXljSVRjRDhiNUhGell1ZWFLNGRiZkhwRS9YR2RyK0lkL05aWk5ESmtSYjhHWmluVjA2b2czSThqQ2xiWnBscFB0VWtwSHhlTHVJWXVGOEJkWlp5aGxSZWkzUnY4Y3A3S05iR3g3blIzMGcxcjFNOVU4cHpIN2V2WHdiRlBLN2ViREwxK3Y2OThMMk5iWnBwYmlWNTU1WGtsa1l1N3V4TE14T3lTVDVKTmNrMjRuZDVuWEpLRldSYlVFa281ZjhZeThJNWNHVHBOaGVNa2QyQ0R0VkJPcEJvRTdYWk92Y0Vqem9qY29xcDBzekh3dlA4QVBzYUZmU0twbDd5dnZRM3Q1K1dPR05zK0d0cm13VU0wVnhFbHhieXBKRklvZEhSZ3lzcEd3UVI1QnJxVTdxNk9aYWF3WnlBMU9aNWFMcWdnVUFvQlFDZ0ZBS0FVQW9CUUZwTlRrU2tjYzAwVnZFOXhjU3BIRkdwZDNkZ3Fxb0d5U1Q0QXFHMGsyejNEQzRudXJNMTk1Z2NZeThYWmdtUHBGaFpzOGRvQU83S1NOeUhZQjIzU0RyMkdoNTJUeTFiVk9xbVhXU3kvSjB0QlNLbWw3ejhVU1YvTHl6YXd2bXMrUkY2MHpmRkFLQW5ITHZtSkx3eEt1S3lydkppcEc3SHV6V3pFOTJVZTZrK1YvcU8rdzFsUTF6cDMyY3p3L1grZVhUcmE2aFZRdCtYNHZ2cmgxYk9VTTBWeEVrOEVxU1JTS0hSMFlGV1VqWUlJOGdpdWpUVFYwem5HbW5abzVBZm5VbmxvclVFRmFBVUFvQlFDZ0ZBVTNxcEJRbjVVSlNPT2FhSzNpZTR1SlVqaWpVdTd1d0Nxb0d5U1Q0QUZRMmxpejBsZDJSZzNtSnpFbDRtbGJGWXAzanhVYmR6M0RYTEE5bVlleWoyWCtwNzZDODVYVnpxSHVRZUg3NjY4dWpvYUZVNjdTUHhmWFhYbkI2clN5RkFLQVVBb0NVOEg4dzgxd25Jc0pkNzdIaENnczVaU0ZUdVczR2UvUWVwaVRvYU96c2IwUnVVdGJNcG5iT0hUOGFGZlZiT2wxRjRvTFF4TjNidG5rc2NyNEt5ZkN5NFlHYmNCeFpnT0pvZzJJeU1jc2dRTzhEZmhsajdLVHRUM0lCWUFzTnJ2d1RYUlNhbVZVSzh0KzNIcjRPZm0wODZUKzVEYkYvZmxmUE5YeHRtazhENjlaekNWREdwSXNWNmhRV0d4ODZFV0d4ODZDdzZoUW14UXNhQ3hTb0pQa1ovaTNoL2htTXRsOGpIRklVTHBBdjRwWk96RWFVZHhzcVFHT2wzNUlyQlBxWlZPcnpIN2Nldmd6U3FlYlA4QTI0YjRwY01PZHNzM3h0a204RENQR1BNREw4WFMrbVMxbllCUUJhUnlrcXgyRHR6MjZ6c0RXeG9hR2h2WlBPMVZiTXFuWjRMVDg2blJVdEJMcGtuRmFLTFczcmxuYkIyZXZ3UmV0TTNoUUNnRkFLQVVBb0M2R2FXM2xTZUNWNDVZMkRvNk1ReXNEc0VFZUNEVXB1RjNSRFNpVm5rVHpoN25GbjhWRUxiTFFKbFlsWFNNNytuS093QTI0QjZoMlBrRmlUc21yS1R0U2JMVm8xdkw1NitmTXE1K3lwY3gzbHZkMTRyankrcksxaWY0em14d1hrZWxaTDZXeWtlVDAxUzZoSzc4YVlzdlVxanY1TERXanZRNzFaeTlwVTh4MnZiMTZaV3pOblZFdFh0ZjA2VCtDUzJHV3hXVkVoeGVTdGJ3UmE5VDBKbGs2TjcxdnBKMXZSL3NhM0lKa0V6d05QMGR6VGpseHk3S05OWDFPM1dROENnT3BmNWZFNHJvKzA4bmFXZnE3S2V2TXNmVnJ6cnFJMzVIOTZ4eHpJSmZqYVhxekpCTGptZUJOK2lJMWsrYS9CZU42bFMvbHZaRWxNYkpheEZ2RzlzR2JwUmw3ZVF4M3NhMk85YWN6YVZQTGRyMzlPbDhHMUwyZFVURmUxdlhwdGNpQWNRYzRzL2xZamJZbUJNVkV5NmRrZjFKVHNFSFRrQUtPNDhEcUJHdzFWay9hazJaaEIrbGZQTXRKR3lwY3Q3MHg3Mm5CY09mSHl4eTRrRG1tbXVKbnVMaVY1WlpXTHU3c1dabUoyU1NlNUpQdlZhMjRuZGxta29WWlpGdFFTS0FVQW9ELzlrPSc7XHJcblxyXG4gIGlzRXhwYW5kZWQ6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGlnb0ZpcGVQaXBlOiBDb2RpZ29GaXBlUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3BmQ25walBpcGU6IENwZkNucGpQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZWxlZm9uZVBpcGU6IFRlbGVmb25lUGlwZSxcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uR2xvYmFsRmlsdGVyKHRhYmxlOiBUcmVlVGFibGUsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xyXG4gICAgdGFibGUuZmlsdGVyR2xvYmFsKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsICdjb250YWlucycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhZ2luYXRlKCRldmVudDogYW55KSB7XHJcbiAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgIGxldCBwYWdpbmFJbmljaWFsID1cclxuICAgICAgICAoJGV2ZW50Py5maXJzdCA+IDAgPyAkZXZlbnQuZmlyc3QgLyAkZXZlbnQucm93cyA6ICRldmVudC5maXJzdCkgKyAxO1xyXG4gICAgICBsZXQgdGVybW9QZXNxdWlzYSA9ICcnO1xyXG4gICAgICBsZXQgb3JkZW5hY2FvID0gJyc7XHJcblxyXG4gICAgICBpZiAoJGV2ZW50Lmdsb2JhbEZpbHRlcikgdGVybW9QZXNxdWlzYSA9ICRldmVudC5nbG9iYWxGaWx0ZXI7XHJcblxyXG4gICAgICBpZiAoJGV2ZW50LnNvcnRGaWVsZClcclxuICAgICAgICBvcmRlbmFjYW8gPSBgJHskZXZlbnQuc29ydEZpZWxkfSAkeyRldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJ1xyXG4gICAgICAgICAgfWA7XHJcblxyXG4gICAgICBjb25zdCBvYmpldG86IFRhYmxlUGFnaW5hdGUgPSB7XHJcbiAgICAgICAgcGFnaW5hSW5pY2lhbDogcGFnaW5hSW5pY2lhbCxcclxuICAgICAgICB0YW1hbmhvUGFnaW5hOiAkZXZlbnQucm93cyxcclxuICAgICAgICB0ZXJtb1Blc3F1aXNhOiB0ZXJtb1Blc3F1aXNhLFxyXG4gICAgICAgIG9yZGVuYWNhbzogb3JkZW5hY2FvLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5vblBhZ2luYXRlLmVtaXQob2JqZXRvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQm9vbGVhbkZpZWxkKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbC5maWVsZFR5cGUgPT0gJ2Jvb2xlYW4nO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlwRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbC5maWVsZFR5cGUgPT0gJ2NoaXAnO1xyXG4gIH1cclxuXHJcbiAgaXNJbWFnZUZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGxldCByZXRvcm5vID0gY29sLmZpZWxkVHlwZSAmJiBjb2wuZmllbGRUeXBlID09PSAnaW1hZ2UnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgcmV0dXJuIHJldG9ybm87XHJcbiAgfVxyXG4gIHJldHVyblJvd0NsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgbGV0IHJvd0NsYXNzOiBzdHJpbmc7XHJcblxyXG4gICAgdGhpcy50YWJsZVNpemUgPiA4MDAgPyAocm93Q2xhc3MgPSAndGV4dC1iYXNlJykgOiAocm93Q2xhc3MgPSAndGV4dC1zbScpO1xyXG5cclxuICAgIGlmIChjb2wuZXhwaXJlZERhdGUgPT0gdHJ1ZSkge1xyXG4gICAgICBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpXHJcbiAgICAgICAgPyAocm93Q2xhc3MgPSByb3dDbGFzcyArICcgdGV4dC1yZWQtNDAwIGZvbnQtc2VtaWJvbGQnKVxyXG4gICAgICAgIDogJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93Q2xhc3M7XHJcbiAgfVxyXG4gIHRyYW5zZm9ybVZhbHVlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG5cclxuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgIGlmICghY29sLnBpcGUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAoY29sLnBpcGUpIHtcclxuICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ2RkL01NL3l5eXknKTtcclxuICAgICAgICBjYXNlICdkZWNpbWFsJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJzEuMi0yJywgJ3B0LUJSJyk7XHJcbiAgICAgICAgY2FzZSAnY3BmY25waic6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcGZDbnBqUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ3RlbGVmb25lJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRlbGVmb25lUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ2NvZGlnb2ZpcGUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29kaWdvRmlwZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdtb25leSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRhclZhbG9yKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdwZXJjZW50YWdlJzpcclxuICAgICAgICAgIHJldHVybiBgJHt2YWx1ZX0gJWA7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBmb3JtYXRhclZhbG9yKHZhbG9yOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHtcclxuICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXHJcbiAgICAgIGN1cnJlbmN5OiAnQlJMJyxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbG9yKTtcclxuICB9XHJcbiAgbG9hZEltYWdlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICAvKlxyXG4gICAgICBOb3NzYSBjb2x1bmEgZGUgaW1hZ2VtIHRyYWJhbGhhIGNvbSBzdHJpbmdzIGRvIHRpcG86IGJhc2U2NCBvdSB1cmxcclxuICAgICovXHJcbiAgICBsZXQgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7dGhpcy5pbWdEZWZhdWx0fWA7XHJcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcclxuICAgICAgaWYgKHJvd0RhdGFbY29sLmZpZWxkXS5pbmNsdWRlcygnaHR0cCcpKVxyXG4gICAgICAgIHJldG9ybm8gPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXRvcm5vID0gYGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCwgJHtyb3dEYXRhW2NvbC5maWVsZF19YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcblxyXG4gIGdldEN1c3RvbVRlbXBsYXRlKHRlbXBsYXRlbmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzW3RlbXBsYXRlbmFtZV07XHJcbiAgfVxyXG4gIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IHZpc2libGUgPSBmaWVsZC52aXNpYmxlID8gZmllbGQudmlzaWJsZShyb3dEYXRhKSA6IHRydWU7XHJcbiAgICByZXR1cm4gdmlzaWJsZTtcclxuICB9XHJcbiAgcHVibGljIGFjdGl2ZUl0ZW0ocm93Tm9kZTogYW55ICxyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtLmVtaXQoe3Jvd0RhdGE6IHJvd0RhdGEsIHJvd05vZGU6IHJvd05vZGV9KTtcclxuICB9XHJcbiAgcHVibGljIGFjdGl2ZUl0ZW1Mb3RlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgdGhpcy5vbkFjdGl2ZUl0ZW1Mb3RlLmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICByZXRvcm5hckNhbXBvKGFjdGlvbjogS3ZNZW51SXRlbSwgcm93RGF0YTogYW55LCBmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IF9mdW5jdGlvbiA9IGFjdGlvbi5keW5hbWljZmllbGRzXHJcbiAgICAgID8gKGFjdGlvbi5keW5hbWljZmllbGRzW2ZpZWxkXSBhcyBGdW5jdGlvbilcclxuICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgX2ZpZWxkOiBzdHJpbmcgPSBfZnVuY3Rpb25cclxuICAgICAgPyBfZnVuY3Rpb24uYXBwbHkoYWN0aW9uLCBbcm93RGF0YV0pXHJcbiAgICAgIDogYWN0aW9uW2ZpZWxkXTtcclxuICAgIHJldHVybiBfZmllbGQ7XHJcbiAgfVxyXG4gIGNhbGxEaXNhYmxlZChhY3Rpb246IEt2TWVudUl0ZW0sIGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGFjdGlvbj8uZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZChkYXRhKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgY3JpYXJNZW51c01vZGFsKGRhdGE6IGFueSwgcm93Tm9kZTphbnkpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5hY3Rpb25zICYmIGRhdGEpIHtcclxuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmNvbmZpZy5hY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdpY29uJyk7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICd0b29sdGlwJyk7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnbGFiZWwnKTtcclxuICAgICAgICBjb25zdCBjb21tYW5kOiBhbnkgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnY29tbWFuZCcpO1xyXG4gICAgICAgIGNvbnN0IHZpc2libGU6IGJvb2xlYW4gPSBhY3Rpb24udmlzaWJsZSA/IGFjdGlvbi52aXNpYmxlKGRhdGEsIHJvd05vZGUpIDogdHJ1ZTtcclxuICAgICAgICBjb25zdCBkaXNhYmxlZDogYm9vbGVhbiA9IGFjdGlvbi5kaXNhYmxlZFxyXG4gICAgICAgICAgPyBhY3Rpb24uZGlzYWJsZWQoZGF0YSlcclxuICAgICAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lbnVJbnNlcnQ6IEt2TWVudUl0ZW0gPSB7XHJcbiAgICAgICAgICBsYWJlbCxcclxuICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICB0b29sdGlwLFxyXG4gICAgICAgICAgY29tbWFuZCxcclxuICAgICAgICAgIGRpc2FibGVkLFxyXG4gICAgICAgICAgdmlzaWJsZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMubWVudUl0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiB4LmNvbW1hbmQgPT0gbWVudUluc2VydC5jb21tYW5kXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID09IDApIHRoaXMubWVudUl0ZW1zLnB1c2gobWVudUluc2VydCk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC5sYWJlbCAhPSBpdGVtWzBdLmxhYmVsKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQudmlzaWJsZSAhPSBpdGVtWzBdLnZpc2libGUpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC5kaXNhYmxlZCAhPSBpdGVtWzBdLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlY3VwZXJhclJvd05vZGUocm93Tm9kZTogYW55KXtcclxuICAgIHJldHVybiByb3dOb2RlXHJcbiAgfVxyXG5cclxuICB2YWxpZGFMaW5oYUFjYW9WYXppYShyb3dEYXRhOiBhbnksIHJvd05vZGU6IGFueSkge1xyXG4gICAgdmFyIGFsZ3VtSXRlbVZpc2l2ZWwgPSB0aGlzLmNvbmZpZy5hY3Rpb25zLnNvbWUoYSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBhLnZpc2libGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGEudmlzaWJsZShyb3dEYXRhLCByb3dOb2RlKSA9PT0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gUmV0b3JuYSB0cnVlIHNlIGEudmlzaWJsZShyb3dEYXRhKSBuw6NvIGV4aXN0aXJcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gIWFsZ3VtSXRlbVZpc2l2ZWw7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVOb2RlcygpIHtcclxuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQpIHtcclxuICAgICAgdGhpcy5jb2xsYXBzZUFsbCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leHBhbmRBbGwoKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XHJcbiAgfVxyXG5cclxuICBleHBhbmRBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICB0aGlzLmV4cGFuZENvbGxhcHNlUmVjdXJzaXZlKG5vZGUsIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQ29sbGFwc2VSZWN1cnNpdmUobm9kZSwgZmFsc2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZENvbGxhcHNlUmVjdXJzaXZlKG5vZGU6IFRyZWVOb2RlLCBpc0V4cGFuZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbm9kZS5leHBhbmRlZCA9IGlzRXhwYW5kO1xyXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcclxuICAgICAgICB0aGlzLmV4cGFuZENvbGxhcHNlUmVjdXJzaXZlKGNoaWxkTm9kZSwgaXNFeHBhbmQpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgICB9XHJcbiAgfSAgXHJcblxyXG59XHJcbiIsIjxkaXY+XHJcblxyXG4gIDxwLXRyZWVUYWJsZSAjdHQgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIiBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICBzZWxlY3Rpb25Nb2RlPVwiY2hlY2tib3hcIiBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWROb2Rlc1wiIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcclxuICAgIFtwYWdpbmF0b3JdPVwicGFnaW5hdG9yXCIgW3Jvd3NdPVwicm93c1wiIFt0b3RhbFJlY29yZHNdPVwidGFtYW5ob1RvdGFsVHJlZVwiIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcclxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIiByb3dHcm91cE1vZGU9XCJzdWJoZWFkZXJcIiBncm91cFJvd3NCeT1cImlkXCIgPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCIgKm5nSWY9XCJjb25maWcuZW5hYmxlVG9nZ2xlTm9kZXMgfHwgY29uZmlnLmVuYWJsZUZpbHRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiICpuZ0lmPVwiY29uZmlnLmVuYWJsZVNlbGVjdFwiPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLmVuYWJsZVRvZ2dsZU5vZGVzXCI+XHJcbiAgICAgICAgICA8a3YtYnV0dG9uLXBlcnNvbmFsaXplIChjbGljayk9XCJ0b2dnbGVOb2RlcygpXCIgW2NvbG9yXT1cImNvbG9yQnV0dG9uVG9nZ2xlTm9kZXMrICcgYm9yZGVyLW5vbmUnXCIgW2xhYmVsXT1cImlzRXhwYW5kZWQgPyAnUmVjb2xoZXIgVG9kb3MnIDogJ0V4cGFuZGlyIFRvZG9zJ1wiIFtpY29uXT1cImlzRXhwYW5kZWQgPyAncGkgcGktY2hldnJvbi1kb3duJyA6ICdwaSBwaS1jaGV2cm9uLXJpZ2h0J1wiPjwva3YtYnV0dG9uLXBlcnNvbmFsaXplPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnRcIiAqbmdJZj1cImNvbmZpZy5lbmFibGVGaWx0ZXJcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dCBwbGFjZWhvbGRlcj1cIkdsb2JhbCBTZWFyY2hcIiAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIodHQsJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoICpuZ0lmPVwiY29uZmlnLmVuYWJsZVNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDMwcHg7XCI+XHJcbiAgICAgICAgICA8cC10cmVlVGFibGVIZWFkZXJDaGVja2JveCAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIj48L3AtdHJlZVRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcbiAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgPHRoIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIiAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIiBbdHRTb3J0YWJsZUNvbHVtbl09XCJjb2wuc29ydGFibGUgPyBjb2wuZmllbGQgOiBmYWxzZVwiXHJcbiAgICAgICAgICBbdHRTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PSBmYWxzZVwiPlxyXG5cclxuXHJcbiAgICAgICAgICA8ZGl2IFtjbGFzc109XCInZmxleCBmbGV4LXJvdyBtbC0yJ1wiPlxyXG4gICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XHJcblxyXG4gICAgICAgICAgICA8cC10cmVlVGFibGVTb3J0SWNvbiAqbmdJZj1cImNvbC5zb3J0YWJsZVwiIFtmaWVsZF09XCJjb2wuZmllbGRcIj48L3AtdHJlZVRhYmxlU29ydEljb24+XHJcblxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbC5oZWFkZXJUb29sdGlwXCIgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIj5pbmZvPC9zcGFuPlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRoIFtzdHlsZS53aWR0aF09XCInMjBweCdcIiAqbmdJZj1cImNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDBcIj48L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvd05vZGUgbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCIgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCI+XHJcblxyXG5cclxuICAgICAgPHRyICpuZ0lmPVwicm93Tm9kZS5sZXZlbCA9PSAwXCIgW3N0eWxlLmhlaWdodF09XCJlc3BhY2FtZW50b1BhaVwiPlxyXG4gICAgICA8L3RyPlxyXG5cclxuXHJcbiAgICAgICAgPHRyIFt0dFJvd109XCJyb3dOb2RlXCI+XHJcbiAgICAgICAgICA8dGQgW3N0eWxlXT1cImFwcGx5U3R5bGUocm93RGF0YSwgY29sKVwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29uZmlnLmNvbHVtbnM7IGxldCBpID0gaW5kZXgsXCIgY2xhc3M9XCJyb3dUYWJsZVwiIFtuZ0NsYXNzXT1cInsnZmxleCc6IGkgPT0gMCwgJ21hcmdlbS1maWxobyc6IGkgPT0gMCAmJiByb3dOb2RlLmxldmVsICE9IDAgJiYgZXNwYWNhbWVudG9MYXRlcmFsIH1cIiA+XHJcblxyXG5cclxuICAgICAgICAgICAgPCEtLSAvLyBDb2xsYXBzZSAtLT5cclxuICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlciBbcm93Tm9kZV09XCJyb3dOb2RlXCIgKm5nSWY9XCIhcmlnaHRDb2xsYXBzZSAmJiBpID09IDBcIj48L3AtdHJlZVRhYmxlVG9nZ2xlcj5cclxuICAgICAgICAgICAgPHAtdHJlZVRhYmxlVG9nZ2xlciBjbGFzcz1cImhpZGRlblZpc2libGVcIiBbcm93Tm9kZV09XCJyb3dOb2RlXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cInJpZ2h0Q29sbGFwc2UgJiYgaSA9PSAwXCI+PC9wLXRyZWVUYWJsZVRvZ2dsZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgPCEtLSAvLyBDaGVja2JveCBwYXJhIG11bHRpc2VsZcOnw6NvLS0+XHJcbiAgICAgICAgICAgIDxwLXRyZWVUYWJsZUNoZWNrYm94IChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiIFt2YWx1ZV09XCJyb3dOb2RlXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVTZWxlY3QgPT0gdHJ1ZSAmJiBpID09PSAwXCI+PC9wLXRyZWVUYWJsZUNoZWNrYm94PlxyXG5cclxuICAgICAgICAgICAgPCEtLSAvLyBDYW1wbyBjb20gdGlwbyBib29sZWFubyAtLT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIiBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIC8vIENhbXBvIGNvbSB0aXBvIHBhZHLDo28gLS0+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbCkgJiYgIWNvbC50ZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1heC13LW1heCc6IGkgPT0gY29uZmlnLmNvbHVtbnMubGVuZ3RoLTF9XCI+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbC5pY29uXCIgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG5cclxuICAgICAgICAgICAgICA8IS0tIC8vIENhbXBvIGNvbSB0aXBvIGltYWdlbSAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW1hZ2VGaWVsZChjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIC8vIENhbXBvIGNvbSB0aXBvIGRlIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1lbGVtZW50IGJvcmRlci1udWxsIGJvcmRlci1yb3VuZC0yeGwgY2hpcC1zdHlsZSBwLTIgdGV4dC1udWxsIHctYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyb3dEYXRhW2NvbC5maWVsZF1cIj57e1xyXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXHJcbiAgICAgICAgICAgICAgICAgIH19IHRlc3RlPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gLy8gVGVtcGxhdGUgY2FtcG8gYm9vbGVhbm8gLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxyXG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWNvbC5pY29uRmllbGRcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcclxuICAgICAgICAgICAgICAgICAgXCI+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgICAgICAgICA8IS0tIC8vIFRlbXBsYXRlIGNhbXBvIHBlcnNvbmFsaXphZG8gLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wudGVtcGxhdGUgJiYgZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpIFwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvd0RhdGEsIHJvd05vZGVMZXZlbDogcm93Tm9kZS5sZXZlbCB9XCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDwvdGQ+XHJcblxyXG5cclxuXHJcbiAgICAgICAgICA8dGQgKm5nSWY9XCJjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwICYmICF2YWxpZGFMaW5oYUFjYW9WYXppYShyb3dEYXRhLCByb3dOb2RlKVwiIHN0eWxlPVwid2lkdGg6IDIwcHg7XCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cImFwcGx5U3R5bGUocm93RGF0YSwgeyBmaWVsZDogJ2J0bnMtb3B0aW9ucycsIGhlYWRlcjogJycgfSlcIj5cclxuXHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiICpuZ0lmPVwiYWNvZXNMaW5oYVRhYmVsYVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImFjdGlvbkJ0bnNcIiBwQnV0dG9uICpuZ0lmPVwiZXhpYmlyQ2FtcG8oYWN0aW9uLCByb3dEYXRhKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtKHJvd05vZGUsIHJvd0RhdGEpOyBhY3Rpb24/LmNvbW1hbmQoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgJ3Rvb2x0aXAnKVwiIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTE5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsIFwiaWNvblwiKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCIgKm5nSWY9XCIhYWNvZXNMaW5oYVRhYmVsYVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJtb3JlVmVydEJ0blwiIHBCdXR0b24gY2xhc3M9XCJhY3Rpb25CdG5zIHAtYnV0dG9uLXRleHQgcC1idXR0b24tcmFpc2VkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd05vZGUsIHJvd0RhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMjBweFwiPlxyXG4gICAgICAgICAgICAgICAgICBtb3JlX2hvcml6XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEsIHJvd05vZGUpIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxwLW1lbnUgI21lbnUgW3BvcHVwXT1cInRydWVcIiBbbW9kZWxdPVwibWVudUl0ZW1zXCIgYXBwZW5kVG89XCJib2R5XCI+PC9wLW1lbnU+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gOjogSWNvbmUgZGUgY29sbGFwc2UgbmEgZGlyZWl0YSA6OiAtLT5cclxuICAgICAgICAgICAgICA8cC10cmVlVGFibGVUb2dnbGVyIFtyb3dOb2RlXT1cInJvd05vZGVcIiAqbmdJZj1cInJpZ2h0Q29sbGFwc2VcIj48L3AtdHJlZVRhYmxlVG9nZ2xlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgPC90cj5cclxuXHJcblxyXG5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICAgIDwhLS0gOjogVGVtcGxhdGUgcGFyYSBpY29uZSBkZSBjb2xsYXBzZSBuYSBkaXJlaXRhIC0tPlxyXG4gICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwicmlnaHRDb2xsYXBzZVwiIHBUZW1wbGF0ZT1cInRvZ2dsZXJpY29uXCIgbGV0LW9wZW4+XHJcbiAgICAgIDxzcGFuICpuZ0lmPVwib3BlblwiIGNsYXNzPVwicGkgcGktYW5nbGUtbGVmdFwiPjwvc3Bhbj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhb3BlblwiIGNsYXNzPVwicGkgcGktYW5nbGUtZG93blwiPjwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuXHJcblxyXG4gICAgPCEtLSA6OiBIb3RmaXggZG8gYnVnIGRhIHZlcnPDo28gMTUgZG8gcHJpbWVuZywgYW8gcmV0aXJhciBlc3NlIGJsb2NvIGRlIGNvZGlnbyBuYSB2ZXJzw6NvIDE1IGRvIHByaW1lbmcgb3MgaWNvbmVzIGRlIHByZXYgZSBuZXh0IGRvIHBhZ2luYXRvciBpcsOjbyBzdW1pciAoIHJlc29sdmlkbyBuYSB2ZXJzw6NvIDE2LjApICA6OiAtLT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9yZmlyc3RwYWdlbGlua2ljb25cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJwaSBwaS1hbmdsZS1kb3VibGUtbGVmdFwiPjwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ycHJldmlvdXNwYWdlbGlua2ljb25cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJwaSBwaS1hbmdsZS1sZWZ0XCI+PC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JuZXh0cGFnZWxpbmtpY29uXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwicGkgcGktYW5nbGUtcmlnaHRcIj48L3NwYW4+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmxhc3RwYWdlbGlua2ljb25cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJwaSBwaS1hbmdsZS1kb3VibGUtcmlnaHRcIj48L3NwYW4+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIiBsZXQtY29sdW1ucz5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMubGVuZ3RoICsgMlwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+XHJcbiAgICAgICAgICBOZW5odW0gcmVnaXN0cm8gZW5jb250cmFkb1xyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgPC9wLXRyZWVUYWJsZT5cclxuXHJcbjwvZGl2PlxyXG5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vaWNvbj9mYW1pbHk9TWF0ZXJpYWwrSWNvbnNcIlxyXG4vPlxyXG5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1NYXRlcmlhbCtTeW1ib2xzK091dGxpbmVkOm9wc3osd2dodCxGSUxMLEdSQURANDgsNDAwLDAsMFwiXHJcbi8+XHJcbiJdfQ==