@colijnit/sharedcomponents 1.0.69 → 253.1.1

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 (205) hide show
  1. package/bundles/colijnit-sharedcomponents.umd.js +3863 -56
  2. package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
  3. package/colijnit-sharedcomponents.d.ts +38 -0
  4. package/colijnit-sharedcomponents.metadata.json +1 -1
  5. package/esm2015/colijnit-sharedcomponents.js +39 -1
  6. package/esm2015/lib/components/activity-list-header/activity-list-header.component.js +67 -0
  7. package/esm2015/lib/components/activity-list-header/activity-list-header.module.js +28 -0
  8. package/esm2015/lib/components/activity-list-header/components/period-filter/period-filter-popup.component.js +55 -0
  9. package/esm2015/lib/components/activity-list-header/components/period-filter/period-filter.component.js +103 -0
  10. package/esm2015/lib/components/activity-list-header/components/period-filter/period-filter.module.js +34 -0
  11. package/esm2015/lib/components/activity-overview-component/component-activity-overview.component.js +130 -0
  12. package/esm2015/lib/components/activity-overview-component/component-activity-overview.module.js +26 -0
  13. package/esm2015/lib/components/activity-overview-component/components/base-activity-overview.component.js +278 -0
  14. package/esm2015/lib/components/modify-task-form/components/activity-summary-block/activity-summary-block.component.js +100 -0
  15. package/esm2015/lib/components/modify-task-form/components/activity-summary-block/activity-summary-block.module.js +25 -0
  16. package/esm2015/lib/components/modify-task-form/components/base-activity-summary.component.js +132 -0
  17. package/esm2015/lib/components/modify-task-form/components/creation-summary-block/creation-summary-block.component.js +118 -0
  18. package/esm2015/lib/components/modify-task-form/components/creation-summary-block/creation-summary-block.module.js +27 -0
  19. package/esm2015/lib/components/modify-task-form/components/executive-summary-block/executive-summary-block.component.js +88 -0
  20. package/esm2015/lib/components/modify-task-form/components/executive-summary-block/executive-summary-block.module.js +24 -0
  21. package/esm2015/lib/components/modify-task-form/components/notification-summary-block/notification-summary-block.component.js +77 -0
  22. package/esm2015/lib/components/modify-task-form/components/notification-summary-block/notification-summary-block.module.js +24 -0
  23. package/esm2015/lib/components/modify-task-form/components/status-summary-block/status-summary-block.component.js +74 -0
  24. package/esm2015/lib/components/modify-task-form/components/status-summary-block/status-summary-block.module.js +25 -0
  25. package/esm2015/lib/components/modify-task-form/components/task-details/task-details.component.js +105 -0
  26. package/esm2015/lib/components/modify-task-form/components/task-details/task-details.module.js +25 -0
  27. package/esm2015/lib/components/modify-task-form/modify-task-form.component.js +284 -0
  28. package/esm2015/lib/components/modify-task-form/modify-task-form.module.js +40 -0
  29. package/esm2015/lib/components/open-activity-list/component-activity-list.component.js +278 -0
  30. package/esm2015/lib/components/open-activity-list/component-activity-list.module.js +30 -0
  31. package/esm2015/lib/components/open-activity-list/components/base-open-activity-list.component.js +266 -0
  32. package/esm2015/lib/components/open-activity-list/components/personal-activity-overview/personal-activity-overview.component.js +41 -0
  33. package/esm2015/lib/components/open-activity-list/components/personal-activity-overview/personal-activity-overview.module..js +19 -0
  34. package/esm2015/lib/components/simple-tags/simple-tags.component.js +5 -147
  35. package/esm2015/lib/components/simple-tags/simple-tags.module.js +4 -2
  36. package/esm2015/lib/components/simple-tags-form/simple-tags-form.component.js +196 -0
  37. package/esm2015/lib/components/simple-tags-form/simple-tags-form.module.js +26 -0
  38. package/esm2015/lib/components/stock/components/stock-location/components/stock-location-popup/stock-location-popup.component.js +3 -3
  39. package/esm2015/lib/components/stock/components/stock-location/stock-location.component.js +28 -2
  40. package/esm2015/lib/components/stock/localization/translation.js +3 -1
  41. package/esm2015/lib/components/stock/stock-tabs/stock-tabs.component.js +7 -2
  42. package/esm2015/lib/components/stock/stock-transfer/stock-transfer.component.js +144 -85
  43. package/esm2015/lib/components/stock/stock.component.js +11 -42
  44. package/esm2015/lib/components/stock/stock.module.js +4 -3
  45. package/esm2015/lib/components/task-modifyer/task-modifier.component.js +270 -0
  46. package/esm2015/lib/components/task-modifyer/task-modifyer.module..js +31 -0
  47. package/esm2015/lib/components/workflow-info-tiles/components/workflow-info-tile.component.js +45 -0
  48. package/esm2015/lib/components/workflow-info-tiles/components/workflow-info-tile.module.js +22 -0
  49. package/esm2015/lib/components/workflow-info-tiles/workflow-info-tiles.component.js +55 -0
  50. package/esm2015/lib/components/workflow-info-tiles/workflow-info-tiles.module.js +22 -0
  51. package/esm2015/lib/components/workflow-notification-toggle/workflow-notification-toggle-popup.js +53 -0
  52. package/esm2015/lib/components/workflow-notification-toggle/workflow-notification-toggle.component.js +81 -0
  53. package/esm2015/lib/components/workflow-notification-toggle/workflow-notification-toggle.module.js +34 -0
  54. package/esm2015/lib/directives/absolute-overlay-template.directive.js +29 -0
  55. package/esm2015/lib/directives/align-with.directive.js +174 -0
  56. package/esm2015/lib/directives/click-outside.directive.js +25 -0
  57. package/esm2015/lib/directives/directives.module.js +22 -0
  58. package/esm2015/lib/enum/activity-cfg-name.enum.js +29 -0
  59. package/esm2015/lib/enum/app-button-type.enum.js +11 -0
  60. package/esm2015/lib/enum/icon.enum.js +13 -1
  61. package/esm2015/lib/interface/activities-task-config-names.js +2 -0
  62. package/esm2015/lib/interface/operation-callback-activity.js +5 -0
  63. package/esm2015/lib/interface/operation-callback-function-with-validation.js +5 -0
  64. package/esm2015/lib/model/icon-svg.js +13 -1
  65. package/esm2015/lib/service/app-absolute-overlay-outlet.service.js +20 -0
  66. package/esm2015/lib/service/shared-connector.service.js +213 -1
  67. package/esm2015/lib/service/shared.service.js +93 -1
  68. package/esm2015/lib/utils/browser-utils.js +100 -0
  69. package/esm2015/lib/utils/event-utils.js +59 -0
  70. package/esm2015/lib/utils/string-utils.js +5 -1
  71. package/esm2015/public-api.js +7 -1
  72. package/fesm2015/colijnit-sharedcomponents.js +4044 -228
  73. package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
  74. package/lib/components/activity-list-header/activity-list-header.component.d.ts +25 -0
  75. package/lib/components/activity-list-header/activity-list-header.module.d.ts +2 -0
  76. package/lib/components/activity-list-header/components/period-filter/period-filter-popup.component.d.ts +11 -0
  77. package/lib/components/activity-list-header/components/period-filter/period-filter.component.d.ts +26 -0
  78. package/lib/components/activity-list-header/components/period-filter/period-filter.module.d.ts +2 -0
  79. package/lib/components/activity-list-header/components/period-filter/style/_layout.scss +62 -0
  80. package/lib/components/activity-list-header/components/period-filter/style/_material-definition.scss +1 -0
  81. package/lib/components/activity-list-header/components/period-filter/style/_theme.scss +5 -0
  82. package/lib/components/activity-list-header/components/period-filter/style/material.scss +4 -0
  83. package/lib/components/activity-list-header/style/_layout.scss +84 -0
  84. package/lib/components/activity-list-header/style/_material-definition.scss +1 -0
  85. package/lib/components/activity-list-header/style/_theme.scss +5 -0
  86. package/lib/components/activity-list-header/style/material.scss +4 -0
  87. package/lib/components/activity-overview-component/component-activity-overview.component.d.ts +15 -0
  88. package/lib/components/activity-overview-component/component-activity-overview.module.d.ts +2 -0
  89. package/lib/components/activity-overview-component/components/base-activity-overview.component.d.ts +79 -0
  90. package/lib/components/activity-overview-component/style/_layout.scss +107 -0
  91. package/lib/components/activity-overview-component/style/_material-definition.scss +1 -0
  92. package/lib/components/activity-overview-component/style/_theme.scss +5 -0
  93. package/lib/components/activity-overview-component/style/material.scss +4 -0
  94. package/lib/components/modify-task-form/components/activity-summary-block/activity-summary-block.component.d.ts +31 -0
  95. package/lib/components/modify-task-form/components/activity-summary-block/activity-summary-block.module.d.ts +2 -0
  96. package/lib/components/modify-task-form/components/activity-summary-block/style/_layout.scss +139 -0
  97. package/lib/components/modify-task-form/components/activity-summary-block/style/_material-definition.scss +0 -0
  98. package/lib/components/modify-task-form/components/activity-summary-block/style/_theme.scss +5 -0
  99. package/lib/components/modify-task-form/components/activity-summary-block/style/material.scss +4 -0
  100. package/lib/components/modify-task-form/components/base-activity-summary.component.d.ts +52 -0
  101. package/lib/components/modify-task-form/components/creation-summary-block/creation-summary-block.component.d.ts +28 -0
  102. package/lib/components/modify-task-form/components/creation-summary-block/creation-summary-block.module.d.ts +2 -0
  103. package/lib/components/modify-task-form/components/creation-summary-block/style/_layout.scss +5 -0
  104. package/lib/components/modify-task-form/components/creation-summary-block/style/_material-definition.scss +0 -0
  105. package/lib/components/modify-task-form/components/creation-summary-block/style/_theme.scss +5 -0
  106. package/lib/components/modify-task-form/components/creation-summary-block/style/material.scss +4 -0
  107. package/lib/components/modify-task-form/components/executive-summary-block/executive-summary-block.component.d.ts +24 -0
  108. package/lib/components/modify-task-form/components/executive-summary-block/executive-summary-block.module.d.ts +2 -0
  109. package/lib/components/modify-task-form/components/executive-summary-block/style/_layout.scss +5 -0
  110. package/lib/components/modify-task-form/components/executive-summary-block/style/_material-definition.scss +0 -0
  111. package/lib/components/modify-task-form/components/executive-summary-block/style/_theme.scss +5 -0
  112. package/lib/components/modify-task-form/components/executive-summary-block/style/material.scss +4 -0
  113. package/lib/components/modify-task-form/components/notification-summary-block/notification-summary-block.component.d.ts +23 -0
  114. package/lib/components/modify-task-form/components/notification-summary-block/notification-summary-block.module.d.ts +2 -0
  115. package/lib/components/modify-task-form/components/notification-summary-block/style/_layout.scss +161 -0
  116. package/lib/components/modify-task-form/components/notification-summary-block/style/_material-definition.scss +0 -0
  117. package/lib/components/modify-task-form/components/notification-summary-block/style/_theme.scss +5 -0
  118. package/lib/components/modify-task-form/components/notification-summary-block/style/material.scss +4 -0
  119. package/lib/components/modify-task-form/components/status-summary-block/status-summary-block.component.d.ts +17 -0
  120. package/lib/components/modify-task-form/components/status-summary-block/status-summary-block.module.d.ts +2 -0
  121. package/lib/components/modify-task-form/components/status-summary-block/style/_layout.scss +18 -0
  122. package/lib/components/modify-task-form/components/status-summary-block/style/_material-definition.scss +0 -0
  123. package/lib/components/modify-task-form/components/status-summary-block/style/_theme.scss +5 -0
  124. package/lib/components/modify-task-form/components/status-summary-block/style/material.scss +4 -0
  125. package/lib/components/modify-task-form/components/task-details/style/_layout.scss +142 -0
  126. package/lib/components/modify-task-form/components/task-details/style/_material-definition.scss +0 -0
  127. package/lib/components/modify-task-form/components/task-details/style/_theme.scss +5 -0
  128. package/lib/components/modify-task-form/components/task-details/style/material.scss +4 -0
  129. package/lib/components/modify-task-form/components/task-details/task-details.component.d.ts +23 -0
  130. package/lib/components/modify-task-form/components/task-details/task-details.module.d.ts +2 -0
  131. package/lib/components/modify-task-form/modify-task-form.component.d.ts +54 -0
  132. package/lib/components/modify-task-form/modify-task-form.module.d.ts +2 -0
  133. package/lib/components/modify-task-form/style/_layout.scss +139 -0
  134. package/lib/components/modify-task-form/style/_material-definition.scss +0 -0
  135. package/lib/components/modify-task-form/style/_theme.scss +5 -0
  136. package/lib/components/modify-task-form/style/material.scss +4 -0
  137. package/lib/components/open-activity-list/component-activity-list.component.d.ts +67 -0
  138. package/lib/components/open-activity-list/component-activity-list.module.d.ts +2 -0
  139. package/lib/components/open-activity-list/components/base-open-activity-list.component.d.ts +48 -0
  140. package/lib/components/open-activity-list/components/personal-activity-overview/personal-activity-overview.component.d.ts +4 -0
  141. package/lib/components/open-activity-list/components/personal-activity-overview/personal-activity-overview.module..d.ts +2 -0
  142. package/lib/components/open-activity-list/components/personal-activity-overview/style/_layout.scss +105 -0
  143. package/lib/components/open-activity-list/components/personal-activity-overview/style/_material-definition.scss +0 -0
  144. package/lib/components/open-activity-list/components/personal-activity-overview/style/_theme.scss +4 -0
  145. package/lib/components/open-activity-list/components/personal-activity-overview/style/material.scss +4 -0
  146. package/lib/components/open-activity-list/style/_layout.scss +26 -0
  147. package/lib/components/open-activity-list/style/_material-definition.scss +0 -0
  148. package/lib/components/open-activity-list/style/_theme.scss +4 -0
  149. package/lib/components/open-activity-list/style/material.scss +4 -0
  150. package/lib/components/simple-tags/simple-tags.component.d.ts +1 -8
  151. package/lib/components/simple-tags-form/simple-tags-form.component.d.ts +29 -0
  152. package/lib/components/simple-tags-form/simple-tags-form.module.d.ts +2 -0
  153. package/lib/components/simple-tags-form/style/_layout.scss +257 -0
  154. package/lib/components/simple-tags-form/style/_material-definition.scss +39 -0
  155. package/lib/components/simple-tags-form/style/_theme.scss +4 -0
  156. package/lib/components/simple-tags-form/style/material.scss +4 -0
  157. package/lib/components/stock/components/stock-location/stock-location.component.d.ts +7 -1
  158. package/lib/components/stock/localization/translation.d.ts +2 -0
  159. package/lib/components/stock/stock-tabs/stock-tabs.component.d.ts +2 -0
  160. package/lib/components/stock/stock-transfer/stock-transfer.component.d.ts +19 -6
  161. package/lib/components/stock/stock.component.d.ts +3 -0
  162. package/lib/components/stock/style/_layout.scss +64 -31
  163. package/lib/components/task-modifyer/style/_layout.scss +5 -0
  164. package/lib/components/task-modifyer/style/_material-definition.scss +0 -0
  165. package/lib/components/task-modifyer/style/_theme.scss +4 -0
  166. package/lib/components/task-modifyer/style/material.scss +4 -0
  167. package/lib/components/task-modifyer/task-modifier.component.d.ts +65 -0
  168. package/lib/components/task-modifyer/task-modifyer.module..d.ts +2 -0
  169. package/lib/components/workflow-info-tiles/components/style/_layout.scss +49 -0
  170. package/lib/components/workflow-info-tiles/components/style/_material-definition.scss +0 -0
  171. package/lib/components/workflow-info-tiles/components/style/_theme.scss +4 -0
  172. package/lib/components/workflow-info-tiles/components/style/material.scss +4 -0
  173. package/lib/components/workflow-info-tiles/components/workflow-info-tile.component.d.ts +15 -0
  174. package/lib/components/workflow-info-tiles/components/workflow-info-tile.module.d.ts +2 -0
  175. package/lib/components/workflow-info-tiles/style/_layout.scss +16 -0
  176. package/lib/components/workflow-info-tiles/style/_material-definition.scss +0 -0
  177. package/lib/components/workflow-info-tiles/style/_theme.scss +4 -0
  178. package/lib/components/workflow-info-tiles/style/material.scss +4 -0
  179. package/lib/components/workflow-info-tiles/workflow-info-tiles.component.d.ts +21 -0
  180. package/lib/components/workflow-info-tiles/workflow-info-tiles.module.d.ts +2 -0
  181. package/lib/components/workflow-notification-toggle/style/_layout.scss +59 -0
  182. package/lib/components/workflow-notification-toggle/style/_material-definition.scss +0 -0
  183. package/lib/components/workflow-notification-toggle/style/_theme.scss +4 -0
  184. package/lib/components/workflow-notification-toggle/style/material.scss +4 -0
  185. package/lib/components/workflow-notification-toggle/workflow-notification-toggle-popup.d.ts +15 -0
  186. package/lib/components/workflow-notification-toggle/workflow-notification-toggle.component.d.ts +28 -0
  187. package/lib/components/workflow-notification-toggle/workflow-notification-toggle.module.d.ts +2 -0
  188. package/lib/directives/absolute-overlay-template.directive.d.ts +9 -0
  189. package/lib/directives/align-with.directive.d.ts +35 -0
  190. package/lib/directives/click-outside.directive.d.ts +7 -0
  191. package/lib/directives/directives.module.d.ts +2 -0
  192. package/lib/enum/activity-cfg-name.enum.d.ts +27 -0
  193. package/lib/enum/app-button-type.enum.d.ts +9 -0
  194. package/lib/enum/icon.enum.d.ts +12 -0
  195. package/lib/interface/activities-task-config-names.d.ts +12 -0
  196. package/lib/interface/operation-callback-activity.d.ts +5 -0
  197. package/lib/interface/operation-callback-function-with-validation.d.ts +5 -0
  198. package/lib/service/app-absolute-overlay-outlet.service.d.ts +9 -0
  199. package/lib/service/shared-connector.service.d.ts +28 -0
  200. package/lib/service/shared.service.d.ts +28 -0
  201. package/lib/utils/browser-utils.d.ts +15 -0
  202. package/lib/utils/event-utils.d.ts +12 -0
  203. package/lib/utils/string-utils.d.ts +1 -0
  204. package/package.json +7 -5
  205. package/public-api.d.ts +6 -0
@@ -0,0 +1,266 @@
1
+ import { __decorate } from "tslib";
2
+ import { Directive, Injectable, Input } from "@angular/core";
3
+ import { isNill } from "@colijnit/ioneconnector/build/utils/function/is-nill.function";
4
+ import { ActivityListViewModel } from "@colijnit/mainapi/build/model/activity-list-view-model";
5
+ import { ActivityViewModel } from "@colijnit/mainapi/build/model/activity-view-model";
6
+ import { DateUtils } from "../../../utils/date-utils";
7
+ import { InputBoolean } from "../../../decorator/input-boolean.decorator";
8
+ export class BaseActivityListComponent {
9
+ constructor() {
10
+ this.reloadTimer = 60000; // 1 minute in milliseconds
11
+ this.handleOpenLinkSidebar = false;
12
+ //viewmodels
13
+ this.privateActivityListViewModels = [];
14
+ this.privateDelegatedActivityListViewModels = [];
15
+ this.filteredActivityListViewModels = [];
16
+ this.filteredDelegatedActivityListViewModels = [];
17
+ this._showUsergroupActivities = false;
18
+ this._activities = [];
19
+ this._delegatedActivities = [];
20
+ //protected userService: UserService
21
+ }
22
+ set activities(value) {
23
+ clearTimeout(this._updateInterval);
24
+ this._activities = value;
25
+ this.filteredActivities = this._activities.slice();
26
+ this.applyFilter();
27
+ this._startInterval();
28
+ }
29
+ get activities() {
30
+ return this._activities;
31
+ }
32
+ set delegatedActivities(value) {
33
+ if (value && value.length > 0) {
34
+ clearTimeout(this._updateInterval);
35
+ this._delegatedActivities = value;
36
+ this.filteredDelegatedActivities = this._delegatedActivities.slice();
37
+ this.applyFilter();
38
+ this._startInterval();
39
+ }
40
+ }
41
+ get delegatedActivities() {
42
+ return this._delegatedActivities;
43
+ }
44
+ // TODO: return this.userService.showUsergroupActivities and allow to set properly;
45
+ get showUsergroupActivities() {
46
+ return this._showUsergroupActivities;
47
+ }
48
+ set showUsergroupActivities(value) {
49
+ this._showUsergroupActivities = value;
50
+ }
51
+ ngOnDestroy() {
52
+ clearInterval(this._updateInterval);
53
+ }
54
+ reset() {
55
+ this.filteredActivities = [];
56
+ this.filteredDelegatedActivities = [];
57
+ this._activities = [];
58
+ this._delegatedActivities = [];
59
+ }
60
+ applyFilter() {
61
+ this._applyFilter(this.activities, this.filteredActivities, this.filteredActivityListViewModels);
62
+ this._applyFilter(this.delegatedActivities, this.filteredDelegatedActivities, this.filteredDelegatedActivityListViewModels);
63
+ this._refreshActivities();
64
+ this.afterFilterApplied();
65
+ }
66
+ afterFilterApplied() {
67
+ }
68
+ getTheActivities() {
69
+ this.getActivities();
70
+ this.getDelegatedActivities();
71
+ }
72
+ _removeNotShowing(listViewModels) {
73
+ for (let i = listViewModels.length - 1; i > 0; i--) {
74
+ const listViewModel = listViewModels[i];
75
+ if (!listViewModel.showing) {
76
+ listViewModels.splice(i, 1);
77
+ }
78
+ else { // iterate through activityViewModels
79
+ for (let j = listViewModel.activities.length - 1; j > 0; j--) {
80
+ const activityViewModel = listViewModel.activities[j];
81
+ if (!activityViewModel.showing) {
82
+ listViewModel.activities.splice(j, 1);
83
+ }
84
+ }
85
+ }
86
+ }
87
+ }
88
+ updatePrivateListsWithFilteredLists() {
89
+ this.privateActivityListViewModels =
90
+ this._updatePrivateListWithFilteredList(this.privateActivityListViewModels, this.filteredActivityListViewModels);
91
+ this.privateDelegatedActivityListViewModels =
92
+ this._updatePrivateListWithFilteredList(this.privateDelegatedActivityListViewModels, this.filteredDelegatedActivityListViewModels);
93
+ }
94
+ _applyFilter(activities, filteredActivities, filteredActivityListViewModels) {
95
+ if (isNill(activities)) {
96
+ filteredActivities.length = 0;
97
+ return;
98
+ }
99
+ filteredActivities = activities.slice(0);
100
+ if (this.filterFrom && this.filterTo) {
101
+ filteredActivities =
102
+ activities.filter((a) => {
103
+ if (a.executionDateTime === null || a.overDue) {
104
+ return true;
105
+ }
106
+ else {
107
+ return DateUtils.IsInBetween(a.executionDateTime, this.filterFrom, this.filterTo, false);
108
+ }
109
+ });
110
+ }
111
+ filteredActivities.sort((a, b) => a.deadlineDateTime > b.deadlineDateTime ? 1 : -1);
112
+ this._searchText(filteredActivities);
113
+ this._prepareViewModels(filteredActivities, filteredActivityListViewModels);
114
+ }
115
+ _searchText(filteredActivities) {
116
+ if (!this.searchText) {
117
+ return;
118
+ }
119
+ for (let i = filteredActivities.length - 1; i >= 0; i--) {
120
+ const activity = filteredActivities[i];
121
+ let found = false;
122
+ for (let key in activity) {
123
+ if (activity.hasOwnProperty(key)) {
124
+ if (activity[key].toString().indexOf(this.searchText) > -1) {
125
+ found = true;
126
+ break;
127
+ }
128
+ }
129
+ }
130
+ if (!found) {
131
+ filteredActivities.splice(i, 1);
132
+ }
133
+ }
134
+ }
135
+ _updatePrivateListWithFilteredList(listViewModels, filteredList) {
136
+ let result;
137
+ if (listViewModels.length === 0) {
138
+ result = filteredList.slice();
139
+ }
140
+ else {
141
+ result = listViewModels.slice();
142
+ // set showing to false for items which are not in the list anymore
143
+ for (let i = 0; i < result.length; i++) {
144
+ const listViewModel = result[i];
145
+ const filteredViewModel = filteredList.find(f => f.position === listViewModel.position);
146
+ if (!filteredViewModel) {
147
+ // flag as removed when listviewmodel is no longer in the list
148
+ listViewModel.showing = false;
149
+ }
150
+ else {
151
+ for (let j = 0; j < listViewModel.activities.length; j++) {
152
+ const viewModel = listViewModel.activities[j];
153
+ if (!filteredViewModel.activities.find(fa => fa.guid === viewModel.guid)) {
154
+ // flag as removed when viewmodel is no longer in the list
155
+ viewModel.showing = false;
156
+ }
157
+ }
158
+ }
159
+ }
160
+ // add new items
161
+ for (let i = 0; i < filteredList.length; i++) {
162
+ const filteredActivityListViewModel = filteredList[i];
163
+ const listViewModel = result.find(lvm => lvm.label === filteredActivityListViewModel.label);
164
+ if (!listViewModel) {
165
+ result.push(filteredActivityListViewModel);
166
+ }
167
+ else {
168
+ for (let j = 0; j < filteredActivityListViewModel.activities.length; j++) {
169
+ const filteredActivityViewModel = filteredActivityListViewModel.activities[j];
170
+ if (!listViewModel.activities.find(a => a.activity.getId() === filteredActivityViewModel.activity.getId())) {
171
+ listViewModel.activities.push(filteredActivityViewModel);
172
+ }
173
+ }
174
+ }
175
+ }
176
+ }
177
+ result.sort(this._sortByPosition);
178
+ return result;
179
+ }
180
+ _refreshActivities() {
181
+ // first remove items which are set invisible before
182
+ this._removeNotShowing(this.privateActivityListViewModels);
183
+ this._removeNotShowing(this.privateDelegatedActivityListViewModels);
184
+ // update private list with (new) filtered list
185
+ this.updatePrivateListsWithFilteredLists();
186
+ }
187
+ _prepareViewModels(filteredActivities, filteredActivityListViewModels) {
188
+ filteredActivityListViewModels.map(alm => {
189
+ alm.showing = false;
190
+ alm.activities.map(aa => aa.showing = false);
191
+ });
192
+ if (filteredActivities) {
193
+ for (let i = 0; i < filteredActivities.length; i++) {
194
+ const activity = filteredActivities[i];
195
+ if (!activity.overDue && DateUtils.IsToday(activity.deadlineDateTime)) {
196
+ this._addToActivityListViewModel(filteredActivityListViewModels, 'TODAY', 1, activity);
197
+ }
198
+ else if (activity.overDue) {
199
+ this._addToActivityListViewModel(filteredActivityListViewModels, 'TOO_LATE', 2, activity);
200
+ }
201
+ else if (activity.deadlineDateTime) {
202
+ this._addToActivityListViewModel(filteredActivityListViewModels, 'NEXT2', 3, activity);
203
+ }
204
+ else {
205
+ this._addToActivityListViewModel(filteredActivityListViewModels, 'UNSCHEDULED', 4, activity);
206
+ }
207
+ }
208
+ }
209
+ filteredActivityListViewModels.sort(this._sortByPosition);
210
+ this._setAmountListViewModels(filteredActivityListViewModels);
211
+ }
212
+ _setAmountListViewModels(filteredActivityListViewModels) {
213
+ for (let i = 0; i < filteredActivityListViewModels.length; i++) {
214
+ filteredActivityListViewModels[i].setAmount();
215
+ }
216
+ }
217
+ _sortByPosition(a, b) {
218
+ return a.position > b.position ? 1 : -1;
219
+ }
220
+ _addToActivityListViewModel(filteredActivityListViewModels, label, order, activity) {
221
+ const activityListViewModel = this._getActivityListViewModel(filteredActivityListViewModels, label, order);
222
+ activityListViewModel.showing = true;
223
+ const activityViewModel = this._getActivityViewModel(activityListViewModel, activity);
224
+ activityViewModel.showing = !activityViewModel.deleted;
225
+ this._updateViewModelContent(activityViewModel, activity);
226
+ }
227
+ _getActivityViewModel(listViewModel, activity) {
228
+ let viewModel = listViewModel.activities.find(a => a.activity.getId() === activity.getId());
229
+ if (!viewModel) {
230
+ viewModel = new ActivityViewModel();
231
+ viewModel.activity = activity;
232
+ viewModel.parent = listViewModel;
233
+ listViewModel.activities.push(viewModel);
234
+ }
235
+ return viewModel;
236
+ }
237
+ _getActivityListViewModel(filteredActivityListViewModels, label, order) {
238
+ let result = filteredActivityListViewModels.find(a => a.label === label);
239
+ if (!result) {
240
+ result = new ActivityListViewModel(label, order);
241
+ filteredActivityListViewModels.push(result);
242
+ }
243
+ return result;
244
+ }
245
+ _startInterval() {
246
+ this._updateInterval = window.setInterval(() => {
247
+ this.getTheActivities();
248
+ }, this.reloadTimer);
249
+ }
250
+ _updateViewModelContent(activityViewModel, activity) {
251
+ activityViewModel.activity = activity;
252
+ return activityViewModel;
253
+ }
254
+ }
255
+ BaseActivityListComponent.decorators = [
256
+ { type: Directive },
257
+ { type: Injectable }
258
+ ];
259
+ BaseActivityListComponent.ctorParameters = () => [];
260
+ BaseActivityListComponent.propDecorators = {
261
+ handleOpenLinkSidebar: [{ type: Input }]
262
+ };
263
+ __decorate([
264
+ InputBoolean()
265
+ ], BaseActivityListComponent.prototype, "handleOpenLinkSidebar", void 0);
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1vcGVuLWFjdGl2aXR5LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvb3Blbi1hY3Rpdml0eS1saXN0L2NvbXBvbmVudHMvYmFzZS1vcGVuLWFjdGl2aXR5LWxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFdEUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLCtEQUErRCxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFJeEUsTUFBTSxPQUFnQix5QkFBeUI7SUErRDNDO1FBN0RVLGdCQUFXLEdBQVcsS0FBSyxDQUFDLENBQUMsMkJBQTJCO1FBSTNELDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQW9DOUMsWUFBWTtRQUNMLGtDQUE2QixHQUE0QixFQUFFLENBQUM7UUFDNUQsMkNBQXNDLEdBQTRCLEVBQUUsQ0FBQztRQUNyRSxtQ0FBOEIsR0FBNEIsRUFBRSxDQUFDO1FBQzdELDRDQUF1QyxHQUE0QixFQUFFLENBQUM7UUFFckUsNkJBQXdCLEdBQVksS0FBSyxDQUFBO1FBV3pDLGdCQUFXLEdBQWUsRUFBRSxDQUFDO1FBQzdCLHlCQUFvQixHQUFlLEVBQUUsQ0FBQztRQUk1QyxvQ0FBb0M7SUFDdEMsQ0FBQztJQXpERCxJQUFXLFVBQVUsQ0FBQyxLQUFpQjtRQUNuQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQVcsbUJBQW1CLENBQUMsS0FBaUI7UUFDNUMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN6QjtJQUNMLENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUMxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNyQyxDQUFDO0lBa0JGLG1GQUFtRjtJQUNuRixJQUFXLHVCQUF1QjtRQUNoQyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQTtJQUNyQyxDQUFDO0lBRUQsSUFBVyx1QkFBdUIsQ0FBQyxLQUFjO1FBQy9DLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUE7SUFDdkMsQ0FBQztJQVVELFdBQVc7UUFDUCxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFLTSxLQUFLO1FBQ1IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsMkJBQTJCLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUM1SCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRVMsa0JBQWtCO0lBRTVCLENBQUM7SUFFUyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxjQUF1QztRQUM3RCxLQUFLLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEQsTUFBTSxhQUFhLEdBQTBCLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTtnQkFDeEIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDL0I7aUJBQU0sRUFBRSxxQ0FBcUM7Z0JBQzFDLEtBQUssSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFELE1BQU0saUJBQWlCLEdBQXNCLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUU7d0JBQzVCLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDekM7aUJBQ0o7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVTLG1DQUFtQztRQUN6QyxJQUFJLENBQUMsNkJBQTZCO1lBQzlCLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDckgsSUFBSSxDQUFDLHNDQUFzQztZQUN2QyxJQUFJLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNJLENBQUM7SUFFTyxZQUFZLENBQUMsVUFBc0IsRUFBRSxrQkFBOEIsRUFBRSw4QkFBdUQ7UUFDaEksSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEIsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUM5QixPQUFPO1NBQ1Y7UUFDRCxrQkFBa0IsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpDLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLGtCQUFrQjtnQkFDZCxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBVyxFQUFFLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxDQUFDLGlCQUFpQixLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO3dCQUMzQyxPQUFPLElBQUksQ0FBQztxQkFDZjt5QkFBTTt3QkFDSCxPQUFPLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDNUY7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDVjtRQUNELGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQVcsRUFBRSxDQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLDhCQUE4QixDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVPLFdBQVcsQ0FBQyxrQkFBOEI7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckQsTUFBTSxRQUFRLEdBQWEsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsSUFBSSxLQUFLLEdBQVksS0FBSyxDQUFDO1lBQzNCLEtBQUssSUFBSSxHQUFHLElBQUksUUFBUSxFQUFFO2dCQUN0QixJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzlCLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0JBQ3hELEtBQUssR0FBRyxJQUFJLENBQUM7d0JBQ2IsTUFBTTtxQkFDVDtpQkFDSjthQUNKO1lBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDUixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ25DO1NBQ0o7SUFDTCxDQUFDO0lBRU8sa0NBQWtDLENBQ3RDLGNBQXVDLEVBQ3ZDLFlBQXFDO1FBRXJDLElBQUksTUFBK0IsQ0FBQztRQUNwQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdCLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDakM7YUFBTTtZQUNILE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsbUVBQW1FO1lBQ25FLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNwQyxNQUFNLGFBQWEsR0FBMEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLGlCQUFpQixHQUEwQixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQy9HLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDcEIsOERBQThEO29CQUM5RCxhQUFhLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztpQkFDakM7cUJBQU07b0JBQ0gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN0RCxNQUFNLFNBQVMsR0FBc0IsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDakUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDdEUsMERBQTBEOzRCQUMxRCxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzt5QkFDN0I7cUJBQ0o7aUJBQ0o7YUFDSjtZQUNELGdCQUFnQjtZQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsTUFBTSw2QkFBNkIsR0FBMEIsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3RSxNQUFNLGFBQWEsR0FBMEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25ILElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztpQkFDOUM7cUJBQU07b0JBQ0gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3RFLE1BQU0seUJBQXlCLEdBQXNCLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDakcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTs0QkFDeEcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQzt5QkFDNUQ7cUJBQ0o7aUJBQ0o7YUFDSjtTQUNKO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEMsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUNwRSwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVPLGtCQUFrQixDQUFDLGtCQUE4QixFQUFFLDhCQUF1RDtRQUM5Ryw4QkFBOEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckMsR0FBRyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDcEIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxrQkFBa0IsRUFBRTtZQUNwQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoRCxNQUFNLFFBQVEsR0FBYSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtvQkFDbkUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLDhCQUE4QixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQzFGO3FCQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtvQkFDekIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLDhCQUE4QixFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQzdGO3FCQUFNLElBQUksUUFBUSxDQUFDLGdCQUFnQixFQUFFO29CQUNsQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsOEJBQThCLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztpQkFDMUY7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLDJCQUEyQixDQUFDLDhCQUE4QixFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQ2hHO2FBQ0o7U0FDSjtRQUNELDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLHdCQUF3QixDQUFDLDhCQUF1RDtRQUNwRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsOEJBQThCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVELDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2pEO0lBQ0wsQ0FBQztJQUVPLGVBQWUsQ0FBQyxDQUF3QixFQUFFLENBQXdCO1FBQ3RFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTywyQkFBMkIsQ0FBQyw4QkFBdUQsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLFFBQWtCO1FBQ3pJLE1BQU0scUJBQXFCLEdBQTBCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyw4QkFBOEIsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEkscUJBQXFCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNyQyxNQUFNLGlCQUFpQixHQUFzQixJQUFJLENBQUMscUJBQXFCLENBQUMscUJBQXFCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekcsaUJBQWlCLENBQUMsT0FBTyxHQUFHLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDO1FBQ3ZELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8scUJBQXFCLENBQUMsYUFBb0MsRUFBRSxRQUFrQjtRQUNsRixJQUFJLFNBQVMsR0FBc0IsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9HLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDWixTQUFTLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO1lBQ2pDLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLHlCQUF5QixDQUFDLDhCQUF1RCxFQUFFLEtBQWEsRUFBRSxLQUFhO1FBQ25ILElBQUksTUFBTSxHQUEwQiw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxNQUFNLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakQsOEJBQThCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxpQkFBb0MsRUFBRSxRQUFrQjtRQUNwRixpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3RDLE9BQU8saUJBQWlCLENBQUM7SUFDN0IsQ0FBQzs7O1lBalNKLFNBQVM7WUFDVCxVQUFVOzs7O29DQUtOLEtBQUs7O0FBRU47SUFEQyxZQUFZLEVBQUU7d0VBQytCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEluamVjdGFibGUsIElucHV0LCBPbkRlc3Ryb3l9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7QWN0aXZpdHl9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9hY3Rpdml0eS5ib1wiO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSBcIkBjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL3V0aWxzL2Z1bmN0aW9uL2lzLW5pbGwuZnVuY3Rpb25cIjtcclxuaW1wb3J0IHtBY3Rpdml0eUxpc3RWaWV3TW9kZWx9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9hY3Rpdml0eS1saXN0LXZpZXctbW9kZWxcIjtcclxuaW1wb3J0IHtBY3Rpdml0eVZpZXdNb2RlbH0gZnJvbSBcIkBjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2FjdGl2aXR5LXZpZXctbW9kZWxcIjtcclxuaW1wb3J0IHtEYXRlVXRpbHN9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlLXV0aWxzXCI7XHJcbmltcG9ydCB7SW5wdXRCb29sZWFufSBmcm9tIFwiLi4vLi4vLi4vZGVjb3JhdG9yL2lucHV0LWJvb2xlYW4uZGVjb3JhdG9yXCI7XHJcblxyXG5ARGlyZWN0aXZlKClcclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUFjdGl2aXR5TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlbG9hZFRpbWVyOiBudW1iZXIgPSA2MDAwMDsgLy8gMSBtaW51dGUgaW4gbWlsbGlzZWNvbmRzXHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBJbnB1dEJvb2xlYW4oKVxyXG4gICAgcHVibGljIGhhbmRsZU9wZW5MaW5rU2lkZWJhcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzZXQgYWN0aXZpdGllcyh2YWx1ZTogQWN0aXZpdHlbXSkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVJbnRlcnZhbCk7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZpdGllcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRBY3Rpdml0aWVzID0gdGhpcy5fYWN0aXZpdGllcy5zbGljZSgpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICB0aGlzLl9zdGFydEludGVydmFsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBhY3Rpdml0aWVzKCk6IEFjdGl2aXR5W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpdml0aWVzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgZGVsZWdhdGVkQWN0aXZpdGllcyh2YWx1ZTogQWN0aXZpdHlbXSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl91cGRhdGVJbnRlcnZhbCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlbGVnYXRlZEFjdGl2aXRpZXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZERlbGVnYXRlZEFjdGl2aXRpZXMgPSB0aGlzLl9kZWxlZ2F0ZWRBY3Rpdml0aWVzLnNsaWNlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5fc3RhcnRJbnRlcnZhbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRlbGVnYXRlZEFjdGl2aXRpZXMoKTogQWN0aXZpdHlbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlZEFjdGl2aXRpZXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZpbHRlckZyb206IERhdGU7XHJcbiAgICBwdWJsaWMgZmlsdGVyVG86IERhdGU7XHJcbiAgICBwdWJsaWMgc2VhcmNoVGV4dDogc3RyaW5nO1xyXG5cclxuICAgIC8vZmlsdGVyZWQgbGlzdHNcclxuICAgIHB1YmxpYyBmaWx0ZXJlZEFjdGl2aXRpZXM6IEFjdGl2aXR5W107XHJcbiAgICBwdWJsaWMgZmlsdGVyZWREZWxlZ2F0ZWRBY3Rpdml0aWVzOiBBY3Rpdml0eVtdO1xyXG5cclxuICAgIC8vdmlld21vZGVsc1xyXG4gICAgcHVibGljIHByaXZhdGVBY3Rpdml0eUxpc3RWaWV3TW9kZWxzOiBBY3Rpdml0eUxpc3RWaWV3TW9kZWxbXSA9IFtdO1xyXG4gICAgcHVibGljIHByaXZhdGVEZWxlZ2F0ZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzOiBBY3Rpdml0eUxpc3RWaWV3TW9kZWxbXSA9IFtdO1xyXG4gICAgcHVibGljIGZpbHRlcmVkQWN0aXZpdHlMaXN0Vmlld01vZGVsczogQWN0aXZpdHlMaXN0Vmlld01vZGVsW10gPSBbXTtcclxuICAgIHB1YmxpYyBmaWx0ZXJlZERlbGVnYXRlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbHM6IEFjdGl2aXR5TGlzdFZpZXdNb2RlbFtdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBfc2hvd1VzZXJncm91cEFjdGl2aXRpZXM6IGJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICAgLy8gVE9ETzogcmV0dXJuIHRoaXMudXNlclNlcnZpY2Uuc2hvd1VzZXJncm91cEFjdGl2aXRpZXMgYW5kIGFsbG93IHRvIHNldCBwcm9wZXJseTtcclxuICAgcHVibGljIGdldCBzaG93VXNlcmdyb3VwQWN0aXZpdGllcygpOiBib29sZWFuIHtcclxuICAgICByZXR1cm4gdGhpcy5fc2hvd1VzZXJncm91cEFjdGl2aXRpZXNcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0IHNob3dVc2VyZ3JvdXBBY3Rpdml0aWVzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgIHRoaXMuX3Nob3dVc2VyZ3JvdXBBY3Rpdml0aWVzID0gdmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9hY3Rpdml0aWVzOiBBY3Rpdml0eVtdID0gW107XHJcbiAgICBwcml2YXRlIF9kZWxlZ2F0ZWRBY3Rpdml0aWVzOiBBY3Rpdml0eVtdID0gW107XHJcbiAgICBwcml2YXRlIF91cGRhdGVJbnRlcnZhbDogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAvL3Byb3RlY3RlZCB1c2VyU2VydmljZTogVXNlclNlcnZpY2VcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX3VwZGF0ZUludGVydmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0QWN0aXZpdGllcygpO1xyXG4gICAgcHVibGljIGFic3RyYWN0IGdldERlbGVnYXRlZEFjdGl2aXRpZXMoKTtcclxuXHJcbiAgICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZEFjdGl2aXRpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkRGVsZWdhdGVkQWN0aXZpdGllcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2aXRpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLl9kZWxlZ2F0ZWRBY3Rpdml0aWVzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5RmlsdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKHRoaXMuYWN0aXZpdGllcywgdGhpcy5maWx0ZXJlZEFjdGl2aXRpZXMsIHRoaXMuZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzKTtcclxuICAgICAgICB0aGlzLl9hcHBseUZpbHRlcih0aGlzLmRlbGVnYXRlZEFjdGl2aXRpZXMsIHRoaXMuZmlsdGVyZWREZWxlZ2F0ZWRBY3Rpdml0aWVzLCB0aGlzLmZpbHRlcmVkRGVsZWdhdGVkQWN0aXZpdHlMaXN0Vmlld01vZGVscyk7XHJcbiAgICAgICAgdGhpcy5fcmVmcmVzaEFjdGl2aXRpZXMoKTtcclxuICAgICAgICB0aGlzLmFmdGVyRmlsdGVyQXBwbGllZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhZnRlckZpbHRlckFwcGxpZWQoKTogdm9pZCB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXRUaGVBY3Rpdml0aWVzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZ2V0QWN0aXZpdGllcygpO1xyXG4gICAgICAgIHRoaXMuZ2V0RGVsZWdhdGVkQWN0aXZpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3JlbW92ZU5vdFNob3dpbmcobGlzdFZpZXdNb2RlbHM6IEFjdGl2aXR5TGlzdFZpZXdNb2RlbFtdKTogdm9pZCB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGxpc3RWaWV3TW9kZWxzLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcclxuICAgICAgICAgICAgY29uc3QgbGlzdFZpZXdNb2RlbDogQWN0aXZpdHlMaXN0Vmlld01vZGVsID0gbGlzdFZpZXdNb2RlbHNbaV07XHJcbiAgICAgICAgICAgIGlmICghbGlzdFZpZXdNb2RlbC5zaG93aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBsaXN0Vmlld01vZGVscy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIGl0ZXJhdGUgdGhyb3VnaCBhY3Rpdml0eVZpZXdNb2RlbHNcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBsaXN0Vmlld01vZGVsLmFjdGl2aXRpZXMubGVuZ3RoIC0gMTsgaiA+IDA7IGotLSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5Vmlld01vZGVsOiBBY3Rpdml0eVZpZXdNb2RlbCA9IGxpc3RWaWV3TW9kZWwuYWN0aXZpdGllc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdGl2aXR5Vmlld01vZGVsLnNob3dpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFZpZXdNb2RlbC5hY3Rpdml0aWVzLnNwbGljZShqLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVByaXZhdGVMaXN0c1dpdGhGaWx0ZXJlZExpc3RzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJpdmF0ZUFjdGl2aXR5TGlzdFZpZXdNb2RlbHMgPVxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQcml2YXRlTGlzdFdpdGhGaWx0ZXJlZExpc3QodGhpcy5wcml2YXRlQWN0aXZpdHlMaXN0Vmlld01vZGVscywgdGhpcy5maWx0ZXJlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbHMpO1xyXG4gICAgICAgIHRoaXMucHJpdmF0ZURlbGVnYXRlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbHMgPVxyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQcml2YXRlTGlzdFdpdGhGaWx0ZXJlZExpc3QodGhpcy5wcml2YXRlRGVsZWdhdGVkQWN0aXZpdHlMaXN0Vmlld01vZGVscywgdGhpcy5maWx0ZXJlZERlbGVnYXRlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2FwcGx5RmlsdGVyKGFjdGl2aXRpZXM6IEFjdGl2aXR5W10sIGZpbHRlcmVkQWN0aXZpdGllczogQWN0aXZpdHlbXSwgZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzOiBBY3Rpdml0eUxpc3RWaWV3TW9kZWxbXSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChpc05pbGwoYWN0aXZpdGllcykpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWRBY3Rpdml0aWVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsdGVyZWRBY3Rpdml0aWVzID0gYWN0aXZpdGllcy5zbGljZSgwKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyRnJvbSAmJiB0aGlzLmZpbHRlclRvKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkQWN0aXZpdGllcyA9XHJcbiAgICAgICAgICAgICAgICBhY3Rpdml0aWVzLmZpbHRlcigoYTogQWN0aXZpdHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYS5leGVjdXRpb25EYXRlVGltZSA9PT0gbnVsbCB8fCBhLm92ZXJEdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERhdGVVdGlscy5Jc0luQmV0d2VlbihhLmV4ZWN1dGlvbkRhdGVUaW1lLCB0aGlzLmZpbHRlckZyb20sIHRoaXMuZmlsdGVyVG8sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsdGVyZWRBY3Rpdml0aWVzLnNvcnQoKGE6IEFjdGl2aXR5LCBiOiBBY3Rpdml0eSkgPT4gYS5kZWFkbGluZURhdGVUaW1lID4gYi5kZWFkbGluZURhdGVUaW1lID8gMSA6IC0xKTtcclxuICAgICAgICB0aGlzLl9zZWFyY2hUZXh0KGZpbHRlcmVkQWN0aXZpdGllcyk7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZVZpZXdNb2RlbHMoZmlsdGVyZWRBY3Rpdml0aWVzLCBmaWx0ZXJlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NlYXJjaFRleHQoZmlsdGVyZWRBY3Rpdml0aWVzOiBBY3Rpdml0eVtdKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFRleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gZmlsdGVyZWRBY3Rpdml0aWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5OiBBY3Rpdml0eSA9IGZpbHRlcmVkQWN0aXZpdGllc1tpXTtcclxuICAgICAgICAgICAgbGV0IGZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBhY3Rpdml0eSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2aXR5Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZpdHlba2V5XS50b1N0cmluZygpLmluZGV4T2YodGhpcy5zZWFyY2hUZXh0KSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcmVkQWN0aXZpdGllcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXBkYXRlUHJpdmF0ZUxpc3RXaXRoRmlsdGVyZWRMaXN0KFxyXG4gICAgICAgIGxpc3RWaWV3TW9kZWxzOiBBY3Rpdml0eUxpc3RWaWV3TW9kZWxbXSxcclxuICAgICAgICBmaWx0ZXJlZExpc3Q6IEFjdGl2aXR5TGlzdFZpZXdNb2RlbFtdXHJcbiAgICApOiBBY3Rpdml0eUxpc3RWaWV3TW9kZWxbXSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogQWN0aXZpdHlMaXN0Vmlld01vZGVsW107XHJcbiAgICAgICAgaWYgKGxpc3RWaWV3TW9kZWxzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBmaWx0ZXJlZExpc3Quc2xpY2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSBsaXN0Vmlld01vZGVscy5zbGljZSgpO1xyXG4gICAgICAgICAgICAvLyBzZXQgc2hvd2luZyB0byBmYWxzZSBmb3IgaXRlbXMgd2hpY2ggYXJlIG5vdCBpbiB0aGUgbGlzdCBhbnltb3JlXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0Vmlld01vZGVsOiBBY3Rpdml0eUxpc3RWaWV3TW9kZWwgPSByZXN1bHRbaV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFZpZXdNb2RlbDogQWN0aXZpdHlMaXN0Vmlld01vZGVsID0gZmlsdGVyZWRMaXN0LmZpbmQoZiA9PiBmLnBvc2l0aW9uID09PSBsaXN0Vmlld01vZGVsLnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyZWRWaWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBmbGFnIGFzIHJlbW92ZWQgd2hlbiBsaXN0dmlld21vZGVsIGlzIG5vIGxvbmdlciBpbiB0aGUgbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RWaWV3TW9kZWwuc2hvd2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3RWaWV3TW9kZWwuYWN0aXZpdGllcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3TW9kZWw6IEFjdGl2aXR5Vmlld01vZGVsID0gbGlzdFZpZXdNb2RlbC5hY3Rpdml0aWVzW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbHRlcmVkVmlld01vZGVsLmFjdGl2aXRpZXMuZmluZChmYSA9PiBmYS5ndWlkID09PSB2aWV3TW9kZWwuZ3VpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsYWcgYXMgcmVtb3ZlZCB3aGVuIHZpZXdtb2RlbCBpcyBubyBsb25nZXIgaW4gdGhlIGxpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5zaG93aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gYWRkIG5ldyBpdGVtc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcmVkTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWw6IEFjdGl2aXR5TGlzdFZpZXdNb2RlbCA9IGZpbHRlcmVkTGlzdFtpXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RWaWV3TW9kZWw6IEFjdGl2aXR5TGlzdFZpZXdNb2RlbCA9IHJlc3VsdC5maW5kKGx2bSA9PiBsdm0ubGFiZWwgPT09IGZpbHRlcmVkQWN0aXZpdHlMaXN0Vmlld01vZGVsLmxhYmVsKTtcclxuICAgICAgICAgICAgICAgIGlmICghbGlzdFZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZpbHRlcmVkQWN0aXZpdHlMaXN0Vmlld01vZGVsKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmaWx0ZXJlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbC5hY3Rpdml0aWVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQWN0aXZpdHlWaWV3TW9kZWw6IEFjdGl2aXR5Vmlld01vZGVsID0gZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWwuYWN0aXZpdGllc1tqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaXN0Vmlld01vZGVsLmFjdGl2aXRpZXMuZmluZChhID0+IGEuYWN0aXZpdHkuZ2V0SWQoKSA9PT0gZmlsdGVyZWRBY3Rpdml0eVZpZXdNb2RlbC5hY3Rpdml0eS5nZXRJZCgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFZpZXdNb2RlbC5hY3Rpdml0aWVzLnB1c2goZmlsdGVyZWRBY3Rpdml0eVZpZXdNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnNvcnQodGhpcy5fc29ydEJ5UG9zaXRpb24pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVmcmVzaEFjdGl2aXRpZXMoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gZmlyc3QgcmVtb3ZlIGl0ZW1zIHdoaWNoIGFyZSBzZXQgaW52aXNpYmxlIGJlZm9yZVxyXG4gICAgICAgIHRoaXMuX3JlbW92ZU5vdFNob3dpbmcodGhpcy5wcml2YXRlQWN0aXZpdHlMaXN0Vmlld01vZGVscyk7XHJcbiAgICAgICAgdGhpcy5fcmVtb3ZlTm90U2hvd2luZyh0aGlzLnByaXZhdGVEZWxlZ2F0ZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzKTtcclxuICAgICAgICAvLyB1cGRhdGUgcHJpdmF0ZSBsaXN0IHdpdGggKG5ldykgZmlsdGVyZWQgbGlzdFxyXG4gICAgICAgIHRoaXMudXBkYXRlUHJpdmF0ZUxpc3RzV2l0aEZpbHRlcmVkTGlzdHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wcmVwYXJlVmlld01vZGVscyhmaWx0ZXJlZEFjdGl2aXRpZXM6IEFjdGl2aXR5W10sIGZpbHRlcmVkQWN0aXZpdHlMaXN0Vmlld01vZGVsczogQWN0aXZpdHlMaXN0Vmlld01vZGVsW10pOiB2b2lkIHtcclxuICAgICAgICBmaWx0ZXJlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbHMubWFwKGFsbSA9PiB7XHJcbiAgICAgICAgICAgIGFsbS5zaG93aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGFsbS5hY3Rpdml0aWVzLm1hcChhYSA9PiBhYS5zaG93aW5nID0gZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChmaWx0ZXJlZEFjdGl2aXRpZXMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJlZEFjdGl2aXRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5OiBBY3Rpdml0eSA9IGZpbHRlcmVkQWN0aXZpdGllc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmICghYWN0aXZpdHkub3ZlckR1ZSAmJiBEYXRlVXRpbHMuSXNUb2RheShhY3Rpdml0eS5kZWFkbGluZURhdGVUaW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFRvQWN0aXZpdHlMaXN0Vmlld01vZGVsKGZpbHRlcmVkQWN0aXZpdHlMaXN0Vmlld01vZGVscywgJ1RPREFZJywgMSwgYWN0aXZpdHkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpdml0eS5vdmVyRHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkVG9BY3Rpdml0eUxpc3RWaWV3TW9kZWwoZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzLCAnVE9PX0xBVEUnLCAyLCBhY3Rpdml0eSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGl2aXR5LmRlYWRsaW5lRGF0ZVRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRUb0FjdGl2aXR5TGlzdFZpZXdNb2RlbChmaWx0ZXJlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbHMsICdORVhUMicsIDMsIGFjdGl2aXR5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkVG9BY3Rpdml0eUxpc3RWaWV3TW9kZWwoZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzLCAnVU5TQ0hFRFVMRUQnLCA0LCBhY3Rpdml0eSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzLnNvcnQodGhpcy5fc29ydEJ5UG9zaXRpb24pO1xyXG4gICAgICAgIHRoaXMuX3NldEFtb3VudExpc3RWaWV3TW9kZWxzKGZpbHRlcmVkQWN0aXZpdHlMaXN0Vmlld01vZGVscyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0QW1vdW50TGlzdFZpZXdNb2RlbHMoZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzOiBBY3Rpdml0eUxpc3RWaWV3TW9kZWxbXSk6IHZvaWQge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkQWN0aXZpdHlMaXN0Vmlld01vZGVsc1tpXS5zZXRBbW91bnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc29ydEJ5UG9zaXRpb24oYTogQWN0aXZpdHlMaXN0Vmlld01vZGVsLCBiOiBBY3Rpdml0eUxpc3RWaWV3TW9kZWwpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBhLnBvc2l0aW9uID4gYi5wb3NpdGlvbiA/IDEgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9hZGRUb0FjdGl2aXR5TGlzdFZpZXdNb2RlbChmaWx0ZXJlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbHM6IEFjdGl2aXR5TGlzdFZpZXdNb2RlbFtdLCBsYWJlbDogc3RyaW5nLCBvcmRlcjogbnVtYmVyLCBhY3Rpdml0eTogQWN0aXZpdHkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhY3Rpdml0eUxpc3RWaWV3TW9kZWw6IEFjdGl2aXR5TGlzdFZpZXdNb2RlbCA9IHRoaXMuX2dldEFjdGl2aXR5TGlzdFZpZXdNb2RlbChmaWx0ZXJlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbHMsIGxhYmVsLCBvcmRlcik7XHJcbiAgICAgICAgYWN0aXZpdHlMaXN0Vmlld01vZGVsLnNob3dpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5Vmlld01vZGVsOiBBY3Rpdml0eVZpZXdNb2RlbCA9IHRoaXMuX2dldEFjdGl2aXR5Vmlld01vZGVsKGFjdGl2aXR5TGlzdFZpZXdNb2RlbCwgYWN0aXZpdHkpO1xyXG4gICAgICAgIGFjdGl2aXR5Vmlld01vZGVsLnNob3dpbmcgPSAhYWN0aXZpdHlWaWV3TW9kZWwuZGVsZXRlZDtcclxuICAgICAgICB0aGlzLl91cGRhdGVWaWV3TW9kZWxDb250ZW50KGFjdGl2aXR5Vmlld01vZGVsLCBhY3Rpdml0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0QWN0aXZpdHlWaWV3TW9kZWwobGlzdFZpZXdNb2RlbDogQWN0aXZpdHlMaXN0Vmlld01vZGVsLCBhY3Rpdml0eTogQWN0aXZpdHkpOiBBY3Rpdml0eVZpZXdNb2RlbCB7XHJcbiAgICAgICAgbGV0IHZpZXdNb2RlbDogQWN0aXZpdHlWaWV3TW9kZWwgPSBsaXN0Vmlld01vZGVsLmFjdGl2aXRpZXMuZmluZChhID0+IGEuYWN0aXZpdHkuZ2V0SWQoKSA9PT0gYWN0aXZpdHkuZ2V0SWQoKSk7XHJcbiAgICAgICAgaWYgKCF2aWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgdmlld01vZGVsID0gbmV3IEFjdGl2aXR5Vmlld01vZGVsKCk7XHJcbiAgICAgICAgICAgIHZpZXdNb2RlbC5hY3Rpdml0eSA9IGFjdGl2aXR5O1xyXG4gICAgICAgICAgICB2aWV3TW9kZWwucGFyZW50ID0gbGlzdFZpZXdNb2RlbDtcclxuICAgICAgICAgICAgbGlzdFZpZXdNb2RlbC5hY3Rpdml0aWVzLnB1c2godmlld01vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHZpZXdNb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRBY3Rpdml0eUxpc3RWaWV3TW9kZWwoZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzOiBBY3Rpdml0eUxpc3RWaWV3TW9kZWxbXSwgbGFiZWw6IHN0cmluZywgb3JkZXI6IG51bWJlcik6IEFjdGl2aXR5TGlzdFZpZXdNb2RlbCB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogQWN0aXZpdHlMaXN0Vmlld01vZGVsID0gZmlsdGVyZWRBY3Rpdml0eUxpc3RWaWV3TW9kZWxzLmZpbmQoYSA9PiBhLmxhYmVsID09PSBsYWJlbCk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEFjdGl2aXR5TGlzdFZpZXdNb2RlbChsYWJlbCwgb3JkZXIpO1xyXG4gICAgICAgICAgICBmaWx0ZXJlZEFjdGl2aXR5TGlzdFZpZXdNb2RlbHMucHVzaChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3N0YXJ0SW50ZXJ2YWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdldFRoZUFjdGl2aXRpZXMoKTtcclxuICAgICAgICB9LCB0aGlzLnJlbG9hZFRpbWVyKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF91cGRhdGVWaWV3TW9kZWxDb250ZW50KGFjdGl2aXR5Vmlld01vZGVsOiBBY3Rpdml0eVZpZXdNb2RlbCwgYWN0aXZpdHk6IEFjdGl2aXR5KTogQWN0aXZpdHlWaWV3TW9kZWwge1xyXG4gICAgICAgIGFjdGl2aXR5Vmlld01vZGVsLmFjdGl2aXR5ID0gYWN0aXZpdHk7XHJcbiAgICAgICAgcmV0dXJuIGFjdGl2aXR5Vmlld01vZGVsO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,41 @@
1
+ import { Component, HostBinding } from "@angular/core";
2
+ import { BaseActivityOverviewComponent } from "../../../activity-overview-component/components/base-activity-overview.component";
3
+ export class PersonalActivityOverviewComponent extends BaseActivityOverviewComponent {
4
+ showClass() {
5
+ return true;
6
+ }
7
+ }
8
+ PersonalActivityOverviewComponent.decorators = [
9
+ { type: Component, args: [{
10
+ selector: "co-personal-activity-overview",
11
+ template: `
12
+ <div class="overview-wrapper pointer-hover" (click)="handleOpenLinkOrUrl($event)">
13
+ <div class="overview-wrapper-labels">
14
+ <div class="activity-title" [textContent]="activityTitle"></div>
15
+ <div class="activity-context-title" [textContent]="activityContextTitle"></div>
16
+ </div>
17
+ <div class="overview-wrapper-date">
18
+ <div class="date-wrapper" [class.overdue]="overDue">
19
+ <ng-container *ngIf="!sameDates">
20
+ <div class="date" [textContent]="targetDate | date:'dd-MM-YYYY'"></div>
21
+ <div class="date-divider" [textContent]="'-'"></div>
22
+ </ng-container>
23
+ <!--TODO REINSTATE AFTER finding what the heck is wrong with date-->
24
+ <!--<div class="date" [textContent]="deadlineDate | date:'dd-MM-YYYY'"></div>-->
25
+ </div>
26
+ </div>
27
+ </div>
28
+ <!--TODO REINSTATE AFTER FIXING FORM-->
29
+ <!-- <co-task-modifier
30
+ (editingComplete)="onSaveActivity($event)"
31
+ (activityDeleted)="onDeleteActivity($event)"
32
+ (showWorkLog)="showTaskFormAndWorkLog()"
33
+ ></co-task-modifier>-->
34
+ <!-- [taskCfgNames]="taskCfgNames"-->
35
+ `
36
+ },] }
37
+ ];
38
+ PersonalActivityOverviewComponent.propDecorators = {
39
+ showClass: [{ type: HostBinding, args: ["class.co-personal-activity-overview",] }]
40
+ };
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uYWwtYWN0aXZpdHktb3ZlcnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvb3Blbi1hY3Rpdml0eS1saXN0L2NvbXBvbmVudHMvcGVyc29uYWwtYWN0aXZpdHktb3ZlcnZpZXcvcGVyc29uYWwtYWN0aXZpdHktb3ZlcnZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFDTCw2QkFBNkIsRUFDOUIsTUFBTSxrRkFBa0YsQ0FBQztBQWtDMUYsTUFBTSxPQUFPLGlDQUFrQyxTQUFRLDZCQUE2QjtJQUUzRSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7WUFuQ0YsU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSwrQkFBK0I7Z0JBQ3pDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBd0JUO2FBSUo7Ozt3QkFFRSxXQUFXLFNBQUMscUNBQXFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEhvc3RCaW5kaW5nfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIEJhc2VBY3Rpdml0eU92ZXJ2aWV3Q29tcG9uZW50XHJcbn0gZnJvbSBcIi4uLy4uLy4uL2FjdGl2aXR5LW92ZXJ2aWV3LWNvbXBvbmVudC9jb21wb25lbnRzL2Jhc2UtYWN0aXZpdHktb3ZlcnZpZXcuY29tcG9uZW50XCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJjby1wZXJzb25hbC1hY3Rpdml0eS1vdmVydmlld1wiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcnZpZXctd3JhcHBlciBwb2ludGVyLWhvdmVyXCIgKGNsaWNrKT1cImhhbmRsZU9wZW5MaW5rT3JVcmwoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcnZpZXctd3JhcHBlci1sYWJlbHNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpdml0eS10aXRsZVwiIFt0ZXh0Q29udGVudF09XCJhY3Rpdml0eVRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aXZpdHktY29udGV4dC10aXRsZVwiIFt0ZXh0Q29udGVudF09XCJhY3Rpdml0eUNvbnRleHRUaXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJ2aWV3LXdyYXBwZXItZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtd3JhcHBlclwiIFtjbGFzcy5vdmVyZHVlXT1cIm92ZXJEdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNhbWVEYXRlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZVwiIFt0ZXh0Q29udGVudF09XCJ0YXJnZXREYXRlIHwgZGF0ZTonZGQtTU0tWVlZWSdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtZGl2aWRlclwiIFt0ZXh0Q29udGVudF09XCInLSdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLVRPRE8gUkVJTlNUQVRFIEFGVEVSIGZpbmRpbmcgd2hhdCB0aGUgaGVjayBpcyB3cm9uZyB3aXRoIGRhdGUtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLTxkaXYgY2xhc3M9XCJkYXRlXCIgW3RleHRDb250ZW50XT1cImRlYWRsaW5lRGF0ZSB8IGRhdGU6J2RkLU1NLVlZWVknXCI+PC9kaXY+LS0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLVRPRE8gUkVJTlNUQVRFIEFGVEVSIEZJWElORyBGT1JNLS0+XHJcbiAgICAgICAgPCEtLSAgPGNvLXRhc2stbW9kaWZpZXJcclxuICAgICAgICAgICAgICAgIChlZGl0aW5nQ29tcGxldGUpPVwib25TYXZlQWN0aXZpdHkoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoYWN0aXZpdHlEZWxldGVkKT1cIm9uRGVsZXRlQWN0aXZpdHkoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoc2hvd1dvcmtMb2cpPVwic2hvd1Rhc2tGb3JtQW5kV29ya0xvZygpXCJcclxuICAgICAgICA+PC9jby10YXNrLW1vZGlmaWVyPi0tPlxyXG4gICAgICA8IS0tICBbdGFza0NmZ05hbWVzXT1cInRhc2tDZmdOYW1lc1wiLS0+XHJcbiAgICBgLFxyXG4gICAvKiBwcm92aWRlcnM6IFtcclxuICAgICAgICB7cHJvdmlkZTogQmFzZU1vZHVsZVNjcmVlbkNvbmZpZ1NlcnZpY2UsIHVzZUV4aXN0aW5nOiBBY3Rpdml0eVNjcmVlbkNvbmZpZ1NlcnZpY2V9XHJcbiAgICBdLCovXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJzb25hbEFjdGl2aXR5T3ZlcnZpZXdDb21wb25lbnQgZXh0ZW5kcyBCYXNlQWN0aXZpdHlPdmVydmlld0NvbXBvbmVudCB7XHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY28tcGVyc29uYWwtYWN0aXZpdHktb3ZlcnZpZXdcIilcclxuICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { CommonModule } from "@angular/common";
3
+ import { PersonalActivityOverviewComponent } from "./personal-activity-overview.component";
4
+ export class PersonalActivityOverviewModule {
5
+ }
6
+ PersonalActivityOverviewModule.decorators = [
7
+ { type: NgModule, args: [{
8
+ imports: [
9
+ CommonModule
10
+ ],
11
+ declarations: [
12
+ PersonalActivityOverviewComponent
13
+ ],
14
+ exports: [
15
+ PersonalActivityOverviewComponent
16
+ ]
17
+ },] }
18
+ ];
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uYWwtYWN0aXZpdHktb3ZlcnZpZXcubW9kdWxlLi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZGNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL29wZW4tYWN0aXZpdHktbGlzdC9jb21wb25lbnRzL3BlcnNvbmFsLWFjdGl2aXR5LW92ZXJ2aWV3L3BlcnNvbmFsLWFjdGl2aXR5LW92ZXJ2aWV3Lm1vZHVsZS4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFhekYsTUFBTSxPQUFPLDhCQUE4Qjs7O1lBWDFDLFFBQVEsU0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsWUFBWTtpQkFDYjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1osaUNBQWlDO2lCQUNsQztnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsaUNBQWlDO2lCQUNsQzthQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtQZXJzb25hbEFjdGl2aXR5T3ZlcnZpZXdDb21wb25lbnR9IGZyb20gXCIuL3BlcnNvbmFsLWFjdGl2aXR5LW92ZXJ2aWV3LmNvbXBvbmVudFwiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGVcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgUGVyc29uYWxBY3Rpdml0eU92ZXJ2aWV3Q29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBQZXJzb25hbEFjdGl2aXR5T3ZlcnZpZXdDb21wb25lbnRcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJzb25hbEFjdGl2aXR5T3ZlcnZpZXdNb2R1bGUge1xyXG5cclxufVxyXG4iXX0=
@@ -17,11 +17,12 @@ export class SimpleTagsComponent {
17
17
  }
18
18
  set tags(tags) {
19
19
  this._tags = tags;
20
- this.setRootDisplayTags();
20
+ }
21
+ get tags() {
22
+ return this._tags;
21
23
  }
22
24
  set linkedTags(tags) {
23
25
  this._linkedTags = tags;
24
- tags.forEach((tag) => this._loadThumbnail(tag));
25
26
  }
26
27
  get linkedTags() {
27
28
  return this._linkedTags;
@@ -29,78 +30,10 @@ export class SimpleTagsComponent {
29
30
  showClass() {
30
31
  return true;
31
32
  }
32
- setRootDisplayTags() {
33
- this.displayTags = this._tags.filter((tag) => tag.treeLevel === 0);
34
- this.breadCrumbs = [];
35
- this.searchString = '';
36
- }
37
- handleTagSelected(selectedTag) {
38
- if (selectedTag.tagType === 'TR' || selectedTag.tagType === 'TG') {
39
- if (selectedTag !== this.breadCrumbs[0]) {
40
- this.breadCrumbs.push(selectedTag);
41
- }
42
- this.displayTags = this._tags.filter((tag) => {
43
- return tag.parentId === selectedTag.id && tag.treeLevel === selectedTag.treeLevel + 1;
44
- });
45
- }
46
- }
47
- handleCrumbClicked(tag, index) {
48
- if (tag !== this.breadCrumbs[this.breadCrumbs.length - 1]) {
49
- this.breadCrumbs.splice(index + 1);
50
- this.handleTagSelected(tag);
51
- }
52
- }
53
- handleAddTag(event) {
54
- const draggedTag = this.displayTags[event.previousIndex];
55
- if (!this._linkedTags.includes(draggedTag)) {
56
- this._linkedTags.push(this.displayTags[event.previousIndex]);
57
- this._loadThumbnail(draggedTag);
58
- }
59
- }
60
- deleteLinkedTag(tag) {
61
- this._linkedTags.splice(this._linkedTags.indexOf(tag), 1);
62
- }
63
- searchCollection() {
64
- if (!this.searchString) {
65
- this.searchString = '';
66
- this.setRootDisplayTags();
67
- return;
68
- }
69
- if (this.searchString.length < 2) {
70
- return;
71
- }
72
- if (this.searchString === '') {
73
- this.setRootDisplayTags();
74
- return;
75
- }
76
- const matchingObjects = [];
77
- this._tags.filter((item) => item.tagType === 'T').forEach((obj) => {
78
- Object.values(obj).forEach((value) => {
79
- if (typeof value === 'string' || typeof value === 'number') {
80
- const stringValue = String(value).toLowerCase();
81
- if (stringValue.includes(this.searchString.toLowerCase())) {
82
- matchingObjects.push(obj);
83
- }
84
- }
85
- });
86
- });
87
- this.displayTags = matchingObjects;
88
- this.breadCrumbs = [];
89
- }
90
33
  handleSaveTags() {
91
34
  this.saveClick.next(this._linkedTags);
92
35
  this.closeClick.next();
93
36
  }
94
- _loadThumbnail(tagTreeItem) {
95
- if (tagTreeItem.image && tagTreeItem.image.documentId && !tagTreeItem.image.thumbnailBody) {
96
- this.sharedService.getDocumentContent(tagTreeItem.image.documentId, true)
97
- .then((result) => {
98
- if (result) {
99
- tagTreeItem.image.thumbnailBody = result;
100
- }
101
- });
102
- }
103
- }
104
37
  }
105
38
  SimpleTagsComponent.decorators = [
106
39
  { type: Component, args: [{
@@ -119,82 +52,7 @@ SimpleTagsComponent.decorators = [
119
52
  </ng-template>
120
53
 
121
54
  <div class="dialog-content-wrapper">
122
- <div class="collection-navigation co-small-scrollbar">
123
- <span class="title" [textContent]="'Beschikbare tags'"></span>
124
- <co-input-search
125
- [(model)]="searchString"
126
- [placeholder]="'Search for tag name'"
127
- (search)="searchCollection()"
128
- (modelChange)="searchCollection()"
129
- (rightIconClick)="searchCollection()"
130
- ></co-input-search>
131
- <div class="breadcrumbs">
132
- <co-icon
133
- [iconData]="iconCacheService.getIcon(icon.HouseBlankRegular)"
134
- (click)="setRootDisplayTags()"
135
- ></co-icon>
136
- <div class="crumbs">
137
- <span class="spacer" [textContent]="'|'"></span>
138
- <div class="crumb" *ngFor="let crumb of breadCrumbs; let index = index" (click)="handleCrumbClicked(crumb, index)">
139
- <span class="spacer" *ngIf="index !== 0" [textContent]="'/'"></span>
140
- <span [textContent]="crumb.description"></span>
141
- </div>
142
- </div>
143
- </div>
144
- <div class="collection-view"
145
- cdkDropList
146
- cdkDropListSortingDisabled
147
- #collectionList="cdkDropList"
148
- [cdkDropListData]="displayTags"
149
- [cdkDropListConnectedTo]="[linkedList]"
150
- ><div class="collection-item"
151
- *ngFor="let tag of displayTags"
152
- cdkDrag
153
- [cdkDragDisabled]="tag.tagType !== 'T' || linkedTags.includes(tag)"
154
- [class.draggable]="tag.tagType === 'T' && !linkedTags.includes(tag)"
155
- [class.disabled]="linkedTags.includes(tag)"
156
- (click)="handleTagSelected(tag)">
157
-
158
- <div class="collection-item" *cdkDragPlaceholder>
159
- <co-icon *ngIf="tag.tagType === 'T'" [iconData]="iconCacheService.getIcon(icon.TagRegular)"></co-icon>
160
- <span [textContent]="tag.description"></span>
161
- </div>
162
-
163
- <div *cdkDragPreview><co-icon [iconData]="iconCacheService.getIcon(icon.TagRegular)"></co-icon></div>
164
-
165
- <co-icon *ngIf="tag.tagType === 'T'" [iconData]="iconCacheService.getIcon(icon.TagRegular)"></co-icon>
166
- <span [textContent]="tag.description"></span>
167
- </div>
168
- </div>
169
- </div>
170
-
171
- <div class="linked-tags-view">
172
- <span class="title" [textContent]="'Gekoppelde tags'"></span>
173
- <div class="view-wrapper"
174
- cdkDropList
175
- #linkedList="cdkDropList"
176
- [cdkDropListData]="linkedTags"
177
- (cdkDropListDropped)="handleAddTag($event)">
178
- <div class="tag-item" *ngFor="let tag of linkedTags" [cdkDragDisabled]="true" cdkDrag [style.background-color]="tag.color?.replace('0x', '#')">
179
- <div class="placeholderLinked" *cdkDragPlaceholder></div>
180
-
181
- <div class="thumbnail-description">
182
- <co-icon *ngIf="!tag.image?.thumbnailBody" [iconData]="iconCacheService.getIcon(icon.TagRegular)"></co-icon>
183
- <div *ngIf="tag.image" class="thumbnail-wrapper">
184
- <img [src]="tag.image.thumbnailBodyAsDataUri">
185
- </div>
186
-
187
- <div class="description-wrapper">
188
- <span [textContent]="tag.parentDescription"></span>
189
- <span class="description" [textContent]="tag.description"></span>
190
- </div>
191
- </div>
192
- <co-icon class="delete-tag" (click)="deleteLinkedTag(tag)"
193
- [iconData]="iconCacheService.getIcon(icon.XSolid)"
194
- ></co-icon>
195
- </div>
196
- </div>
197
- </div>
55
+ <co-simple-tags-form [tags]="tags" [(linkedTags)]="linkedTags"></co-simple-tags-form>
198
56
  </div>
199
57
 
200
58
  <ng-template #footerTemplate>
@@ -226,4 +84,4 @@ SimpleTagsComponent.propDecorators = {
226
84
  saveClick: [{ type: Output }],
227
85
  showClass: [{ type: HostBinding, args: ["class.co-simple-tags",] }]
228
86
  };
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXRhZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2ltcGxlLXRhZ3Mvc2ltcGxlLXRhZ3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUUxQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFrSDNELE1BQU0sT0FBTyxtQkFBbUI7SUFxQzlCLFlBQ1MsZ0JBQWtDLEVBQ2xDLGFBQTRCO1FBRDVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUF0Q3JCLFNBQUksR0FBZ0IsSUFBSSxDQUFDO1FBbUJsQyxlQUFVLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFHMUQsY0FBUyxHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUUzRSxnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFDaEMsZ0JBQVcsR0FBa0IsRUFBRSxDQUFDO1FBQ2hDLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBRXpCLFVBQUssR0FBa0IsRUFBRSxDQUFDO1FBQzFCLGdCQUFXLEdBQWtCLEVBQUUsQ0FBQztJQVVwQyxDQUFDO0lBckNMLElBQ1csSUFBSSxDQUFDLElBQW1CO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFF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YSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztpQkFDdEUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO2lCQUMxQztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDOzs7WUExT0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBHVDtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O1lBcEhPLGdCQUFnQjtZQUdoQixhQUFhOzs7bUJBcUhsQixLQUFLO3lCQU1MLEtBQUs7eUJBVUwsTUFBTTt3QkFHTixNQUFNO3dCQVVOLFdBQVcsU0FBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7SWNvbkNhY2hlU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvaWNvbi1jYWNoZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7SWNvbn0gZnJvbSBcIi4uLy4uL2VudW0vaWNvbi5lbnVtXCI7XHJcbmltcG9ydCB7Q2RrRHJhZ0Ryb3B9IGZyb20gXCJAYW5ndWxhci9jZGsvZHJhZy1kcm9wXCI7XHJcbmltcG9ydCB7U2hhcmVkU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2Uvc2hhcmVkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtUYWdUcmVlSXRlbX0gZnJvbSBcIkBjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3RhZy10cmVlLWl0ZW0uYm9cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImNvLXNpbXBsZS10YWdzXCIsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxjby1kaWFsb2dcclxuICAgICAgW2hlYWRlclRlbXBsYXRlXT1cImhlYWRlclRlbXBsYXRlXCJcclxuICAgICAgW2Zvb3RlclRlbXBsYXRlXT1cImZvb3RlclRlbXBsYXRlXCJcclxuICAgICAgKGNsb3NlQ2xpY2spPVwiY2xvc2VDbGljay5lbWl0KClcIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItd3JhcHBlclwiPlxyXG4gICAgICAgICAgPGNvLWljb24gW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29uLlRhZ1JlZ3VsYXIpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjby1kaWFsb2ctaGVhZGVyLXRpdGxlXCIgW3RleHRDb250ZW50XT1cIidUYWdzJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctY29udGVudC13cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxlY3Rpb24tbmF2aWdhdGlvbiBjby1zbWFsbC1zY3JvbGxiYXJcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIiBbdGV4dENvbnRlbnRdPVwiJ0Jlc2NoaWtiYXJlIHRhZ3MnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPGNvLWlucHV0LXNlYXJjaFxyXG4gICAgICAgICAgICBbKG1vZGVsKV09XCJzZWFyY2hTdHJpbmdcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBmb3IgdGFnIG5hbWUnXCJcclxuICAgICAgICAgICAgKHNlYXJjaCk9XCJzZWFyY2hDb2xsZWN0aW9uKClcIlxyXG4gICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwic2VhcmNoQ29sbGVjdGlvbigpXCJcclxuICAgICAgICAgICAgKHJpZ2h0SWNvbkNsaWNrKT1cInNlYXJjaENvbGxlY3Rpb24oKVwiXHJcbiAgICAgICAgICA+PC9jby1pbnB1dC1zZWFyY2g+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJlYWRjcnVtYnNcIj5cclxuICAgICAgICAgICAgPGNvLWljb25cclxuICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb24uSG91c2VCbGFua1JlZ3VsYXIpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0Um9vdERpc3BsYXlUYWdzKClcIlxyXG4gICAgICAgICAgICA+PC9jby1pY29uPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3J1bWJzXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGFjZXJcIiBbdGV4dENvbnRlbnRdPVwiJ3wnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcnVtYlwiICpuZ0Zvcj1cImxldCBjcnVtYiBvZiBicmVhZENydW1iczsgbGV0IGluZGV4ID0gaW5kZXhcIiAoY2xpY2spPVwiaGFuZGxlQ3J1bWJDbGlja2VkKGNydW1iLCBpbmRleClcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BhY2VyXCIgKm5nSWY9XCJpbmRleCAhPT0gMFwiIFt0ZXh0Q29udGVudF09XCInLydcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwiY3J1bWIuZGVzY3JpcHRpb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGVjdGlvbi12aWV3XCJcclxuICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcclxuICAgICAgICAgICAgICAgY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRcclxuICAgICAgICAgICAgICAgI2NvbGxlY3Rpb25MaXN0PVwiY2RrRHJvcExpc3RcIlxyXG4gICAgICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImRpc3BsYXlUYWdzXCJcclxuICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiW2xpbmtlZExpc3RdXCJcclxuICAgICAgICAgID48ZGl2IGNsYXNzPVwiY29sbGVjdGlvbi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0YWcgb2YgZGlzcGxheVRhZ3NcIlxyXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xyXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCJ0YWcudGFnVHlwZSAhPT0gJ1QnIHx8IGxpbmtlZFRhZ3MuaW5jbHVkZXModGFnKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZHJhZ2dhYmxlXT1cInRhZy50YWdUeXBlID09PSAnVCcgJiYgIWxpbmtlZFRhZ3MuaW5jbHVkZXModGFnKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwibGlua2VkVGFncy5pbmNsdWRlcyh0YWcpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVUYWdTZWxlY3RlZCh0YWcpXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGVjdGlvbi1pdGVtXCIgKmNka0RyYWdQbGFjZWhvbGRlcj5cclxuICAgICAgICAgICAgICA8Y28taWNvbiAqbmdJZj1cInRhZy50YWdUeXBlID09PSAnVCdcIiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb24uVGFnUmVndWxhcilcIj48L2NvLWljb24+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cInRhZy5kZXNjcmlwdGlvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpjZGtEcmFnUHJldmlldz48Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb24uVGFnUmVndWxhcilcIj48L2NvLWljb24+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8Y28taWNvbiAqbmdJZj1cInRhZy50YWdUeXBlID09PSAnVCdcIiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb24uVGFnUmVndWxhcilcIj48L2NvLWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJ0YWcuZGVzY3JpcHRpb25cIj48L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlua2VkLXRhZ3Mtdmlld1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiIFt0ZXh0Q29udGVudF09XCInR2Vrb3BwZWxkZSB0YWdzJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3LXdyYXBwZXJcIlxyXG4gICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxyXG4gICAgICAgICAgICAgICAjbGlua2VkTGlzdD1cImNka0Ryb3BMaXN0XCJcclxuICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJsaW5rZWRUYWdzXCJcclxuICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJoYW5kbGVBZGRUYWcoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFnLWl0ZW1cIiAqbmdGb3I9XCJsZXQgdGFnIG9mIGxpbmtlZFRhZ3NcIiBbY2RrRHJhZ0Rpc2FibGVkXT1cInRydWVcIiBjZGtEcmFnIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInRhZy5jb2xvcj8ucmVwbGFjZSgnMHgnLCAnIycpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsYWNlaG9sZGVyTGlua2VkXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRodW1ibmFpbC1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPGNvLWljb24gKm5nSWY9XCIhdGFnLmltYWdlPy50aHVtYm5haWxCb2R5XCIgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29uLlRhZ1JlZ3VsYXIpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRhZy5pbWFnZVwiIGNsYXNzPVwidGh1bWJuYWlsLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInRhZy5pbWFnZS50aHVtYm5haWxCb2R5QXNEYXRhVXJpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb24td3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwidGFnLnBhcmVudERlc2NyaXB0aW9uXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW3RleHRDb250ZW50XT1cInRhZy5kZXNjcmlwdGlvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxjby1pY29uIGNsYXNzPVwiZGVsZXRlLXRhZ1wiIChjbGljayk9XCJkZWxldGVMaW5rZWRUYWcodGFnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29uLlhTb2xpZClcIlxyXG4gICAgICAgICAgICAgID48L2NvLWljb24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZGlhbG9nLWZvb3Rlci1idXR0b24td3JhcHBlclwiPlxyXG4gICAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCJcclxuICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29uLkNoZWNrRHVvdG9uZSlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2F2ZVRhZ3MoKVwiXHJcbiAgICAgICAgICA+PC9jby1idXR0b24+XHJcbiAgICAgICAgICA8Y28tYnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCJcclxuICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29uLkNyb3NzU2tpbm55KVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUNsaWNrLm5leHQoKVwiXHJcbiAgICAgICAgICA+PC9jby1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2NvLWRpYWxvZz5cclxuICBgLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZVRhZ3NDb21wb25lbnQge1xyXG4gIHB1YmxpYyByZWFkb25seSBpY29uOiB0eXBlb2YgSWNvbiA9IEljb247XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCB0YWdzKHRhZ3M6IFRhZ1RyZWVJdGVtW10pIHtcclxuICAgIHRoaXMuX3RhZ3MgPSB0YWdzO1xyXG4gICAgdGhpcy5zZXRSb290RGlzcGxheVRhZ3MoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBsaW5rZWRUYWdzKHRhZ3M6IFRhZ1RyZWVJdGVtW10pIHtcclxuICAgIHRoaXMuX2xpbmtlZFRhZ3MgPSB0YWdzO1xyXG4gICAgdGFncy5mb3JFYWNoKCh0YWcpID0+IHRoaXMuX2xvYWRUaHVtYm5haWwodGFnKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGxpbmtlZFRhZ3MoKTogVGFnVHJlZUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGlua2VkVGFncztcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBjbG9zZUNsaWNrOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBzYXZlQ2xpY2s6IEV2ZW50RW1pdHRlcjxUYWdUcmVlSXRlbVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFnVHJlZUl0ZW1bXT4oKTtcclxuXHJcbiAgcHVibGljIGJyZWFkQ3J1bWJzOiBUYWdUcmVlSXRlbVtdID0gW107XHJcbiAgcHVibGljIGRpc3BsYXlUYWdzOiBUYWdUcmVlSXRlbVtdID0gW107XHJcbiAgcHVibGljIHNlYXJjaFN0cmluZzogc3RyaW5nID0gJyc7XHJcblxyXG4gIHByaXZhdGUgX3RhZ3M6IFRhZ1RyZWVJdGVtW10gPSBbXTtcclxuICBwcml2YXRlIF9saW5rZWRUYWdzOiBUYWdUcmVlSXRlbVtdID0gW107XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzLmNvLXNpbXBsZS10YWdzXCIpXHJcbiAgcHVibGljIHNob3dDbGFzcygpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgaWNvbkNhY2hlU2VydmljZTogSWNvbkNhY2hlU2VydmljZSxcclxuICAgIHB1YmxpYyBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxyXG4gICkgeyB9XHJcblxyXG4gIHB1YmxpYyBzZXRSb290RGlzcGxheVRhZ3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc3BsYXlUYWdzID0gdGhpcy5fdGFncy5maWx0ZXIoKHRhZzogVGFnVHJlZUl0ZW0pID0+IHRhZy50cmVlTGV2ZWwgPT09IDApO1xyXG4gICAgdGhpcy5icmVhZENydW1icyA9IFtdO1xyXG4gICAgdGhpcy5zZWFyY2hTdHJpbmcgPSAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVUYWdTZWxlY3RlZChzZWxlY3RlZFRhZzogVGFnVHJlZUl0ZW0pOiB2b2lkIHtcclxuICAgIGlmIChzZWxlY3RlZFRhZy50YWdUeXBlID09PSAnVFInIHx8IHNlbGVjdGVkVGFnLnRhZ1R5cGUgPT09ICdURycpIHtcclxuICAgICAgaWYgKHNlbGVjdGVkVGFnICE9PSB0aGlzLmJyZWFkQ3J1bWJzWzBdKSB7XHJcbiAgICAgICAgdGhpcy5icmVhZENydW1icy5wdXNoKHNlbGVjdGVkVGFnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRpc3BsYXlUYWdzID0gdGhpcy5fdGFncy5maWx0ZXIoKHRhZzogVGFnVHJlZUl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gdGFnLnBhcmVudElkID09PSBzZWxlY3RlZFRhZy5pZCAmJiB0YWcudHJlZUxldmVsID09PSBzZWxlY3RlZFRhZy50cmVlTGV2ZWwgKyAxXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNydW1iQ2xpY2tlZCh0YWc6IFRhZ1RyZWVJdGVtLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGFnICE9PSB0aGlzLmJyZWFkQ3J1bWJzW3RoaXMuYnJlYWRDcnVtYnMubGVuZ3RoIC0gMV0pIHtcclxuICAgICAgdGhpcy5icmVhZENydW1icy5zcGxpY2UoaW5kZXggKyAxKTtcclxuICAgICAgdGhpcy5oYW5kbGVUYWdTZWxlY3RlZCh0YWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUFkZFRhZyhldmVudDogQ2RrRHJhZ0Ryb3A8VGFnVHJlZUl0ZW1bXSwgYW55Pik6IHZvaWQge1xyXG4gICAgY29uc3QgZHJhZ2dlZFRhZzogVGFnVHJlZUl0ZW0gPSB0aGlzLmRpc3BsYXlUYWdzW2V2ZW50LnByZXZpb3VzSW5kZXhdO1xyXG4gICAgaWYgKCF0aGlzLl9saW5rZWRUYWdzLmluY2x1ZGVzKGRyYWdnZWRUYWcpKSB7XHJcbiAgICAgIHRoaXMuX2xpbmtlZFRhZ3MucHVzaCh0aGlzLmRpc3BsYXlUYWdzW2V2ZW50LnByZXZpb3VzSW5kZXhdKTtcclxuICAgICAgdGhpcy5fbG9hZFRodW1ibmFpbChkcmFnZ2VkVGFnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVMaW5rZWRUYWcodGFnOiBUYWdUcmVlSXRlbSk6IHZvaWQge1xyXG4gICAgdGhpcy5fbGlua2VkVGFncy5zcGxpY2UodGhpcy5fbGlua2VkVGFncy5pbmRleE9mKHRhZyksIDEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlYXJjaENvbGxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gJyc7XHJcbiAgICAgIHRoaXMuc2V0Um9vdERpc3BsYXlUYWdzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlYXJjaFN0cmluZy5sZW5ndGggPCAyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlYXJjaFN0cmluZyA9PT0gJycpIHtcclxuICAgICAgdGhpcy5zZXRSb290RGlzcGxheVRhZ3MoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hdGNoaW5nT2JqZWN0czogVGFnVHJlZUl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIHRoaXMuX3RhZ3MuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRhZ1R5cGUgPT09ICdUJykuZm9yRWFjaCgob2JqKSA9PiB7XHJcbiAgICAgIE9iamVjdC52YWx1ZXMob2JqKS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlLmluY2x1ZGVzKHRoaXMuc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIG1hdGNoaW5nT2JqZWN0cy5wdXNoKG9iaik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGlzcGxheVRhZ3MgPSBtYXRjaGluZ09iamVjdHM7XHJcbiAgICB0aGlzLmJyZWFkQ3J1bWJzID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlU2F2ZVRhZ3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNhdmVDbGljay5uZXh0KHRoaXMuX2xpbmtlZFRhZ3MpO1xyXG4gICAgdGhpcy5jbG9zZUNsaWNrLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRUaHVtYm5haWwodGFnVHJlZUl0ZW06IFRhZ1RyZWVJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAodGFnVHJlZUl0ZW0uaW1hZ2UgJiYgdGFnVHJlZUl0ZW0uaW1hZ2UuZG9jdW1lbnRJZCAmJiAhdGFnVHJlZUl0ZW0uaW1hZ2UudGh1bWJuYWlsQm9keSkge1xyXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0RG9jdW1lbnRDb250ZW50KHRhZ1RyZWVJdGVtLmltYWdlLmRvY3VtZW50SWQsIHRydWUpXHJcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICB0YWdUcmVlSXRlbS5pbWFnZS50aHVtYm5haWxCb2R5ID0gcmVzdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLXRhZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvc2ltcGxlLXRhZ3Mvc2ltcGxlLXRhZ3MuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUUxQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUF1QzNELE1BQU0sT0FBTyxtQkFBbUI7SUF1QzlCLFlBQ1MsZ0JBQWtDLEVBQ2xDLGFBQTRCO1FBRDVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUF4Q3JCLFNBQUksR0FBZ0IsSUFBSSxDQUFDO1FBcUJsQyxlQUFVLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFHMUQsY0FBUyxHQUFnQyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUUzRSxnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFDaEMsZ0JBQVcsR0FBa0IsRUFBRSxDQUFDO1FBQ2hDLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBRXpCLFVBQUssR0FBa0IsRUFBRSxDQUFDO1FBQzFCLGdCQUFXLEdBQWtCLEVBQUUsQ0FBQztJQVVwQyxDQUFDO0lBdkNMLElBQ1csSUFBSSxDQUFDLElBQW1CO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQ1csVUFBVSxDQUFDLElBQW1CO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFnQk0sU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQU9NLGNBQWM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7O1lBbkZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQlQ7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7OztZQXpDTyxnQkFBZ0I7WUFHaEIsYUFBYTs7O21CQTBDbEIsS0FBSzt5QkFTTCxLQUFLO3lCQVNMLE1BQU07d0JBR04sTUFBTTt3QkFVTixXQUFXLFNBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0ljb25DYWNoZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL2ljb24tY2FjaGUuc2VydmljZVwiO1xyXG5pbXBvcnQge0ljb259IGZyb20gXCIuLi8uLi9lbnVtL2ljb24uZW51bVwiO1xyXG5pbXBvcnQge0Nka0RyYWdEcm9wfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xyXG5pbXBvcnQge1NoYXJlZFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlL3NoYXJlZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7VGFnVHJlZUl0ZW19IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC90YWctdHJlZS1pdGVtLmJvXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJjby1zaW1wbGUtdGFnc1wiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8Y28tZGlhbG9nXHJcbiAgICAgIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiXHJcbiAgICAgIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXHJcbiAgICAgIChjbG9zZUNsaWNrKT1cImNsb3NlQ2xpY2suZW1pdCgpXCJcclxuICAgID5cclxuICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXdyYXBwZXJcIj5cclxuICAgICAgICAgIDxjby1pY29uIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbi5UYWdSZWd1bGFyKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY28tZGlhbG9nLWhlYWRlci10aXRsZVwiIFt0ZXh0Q29udGVudF09XCInVGFncydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWNvbnRlbnQtd3JhcHBlclwiPlxyXG4gICAgICAgIDxjby1zaW1wbGUtdGFncy1mb3JtIFt0YWdzXT1cInRhZ3NcIiBbKGxpbmtlZFRhZ3MpXT1cImxpbmtlZFRhZ3NcIj48L2NvLXNpbXBsZS10YWdzLWZvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY28tZGlhbG9nLWZvb3Rlci1idXR0b24td3JhcHBlclwiPlxyXG4gICAgICAgICAgPGNvLWJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCJcclxuICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29uLkNoZWNrRHVvdG9uZSlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2F2ZVRhZ3MoKVwiXHJcbiAgICAgICAgICA+PC9jby1idXR0b24+XHJcbiAgICAgICAgICA8Y28tYnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCJcclxuICAgICAgICAgICAgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29uLkNyb3NzU2tpbm55KVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUNsaWNrLm5leHQoKVwiXHJcbiAgICAgICAgICA+PC9jby1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2NvLWRpYWxvZz5cclxuICBgLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFNpbXBsZVRhZ3NDb21wb25lbnQge1xyXG4gIHB1YmxpYyByZWFkb25seSBpY29uOiB0eXBlb2YgSWNvbiA9IEljb247XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCB0YWdzKHRhZ3M6IFRhZ1RyZWVJdGVtW10pIHtcclxuICAgIHRoaXMuX3RhZ3MgPSB0YWdzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0YWdzKCk6IFRhZ1RyZWVJdGVtW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhZ3M7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgbGlua2VkVGFncyh0YWdzOiBUYWdUcmVlSXRlbVtdKSB7XHJcbiAgICB0aGlzLl9saW5rZWRUYWdzID0gdGFncztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbGlua2VkVGFncygpOiBUYWdUcmVlSXRlbVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9saW5rZWRUYWdzO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGNsb3NlQ2xpY2s6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIHNhdmVDbGljazogRXZlbnRFbWl0dGVyPFRhZ1RyZWVJdGVtW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWdUcmVlSXRlbVtdPigpO1xyXG5cclxuICBwdWJsaWMgYnJlYWRDcnVtYnM6IFRhZ1RyZWVJdGVtW10gPSBbXTtcclxuICBwdWJsaWMgZGlzcGxheVRhZ3M6IFRhZ1RyZWVJdGVtW10gPSBbXTtcclxuICBwdWJsaWMgc2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcHJpdmF0ZSBfdGFnczogVGFnVHJlZUl0ZW1bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2xpbmtlZFRhZ3M6IFRhZ1RyZWVJdGVtW10gPSBbXTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuY28tc2ltcGxlLXRhZ3NcIilcclxuICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBpY29uQ2FjaGVTZXJ2aWNlOiBJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXHJcbiAgKSB7IH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVNhdmVUYWdzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zYXZlQ2xpY2submV4dCh0aGlzLl9saW5rZWRUYWdzKTtcclxuICAgIHRoaXMuY2xvc2VDbGljay5uZXh0KCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==