nuxeo-development-framework 4.3.1 → 4.3.3

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 (214) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +4365 -3037
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/charts/chart.const.js +3 -0
  4. package/esm2015/lib/components/charts/chart.token.js +3 -0
  5. package/esm2015/lib/components/charts/charts.module.js +19 -0
  6. package/esm2015/lib/components/charts/components/base-chart.component.js +44 -0
  7. package/esm2015/lib/components/charts/components/chart.component.js +135 -0
  8. package/esm2015/lib/components/charts/components/data-chart.component.js +169 -0
  9. package/esm2015/lib/components/charts/components/index.js +4 -0
  10. package/esm2015/lib/components/charts/defaults/bar.js +18 -0
  11. package/esm2015/lib/components/charts/defaults/doughnut.js +18 -0
  12. package/esm2015/lib/components/charts/defaults/index.js +5 -0
  13. package/esm2015/lib/components/charts/defaults/line.js +36 -0
  14. package/esm2015/lib/components/charts/defaults/pie.js +20 -0
  15. package/esm2015/lib/components/charts/index.js +10 -0
  16. package/esm2015/lib/components/charts/models/index.js +5 -0
  17. package/esm2015/lib/components/charts/models/options.js +2 -0
  18. package/esm2015/lib/components/charts/models/plugins-options.js +2 -0
  19. package/esm2015/lib/components/charts/models/response.js +2 -0
  20. package/esm2015/lib/components/charts/models/statistic-request-config.js +2 -0
  21. package/esm2015/lib/components/charts/plugins/doughnut-center-text.js +25 -0
  22. package/esm2015/lib/components/charts/plugins/doughnut-empty-state.js +34 -0
  23. package/esm2015/lib/components/charts/plugins/index.js +4 -0
  24. package/esm2015/lib/components/charts/plugins/legend-margin.js +16 -0
  25. package/esm2015/lib/components/charts/services/index.js +2 -0
  26. package/esm2015/lib/components/charts/services/statistic.service.js +75 -0
  27. package/esm2015/lib/components/charts/utility/colors.js +79 -0
  28. package/esm2015/lib/components/charts/utility/common.js +7 -0
  29. package/esm2015/lib/components/charts/utility/index.js +3 -0
  30. package/esm2015/lib/components/comments/comments.module.js +9 -5
  31. package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +30 -23
  32. package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +28 -34
  33. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +22 -22
  34. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +16 -18
  35. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +6 -6
  36. package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +3 -2
  37. package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +33 -29
  38. package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +32 -24
  39. package/esm2015/lib/components/diagrams/components/connection-label.component.js +1 -1
  40. package/esm2015/lib/components/diagrams/directive/diagram.directive.js +2 -3
  41. package/esm2015/lib/components/diagrams/editor/customize.js +11 -14
  42. package/esm2015/lib/components/diagrams/editor/overrides/connection-path.transformers.js +21 -34
  43. package/esm2015/lib/components/diagrams/editor/path-plugin.js +11 -10
  44. package/esm2015/lib/components/diagrams/models/base-node.model.js +2 -1
  45. package/esm2015/lib/components/diagrams/models/connection.model.js +1 -1
  46. package/esm2015/lib/components/diagrams/types/common.type.js +1 -1
  47. package/esm2015/lib/components/diagrams/types/diagram-config.type.js +1 -1
  48. package/esm2015/lib/components/diagrams/types/node-definition.js +1 -1
  49. package/esm2015/lib/components/diagrams/utilities/random.js +9 -3
  50. package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +9 -11
  51. package/esm2015/lib/components/documents/components/document-upload/document-upload.component.js +17 -7
  52. package/esm2015/lib/components/documents/components/documents/documents.component.js +1 -1
  53. package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +45 -40
  54. package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +21 -17
  55. package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +98 -92
  56. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +22 -10
  57. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +8 -4
  58. package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +28 -29
  59. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.js +16 -3
  60. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.js +26 -18
  61. package/esm2015/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.js +2 -2
  62. package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.js +4 -2
  63. package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +13 -10
  64. package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +3 -3
  65. package/esm2015/lib/components/dynamic-table/dynamic-table/dynamic-table.component.js +68 -29
  66. package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +60 -42
  67. package/esm2015/lib/components/file-manger/components/copy/copy.component.js +66 -36
  68. package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +40 -13
  69. package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +238 -200
  70. package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +14 -12
  71. package/esm2015/lib/components/file-manger/components/delete/delete.component.js +49 -20
  72. package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +45 -43
  73. package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +63 -36
  74. package/esm2015/lib/components/file-manger/components/move/move.component.js +61 -31
  75. package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +81 -81
  76. package/esm2015/lib/components/file-manger/components/rename/rename.component.js +58 -30
  77. package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +99 -66
  78. package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +95 -75
  79. package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +15 -11
  80. package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +54 -23
  81. package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +24 -24
  82. package/esm2015/lib/components/file-manger/file-manager.abstract.js +266 -264
  83. package/esm2015/lib/components/file-manger/file-manger.module.js +39 -35
  84. package/esm2015/lib/components/filter/filter/filter.component.js +1 -1
  85. package/esm2015/lib/components/notifications/components/base-notifications.component.js +2 -16
  86. package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +3 -3
  87. package/esm2015/lib/components/notifications/components/notifications-button/notifications-button.component.js +24 -4
  88. package/esm2015/lib/components/notifications/containers/notifications-settings-container/notifications-settings-container.component.js +3 -2
  89. package/esm2015/lib/components/notifications/models/notification-message.mode.js +1 -1
  90. package/esm2015/lib/components/notifications/models/notifications-list-options.js +1 -1
  91. package/esm2015/lib/components/notifications/services/notifications.service.js +23 -17
  92. package/esm2015/lib/components/notifications/services/socket.service.js +13 -5
  93. package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +107 -90
  94. package/esm2015/lib/components/permissions/permissions/permissions.component.js +100 -57
  95. package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +36 -52
  96. package/esm2015/lib/components/permissions/permissions.module.js +23 -7
  97. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +1 -1
  98. package/esm2015/lib/components/spell-checker-field/spell-checker-field.module.js +37 -0
  99. package/esm2015/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.js +88 -0
  100. package/esm2015/lib/components/table/dynamic-component.js +59 -0
  101. package/esm2015/lib/components/table/page-sizes-list/page-sizes-list.component.js +38 -0
  102. package/esm2015/lib/components/table/table/table.component.js +39 -21
  103. package/esm2015/lib/components/table/table.module.js +22 -18
  104. package/esm2015/lib/components/vocabulary/services/vocabulary-api.service.js +11 -6
  105. package/esm2015/lib/core/services/callApi/call-api.service.js +23 -6
  106. package/esm2015/lib/shared/components/base/base-selector.component.js +1 -1
  107. package/esm2015/lib/shared/components/base/base.component.js +5 -5
  108. package/esm2015/lib/shared/components/nuxeo-dialog/confirmation/ndf-confirmation-dialog.component.js +1 -1
  109. package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.js +8 -4
  110. package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +11 -7
  111. package/esm2015/lib/shared/services/base/http-base.service.js +10 -19
  112. package/esm2015/lib/shared-services/dialog-mangment.service.js +66 -21
  113. package/esm2015/lib/shared-services/shared-docs.service.js +20 -26
  114. package/esm2015/public-api.js +8 -2
  115. package/fesm2015/nuxeo-development-framework.js +3555 -2277
  116. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  117. package/lib/components/charts/chart.const.d.ts +2 -0
  118. package/lib/components/charts/chart.token.d.ts +8 -0
  119. package/lib/components/charts/charts.module.d.ts +9 -0
  120. package/lib/components/charts/components/base-chart.component.d.ts +21 -0
  121. package/lib/components/charts/components/chart.component.d.ts +28 -0
  122. package/lib/components/charts/components/data-chart.component.d.ts +39 -0
  123. package/lib/components/charts/components/index.d.ts +3 -0
  124. package/lib/components/charts/defaults/bar.d.ts +2 -0
  125. package/lib/components/charts/defaults/doughnut.d.ts +2 -0
  126. package/lib/components/charts/defaults/index.d.ts +4 -0
  127. package/lib/components/charts/defaults/line.d.ts +2 -0
  128. package/lib/components/charts/defaults/pie.d.ts +2 -0
  129. package/lib/components/charts/index.d.ts +9 -0
  130. package/lib/components/charts/models/index.d.ts +4 -0
  131. package/lib/components/charts/models/options.d.ts +12 -0
  132. package/lib/components/charts/models/plugins-options.d.ts +18 -0
  133. package/lib/components/charts/models/response.d.ts +5 -0
  134. package/lib/components/charts/models/statistic-request-config.d.ts +30 -0
  135. package/lib/components/charts/plugins/doughnut-center-text.d.ts +2 -0
  136. package/lib/components/charts/plugins/doughnut-empty-state.d.ts +2 -0
  137. package/lib/components/charts/plugins/index.d.ts +3 -0
  138. package/lib/components/charts/plugins/legend-margin.d.ts +2 -0
  139. package/lib/components/charts/services/index.d.ts +1 -0
  140. package/lib/components/charts/services/statistic.service.d.ts +23 -0
  141. package/lib/components/charts/utility/colors.d.ts +11 -0
  142. package/lib/components/charts/utility/common.d.ts +4 -0
  143. package/lib/components/charts/utility/index.d.ts +2 -0
  144. package/lib/components/comments/comments.module.d.ts +2 -1
  145. package/lib/components/comments/components/comment-item/comment-item.component.d.ts +3 -1
  146. package/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.d.ts +8 -5
  147. package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +8 -8
  148. package/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.d.ts +5 -5
  149. package/lib/components/correspondence-relation/correspondence-relation.module.d.ts +3 -2
  150. package/lib/components/diagrams/editor/customize.d.ts +7 -7
  151. package/lib/components/diagrams/editor/overrides/connection-path.transformers.d.ts +2 -5
  152. package/lib/components/diagrams/models/base-node.model.d.ts +1 -1
  153. package/lib/components/diagrams/models/connection.model.d.ts +2 -1
  154. package/lib/components/diagrams/types/common.type.d.ts +4 -0
  155. package/lib/components/diagrams/types/diagram-config.type.d.ts +7 -7
  156. package/lib/components/diagrams/types/node-definition.d.ts +1 -0
  157. package/lib/components/diagrams/utilities/random.d.ts +1 -1
  158. package/lib/components/documents/components/document-upload/document-upload.component.d.ts +3 -1
  159. package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +11 -10
  160. package/lib/components/dynamic-chart/dynamic-chart.module.d.ts +5 -6
  161. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +6 -2
  162. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +2 -1
  163. package/lib/components/dynamic-form/components/department-form/department-form.component.d.ts +4 -4
  164. package/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.d.ts +5 -1
  165. package/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.d.ts +3 -1
  166. package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.d.ts +5 -1
  167. package/lib/components/dynamic-form/dynamic-form.module.d.ts +2 -1
  168. package/lib/components/dynamic-table/dynamic-table/dynamic-table.component.d.ts +29 -11
  169. package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +11 -5
  170. package/lib/components/file-manger/components/copy/copy.component.d.ts +11 -4
  171. package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +9 -4
  172. package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +13 -19
  173. package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +6 -4
  174. package/lib/components/file-manger/components/delete/delete.component.d.ts +11 -4
  175. package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +9 -11
  176. package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +11 -5
  177. package/lib/components/file-manger/components/move/move.component.d.ts +11 -4
  178. package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +12 -10
  179. package/lib/components/file-manger/components/rename/rename.component.d.ts +11 -5
  180. package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +9 -8
  181. package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +6 -7
  182. package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +4 -3
  183. package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +11 -4
  184. package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +9 -8
  185. package/lib/components/file-manger/file-manager.abstract.d.ts +24 -22
  186. package/lib/components/file-manger/file-manger.module.d.ts +2 -1
  187. package/lib/components/notifications/components/base-notifications.component.d.ts +2 -8
  188. package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +1 -1
  189. package/lib/components/notifications/components/notifications-button/notifications-button.component.d.ts +4 -1
  190. package/lib/components/notifications/models/notification-message.mode.d.ts +1 -0
  191. package/lib/components/notifications/models/notifications-list-options.d.ts +4 -0
  192. package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +8 -6
  193. package/lib/components/permissions/permissions/permissions.component.d.ts +3 -1
  194. package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +3 -3
  195. package/lib/components/permissions/permissions.module.d.ts +2 -1
  196. package/lib/components/spell-checker-field/spell-checker-field.module.d.ts +10 -0
  197. package/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.d.ts +24 -0
  198. package/lib/components/table/dynamic-component.d.ts +20 -0
  199. package/lib/components/table/page-sizes-list/page-sizes-list.component.d.ts +15 -0
  200. package/lib/components/table/table/table.component.d.ts +15 -6
  201. package/lib/components/table/table.module.d.ts +14 -10
  202. package/lib/components/vocabulary/services/vocabulary-api.service.d.ts +2 -2
  203. package/lib/core/services/callApi/call-api.service.d.ts +8 -1
  204. package/lib/shared/components/base/base-selector.component.d.ts +4 -4
  205. package/lib/shared/components/base/base.component.d.ts +5 -5
  206. package/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.d.ts +2 -1
  207. package/lib/shared/components/nuxeo-dialog/nuxeo.dialog.d.ts +2 -1
  208. package/lib/shared/services/base/http-base.service.d.ts +3 -1
  209. package/lib/shared-services/dialog-mangment.service.d.ts +5 -1
  210. package/lib/shared-services/shared-docs.service.d.ts +3 -1
  211. package/package.json +3 -4
  212. package/public-api.d.ts +7 -1
  213. package/esm2015/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.js +0 -164
  214. package/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.d.ts +0 -33
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Input, Output, ViewEncapsulation, } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
2
2
  import { catchError, map } from 'rxjs/operators';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "../../../core/adapters/adapter.service";
@@ -7,8 +7,9 @@ import * as i3 from "../services/dynamic-table.service";
7
7
  import * as i4 from "../../table/table/table.component";
8
8
  import * as i5 from "../../../shared/components/spinner/spinner.component";
9
9
  import * as i6 from "../../pagination/pagination/pagination.component";
10
- import * as i7 from "@angular/common";
11
- import * as i8 from "@ngx-translate/core";
10
+ import * as i7 from "../../table/page-sizes-list/page-sizes-list.component";
11
+ import * as i8 from "@angular/common";
12
+ import * as i9 from "@ngx-translate/core";
12
13
  /**
13
14
  * this component is an additional layer that uses [Table Component]{@link TableComponent} internally,
14
15
  * you can use this component to configure a page provider listing out of the box easily,
@@ -37,10 +38,11 @@ import * as i8 from "@ngx-translate/core";
37
38
  * </cts-dynamic-table>
38
39
  */
39
40
  export class DynamicTableComponent {
40
- constructor(adapter, callApi, dynamicTableService) {
41
+ constructor(adapter, callApi, dynamicTableService, cdr) {
41
42
  this.adapter = adapter;
42
43
  this.callApi = callApi;
43
44
  this.dynamicTableService = dynamicTableService;
45
+ this.cdr = cdr;
44
46
  /** event to emit when selecting single row */
45
47
  this.onRowSelected = new EventEmitter();
46
48
  /** event to emit when selecting single row to catch index*/
@@ -53,11 +55,13 @@ export class DynamicTableComponent {
53
55
  this.onMultiRowSelected = new EventEmitter();
54
56
  /** event t emit when start getting data and when finish */
55
57
  this.onLoading = new EventEmitter();
58
+ this.onLoad = new EventEmitter();
56
59
  /** Translations prefix */
57
60
  this.prefix = '';
58
61
  /** Sorting column */
59
62
  this.sortingBy = {};
60
63
  this.queryParam = {};
64
+ this.customFilters = {};
61
65
  this.fullWidth = 'auto';
62
66
  /** 'list' for noraml table 'card' for cards mode like in memos */
63
67
  this.tableMode = 'list';
@@ -70,14 +74,17 @@ export class DynamicTableComponent {
70
74
  this.highlightSelectedCard = false;
71
75
  this.showActionsAsMenu = false; // flage to show action in menu or side by side
72
76
  this.filterParams = {};
73
- this.format = "MMMM d, y";
77
+ this.skipAggregation = 'onPageChange';
78
+ this.format = 'MMMM d, y';
74
79
  this.pageNum = 1;
75
80
  this.rows = [];
76
81
  this.totalRecords = 0;
77
82
  this.sorting = false;
83
+ this.pageSizes = [];
84
+ this.initialized = false;
78
85
  }
79
86
  ngOnInit() {
80
- this.myDataSubscription = this.dynamicTableService.refreshData.subscribe(filterData => {
87
+ this.myDataSubscription = this.dynamicTableService.refreshData.subscribe((filterData) => {
81
88
  if (filterData) {
82
89
  this.filterParams = Object.assign({}, filterData);
83
90
  // reset page number when start new filtering
@@ -90,34 +97,44 @@ export class DynamicTableComponent {
90
97
  ngOnDestroy() {
91
98
  this.myDataSubscription ? this.myDataSubscription.unsubscribe() : '';
92
99
  }
93
- ngOnChanges(simpleChange) {
94
- const isFirstChange = Object.values(simpleChange).some((c) => c.isFirstChange());
100
+ ngOnChanges(changes) {
101
+ const isFirstChange = Object.values(changes).some((c) => c.isFirstChange());
95
102
  if (isFirstChange) {
96
103
  return;
97
104
  }
98
- if ((simpleChange.queryParam &&
99
- simpleChange.queryParam.previousValue !==
100
- simpleChange.queryParam.currentValue) ||
101
- (simpleChange.quickFilter &&
102
- simpleChange.quickFilter.previousValue !==
103
- simpleChange.quickFilter.currentValue)) {
104
- this.pageNum = 1; // reset page number befor recalling api with filters
105
+ const hasChanged = (items) => items.some((key) => changes[key] && changes[key].previousValue !== changes[key].currentValue);
106
+ if (hasChanged(['queryParam', 'quickFilter', 'customFilters'])) {
107
+ this.pageNum = 1; // Reset page number before recalling API with filters
108
+ this.getData();
109
+ }
110
+ if (hasChanged(['sortingBy'])) {
105
111
  this.getData();
106
112
  }
107
113
  }
108
- getData() {
114
+ getData(payload = {}, headers = {}) {
115
+ var _a, _b, _c, _d;
109
116
  this.loading = true; // internal loading
110
- this.onLoading.emit(true); // external loading
111
- let params = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ dublincore_created_agg: this.range }, this.filterParams), this.queryParam), this.sortingBy), this.quickFilter), { currentPageIndex: this.pageNum - 1, pageSize: this.pageSize, offset: 0 });
117
+ this.onLoading.emit(true); // external loading
118
+ let params = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (this.range ? { dublincore_created_agg: this.range } : {})), this.filterParams), this.queryParam), this.quickFilter), (Object.keys(this.sortingBy || {}).length
119
+ ? {
120
+ sortBy: (_a = this.sortingBy) === null || _a === void 0 ? void 0 : _a.sortBy,
121
+ sortOrder: (_b = this.sortingBy) === null || _b === void 0 ? void 0 : _b.sortOrder
122
+ }
123
+ : {})), { currentPageIndex: this.pageNum - 1 }), (this.pageSize ? { pageSize: this.pageSize } : {})), { offset: 0 }), payload);
112
124
  // don't refresh all table in case of sorting only
113
- if (!this.sorting) { // used to not refreshing all table in case of sorting since table lose sorting state when refresh all table
125
+ if (!this.sorting) {
126
+ // used to not refreshing all table in case of sorting since table lose sorting state when refresh all table
114
127
  this.rows = []; // used to refresh table to feel changes in actions when perform action and need to refresh actions
115
128
  }
116
129
  this.sorting = false; // reset sorting status to false and for next sorting func sorting set it to true again
117
- this.callApi
118
- .query(Object.assign({ pageProvider: this.pageProvider }, params), {
119
- headers: this.headers,
120
- })
130
+ const _query = Object.assign({ pageProvider: this.pageProvider }, params);
131
+ const _options = {
132
+ headers: Object.assign(Object.assign({}, this.headers), headers)
133
+ };
134
+ const query$ = this.customUrl
135
+ ? this.callApi.customQuery(this.customUrl, Object.assign(Object.assign({}, params), (((_c = this.customFilters) === null || _c === void 0 ? void 0 : _c.params) || {})), _options.headers, ((_d = this.customFilters) === null || _d === void 0 ? void 0 : _d.payload) || {})
136
+ : this.callApi.query(_query, _options);
137
+ query$
121
138
  .pipe(map((data) => {
122
139
  data.entries.map((item) => this.adapter.adaptIn(item, this.fields));
123
140
  return data;
@@ -127,6 +144,10 @@ export class DynamicTableComponent {
127
144
  .subscribe((res) => {
128
145
  this.loading = false;
129
146
  this.onLoading.emit(false);
147
+ if (!this.initialized) {
148
+ this.onLoad.emit(res);
149
+ this.initialized = true;
150
+ }
130
151
  res.entries.forEach((element) => {
131
152
  var _a, _b, _c, _d, _e, _f, _g, _h;
132
153
  if (element.properties && ((_a = element.properties) === null || _a === void 0 ? void 0 : _a.creator) && ((_b = element.properties.creator) === null || _b === void 0 ? void 0 : _b.properties)) {
@@ -142,6 +163,7 @@ export class DynamicTableComponent {
142
163
  });
143
164
  this.totalRecords = res.resultsCount;
144
165
  this.rows = res.entries;
166
+ this.cdr.detectChanges();
145
167
  // emit data to outside in case of search page for the first time only to prevent refreshing aggregation with every page change
146
168
  // and for any other page type emit data directly in all page numbers
147
169
  if ((this.isSearchPage && this.pageNum === 1) || !this.isSearchPage)
@@ -163,18 +185,23 @@ export class DynamicTableComponent {
163
185
  onSort(sortObject) {
164
186
  this.sortingBy = sortObject;
165
187
  this.sorting = true;
166
- this.getData();
188
+ this.getData({}, this.skipAggregation === 'onPageChange' ? { skipAggregates: 'true' } : {});
167
189
  }
168
190
  onMultiRowSelectValue(event) {
169
191
  this.onMultiRowSelected.emit(event);
170
192
  }
171
193
  PaginationChange(event) {
172
194
  this.pageNum = event;
173
- this.getData();
195
+ this.getData({}, this.skipAggregation === 'onPageChange' ? { skipAggregates: 'true' } : {});
196
+ }
197
+ onChangePageSize(pageSize) {
198
+ this.pageNum = 1;
199
+ this.pageSize = pageSize;
200
+ this.getData({}, this.skipAggregation === 'onPageChange' ? { skipAggregates: 'true' } : {});
174
201
  }
175
202
  }
176
- DynamicTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicTableComponent, deps: [{ token: i1.AdapterService }, { token: i2.CallApiService }, { token: i3.DynamicTableService }], target: i0.ɵɵFactoryTarget.Component });
177
- DynamicTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DynamicTableComponent, selector: "cts-dynamic-table", inputs: { columns: "columns", responsiveColumns: "responsiveColumns", entityType: "entityType", prefix: "prefix", headers: "headers", fields: "fields", pageProvider: "pageProvider", pageSize: "pageSize", sortingBy: "sortingBy", queryParam: "queryParam", quickFilter: "quickFilter", report: "report", rowCursor: "rowCursor", fullWidth: "fullWidth", tableMode: "tableMode", tableActions: "tableActions", defultSort: "defultSort", range: "range", isSearchPage: "isSearchPage", multiSelectRows: "multiSelectRows", customFirstRow: "customFirstRow", highlightSelectedCard: "highlightSelectedCard", showActionsAsMenu: "showActionsAsMenu", filterParams: "filterParams", format: "format" }, outputs: { onRowSelected: "onRowSelected", onRowIndexSelected: "onRowIndexSelected", actionOnRow: "actionOnRow", onGettingData: "onGettingData", onMultiRowSelected: "onMultiRowSelected", onLoading: "onLoading" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"wrapping\">\r\n <div class=\"table-reposition\">\r\n <cts-table\r\n *ngIf=\"rows.length\"\r\n [rows]=\"rows\"\r\n [columns]=\"columns\"\r\n [responsiveColumns]=\"responsiveColumns\"\r\n [rowCursor]=\"rowCursor\"\r\n [fullWidth]=\"fullWidth\"\r\n [entityType]=\"entityType\"\r\n [prefix]=\"prefix\"\r\n [totalRecords]=\"totalRecords\"\r\n [tableMode]=\"tableMode\"\r\n [multiSelectRows]=\"multiSelectRows\"\r\n [tableActions]=\"tableActions\"\r\n [showActionsAsMenu]=\"showActionsAsMenu\"\r\n [defultSort]=\"defultSort\"\r\n [format]=\"format\"\r\n [highlightSelectedCard]=\"highlightSelectedCard\"\r\n [customFirstRow]=\"customFirstRow\"\r\n (onRowSelected)=\"rowDetails($event)\"\r\n (onRowIndexSelected)=\"indexDetails($event)\"\r\n (onMultiRowSelected)=\"onMultiRowSelectValue($event)\"\r\n (actionOnRow)=\"performAction($event)\"\r\n (onSorting)=\"onSort($event)\"\r\n ></cts-table>\r\n </div>\r\n <ng-container *ngIf=\"loading\">\r\n <cts-spinner></cts-spinner>\r\n </ng-container>\r\n <div\r\n class=\"pagination-iner-wraper d-flex justify-content-center align-items-center my-3\"\r\n *ngIf=\"rows.length\"\r\n >\r\n <cts-pagination\r\n [page]=\"pageNum\"\r\n (change)=\"PaginationChange($event)\"\r\n [size]=\"pageSize\"\r\n [count]=\"totalRecords\"\r\n ></cts-pagination>\r\n </div>\r\n\r\n <div class=\"empty-state\" *ngIf=\"(!loading && rows.length === 0)\">\r\n <div class=\"text\">{{ ( prefix ? ( prefix + 'noData' ) : ('noData')) | translate}}</div>\r\n </div>\r\n <div class=\"empty-state\" *ngIf=\"(loading && rows.length === 0)\">\r\n <div class=\"text\">{{ ( prefix ? ( prefix + 'gettingData' ) : ('gettingData')) | translate }}</div>\r\n </div>\r\n</div>\r\n", styles: [".bi{margin:0!important}.memo-sorting-wrapper{width:265px;margin:0 10px;height:100%;display:flex}.memo-sorting-wrapper .sorting-direction{width:65px;height:40px;background-color:#465573;color:#fff;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer}.memo-sorting-wrapper .memo-sorting-trigger{width:calc(100% - 65px);height:100%;background-color:transparent;border:1px solid lightgrey;display:flex;justify-content:space-between;align-items:center;padding:0 15px;font-size:14px}.memo-sorting-wrapper .memo-sorting-trigger i{font-size:16px;color:gray}.memo-sorting-menu{width:200px}.my-button{border:1px solid #465573;color:#465573;border-radius:5px;background-color:transparent;font-weight:bold;min-width:80px;height:40px}.my-button.reset{border:none}.my-button:hover{color:#fff;background-color:#465573}.my-button:hover.reset{color:#465573;border:1px solid #465573;background-color:#fff}.app-property-value .app-input-wrapper label{color:#646f85;font-size:13px;margin-bottom:5px}.app-property-value .app-input-wrapper label .text-danger{font-size:16px;line-height:14px;margin:0 5px!important}.app-property-value .app-input-wrapper .form-control{border:1px solid #ccc;border-radius:5px;background-color:#8f98aa1a;height:40px}.app-property-value .app-input-wrapper .form-control:disabled{background-color:#e9ecef!important}.app-property-value .app-input-wrapper .form-control:focus{border:1px solid #1a96c6;box-shadow:0 0 4px #79c3c26b!important}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers{list-style:none;padding:0;margin:0;font-size:14px}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers .error{margin-top:5px}.autocomplete-container .input-container input:focus,hijri-gregorian-datepicker .form-group .input-group .form-control:focus,.ng-select.ng-select-focused .ng-select-container{border:1px solid #1a96c6!important;box-shadow:0 0 4px #79c3c26b!important}input::placeholder{font-size:12px}.form-control:focus{box-shadow:none!important}.mat-stepper-horizontal{margin-top:-25px}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header.cdk-program-focused{background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-icon-selected{background-color:transparent;color:#fff;background-image:linear-gradient(to right,#0dbab5,#1a96c6)}@media only screen and (max-width: 576px){.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-label .mat-step-text-label{white-space:pre-wrap;overflow:visible}}.mat-stepper-horizontal .mat-horizontal-content-container{overflow:visible}@media only screen and (max-width: 768px){.mat-stepper-horizontal .mat-horizontal-content-container{padding:0 0 24px}}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:after,.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:before{display:none}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:before{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);left:0}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);right:0}.form-wrapper{padding:30px 15px;border:1px solid #dde0e2}.form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.form-wrapper .buttons-wrapper button:hover{opacity:.7}.form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.form-wrapper .upload-wrapper button span{margin:0 10px}.renameFileComponent .form-wrapper{padding:30px 15px;border:none!important}.renameFileComponent .form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.renameFileComponent .form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.renameFileComponent .form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.renameFileComponent .form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.renameFileComponent .form-wrapper .buttons-wrapper button:hover{opacity:.7}.renameFileComponent .form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.renameFileComponent .form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.renameFileComponent .form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.renameFileComponent .form-wrapper .upload-wrapper button span{margin:0 10px}.my-dynamic-viewer{display:flex;align-items:center;font-size:12px;min-height:30px}.my-dynamic-viewer .my-label{font-size:12px;font-weight:500;width:150px;word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-label{width:50%}}.my-dynamic-viewer .my-value{width:calc(100% - 150px);word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-value{width:50%}}.my-dynamic-viewer .direction-img{font-size:14px}.my-dynamic-viewer .direction-img .incoming{display:none}.my-dynamic-viewer .direction-img .outgoing{display:none}.my-dynamic-viewer .direction-img .internal{display:none}.my-dynamic-viewer.draft .my-value{color:#596973}.my-dynamic-viewer.inProgress .my-value{color:#3c3cf0}.my-dynamic-viewer.registered .my-value{color:#4f008c}.my-dynamic-viewer.archived .my-value{color:#fbb62c}.my-dynamic-viewer.closed .my-value{color:#00dca5}.my-dynamic-viewer.approved .my-value{color:#06a57e}.my-dynamic-viewer.assigned .my-value{color:#fd6670}.my-dynamic-viewer.sent .my-value{color:#3c3cf0}.my-dynamic-viewer.published .my-value{color:#00dca5}.my-dynamic-viewer.Outgoing .my-value{display:flex}.my-dynamic-viewer.Outgoing .my-value .direction-img .outgoing{color:#fbb62c;margin:1px 5px;display:flex}.my-dynamic-viewer.Outgoing .my-value .text{margin:0 5px}.my-dynamic-viewer.Internal .my-value{display:flex}.my-dynamic-viewer.Internal .my-value .direction-img .internal{color:#3c3cf0;margin:1px 5px;display:flex}.my-dynamic-viewer.Internal .my-value .text{margin:0 5px}.my-dynamic-viewer.Incoming .my-value{display:flex}.my-dynamic-viewer.Incoming .my-value .direction-img .incoming{color:#00dca5;display:flex}.my-dynamic-viewer.Incoming .my-value .text{margin:-3px 5px 0}.my-dynamic-viewer.vertical{display:block}.my-dynamic-viewer.vertical .my-label{width:auto}.my-dynamic-viewer.vertical .my-value{width:auto}.my-dynamic-viewer.with-out-label{width:100%!important}.wrapping{position:relative}.wrapping .table-reposition{overflow-y:hidden;scrollbar-color:#b4bac6 transparent!important;scrollbar-width:thin!important;overflow-x:auto}.empty-state{padding:200px;display:flex;justify-content:center;align-items:center;font-size:20px;font-weight:bold}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#b4bac6}.dark-scroll::-webkit-scrollbar-thumb{background:#8f98aa}\n"], components: [{ type: i4.TableComponent, selector: "cts-table", inputs: ["rows", "columns", "responsiveColumns", "entityType", "prefix", "pageCount", "totalRecords", "rowCursor", "fullWidth", "vocItemTranslationPrefix", "tableMode", "tableActions", "format", "defultSort", "highlightSelectedCard", "multiSelectRows", "customFirstRow", "showActionsAsMenu"], outputs: ["onRowSelected", "onRowIndexSelected", "onIconSelected", "actionOnRow", "onSorting", "onMultiRowSelected"] }, { type: i5.SpinnerComponent, selector: "cts-spinner" }, { type: i6.PaginationComponent, selector: "cts-pagination", inputs: ["size", "count", "page"], outputs: ["change"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i8.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
203
+ DynamicTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicTableComponent, deps: [{ token: i1.AdapterService }, { token: i2.CallApiService }, { token: i3.DynamicTableService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
204
+ DynamicTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DynamicTableComponent, selector: "cts-dynamic-table", inputs: { columns: "columns", responsiveColumns: "responsiveColumns", entityType: "entityType", prefix: "prefix", headers: "headers", fields: "fields", pageProvider: "pageProvider", pageSize: "pageSize", sortingBy: "sortingBy", queryParam: "queryParam", customFilters: "customFilters", quickFilter: "quickFilter", report: "report", rowCursor: "rowCursor", fullWidth: "fullWidth", tableMode: "tableMode", componentName: "componentName", tableActions: "tableActions", defultSort: "defultSort", range: "range", isSearchPage: "isSearchPage", multiSelectRows: "multiSelectRows", customFirstRow: "customFirstRow", highlightSelectedCard: "highlightSelectedCard", showActionsAsMenu: "showActionsAsMenu", filterParams: "filterParams", skipAggregation: "skipAggregation", customUrl: "customUrl", format: "format", pageSizes: "pageSizes" }, outputs: { onRowSelected: "onRowSelected", onRowIndexSelected: "onRowIndexSelected", actionOnRow: "actionOnRow", onGettingData: "onGettingData", onMultiRowSelected: "onMultiRowSelected", onLoading: "onLoading", onLoad: "onLoad" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"wrapping\">\r\n <div class=\"table-reposition\">\r\n <cts-table\r\n *ngIf=\"rows.length\"\r\n [rows]=\"rows\"\r\n [columns]=\"columns\"\r\n [responsiveColumns]=\"responsiveColumns\"\r\n [rowCursor]=\"rowCursor\"\r\n [fullWidth]=\"fullWidth\"\r\n [entityType]=\"entityType\"\r\n [prefix]=\"prefix\"\r\n [totalRecords]=\"totalRecords\"\r\n [tableMode]=\"tableMode\"\r\n [componentName]=\"componentName\"\r\n [multiSelectRows]=\"multiSelectRows\"\r\n [tableActions]=\"tableActions\"\r\n [showActionsAsMenu]=\"showActionsAsMenu\"\r\n [defultSort]=\"defultSort\"\r\n [format]=\"format\"\r\n [highlightSelectedCard]=\"highlightSelectedCard\"\r\n [customFirstRow]=\"customFirstRow\"\r\n (onRowSelected)=\"rowDetails($event)\"\r\n (onRowIndexSelected)=\"indexDetails($event)\"\r\n (onMultiRowSelected)=\"onMultiRowSelectValue($event)\"\r\n (actionOnRow)=\"performAction($event)\"\r\n (onSorting)=\"onSort($event)\"\r\n ></cts-table>\r\n </div>\r\n <ng-container *ngIf=\"loading\">\r\n <cts-spinner></cts-spinner>\r\n </ng-container>\r\n <div\r\n class=\"pagination-iner-wraper d-flex justify-content-center align-items-center my-3\"\r\n [ngClass]=\"{ relative: pageSizes?.length }\"\r\n *ngIf=\"rows.length\"\r\n >\r\n <cts-pagination\r\n [page]=\"pageNum\"\r\n (change)=\"PaginationChange($event)\"\r\n [size]=\"pageSize\"\r\n [count]=\"totalRecords\"\r\n ></cts-pagination>\r\n <ndf-page-sizes-list\r\n class=\"absolute ndfPageSizes\"\r\n *ngIf=\"pageSizes?.length\"\r\n [pageSizes]=\"pageSizes\"\r\n [selectedPageSize]=\"pageSize\"\r\n (onChangePageSize)=\"onChangePageSize($event)\"\r\n >\r\n </ndf-page-sizes-list>\r\n </div>\r\n\r\n <div class=\"empty-state\" *ngIf=\"!loading && rows.length === 0\">\r\n <div class=\"text\">\r\n {{ (prefix ? prefix + \"noData\" : \"noData\") | translate }}\r\n </div>\r\n </div>\r\n <div class=\"empty-state\" *ngIf=\"loading && rows.length === 0\">\r\n <div class=\"text\">\r\n {{ (prefix ? prefix + \"gettingData\" : \"gettingData\") | translate }}\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".bi{margin:0!important}.memo-sorting-wrapper{width:265px;margin:0 10px;height:100%;display:flex}.memo-sorting-wrapper .sorting-direction{width:65px;height:40px;background-color:#465573;color:#fff;font-size:20px;display:flex;justify-content:center;align-items:center;cursor:pointer}.memo-sorting-wrapper .memo-sorting-trigger{width:calc(100% - 65px);height:100%;background-color:transparent;border:1px solid lightgrey;display:flex;justify-content:space-between;align-items:center;padding:0 15px;font-size:14px}.memo-sorting-wrapper .memo-sorting-trigger i{font-size:16px;color:gray}.memo-sorting-menu{width:200px}.my-button{border:1px solid #465573;color:#465573;border-radius:5px;background-color:transparent;font-weight:bold;min-width:80px;height:40px}.my-button.reset{border:none}.my-button:hover{color:#fff;background-color:#465573}.my-button:hover.reset{color:#465573;border:1px solid #465573;background-color:#fff}.app-property-value .app-input-wrapper label{color:#646f85;font-size:13px;margin-bottom:5px}.app-property-value .app-input-wrapper label .text-danger{font-size:16px;line-height:14px;margin:0 5px!important}.app-property-value .app-input-wrapper .form-control{border:1px solid #ccc;border-radius:5px;background-color:#8f98aa1a;height:40px}.app-property-value .app-input-wrapper .form-control:disabled{background-color:#e9ecef!important}.app-property-value .app-input-wrapper .form-control:focus{border:1px solid #1a96c6;box-shadow:0 0 4px #79c3c26b!important}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers{list-style:none;padding:0;margin:0;font-size:14px}.app-property-value .app-input-wrapper .app-textitem-editable-error .error-containers .error{margin-top:5px}.autocomplete-container .input-container input:focus,hijri-gregorian-datepicker .form-group .input-group .form-control:focus,.ng-select.ng-select-focused .ng-select-container{border:1px solid #1a96c6!important;box-shadow:0 0 4px #79c3c26b!important}input::placeholder{font-size:12px}.form-control:focus{box-shadow:none!important}.mat-stepper-horizontal{margin-top:-25px}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header.cdk-program-focused{background-color:transparent}.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-icon-selected{background-color:transparent;color:#fff;background-image:linear-gradient(to right,#0dbab5,#1a96c6)}@media only screen and (max-width: 576px){.mat-stepper-horizontal .mat-horizontal-stepper-header-container .mat-step-header .mat-step-label .mat-step-text-label{white-space:pre-wrap;overflow:visible}}.mat-stepper-horizontal .mat-horizontal-content-container{overflow:visible}@media only screen and (max-width: 768px){.mat-stepper-horizontal .mat-horizontal-content-container{padding:0 0 24px}}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:after,.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:before{display:none}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:first-child:before{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);left:0}.mat-stepper-horizontal.rtl .mat-horizontal-stepper-header:last-child:after{border-top-width:1px;border-top-style:solid;content:\"\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px);right:0}.form-wrapper{padding:30px 15px;border:1px solid #dde0e2}.form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.form-wrapper .buttons-wrapper button:hover{opacity:.7}.form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.form-wrapper .upload-wrapper button span{margin:0 10px}.renameFileComponent .form-wrapper{padding:30px 15px;border:none!important}.renameFileComponent .form-wrapper .buttons-wrapper{display:flex;justify-content:space-between}.renameFileComponent .form-wrapper .buttons-wrapper .action-buttons-wrapper{display:flex}.renameFileComponent .form-wrapper .buttons-wrapper button{background-image:linear-gradient(to right,#0dbab5,#1a96c6);height:40px;color:#fff;border:none;width:125px;margin-top:20px;border-radius:5px}.renameFileComponent .form-wrapper .buttons-wrapper button:disabled{opacity:.4;cursor:not-allowed}.renameFileComponent .form-wrapper .buttons-wrapper button:hover{opacity:.7}.renameFileComponent .form-wrapper .upload-wrapper{display:flex;flex-direction:column;justify-content:flex-end}.renameFileComponent .form-wrapper .upload-wrapper label{color:#8f98aa;font-size:14px}.renameFileComponent .form-wrapper .upload-wrapper button{padding:10px;border:1px solid lightgray}.renameFileComponent .form-wrapper .upload-wrapper button span{margin:0 10px}.my-dynamic-viewer{display:flex;align-items:center;font-size:12px;min-height:30px}.my-dynamic-viewer .my-label{font-size:12px;font-weight:500;width:150px;word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-label{width:50%}}.my-dynamic-viewer .my-value{width:calc(100% - 150px);word-break:break-word}@media (max-width: 992px){.my-dynamic-viewer .my-value{width:50%}}.my-dynamic-viewer .direction-img{font-size:14px}.my-dynamic-viewer .direction-img .incoming{display:none}.my-dynamic-viewer .direction-img .outgoing{display:none}.my-dynamic-viewer .direction-img .internal{display:none}.my-dynamic-viewer.draft .my-value{color:#596973}.my-dynamic-viewer.inProgress .my-value{color:#3c3cf0}.my-dynamic-viewer.registered .my-value{color:#4f008c}.my-dynamic-viewer.archived .my-value{color:#fbb62c}.my-dynamic-viewer.closed .my-value{color:#00dca5}.my-dynamic-viewer.approved .my-value{color:#06a57e}.my-dynamic-viewer.assigned .my-value{color:#fd6670}.my-dynamic-viewer.sent .my-value{color:#3c3cf0}.my-dynamic-viewer.published .my-value{color:#00dca5}.my-dynamic-viewer.Outgoing .my-value{display:flex}.my-dynamic-viewer.Outgoing .my-value .direction-img .outgoing{color:#fbb62c;margin:1px 5px;display:flex}.my-dynamic-viewer.Outgoing .my-value .text{margin:0 5px}.my-dynamic-viewer.Internal .my-value{display:flex}.my-dynamic-viewer.Internal .my-value .direction-img .internal{color:#3c3cf0;margin:1px 5px;display:flex}.my-dynamic-viewer.Internal .my-value .text{margin:0 5px}.my-dynamic-viewer.Incoming .my-value{display:flex}.my-dynamic-viewer.Incoming .my-value .direction-img .incoming{color:#00dca5;display:flex}.my-dynamic-viewer.Incoming .my-value .text{margin:-3px 5px 0}.my-dynamic-viewer.vertical{display:block}.my-dynamic-viewer.vertical .my-label{width:auto}.my-dynamic-viewer.vertical .my-value{width:auto}.my-dynamic-viewer.with-out-label{width:100%!important}.wrapping{position:relative}.wrapping .table-reposition{overflow-y:var(--table-reposition-overflow-y, hidden);scrollbar-color:#b4bac6 transparent!important;scrollbar-width:thin!important;overflow-x:auto}.empty-state{padding:200px;display:flex;justify-content:center;align-items:center;font-size:20px;font-weight:bold}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#b4bac6}.dark-scroll::-webkit-scrollbar-thumb{background:#8f98aa}.ndfPageSizes{right:0;left:unset}.rtl .ndfPageSizes{right:unset;left:0}\n"], components: [{ type: i4.TableComponent, selector: "cts-table", inputs: ["rows", "columns", "responsiveColumns", "entityType", "prefix", "pageCount", "totalRecords", "rowCursor", "fullWidth", "vocItemTranslationPrefix", "tableMode", "componentName", "tableActions", "format", "defultSort", "highlightSelectedCard", "multiSelectRows", "customFirstRow", "showActionsAsMenu"], outputs: ["onRowSelected", "onRowIndexSelected", "onIconSelected", "actionOnRow", "onSorting", "onMultiRowSelected"] }, { type: i5.SpinnerComponent, selector: "cts-spinner" }, { type: i6.PaginationComponent, selector: "cts-pagination", inputs: ["size", "count", "page"], outputs: ["change"] }, { type: i7.PageSizesListComponent, selector: "ndf-page-sizes-list", inputs: ["pageSizes", "selectedPageSize"], outputs: ["onChangePageSize"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "translate": i9.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
178
205
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DynamicTableComponent, decorators: [{
179
206
  type: Component,
180
207
  args: [{
@@ -183,7 +210,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
183
210
  styleUrls: ['./dynamic-table.component.scss'],
184
211
  encapsulation: ViewEncapsulation.None
185
212
  }]
186
- }], ctorParameters: function () { return [{ type: i1.AdapterService }, { type: i2.CallApiService }, { type: i3.DynamicTableService }]; }, propDecorators: { onRowSelected: [{
213
+ }], ctorParameters: function () { return [{ type: i1.AdapterService }, { type: i2.CallApiService }, { type: i3.DynamicTableService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { onRowSelected: [{
187
214
  type: Output
188
215
  }], onRowIndexSelected: [{
189
216
  type: Output
@@ -195,6 +222,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
195
222
  type: Output
196
223
  }], onLoading: [{
197
224
  type: Output
225
+ }], onLoad: [{
226
+ type: Output
198
227
  }], columns: [{
199
228
  type: Input
200
229
  }], responsiveColumns: [{
@@ -215,6 +244,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
215
244
  type: Input
216
245
  }], queryParam: [{
217
246
  type: Input
247
+ }], customFilters: [{
248
+ type: Input
218
249
  }], quickFilter: [{
219
250
  type: Input
220
251
  }], report: [{
@@ -225,6 +256,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
225
256
  type: Input
226
257
  }], tableMode: [{
227
258
  type: Input
259
+ }], componentName: [{
260
+ type: Input
228
261
  }], tableActions: [{
229
262
  type: Input
230
263
  }], defultSort: [{
@@ -243,7 +276,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
243
276
  type: Input
244
277
  }], filterParams: [{
245
278
  type: Input
279
+ }], skipAggregation: [{
280
+ type: Input
281
+ }], customUrl: [{
282
+ type: Input
246
283
  }], format: [{
247
284
  type: Input
285
+ }], pageSizes: [{
286
+ type: Input
248
287
  }] } });
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBRVosS0FBSyxFQUlMLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBVSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztBQUl6RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFRSCxNQUFNLE9BQU8scUJBQXFCO0lBNERoQyxZQUNVLE9BQXVCLEVBQ3ZCLE9BQXVCLEVBQ3ZCLG1CQUF3QztRQUZ4QyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBOURsRCwrQ0FBK0M7UUFDckMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLDREQUE0RDtRQUNsRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25ELG1FQUFtRTtRQUN6RCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0MsZ0ZBQWdGO1FBQ3RFLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUs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QU07Z0JBRUEsT0FBTztzQkFBZixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFSyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUMsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVFLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVOLFlBQVk7c0JBRFgsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmcm9tLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENhbGxBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9jYWxsQXBpL2NhbGwtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWRhcHRlcnMvYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHluYW1pY1RhYmxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2R5bmFtaWMtdGFibGUuc2VydmljZSc7XHJcbi8qKlxyXG4gKiB0aGlzIGNvbXBvbmVudCBpcyBhbiBhZGRpdGlvbmFsIGxheWVyIHRoYXQgdXNlcyBbVGFibGUgQ29tcG9uZW50XXtAbGluayBUYWJsZUNvbXBvbmVudH0gaW50ZXJuYWxseSxcclxuICogeW91IGNhbiB1c2UgdGhpcyBjb21wb25lbnQgdG8gY29uZmlndXJlIGEgcGFnZSBwcm92aWRlciBsaXN0aW5nIG91dCBvZiB0aGUgYm94IGVhc2lseSxcclxuICogYW5kIGl0IHdpbGwgaGFuZGxlIGFsbCBvZiB0aGUgYmFzaWMgZmVhdHVyZXMgc3VjaCBhcyBnZXR0aW5nIGRhdGEgZnJvbSBBUEksIExpc3RpbmcsIFBhZ2luYXRpb24sIHNvcnRpbmcgYW5kIGZpbHRlcmluZ1xyXG4gKiAhW1NjcmVlbnNob3QtMV0oLi4vc2NyZWVuc2hvdHMvZHluYW1pY1RhYmxlLnBuZylcclxuICogQHRpdGxlXHJcbiAqIER5bmFtaWMgVGFibGVcclxuICogQGV4YW1wbGVcclxuICpcclxuICogPGN0cy1keW5hbWljLXRhYmxlXHJcbiAqICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gKiAgICBbcmVzcG9uc2l2ZUNvbHVtbnNdPVwicmVzcG9uc2l2ZUNvbHVtbnNcIlxyXG4gKiAgICBbZnVsbFdpZHRoXT1cImZ1bGxXaWR0aFwiXHJcbiAqICAgIFtwYWdlU2l6ZV09XCJQYWdlU2l6ZVwiXHJcbiAqICAgIFtwYWdlUHJvdmlkZXJdPVwicGFnZVByb3ZpZGVyXCJcclxuICogICAgW3F1aWNrRmlsdGVyXT1cImZpbHRlclwiXHJcbiAqICAgIFtzb3J0aW5nQnldPVwic29ydGluZ0J5XCJcclxuICogICAgW2VudGl0eVR5cGVdPVwiJ2FsbCdcIlxyXG4gKiAgICBbZmllbGRzXT1cImZpZWxkc1wiXHJcbiAqICAgIFtwcmVmaXhdPVwicHJlZml4XCJcclxuICogICAgW3Jvd0N1cnNvcl09XCJ0cnVlXCJcclxuICogICAgW3F1ZXJ5UGFyYW1dPVwicXVlcnlQYXJhbVwiXHJcbiAqICAgIFtoZWFkZXJzXT1cImhlYWRlcnNcIlxyXG4gKiAgICAob25Sb3dTZWxlY3RlZCk9XCJvcGVuVmlld2VyKCRldmVudClcIlxyXG4gKiAgICAoYWN0aW9uT25Sb3cpPVwicGVyZm9ybUFjdGlvbigkZXZlbnQpXCI+XHJcbiAqIDwvY3RzLWR5bmFtaWMtdGFibGU+XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2N0cy1keW5hbWljLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZHluYW1pYy10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLyoqIGV2ZW50IHRvIGVtaXQgd2hlbiBzZWxlY3Rpbmcgc2luZ2xlIHJvdyAgKi9cclxuICBAT3V0cHV0KCkgb25Sb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgLyoqIGV2ZW50IHRvIGVtaXQgd2hlbiBzZWxlY3Rpbmcgc2luZ2xlIHJvdyB0byBjYXRjaCBpbmRleCovXHJcbiAgIEBPdXRwdXQoKSBvblJvd0luZGV4U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgLyoqIGV2ZW50IHRvIGVtaXQgd2hlbiBwZXJmb3JtIGFjdGlvbiBvbiByb3cgKGRlbHRlLCBlZGl0LCAuLi4gKSAqL1xyXG4gIEBPdXRwdXQoKSBhY3Rpb25PblJvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvKiogZXZlbnQgdG8gZW1pdCB0byB0aGUgaGlnaGVyIGxldmVsICB3aGVuIGdldHRpbmcgZGF0YSBmcm9tIGFwaSBpcyBmaW5pc2hlZCAqL1xyXG4gIEBPdXRwdXQoKSBvbkdldHRpbmdEYXRhID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8qKiBldmVudCB0IGVtaXQgd2hlbiBzZWxlY3RpbmcgbXVsdGlwbGUgcm93ICovXHJcbiAgQE91dHB1dCgpIG9uTXVsdGlSb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIC8qKiBldmVudCB0IGVtaXQgd2hlbiBzdGFydCBnZXR0aW5nIGRhdGEgYW5kIHdoZW4gZmluaXNoICovXHJcbiAgICBAT3V0cHV0KCkgb25Mb2FkaW5nID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8qKiBBcnJheSBvZiBjb2x1bW5zICovXHJcbiAgQElucHV0KCkgY29sdW1ucztcclxuICAvKiogQXJyYXkgb2YgY29sdW1ucyBvbiBzbWFsbGVyIHNjcmVlbnMgKi9cclxuICBASW5wdXQoKSByZXNwb25zaXZlQ29sdW1ucz87XHJcbiAgLyoqIERlZmluZXMgdGhlIHBhZ2UgaW4gd2hpY2ggdGFibGUgaXMgYmVpbmcgdXNlZCAqL1xyXG4gIEBJbnB1dCgpIGVudGl0eVR5cGU6IHN0cmluZztcclxuICAvKiogVHJhbnNsYXRpb25zIHByZWZpeCAqL1xyXG4gIEBJbnB1dCgpIHByZWZpeCA9ICcnO1xyXG4gIC8qKiBIZWFkZXJzIHRvIGJlIHNlbnQgd2l0aCBBUEkgUmVxdWVzdCAqL1xyXG4gIEBJbnB1dCgpIGhlYWRlcnM7XHJcbiAgLyoqIEZpZWxkcyBrZXltYXAgdG8gYmUgbWFwcGVkIGluIHRoZSBhZGFwdGVyICovXHJcbiAgQElucHV0KCkgZmllbGRzO1xyXG4gIC8qKiBQYWdlIFByb3ZpZGVyIG5hbWUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmV0cmlldmUgZGF0YSAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VQcm92aWRlcjtcclxuICAvKiogQ29udHJvbHMgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlIGluIHRhYmxlICovXHJcbiAgQElucHV0KCkgcGFnZVNpemU7XHJcbiAgLyoqIFNvcnRpbmcgY29sdW1uICovXHJcbiAgQElucHV0KCkgc29ydGluZ0J5Pz0ge307XHJcbiAgQElucHV0KCkgcXVlcnlQYXJhbT89IHt9O1xyXG4gIEBJbnB1dCgpIHF1aWNrRmlsdGVyPztcclxuICAgIC8qKiBDb250cm9scyBpZiBpdCByZXBvcnQgcGFnZSAqL1xyXG4gICAgQElucHV0KCkgcmVwb3J0O1xyXG4gIC8qKiB0byBtYWtlIGN1cnNvciB3aGVuIGhvdmVyIG9uIHJvdyBvciBub3QgKi9cclxuICBASW5wdXQoKSByb3dDdXJzb3I/O1xyXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aD89ICdhdXRvJztcclxuICAgLyoqICdsaXN0JyBmb3Igbm9yYW1sIHRhYmxlICdjYXJkJyBmb3IgY2FyZHMgbW9kZSBsaWtlIGluIG1lbW9zICovXHJcbiAgIEBJbnB1dCgpIHRhYmxlTW9kZSA9ICdsaXN0JztcclxuICAgLyoqIGFjdGlvbiB0byBiZSB1c2VkIGluIGNhc2Ugb2YgY2FyZCBtb2RlICovXHJcbiAgIEBJbnB1dCgpIHRhYmxlQWN0aW9ucztcclxuICAgQElucHV0KCkgZGVmdWx0U29ydCA9IFt7IHByb3A6ICdwcm9wZXJ0aWVzLmNyZWF0ZWRBdCcgLCBkaXI6ICdkZXNjJyB9XTtcclxuICAgQElucHV0KCkgcmFuZ2U7XHJcbiAgIEBJbnB1dCgpIGlzU2VhcmNoUGFnZSA9IGZhbHNlO1xyXG4gIC8qKiBhbGxvdyBtdWx0aXNlbGVjdCByb3dzIHdpdGggY2hlY2tib3ggKi9cclxuICBASW5wdXQoKSBtdWx0aVNlbGVjdFJvd3MgPSBmYWxzZTtcclxuICAvKiogdG8gc2hvdyAxc3Qgcm93IHdpdGggY3VzdG9tIHRlbXBsYXRlIGluIHRoZSB0YWJsZSovXHJcbiAgQElucHV0KCkgY3VzdG9tRmlyc3RSb3cgPSBmYWxzZTtcclxuICBASW5wdXQoKSBoaWdobGlnaHRTZWxlY3RlZENhcmQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93QWN0aW9uc0FzTWVudSA9IGZhbHNlOyAvLyBmbGFnZSB0byBzaG93IGFjdGlvbiBpbiBtZW51IG9yIHNpZGUgYnkgc2lkZVxyXG4gIEBJbnB1dCgpIFxyXG4gIGZpbHRlclBhcmFtcyA9IHt9O1xyXG4gIEBJbnB1dCgpIGZvcm1hdCA9IFwiTU1NTSBkLCB5XCI7XHJcbiAgcGFnZU51bSA9IDE7XHJcbiAgcm93cyA9IFtdO1xyXG4gIHRvdGFsUmVjb3JkcyA9IDA7XHJcbiAgbXlEYXRhU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgbG9hZGluZztcclxuICBzb3J0aW5nID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFkYXB0ZXI6IEFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjYWxsQXBpOiBDYWxsQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgZHluYW1pY1RhYmxlU2VydmljZTogRHluYW1pY1RhYmxlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5teURhdGFTdWJzY3JpcHRpb24gPSB0aGlzLmR5bmFtaWNUYWJsZVNlcnZpY2UucmVmcmVzaERhdGEuc3Vic2NyaWJlKGZpbHRlckRhdGEgPT4ge1xyXG4gICAgICBpZiAoZmlsdGVyRGF0YSkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zID0geyAuLi5maWx0ZXJEYXRhIH07XHJcbiAgICAgICAgLy8gcmVzZXQgcGFnZSBudW1iZXIgd2hlbiBzdGFydCBuZXcgZmlsdGVyaW5nXHJcbiAgICAgICAgdGhpcy5wYWdlTnVtID0gMTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubXlEYXRhU3Vic2NyaXB0aW9uID8gdGhpcy5teURhdGFTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSA6ICcnO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBpc0ZpcnN0Q2hhbmdlID0gT2JqZWN0LnZhbHVlcyhzaW1wbGVDaGFuZ2UpLnNvbWUoKGMpID0+XHJcbiAgICAgIGMuaXNGaXJzdENoYW5nZSgpXHJcbiAgICApO1xyXG4gICAgaWYgKGlzRmlyc3RDaGFuZ2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAoc2ltcGxlQ2hhbmdlLnF1ZXJ5UGFyYW0gJiZcclxuICAgICAgICBzaW1wbGVDaGFuZ2UucXVlcnlQYXJhbS5wcmV2aW91c1ZhbHVlICE9PVxyXG4gICAgICAgIHNpbXBsZUNoYW5nZS5xdWVyeVBhcmFtLmN1cnJlbnRWYWx1ZSkgfHxcclxuICAgICAgKHNpbXBsZUNoYW5nZS5xdWlja0ZpbHRlciAmJlxyXG4gICAgICAgIHNpbXBsZUNoYW5nZS5xdWlja0ZpbHRlci5wcmV2aW91c1ZhbHVlICE9PVxyXG4gICAgICAgIHNpbXBsZUNoYW5nZS5xdWlja0ZpbHRlci5jdXJyZW50VmFsdWUpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5wYWdlTnVtID0gMTsgLy8gcmVzZXQgcGFnZSBudW1iZXIgYmVmb3IgcmVjYWxsaW5nIGFwaSB3aXRoIGZpbHRlcnNcclxuICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREYXRhKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsgLy8gaW50ZXJuYWwgbG9hZGluZ1xyXG4gICAgdGhpcy5vbkxvYWRpbmcuZW1pdCh0cnVlKTsgLy8gZXh0ZXJuYWwgbG9hZGluZyBcclxuICAgIGxldCBwYXJhbXMgPSB7XHJcbiAgICAgIGR1YmxpbmNvcmVfY3JlYXRlZF9hZ2c6IHRoaXMucmFuZ2UsXHJcbiAgICAgIC4uLnRoaXMuZmlsdGVyUGFyYW1zLCAvLyB1c2VkIHRvIGdldCBmaWx0ZXIgZGF0YSBhbmQgc2V0IGl0IGluIG91ciBwYXJhbXNcclxuICAgICAgLi4udGhpcy5xdWVyeVBhcmFtLCAvLyB1c2VkIHRvIGdldCBwYXJhbXMgZnJvbSBvdXIgY29uZmlnXHJcbiAgICAgIC4uLnRoaXMuc29ydGluZ0J5LFxyXG4gICAgICAuLi50aGlzLnF1aWNrRmlsdGVyLFxyXG4gICAgICBjdXJyZW50UGFnZUluZGV4OiB0aGlzLnBhZ2VOdW0gLSAxLFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcclxuICAgICAgb2Zmc2V0OiAwXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGRvbid0IHJlZnJlc2ggYWxsIHRhYmxlIGluIGNhc2Ugb2Ygc29ydGluZyBvbmx5XHJcbiAgICBpZiAoIXRoaXMuc29ydGluZykgeyAvLyB1c2VkIHRvIG5vdCByZWZyZXNoaW5nIGFsbCB0YWJsZSBpbiBjYXNlIG9mIHNvcnRpbmcgc2luY2UgdGFibGUgbG9zZSBzb3J0aW5nIHN0YXRlIHdoZW4gcmVmcmVzaCBhbGwgdGFibGVcclxuICAgICAgdGhpcy5yb3dzID0gW107IC8vIHVzZWQgdG8gcmVmcmVzaCB0YWJsZSB0byBmZWVsIGNoYW5nZXMgaW4gYWN0aW9ucyB3aGVuIHBlcmZvcm0gYWN0aW9uIGFuZCBuZWVkIHRvIHJlZnJlc2ggYWN0aW9uc1xyXG4gICAgfVxyXG4gICAgdGhpcy5zb3J0aW5nID0gZmFsc2U7IC8vIHJlc2V0IHNvcnRpbmcgc3RhdHVzIHRvIGZhbHNlIGFuZCBmb3IgbmV4dCBzb3J0aW5nIGZ1bmMgc29ydGluZyBzZXQgaXQgdG8gdHJ1ZSBhZ2FpblxyXG4gICAgdGhpcy5jYWxsQXBpXHJcbiAgICAgIC5xdWVyeShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwYWdlUHJvdmlkZXI6IHRoaXMucGFnZVByb3ZpZGVyLFxyXG4gICAgICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZGF0YS5lbnRyaWVzLm1hcCgoaXRlbSkgPT4gdGhpcy5hZGFwdGVyLmFkYXB0SW4oaXRlbSwgdGhpcy5maWVsZHMpKTtcclxuICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vbkxvYWRpbmcuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgcmVzLmVudHJpZXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQucHJvcGVydGllcyAmJiBlbGVtZW50LnByb3BlcnRpZXM/LmNyZWF0b3IgJiYgZWxlbWVudC5wcm9wZXJ0aWVzLmNyZWF0b3I/LnByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzWydjcmVhdG9yRnVsbE9iamVjdCddID0gey4uLmVsZW1lbnQucHJvcGVydGllcy5jcmVhdG9yfTtcclxuICAgICAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzLmNyZWF0b3IgPVxyXG4gICAgICAgICAgICAgIGVsZW1lbnQucHJvcGVydGllcy5jcmVhdG9yPy5wcm9wZXJ0aWVzPy5maXJzdE5hbWUgK1xyXG4gICAgICAgICAgICAgICcgJyArXHJcbiAgICAgICAgICAgICAgZWxlbWVudC5wcm9wZXJ0aWVzLmNyZWF0b3I/LnByb3BlcnRpZXM/Lmxhc3ROYW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQucHJvcGVydGllcyAmJiBlbGVtZW50LnByb3BlcnRpZXM/LmFzc2lnbmVlKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucHJvcGVydGllcy5hc3NpZ25lZSA9IGVsZW1lbnQucHJvcGVydGllcz8uYXNzaWduZWUuZnVsbE5hbWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHJlcy5yZXN1bHRzQ291bnQ7XHJcbiAgICAgICAgdGhpcy5yb3dzID0gcmVzLmVudHJpZXM7XHJcbiAgICAgICAgLy8gZW1pdCBkYXRhIHRvIG91dHNpZGUgaW4gY2FzZSBvZiBzZWFyY2ggcGFnZSBmb3IgdGhlIGZpcnN0IHRpbWUgb25seSB0byBwcmV2ZW50IHJlZnJlc2hpbmcgYWdncmVnYXRpb24gd2l0aCBldmVyeSBwYWdlIGNoYW5nZVxyXG4gICAgICAgIC8vIGFuZCBmb3IgYW55IG90aGVyIHBhZ2UgdHlwZSBlbWl0IGRhdGEgZGlyZWN0bHkgaW4gYWxsIHBhZ2UgbnVtYmVyc1xyXG4gICAgICAgIGlmKCh0aGlzLmlzU2VhcmNoUGFnZSAmJiB0aGlzLnBhZ2VOdW0gPT09IDEpIHx8ICF0aGlzLmlzU2VhcmNoUGFnZSApXHJcbiAgICAgICAgdGhpcy5vbkdldHRpbmdEYXRhLmVtaXQocmVzKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIGNsaWNraW5nIG9uIHNpbmdsZSByb3dcclxuICByb3dEZXRhaWxzKGV2ZW50KSB7XHJcbiAgICAgdGhpcy5vblJvd1NlbGVjdGVkLmVtaXQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgaW5kZXhEZXRhaWxzKGV2ZW50KSB7XHJcbiAgICB0aGlzLm9uUm93SW5kZXhTZWxlY3RlZC5lbWl0KGV2ZW50KTtcclxuIH1cclxuXHJcbiAgLy9mdW5jdGlvbiB0byBoYW5kbGUgYWxsIG9wZXJhdGlvbnMgb24gc2luZ2xlIHJvdyAoZGVsZXRlICwgZWRpdCAsIC4uLilcclxuICBwZXJmb3JtQWN0aW9uKGFjdGlvbikge1xyXG4gICAgdGhpcy5hY3Rpb25PblJvdy5lbWl0KGFjdGlvbik7XHJcbiAgfVxyXG5cclxuICAvLyBoYW5kbGUgc29ydGluZyBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0YWJsZVxyXG4gIG9uU29ydChzb3J0T2JqZWN0KSB7XHJcbiAgICB0aGlzLnNvcnRpbmdCeSA9IHNvcnRPYmplY3Q7XHJcbiAgICB0aGlzLnNvcnRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBvbk11bHRpUm93U2VsZWN0VmFsdWUoZXZlbnQpe1xyXG4gICAgdGhpcy5vbk11bHRpUm93U2VsZWN0ZWQuZW1pdChldmVudClcclxuICB9XHJcbiAgcHVibGljIFBhZ2luYXRpb25DaGFuZ2UoZXZlbnQpIHtcclxuICAgIHRoaXMucGFnZU51bSA9IGV2ZW50O1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ3cmFwcGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXBvc2l0aW9uXCI+XHJcbiAgICA8Y3RzLXRhYmxlXHJcbiAgICAgICpuZ0lmPVwicm93cy5sZW5ndGhcIlxyXG4gICAgICBbcm93c109XCJyb3dzXCJcclxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgIFtyZXNwb25zaXZlQ29sdW1uc109XCJyZXNwb25zaXZlQ29sdW1uc1wiXHJcbiAgICAgIFtyb3dDdXJzb3JdPVwicm93Q3Vyc29yXCJcclxuICAgICAgW2Z1bGxXaWR0aF09XCJmdWxsV2lkdGhcIlxyXG4gICAgICBbZW50aXR5VHlwZV09XCJlbnRpdHlUeXBlXCJcclxuICAgICAgW3ByZWZpeF09XCJwcmVmaXhcIlxyXG4gICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgIFt0YWJsZU1vZGVdPVwidGFibGVNb2RlXCJcclxuICAgICAgW211bHRpU2VsZWN0Um93c109XCJtdWx0aVNlbGVjdFJvd3NcIlxyXG4gICAgICBbdGFibGVBY3Rpb25zXT1cInRhYmxlQWN0aW9uc1wiXHJcbiAgICAgIFtzaG93QWN0aW9uc0FzTWVudV09XCJzaG93QWN0aW9uc0FzTWVudVwiXHJcbiAgICAgIFtkZWZ1bHRTb3J0XT1cImRlZnVsdFNvcnRcIlxyXG4gICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXHJcbiAgICAgIFtoaWdobGlnaHRTZWxlY3RlZENhcmRdPVwiaGlnaGxpZ2h0U2VsZWN0ZWRDYXJkXCJcclxuICAgICAgW2N1c3RvbUZpcnN0Um93XT1cImN1c3RvbUZpcnN0Um93XCJcclxuICAgICAgKG9uUm93U2VsZWN0ZWQpPVwicm93RGV0YWlscygkZXZlbnQpXCJcclxuICAgICAgKG9uUm93SW5kZXhTZWxlY3RlZCk9XCJpbmRleERldGFpbHMoJGV2ZW50KVwiXHJcbiAgICAgIChvbk11bHRpUm93U2VsZWN0ZWQpPVwib25NdWx0aVJvd1NlbGVjdFZhbHVlKCRldmVudClcIlxyXG4gICAgICAoYWN0aW9uT25Sb3cpPVwicGVyZm9ybUFjdGlvbigkZXZlbnQpXCJcclxuICAgICAgKG9uU29ydGluZyk9XCJvblNvcnQoJGV2ZW50KVwiXHJcbiAgICA+PC9jdHMtdGFibGU+XHJcbiAgPC9kaXY+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgIDxjdHMtc3Bpbm5lcj48L2N0cy1zcGlubmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwicGFnaW5hdGlvbi1pbmVyLXdyYXBlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXktM1wiXHJcbiAgICAqbmdJZj1cInJvd3MubGVuZ3RoXCJcclxuICA+XHJcbiAgICA8Y3RzLXBhZ2luYXRpb25cclxuICAgICAgW3BhZ2VdPVwicGFnZU51bVwiXHJcbiAgICAgIChjaGFuZ2UpPVwiUGFnaW5hdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgW3NpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICBbY291bnRdPVwidG90YWxSZWNvcmRzXCJcclxuICAgID48L2N0cy1wYWdpbmF0aW9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZW1wdHktc3RhdGVcIiAqbmdJZj1cIighbG9hZGluZyAmJiByb3dzLmxlbmd0aCA9PT0gMClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0XCI+e3sgKCBwcmVmaXggPyAgKCBwcmVmaXggKyAnbm9EYXRhJyApIDogKCdub0RhdGEnKSkgfCB0cmFuc2xhdGV9fTwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiICpuZ0lmPVwiKGxvYWRpbmcgJiYgcm93cy5sZW5ndGggPT09IDApXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dFwiPnt7ICggcHJlZml4ID8gICggcHJlZml4ICsgJ2dldHRpbmdEYXRhJyApIDogKCdnZXR0aW5nRGF0YScpKSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFJakQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBT0gsTUFBTSxPQUFPLHFCQUFxQjtJQTRFakMsWUFDUyxPQUF1QixFQUN2QixPQUF1QixFQUN2QixtQkFBd0MsRUFDeEMsR0FBc0I7UUFIdEIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQS9FL0IsK0NBQStDO1FBQ3JDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3Qyw0REFBNEQ7UUFDbEQsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxtRUFBbUU7UUFDekQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzND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QWYsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVOLFlBQVk7c0JBRFgsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQU9HLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvYWRhcHRlcnMvYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FsbEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2NhbGxBcGkvY2FsbC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IER5bmFtaWNUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9keW5hbWljLXRhYmxlLnNlcnZpY2UnO1xyXG4vKipcclxuICogdGhpcyBjb21wb25lbnQgaXMgYW4gYWRkaXRpb25hbCBsYXllciB0aGF0IHVzZXMgW1RhYmxlIENvbXBvbmVudF17QGxpbmsgVGFibGVDb21wb25lbnR9IGludGVybmFsbHksXHJcbiAqIHlvdSBjYW4gdXNlIHRoaXMgY29tcG9uZW50IHRvIGNvbmZpZ3VyZSBhIHBhZ2UgcHJvdmlkZXIgbGlzdGluZyBvdXQgb2YgdGhlIGJveCBlYXNpbHksXHJcbiAqIGFuZCBpdCB3aWxsIGhhbmRsZSBhbGwgb2YgdGhlIGJhc2ljIGZlYXR1cmVzIHN1Y2ggYXMgZ2V0dGluZyBkYXRhIGZyb20gQVBJLCBMaXN0aW5nLCBQYWdpbmF0aW9uLCBzb3J0aW5nIGFuZCBmaWx0ZXJpbmdcclxuICogIVtTY3JlZW5zaG90LTFdKC4uL3NjcmVlbnNob3RzL2R5bmFtaWNUYWJsZS5wbmcpXHJcbiAqIEB0aXRsZVxyXG4gKiBEeW5hbWljIFRhYmxlXHJcbiAqIEBleGFtcGxlXHJcbiAqXHJcbiAqIDxjdHMtZHluYW1pYy10YWJsZVxyXG4gKiAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICogICAgW3Jlc3BvbnNpdmVDb2x1bW5zXT1cInJlc3BvbnNpdmVDb2x1bW5zXCJcclxuICogICAgW2Z1bGxXaWR0aF09XCJmdWxsV2lkdGhcIlxyXG4gKiAgICBbcGFnZVNpemVdPVwiUGFnZVNpemVcIlxyXG4gKiAgICBbcGFnZVByb3ZpZGVyXT1cInBhZ2VQcm92aWRlclwiXHJcbiAqICAgIFtxdWlja0ZpbHRlcl09XCJmaWx0ZXJcIlxyXG4gKiAgICBbc29ydGluZ0J5XT1cInNvcnRpbmdCeVwiXHJcbiAqICAgIFtlbnRpdHlUeXBlXT1cIidhbGwnXCJcclxuICogICAgW2ZpZWxkc109XCJmaWVsZHNcIlxyXG4gKiAgICBbcHJlZml4XT1cInByZWZpeFwiXHJcbiAqICAgIFtyb3dDdXJzb3JdPVwidHJ1ZVwiXHJcbiAqICAgIFtxdWVyeVBhcmFtXT1cInF1ZXJ5UGFyYW1cIlxyXG4gKiAgICBbaGVhZGVyc109XCJoZWFkZXJzXCJcclxuICogICAgKG9uUm93U2VsZWN0ZWQpPVwib3BlblZpZXdlcigkZXZlbnQpXCJcclxuICogICAgKGFjdGlvbk9uUm93KT1cInBlcmZvcm1BY3Rpb24oJGV2ZW50KVwiPlxyXG4gKiA8L2N0cy1keW5hbWljLXRhYmxlPlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdjdHMtZHluYW1pYy10YWJsZScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2R5bmFtaWMtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblx0LyoqIGV2ZW50IHRvIGVtaXQgd2hlbiBzZWxlY3Rpbmcgc2luZ2xlIHJvdyAgKi9cclxuXHRAT3V0cHV0KCkgb25Sb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHQvKiogZXZlbnQgdG8gZW1pdCB3aGVuIHNlbGVjdGluZyBzaW5nbGUgcm93IHRvIGNhdGNoIGluZGV4Ki9cclxuXHRAT3V0cHV0KCkgb25Sb3dJbmRleFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdC8qKiBldmVudCB0byBlbWl0IHdoZW4gcGVyZm9ybSBhY3Rpb24gb24gcm93IChkZWx0ZSwgZWRpdCwgLi4uICkgKi9cclxuXHRAT3V0cHV0KCkgYWN0aW9uT25Sb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0LyoqIGV2ZW50IHRvIGVtaXQgdG8gdGhlIGhpZ2hlciBsZXZlbCAgd2hlbiBnZXR0aW5nIGRhdGEgZnJvbSBhcGkgaXMgZmluaXNoZWQgKi9cclxuXHRAT3V0cHV0KCkgb25HZXR0aW5nRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHQvKiogZXZlbnQgdCBlbWl0IHdoZW4gc2VsZWN0aW5nIG11bHRpcGxlIHJvdyAqL1xyXG5cdEBPdXRwdXQoKSBvbk11bHRpUm93U2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0LyoqIGV2ZW50IHQgZW1pdCB3aGVuIHN0YXJ0IGdldHRpbmcgZGF0YSBhbmQgd2hlbiBmaW5pc2ggKi9cclxuXHRAT3V0cHV0KCkgb25Mb2FkaW5nID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHRAT3V0cHV0KCkgb25Mb2FkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdC8qKiBBcnJheSBvZiBjb2x1bW5zICovXHJcblx0QElucHV0KCkgY29sdW1ucztcclxuXHQvKiogQXJyYXkgb2YgY29sdW1ucyBvbiBzbWFsbGVyIHNjcmVlbnMgKi9cclxuXHRASW5wdXQoKSByZXNwb25zaXZlQ29sdW1ucz87XHJcblx0LyoqIERlZmluZXMgdGhlIHBhZ2UgaW4gd2hpY2ggdGFibGUgaXMgYmVpbmcgdXNlZCAqL1xyXG5cdEBJbnB1dCgpIGVudGl0eVR5cGU6IHN0cmluZztcclxuXHQvKiogVHJhbnNsYXRpb25zIHByZWZpeCAqL1xyXG5cdEBJbnB1dCgpIHByZWZpeCA9ICcnO1xyXG5cdC8qKiBIZWFkZXJzIHRvIGJlIHNlbnQgd2l0aCBBUEkgUmVxdWVzdCAqL1xyXG5cdEBJbnB1dCgpIGhlYWRlcnM7XHJcblx0LyoqIEZpZWxkcyBrZXltYXAgdG8gYmUgbWFwcGVkIGluIHRoZSBhZGFwdGVyICovXHJcblx0QElucHV0KCkgZmllbGRzO1xyXG5cdC8qKiBQYWdlIFByb3ZpZGVyIG5hbWUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmV0cmlldmUgZGF0YSAqL1xyXG5cdEBJbnB1dCgpIHBhZ2VQcm92aWRlcjtcclxuXHQvKiogQ29udHJvbHMgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlIGluIHRhYmxlICovXHJcblx0QElucHV0KCkgcGFnZVNpemU7XHJcblx0LyoqIFNvcnRpbmcgY29sdW1uICovXHJcblx0QElucHV0KCkgc29ydGluZ0J5OiB7XHJcblx0XHRzb3J0Qnk/OiBzdHJpbmc7XHJcblx0XHRzb3J0T3JkZXI/OiBzdHJpbmc7XHJcblx0fSA9IHt9O1xyXG5cdEBJbnB1dCgpIHF1ZXJ5UGFyYW0/ID0ge307XHJcblxyXG5cdEBJbnB1dCgpIGN1c3RvbUZpbHRlcnM6IHsgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgYW55PjsgcGF5bG9hZD86IFJlY29yZDxzdHJpbmcsIGFueT4gfSA9IHt9O1xyXG5cclxuXHRASW5wdXQoKSBxdWlja0ZpbHRlcj87XHJcblx0LyoqIENvbnRyb2xzIGlmIGl0IHJlcG9ydCBwYWdlICovXHJcblx0QElucHV0KCkgcmVwb3J0O1xyXG5cdC8qKiB0byBtYWtlIGN1cnNvciB3aGVuIGhvdmVyIG9uIHJvdyBvciBub3QgKi9cclxuXHRASW5wdXQoKSByb3dDdXJzb3I/O1xyXG5cdEBJbnB1dCgpIGZ1bGxXaWR0aD8gPSAnYXV0byc7XHJcblx0LyoqICdsaXN0JyBmb3Igbm9yYW1sIHRhYmxlICdjYXJkJyBmb3IgY2FyZHMgbW9kZSBsaWtlIGluIG1lbW9zICovXHJcblx0QElucHV0KCkgdGFibGVNb2RlID0gJ2xpc3QnO1xyXG5cclxuXHRASW5wdXQoKSBjb21wb25lbnROYW1lOiBzdHJpbmc7XHJcblx0LyoqIGFjdGlvbiB0byBiZSB1c2VkIGluIGNhc2Ugb2YgY2FyZCBtb2RlICovXHJcblx0QElucHV0KCkgdGFibGVBY3Rpb25zO1xyXG5cdEBJbnB1dCgpIGRlZnVsdFNvcnQ6IGFueSA9IFt7IHByb3A6ICdwcm9wZXJ0aWVzLmNyZWF0ZWRBdCcsIGRpcjogJ2Rlc2MnIH1dO1xyXG5cdEBJbnB1dCgpIHJhbmdlO1xyXG5cdEBJbnB1dCgpIGlzU2VhcmNoUGFnZSA9IGZhbHNlO1xyXG5cdC8qKiBhbGxvdyBtdWx0aXNlbGVjdCByb3dzIHdpdGggY2hlY2tib3ggKi9cclxuXHRASW5wdXQoKSBtdWx0aVNlbGVjdFJvd3MgPSBmYWxzZTtcclxuXHQvKiogdG8gc2hvdyAxc3Qgcm93IHdpdGggY3VzdG9tIHRlbXBsYXRlIGluIHRoZSB0YWJsZSovXHJcblx0QElucHV0KCkgY3VzdG9tRmlyc3RSb3cgPSBmYWxzZTtcclxuXHRASW5wdXQoKSBoaWdobGlnaHRTZWxlY3RlZENhcmQgPSBmYWxzZTtcclxuXHRASW5wdXQoKSBzaG93QWN0aW9uc0FzTWVudSA9IGZhbHNlOyAvLyBmbGFnZSB0byBzaG93IGFjdGlvbiBpbiBtZW51IG9yIHNpZGUgYnkgc2lkZVxyXG5cdEBJbnB1dCgpXHJcblx0ZmlsdGVyUGFyYW1zID0ge307XHJcblxyXG5cdEBJbnB1dCgpIHNraXBBZ2dyZWdhdGlvbjogJ25ldmVyJyB8ICdvblBhZ2VDaGFuZ2UnID0gJ29uUGFnZUNoYW5nZSc7XHJcblx0QElucHV0KCkgY3VzdG9tVXJsOiB7IHVybDogc3RyaW5nOyBtZXRob2Q6ICdQT1NUJyB8ICdHRVQnIH07XHJcblx0QElucHV0KCkgZm9ybWF0ID0gJ01NTU0gZCwgeSc7XHJcblx0cGFnZU51bSA9IDE7XHJcblx0cm93cyA9IFtdO1xyXG5cdHRvdGFsUmVjb3JkcyA9IDA7XHJcblx0bXlEYXRhU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblx0bG9hZGluZztcclxuXHRzb3J0aW5nID0gZmFsc2U7XHJcblx0QElucHV0KCkgcGFnZVNpemVzOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHNpemU6IG51bWJlciB9PiA9IFtdO1xyXG5cclxuXHRpbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBhZGFwdGVyOiBBZGFwdGVyU2VydmljZSxcclxuXHRcdHByaXZhdGUgY2FsbEFwaTogQ2FsbEFwaVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGR5bmFtaWNUYWJsZVNlcnZpY2U6IER5bmFtaWNUYWJsZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuXHQpIHt9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5teURhdGFTdWJzY3JpcHRpb24gPSB0aGlzLmR5bmFtaWNUYWJsZVNlcnZpY2UucmVmcmVzaERhdGEuc3Vic2NyaWJlKChmaWx0ZXJEYXRhKSA9PiB7XHJcblx0XHRcdGlmIChmaWx0ZXJEYXRhKSB7XHJcblx0XHRcdFx0dGhpcy5maWx0ZXJQYXJhbXMgPSB7IC4uLmZpbHRlckRhdGEgfTtcclxuXHRcdFx0XHQvLyByZXNldCBwYWdlIG51bWJlciB3aGVuIHN0YXJ0IG5ldyBmaWx0ZXJpbmdcclxuXHRcdFx0XHR0aGlzLnBhZ2VOdW0gPSAxO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmdldERhdGEoKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0dGhpcy5teURhdGFTdWJzY3JpcHRpb24gPyB0aGlzLm15RGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpIDogJyc7XHJcblx0fVxyXG5cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcblx0XHRjb25zdCBpc0ZpcnN0Q2hhbmdlID0gT2JqZWN0LnZhbHVlcyhjaGFuZ2VzKS5zb21lKChjKSA9PiBjLmlzRmlyc3RDaGFuZ2UoKSk7XHJcblx0XHRpZiAoaXNGaXJzdENoYW5nZSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgaGFzQ2hhbmdlZCA9IChpdGVtczogc3RyaW5nW10pID0+XHJcblx0XHRcdGl0ZW1zLnNvbWUoKGtleSkgPT4gY2hhbmdlc1trZXldICYmIGNoYW5nZXNba2V5XS5wcmV2aW91c1ZhbHVlICE9PSBjaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlKTtcclxuXHJcblx0XHRpZiAoaGFzQ2hhbmdlZChbJ3F1ZXJ5UGFyYW0nLCAncXVpY2tGaWx0ZXInLCAnY3VzdG9tRmlsdGVycyddKSkge1xyXG5cdFx0XHR0aGlzLnBhZ2VOdW0gPSAxOyAvLyBSZXNldCBwYWdlIG51bWJlciBiZWZvcmUgcmVjYWxsaW5nIEFQSSB3aXRoIGZpbHRlcnNcclxuXHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGhhc0NoYW5nZWQoWydzb3J0aW5nQnknXSkpIHtcclxuXHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXREYXRhKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSwgaGVhZGVyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9KSB7XHJcblx0XHR0aGlzLmxvYWRpbmcgPSB0cnVlOyAvLyBpbnRlcm5hbCBsb2FkaW5nXHJcblx0XHR0aGlzLm9uTG9hZGluZy5lbWl0KHRydWUpOyAvLyBleHRlcm5hbCBsb2FkaW5nXHJcblx0XHRsZXQgcGFyYW1zID0ge1xyXG5cdFx0XHQuLi4odGhpcy5yYW5nZSA/IHsgZHVibGluY29yZV9jcmVhdGVkX2FnZzogdGhpcy5yYW5nZSB9IDoge30pLFxyXG5cdFx0XHQuLi50aGlzLmZpbHRlclBhcmFtcywgLy8gdXNlZCB0byBnZXQgZmlsdGVyIGRhdGEgYW5kIHNldCBpdCBpbiBvdXIgcGFyYW1zXHJcblx0XHRcdC4uLnRoaXMucXVlcnlQYXJhbSwgLy8gdXNlZCB0byBnZXQgcGFyYW1zIGZyb20gb3VyIGNvbmZpZ1xyXG5cdFx0XHQuLi50aGlzLnF1aWNrRmlsdGVyLFxyXG5cdFx0XHQuLi4oT2JqZWN0LmtleXModGhpcy5zb3J0aW5nQnkgfHwge30pLmxlbmd0aFxyXG5cdFx0XHRcdD8ge1xyXG5cdFx0XHRcdFx0XHRzb3J0Qnk6IHRoaXMuc29ydGluZ0J5Py5zb3J0QnksXHJcblx0XHRcdFx0XHRcdHNvcnRPcmRlcjogdGhpcy5zb3J0aW5nQnk/LnNvcnRPcmRlclxyXG5cdFx0XHRcdCAgfVxyXG5cdFx0XHRcdDoge30pLFxyXG5cdFx0XHRjdXJyZW50UGFnZUluZGV4OiB0aGlzLnBhZ2VOdW0gLSAxLFxyXG5cdFx0XHQuLi4odGhpcy5wYWdlU2l6ZSA/IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUgfSA6IHt9KSxcclxuXHRcdFx0b2Zmc2V0OiAwLFxyXG5cdFx0XHQuLi5wYXlsb2FkXHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIGRvbid0IHJlZnJlc2ggYWxsIHRhYmxlIGluIGNhc2Ugb2Ygc29ydGluZyBvbmx5XHJcblx0XHRpZiAoIXRoaXMuc29ydGluZykge1xyXG5cdFx0XHQvLyB1c2VkIHRvIG5vdCByZWZyZXNoaW5nIGFsbCB0YWJsZSBpbiBjYXNlIG9mIHNvcnRpbmcgc2luY2UgdGFibGUgbG9zZSBzb3J0aW5nIHN0YXRlIHdoZW4gcmVmcmVzaCBhbGwgdGFibGVcclxuXHRcdFx0dGhpcy5yb3dzID0gW107IC8vIHVzZWQgdG8gcmVmcmVzaCB0YWJsZSB0byBmZWVsIGNoYW5nZXMgaW4gYWN0aW9ucyB3aGVuIHBlcmZvcm0gYWN0aW9uIGFuZCBuZWVkIHRvIHJlZnJlc2ggYWN0aW9uc1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zb3J0aW5nID0gZmFsc2U7IC8vIHJlc2V0IHNvcnRpbmcgc3RhdHVzIHRvIGZhbHNlIGFuZCBmb3IgbmV4dCBzb3J0aW5nIGZ1bmMgc29ydGluZyBzZXQgaXQgdG8gdHJ1ZSBhZ2FpblxyXG5cclxuXHRcdGNvbnN0IF9xdWVyeSA9IHtcclxuXHRcdFx0cGFnZVByb3ZpZGVyOiB0aGlzLnBhZ2VQcm92aWRlcixcclxuXHRcdFx0Li4ucGFyYW1zXHJcblx0XHR9O1xyXG5cdFx0Y29uc3QgX29wdGlvbnMgPSB7XHJcblx0XHRcdGhlYWRlcnM6IHtcclxuXHRcdFx0XHQuLi50aGlzLmhlYWRlcnMsXHJcblx0XHRcdFx0Li4uaGVhZGVyc1xyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdGNvbnN0IHF1ZXJ5JCA9IHRoaXMuY3VzdG9tVXJsXHJcblx0XHRcdD8gdGhpcy5jYWxsQXBpLmN1c3RvbVF1ZXJ5KFxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21VcmwsXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdC4uLnBhcmFtcyxcclxuXHRcdFx0XHRcdFx0Li4uKHRoaXMuY3VzdG9tRmlsdGVycz8ucGFyYW1zIHx8IHt9KVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdF9vcHRpb25zLmhlYWRlcnMsXHJcblx0XHRcdFx0XHR0aGlzLmN1c3RvbUZpbHRlcnM/LnBheWxvYWQgfHwge31cclxuXHRcdFx0ICApXHJcblx0XHRcdDogdGhpcy5jYWxsQXBpLnF1ZXJ5KF9xdWVyeSwgX29wdGlvbnMpO1xyXG5cclxuXHRcdHF1ZXJ5JFxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRtYXAoKGRhdGE6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0ZGF0YS5lbnRyaWVzLm1hcCgoaXRlbSkgPT4gdGhpcy5hZGFwdGVyLmFkYXB0SW4oaXRlbSwgdGhpcy5maWVsZHMpKTtcclxuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0XHRcdH0pLFxyXG5cdFx0XHRcdGNhdGNoRXJyb3IoKGVycikgPT4ge1xyXG5cdFx0XHRcdFx0dGhyb3cgZXJyO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdClcclxuXHRcdFx0LnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5vbkxvYWRpbmcuZW1pdChmYWxzZSk7XHJcblx0XHRcdFx0aWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XHJcblx0XHRcdFx0XHR0aGlzLm9uTG9hZC5lbWl0KHJlcyk7XHJcblx0XHRcdFx0XHR0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmVzLmVudHJpZXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQucHJvcGVydGllcyAmJiBlbGVtZW50LnByb3BlcnRpZXM/LmNyZWF0b3IgJiYgZWxlbWVudC5wcm9wZXJ0aWVzLmNyZWF0b3I/LnByb3BlcnRpZXMpIHtcclxuXHRcdFx0XHRcdFx0ZWxlbWVudC5wcm9wZXJ0aWVzWydjcmVhdG9yRnVsbE9iamVjdCddID0geyAuLi5lbGVtZW50LnByb3BlcnRpZXMuY3JlYXRvciB9O1xyXG5cdFx0XHRcdFx0XHRlbGVtZW50LnByb3BlcnRpZXMuY3JlYXRvciA9XHJcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5wcm9wZXJ0aWVzLmNyZWF0b3I/LnByb3BlcnRpZXM/LmZpcnN0TmFtZSArXHJcblx0XHRcdFx0XHRcdFx0JyAnICtcclxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnByb3BlcnRpZXMuY3JlYXRvcj8ucHJvcGVydGllcz8ubGFzdE5hbWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5wcm9wZXJ0aWVzICYmIGVsZW1lbnQucHJvcGVydGllcz8uYXNzaWduZWUpIHtcclxuXHRcdFx0XHRcdFx0ZWxlbWVudC5wcm9wZXJ0aWVzLmFzc2lnbmVlID0gZWxlbWVudC5wcm9wZXJ0aWVzPy5hc3NpZ25lZS5mdWxsTmFtZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR0aGlzLnRvdGFsUmVjb3JkcyA9IHJlcy5yZXN1bHRzQ291bnQ7XHJcblx0XHRcdFx0dGhpcy5yb3dzID0gcmVzLmVudHJpZXM7XHJcblx0XHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdC8vIGVtaXQgZGF0YSB0byBvdXRzaWRlIGluIGNhc2Ugb2Ygc2VhcmNoIHBhZ2UgZm9yIHRoZSBmaXJzdCB0aW1lIG9ubHkgdG8gcHJldmVudCByZWZyZXNoaW5nIGFnZ3JlZ2F0aW9uIHdpdGggZXZlcnkgcGFnZSBjaGFuZ2VcclxuXHRcdFx0XHQvLyBhbmQgZm9yIGFueSBvdGhlciBwYWdlIHR5cGUgZW1pdCBkYXRhIGRpcmVjdGx5IGluIGFsbCBwYWdlIG51bWJlcnNcclxuXHRcdFx0XHRpZiAoKHRoaXMuaXNTZWFyY2hQYWdlICYmIHRoaXMucGFnZU51bSA9PT0gMSkgfHwgIXRoaXMuaXNTZWFyY2hQYWdlKSB0aGlzLm9uR2V0dGluZ0RhdGEuZW1pdChyZXMpO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8vIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gY2xpY2tpbmcgb24gc2luZ2xlIHJvd1xyXG5cdHJvd0RldGFpbHMoZXZlbnQpIHtcclxuXHRcdHRoaXMub25Sb3dTZWxlY3RlZC5lbWl0KGV2ZW50KTtcclxuXHR9XHJcblxyXG5cdGluZGV4RGV0YWlscyhldmVudCkge1xyXG5cdFx0dGhpcy5vblJvd0luZGV4U2VsZWN0ZWQuZW1pdChldmVudCk7XHJcblx0fVxyXG5cclxuXHQvL2Z1bmN0aW9uIHRvIGhhbmRsZSBhbGwgb3BlcmF0aW9ucyBvbiBzaW5nbGUgcm93IChkZWxldGUgLCBlZGl0ICwgLi4uKVxyXG5cdHBlcmZvcm1BY3Rpb24oYWN0aW9uKSB7XHJcblx0XHR0aGlzLmFjdGlvbk9uUm93LmVtaXQoYWN0aW9uKTtcclxuXHR9XHJcblxyXG5cdC8vIGhhbmRsZSBzb3J0aW5nIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhYmxlXHJcblx0b25Tb3J0KHNvcnRPYmplY3QpIHtcclxuXHRcdHRoaXMuc29ydGluZ0J5ID0gc29ydE9iamVjdDtcclxuXHRcdHRoaXMuc29ydGluZyA9IHRydWU7XHJcblx0XHR0aGlzLmdldERhdGEoe30sIHRoaXMuc2tpcEFnZ3JlZ2F0aW9uID09PSAnb25QYWdlQ2hhbmdlJyA/IHsgc2tpcEFnZ3JlZ2F0ZXM6ICd0cnVlJyB9IDoge30pO1xyXG5cdH1cclxuXHJcblx0b25NdWx0aVJvd1NlbGVjdFZhbHVlKGV2ZW50KSB7XHJcblx0XHR0aGlzLm9uTXVsdGlSb3dTZWxlY3RlZC5lbWl0KGV2ZW50KTtcclxuXHR9XHJcblx0cHVibGljIFBhZ2luYXRpb25DaGFuZ2UoZXZlbnQpIHtcclxuXHRcdHRoaXMucGFnZU51bSA9IGV2ZW50O1xyXG5cdFx0dGhpcy5nZXREYXRhKHt9LCB0aGlzLnNraXBBZ2dyZWdhdGlvbiA9PT0gJ29uUGFnZUNoYW5nZScgPyB7IHNraXBBZ2dyZWdhdGVzOiAndHJ1ZScgfSA6IHt9KTtcclxuXHR9XHJcblx0b25DaGFuZ2VQYWdlU2l6ZShwYWdlU2l6ZTogbnVtYmVyKSB7XHJcblx0XHR0aGlzLnBhZ2VOdW0gPSAxO1xyXG5cdFx0dGhpcy5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xyXG5cdFx0dGhpcy5nZXREYXRhKHt9LCB0aGlzLnNraXBBZ2dyZWdhdGlvbiA9PT0gJ29uUGFnZUNoYW5nZScgPyB7IHNraXBBZ2dyZWdhdGVzOiAndHJ1ZScgfSA6IHt9KTtcclxuXHR9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIndyYXBwaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRhYmxlLXJlcG9zaXRpb25cIj5cclxuICAgIDxjdHMtdGFibGVcclxuICAgICAgKm5nSWY9XCJyb3dzLmxlbmd0aFwiXHJcbiAgICAgIFtyb3dzXT1cInJvd3NcIlxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW3Jlc3BvbnNpdmVDb2x1bW5zXT1cInJlc3BvbnNpdmVDb2x1bW5zXCJcclxuICAgICAgW3Jvd0N1cnNvcl09XCJyb3dDdXJzb3JcIlxyXG4gICAgICBbZnVsbFdpZHRoXT1cImZ1bGxXaWR0aFwiXHJcbiAgICAgIFtlbnRpdHlUeXBlXT1cImVudGl0eVR5cGVcIlxyXG4gICAgICBbcHJlZml4XT1cInByZWZpeFwiXHJcbiAgICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICAgICAgW3RhYmxlTW9kZV09XCJ0YWJsZU1vZGVcIlxyXG4gICAgICBbY29tcG9uZW50TmFtZV09XCJjb21wb25lbnROYW1lXCJcclxuICAgICAgW211bHRpU2VsZWN0Um93c109XCJtdWx0aVNlbGVjdFJvd3NcIlxyXG4gICAgICBbdGFibGVBY3Rpb25zXT1cInRhYmxlQWN0aW9uc1wiXHJcbiAgICAgIFtzaG93QWN0aW9uc0FzTWVudV09XCJzaG93QWN0aW9uc0FzTWVudVwiXHJcbiAgICAgIFtkZWZ1bHRTb3J0XT1cImRlZnVsdFNvcnRcIlxyXG4gICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXHJcbiAgICAgIFtoaWdobGlnaHRTZWxlY3RlZENhcmRdPVwiaGlnaGxpZ2h0U2VsZWN0ZWRDYXJkXCJcclxuICAgICAgW2N1c3RvbUZpcnN0Um93XT1cImN1c3RvbUZpcnN0Um93XCJcclxuICAgICAgKG9uUm93U2VsZWN0ZWQpPVwicm93RGV0YWlscygkZXZlbnQpXCJcclxuICAgICAgKG9uUm93SW5kZXhTZWxlY3RlZCk9XCJpbmRleERldGFpbHMoJGV2ZW50KVwiXHJcbiAgICAgIChvbk11bHRpUm93U2VsZWN0ZWQpPVwib25NdWx0aVJvd1NlbGVjdFZhbHVlKCRldmVudClcIlxyXG4gICAgICAoYWN0aW9uT25Sb3cpPVwicGVyZm9ybUFjdGlvbigkZXZlbnQpXCJcclxuICAgICAgKG9uU29ydGluZyk9XCJvblNvcnQoJGV2ZW50KVwiXHJcbiAgICA+PC9jdHMtdGFibGU+XHJcbiAgPC9kaXY+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgIDxjdHMtc3Bpbm5lcj48L2N0cy1zcGlubmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwicGFnaW5hdGlvbi1pbmVyLXdyYXBlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXktM1wiXHJcbiAgICBbbmdDbGFzc109XCJ7IHJlbGF0aXZlOiBwYWdlU2l6ZXM/Lmxlbmd0aCB9XCJcclxuICAgICpuZ0lmPVwicm93cy5sZW5ndGhcIlxyXG4gID5cclxuICAgIDxjdHMtcGFnaW5hdGlvblxyXG4gICAgICBbcGFnZV09XCJwYWdlTnVtXCJcclxuICAgICAgKGNoYW5nZSk9XCJQYWdpbmF0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICBbc2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICAgIFtjb3VudF09XCJ0b3RhbFJlY29yZHNcIlxyXG4gICAgPjwvY3RzLXBhZ2luYXRpb24+XHJcbiAgICA8bmRmLXBhZ2Utc2l6ZXMtbGlzdFxyXG4gICAgICBjbGFzcz1cImFic29sdXRlIG5kZlBhZ2VTaXplc1wiXHJcbiAgICAgICpuZ0lmPVwicGFnZVNpemVzPy5sZW5ndGhcIlxyXG4gICAgICBbcGFnZVNpemVzXT1cInBhZ2VTaXplc1wiXHJcbiAgICAgIFtzZWxlY3RlZFBhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuICAgICAgKG9uQ2hhbmdlUGFnZVNpemUpPVwib25DaGFuZ2VQYWdlU2l6ZSgkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvbmRmLXBhZ2Utc2l6ZXMtbGlzdD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCIgKm5nSWY9XCIhbG9hZGluZyAmJiByb3dzLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHRcIj5cclxuICAgICAge3sgKHByZWZpeCA/IHByZWZpeCArIFwibm9EYXRhXCIgOiBcIm5vRGF0YVwiKSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCIgKm5nSWY9XCJsb2FkaW5nICYmIHJvd3MubGVuZ3RoID09PSAwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dFwiPlxyXG4gICAgICB7eyAocHJlZml4ID8gcHJlZml4ICsgXCJnZXR0aW5nRGF0YVwiIDogXCJnZXR0aW5nRGF0YVwiKSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=