@netgrif/components-core 6.1.1 → 6.2.0-rc.11

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 (126) hide show
  1. package/esm2020/assets/i18n/de.json +19 -1
  2. package/esm2020/assets/i18n/en.json +19 -1
  3. package/esm2020/assets/i18n/sk.json +20 -2
  4. package/esm2020/lib/authorization/permission/access.service.mjs +74 -0
  5. package/esm2020/lib/authorization/public-api.mjs +2 -1
  6. package/esm2020/lib/data-fields/file-field/abstract-file-field.component.mjs +8 -3
  7. package/esm2020/lib/data-fields/file-list-field/abstract-file-list-field.component.mjs +7 -2
  8. package/esm2020/lib/dialog/components/prompt-dialog/prompt-dialog.component.mjs +3 -3
  9. package/esm2020/lib/filter/models/case-search-request-body.mjs +1 -1
  10. package/esm2020/lib/header/abstract-header-service.mjs +15 -8
  11. package/esm2020/lib/header/abstract-header.component.mjs +2 -2
  12. package/esm2020/lib/header/case-header/case-header.service.mjs +2 -2
  13. package/esm2020/lib/header/header-modes/search-mode/abstract-search-mode.component.mjs +3 -2
  14. package/esm2020/lib/header/task-header/task-header.service.mjs +7 -4
  15. package/esm2020/lib/header/workflow-header/workflow-header.service.mjs +11 -8
  16. package/esm2020/lib/navigation/model/uri-resource.mjs +6 -0
  17. package/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +386 -0
  18. package/esm2020/lib/navigation/navigation-tree/abstract-navigation-tree.component.mjs +15 -62
  19. package/esm2020/lib/navigation/public-api.mjs +5 -1
  20. package/esm2020/lib/navigation/service/uri-resource.service.mjs +35 -0
  21. package/esm2020/lib/navigation/service/uri.service.mjs +194 -0
  22. package/esm2020/lib/panel/abstract/panel-with-immediate-data.mjs +51 -20
  23. package/esm2020/lib/panel/abstract-panel.component.mjs +23 -5
  24. package/esm2020/lib/panel/case-panel/abstract-case-panel.component.mjs +2 -2
  25. package/esm2020/lib/panel/configuration/config-params.mjs +5 -0
  26. package/esm2020/lib/panel/public-api.mjs +5 -1
  27. package/esm2020/lib/panel/task-panel/abstract-task-panel.component.mjs +36 -6
  28. package/esm2020/lib/panel/task-panel/models/task-panel-context.mjs +2 -0
  29. package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.mjs +2 -2
  30. package/esm2020/lib/panel/task-panel-single/abstract-single-task.component.mjs +81 -0
  31. package/esm2020/lib/panel/workflow-panel/abstract-workflow-panel.component.mjs +9 -4
  32. package/esm2020/lib/process/net.mjs +8 -1
  33. package/esm2020/lib/process/public-api.mjs +3 -1
  34. package/esm2020/lib/public/factories/public-factory-resolver.mjs +3 -3
  35. package/esm2020/lib/resources/engine-endpoint/petri-net-resource.service.mjs +2 -2
  36. package/esm2020/lib/resources/engine-endpoint/public/public-task-resource.service.mjs +1 -40
  37. package/esm2020/lib/resources/engine-endpoint/task-resource.service.mjs +4 -1
  38. package/esm2020/lib/resources/interface/case.mjs +1 -1
  39. package/esm2020/lib/resources/interface/petri-net-reference.mjs +1 -1
  40. package/esm2020/lib/resources/interface/task-pair.mjs +2 -0
  41. package/esm2020/lib/resources/public-api.mjs +2 -1
  42. package/esm2020/lib/routing/redirect-service/redirect.service.mjs +2 -1
  43. package/esm2020/lib/routing/routing-builder/routing-builder.service.mjs +5 -1
  44. package/esm2020/lib/search/models/category/case/case-dataset.mjs +3 -1
  45. package/esm2020/lib/search/models/category/case/case-simple-dataset.mjs +5 -1
  46. package/esm2020/lib/side-menu/content-components/save-filter/abstract-save-filter.component.mjs +8 -7
  47. package/esm2020/lib/tabs/classes/opened-tab.mjs +19 -1
  48. package/esm2020/lib/tabs/classes/tab-label-stream.mjs +15 -0
  49. package/esm2020/lib/tabs/classes/tab-view.mjs +11 -3
  50. package/esm2020/lib/tabs/interfaces.mjs +1 -1
  51. package/esm2020/lib/tabs/public-api.mjs +3 -1
  52. package/esm2020/lib/task/services/assign-task.service.mjs +7 -6
  53. package/esm2020/lib/task/services/cancel-task.service.mjs +7 -6
  54. package/esm2020/lib/task/services/delegate-task.service.mjs +9 -8
  55. package/esm2020/lib/task/services/finish-task.service.mjs +7 -6
  56. package/esm2020/lib/task/services/task-data.service.mjs +51 -13
  57. package/esm2020/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.mjs +3 -2
  58. package/esm2020/lib/task-content/model/task-event-notification.mjs +5 -3
  59. package/esm2020/lib/task-content/services/task-content.service.mjs +5 -2
  60. package/esm2020/lib/utility/tests/utility/create-mock-net.mjs +2 -1
  61. package/esm2020/lib/view/abstract/view-with-headers.mjs +13 -4
  62. package/esm2020/lib/view/case-view/abstract-case-view.mjs +7 -5
  63. package/esm2020/lib/view/case-view/tabbed-case-view.mjs +7 -5
  64. package/esm2020/lib/view/public-api.mjs +4 -1
  65. package/esm2020/lib/view/task-view/abstract-single-task-view.component.mjs +55 -0
  66. package/esm2020/lib/view/task-view/abstract-task-view.mjs +6 -5
  67. package/esm2020/lib/view/task-view/tabbed-task-view.mjs +6 -5
  68. package/esm2020/lib/view/workflow-view/abstract-workflow-view.component.mjs +6 -5
  69. package/fesm2015/netgrif-components-core.mjs +5900 -4921
  70. package/fesm2015/netgrif-components-core.mjs.map +1 -1
  71. package/fesm2020/netgrif-components-core.mjs +5841 -4870
  72. package/fesm2020/netgrif-components-core.mjs.map +1 -1
  73. package/lib/authorization/permission/access.service.d.ts +40 -0
  74. package/lib/authorization/public-api.d.ts +1 -0
  75. package/lib/filter/models/case-search-request-body.d.ts +1 -0
  76. package/lib/header/abstract-header-service.d.ts +6 -3
  77. package/lib/header/abstract-header.component.d.ts +1 -1
  78. package/lib/header/task-header/task-header.service.d.ts +3 -2
  79. package/lib/header/workflow-header/workflow-header.service.d.ts +3 -2
  80. package/lib/navigation/model/uri-resource.d.ts +15 -0
  81. package/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.d.ts +138 -0
  82. package/lib/navigation/navigation-tree/abstract-navigation-tree.component.d.ts +3 -30
  83. package/lib/navigation/public-api.d.ts +4 -0
  84. package/lib/navigation/service/uri-resource.service.d.ts +18 -0
  85. package/lib/navigation/service/uri.service.d.ts +75 -0
  86. package/lib/panel/abstract/panel-with-immediate-data.d.ts +4 -1
  87. package/lib/panel/abstract-panel.component.d.ts +8 -2
  88. package/lib/panel/configuration/config-params.d.ts +3 -0
  89. package/lib/panel/public-api.d.ts +3 -0
  90. package/lib/panel/task-panel/abstract-task-panel.component.d.ts +11 -4
  91. package/lib/panel/task-panel/models/task-panel-context.d.ts +19 -0
  92. package/lib/panel/task-panel-single/abstract-single-task.component.d.ts +42 -0
  93. package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +4 -1
  94. package/lib/process/net.d.ts +6 -0
  95. package/lib/process/public-api.d.ts +2 -0
  96. package/lib/public/factories/public-factory-resolver.d.ts +2 -1
  97. package/lib/resources/engine-endpoint/public/public-task-resource.service.d.ts +0 -12
  98. package/lib/resources/interface/case.d.ts +8 -0
  99. package/lib/resources/interface/petri-net-reference.d.ts +4 -0
  100. package/lib/resources/interface/task-pair.d.ts +4 -0
  101. package/lib/resources/public-api.d.ts +1 -0
  102. package/lib/routing/routing-builder/routing-builder.service.d.ts +1 -0
  103. package/lib/side-menu/content-components/save-filter/abstract-save-filter.component.d.ts +2 -1
  104. package/lib/tabs/classes/opened-tab.d.ts +8 -1
  105. package/lib/tabs/classes/tab-label-stream.d.ts +7 -0
  106. package/lib/tabs/interfaces.d.ts +12 -1
  107. package/lib/tabs/public-api.d.ts +2 -0
  108. package/lib/task/services/assign-task.service.d.ts +4 -2
  109. package/lib/task/services/cancel-task.service.d.ts +4 -2
  110. package/lib/task/services/delegate-task.service.d.ts +5 -3
  111. package/lib/task/services/finish-task.service.d.ts +4 -2
  112. package/lib/task/services/task-data.service.d.ts +12 -3
  113. package/lib/task-content/model/task-event-notification.d.ts +7 -1
  114. package/lib/task-content/services/task-content.service.d.ts +1 -0
  115. package/lib/view/abstract/view-with-headers.d.ts +5 -1
  116. package/lib/view/case-view/abstract-case-view.d.ts +4 -2
  117. package/lib/view/case-view/tabbed-case-view.d.ts +4 -2
  118. package/lib/view/public-api.d.ts +3 -0
  119. package/lib/view/task-view/abstract-single-task-view.component.d.ts +25 -0
  120. package/lib/view/task-view/abstract-task-view.d.ts +2 -1
  121. package/lib/view/task-view/tabbed-task-view.d.ts +2 -1
  122. package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +2 -1
  123. package/package.json +1 -1
  124. package/src/assets/i18n/de.json +19 -1
  125. package/src/assets/i18n/en.json +19 -1
  126. package/src/assets/i18n/sk.json +20 -2
@@ -16,23 +16,19 @@ import * as i1 from "../../configuration/configuration.service";
16
16
  import * as i2 from "@angular/router";
17
17
  import * as i3 from "../../logger/services/logger.service";
18
18
  import * as i4 from "../../user/services/user.service";
19
- import * as i5 from "../../authorization/role/role-guard.service";
20
- import * as i6 from "../../authorization/authority/authority-guard.service";
21
- import * as i7 from "../../authorization/group/group-guard.service";
22
- import * as i8 from "../../groups/services/active-group.service";
23
- import * as i9 from "../../resources/engine-endpoint/task-resource.service";
24
- import * as i10 from "../../translate/language.service";
25
- import * as i11 from "../../routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service";
19
+ import * as i5 from "../../authorization/permission/access.service";
20
+ import * as i6 from "../../groups/services/active-group.service";
21
+ import * as i7 from "../../resources/engine-endpoint/task-resource.service";
22
+ import * as i8 from "../../translate/language.service";
23
+ import * as i9 from "../../routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service";
26
24
  export class AbstractNavigationTreeComponent extends AbstractNavigationResizableDrawerComponent {
27
- constructor(_config, _router, _log, _userService, _roleGuard, _authorityGuard, _groupGuard, _activeGroupService, _taskResourceService, _languageService, _navigationRouteProvider) {
25
+ constructor(_config, _router, _log, _userService, _accessService, _activeGroupService, _taskResourceService, _languageService, _navigationRouteProvider) {
28
26
  super();
29
27
  this._config = _config;
30
28
  this._router = _router;
31
29
  this._log = _log;
32
30
  this._userService = _userService;
33
- this._roleGuard = _roleGuard;
34
- this._authorityGuard = _authorityGuard;
35
- this._groupGuard = _groupGuard;
31
+ this._accessService = _accessService;
36
32
  this._activeGroupService = _activeGroupService;
37
33
  this._taskResourceService = _taskResourceService;
38
34
  this._languageService = _languageService;
@@ -127,7 +123,7 @@ export class AbstractNavigationTreeComponent extends AbstractNavigationResizable
127
123
  if (routeSegment === undefined) {
128
124
  throw new Error('Route segment doesnt exist in view ' + parentUrl + '/' + viewKey + ' !');
129
125
  }
130
- if (!this.canAccessView(view, this.appendRouteSegment(parentUrl, routeSegment))) {
126
+ if (!this._accessService.canAccessView(view, this.appendRouteSegment(parentUrl, routeSegment))) {
131
127
  return; // continue
132
128
  }
133
129
  if (this.hasNavigation(view)) {
@@ -217,52 +213,6 @@ export class AbstractNavigationTreeComponent extends AbstractNavigationResizable
217
213
  }
218
214
  });
219
215
  }
220
- /**
221
- * @param view the view whose access permissions we want to check
222
- * @param url URL to which the view maps. Is used only for error message generation
223
- * @returns whether the user can access the provided view
224
- */
225
- canAccessView(view, url) {
226
- if (!view.hasOwnProperty('access')) {
227
- return true;
228
- }
229
- if (typeof view.access === 'string') {
230
- if (view.access === 'public') {
231
- return true;
232
- }
233
- if (view.access !== 'private') {
234
- throw new Error(`Unknown access option '${view.access}'. Only 'public' or 'private' is allowed.`);
235
- }
236
- return !this._userService.user.isEmpty();
237
- }
238
- return !this._userService.user.isEmpty() // AuthGuard
239
- && this.passesRoleGuard(view, url)
240
- && this.passesAuthorityGuard(view)
241
- && this.passesGroupGuard(view, url);
242
- }
243
- /**
244
- * @param view the view whose access permissions we want to check
245
- * @param url URL to which the view maps. Is used only for error message generation
246
- * @returns whether the user passes the role guard condition for accessing the specified view
247
- */
248
- passesRoleGuard(view, url) {
249
- return !view.access.hasOwnProperty('role') || this._roleGuard.canAccessView(view, url);
250
- }
251
- /**
252
- * @param view the view whose access permissions we want to check
253
- * @returns whether the user passes the authority guard condition for accessing the specified view
254
- */
255
- passesAuthorityGuard(view) {
256
- return !view.access.hasOwnProperty('authority') || this._authorityGuard.canAccessView(view);
257
- }
258
- /**
259
- * @param view the view whose access permissions we want to check
260
- * @param url URL to which the view maps. Is used only for error message generation
261
- * @returns whether the user passes the role guard condition for accessing the specified view
262
- */
263
- passesGroupGuard(view, url) {
264
- return !view.access.hasOwnProperty('group') || this._groupGuard.canAccessView(view, url);
265
- }
266
216
  resolveChange() {
267
217
  const view = this._config.getViewByPath(this.viewPath);
268
218
  if (view && view.children) {
@@ -295,7 +245,10 @@ export class AbstractNavigationTreeComponent extends AbstractNavigationResizable
295
245
  }
296
246
  generateGroupNavigationNodes() {
297
247
  return forkJoin(this._activeGroupService.activeGroups.map(groupCase => {
298
- return this._taskResourceService.searchTask(SimpleFilter.fromTaskQuery({ case: { id: groupCase.stringId }, transitionId: GroupNavigationConstants.NAVIGATION_CONFIG_TRANSITION_ID })).pipe(map(taskPage => {
248
+ return this._taskResourceService.searchTask(SimpleFilter.fromTaskQuery({
249
+ case: { id: groupCase.stringId },
250
+ transitionId: GroupNavigationConstants.NAVIGATION_CONFIG_TRANSITION_ID
251
+ })).pipe(map(taskPage => {
299
252
  if (hasContent(taskPage)) {
300
253
  return this._taskResourceService.getData(taskPage.content[0].stringId);
301
254
  }
@@ -373,7 +326,7 @@ export class AbstractNavigationTreeComponent extends AbstractNavigationResizable
373
326
  return split;
374
327
  }
375
328
  }
376
- AbstractNavigationTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractNavigationTreeComponent, deps: [{ token: i1.ConfigurationService }, { token: i2.Router }, { token: i3.LoggerService }, { token: i4.UserService }, { token: i5.RoleGuardService }, { token: i6.AuthorityGuardService }, { token: i7.GroupGuardService }, { token: i8.ActiveGroupService }, { token: i9.TaskResourceService }, { token: i10.LanguageService }, { token: i11.DynamicNavigationRouteProviderService }], target: i0.ɵɵFactoryTarget.Component });
329
+ AbstractNavigationTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractNavigationTreeComponent, deps: [{ token: i1.ConfigurationService }, { token: i2.Router }, { token: i3.LoggerService }, { token: i4.UserService }, { token: i5.AccessService }, { token: i6.ActiveGroupService }, { token: i7.TaskResourceService }, { token: i8.LanguageService }, { token: i9.DynamicNavigationRouteProviderService }], target: i0.ɵɵFactoryTarget.Component });
377
330
  AbstractNavigationTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AbstractNavigationTreeComponent, selector: "ncc-abstract-navigation-tree", inputs: { viewPath: "viewPath", parentUrl: "parentUrl", routerChange: "routerChange" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
378
331
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AbstractNavigationTreeComponent, decorators: [{
379
332
  type: Component,
@@ -381,11 +334,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
381
334
  selector: 'ncc-abstract-navigation-tree',
382
335
  template: ''
383
336
  }]
384
- }], ctorParameters: function () { return [{ type: i1.ConfigurationService }, { type: i2.Router }, { type: i3.LoggerService }, { type: i4.UserService }, { type: i5.RoleGuardService }, { type: i6.AuthorityGuardService }, { type: i7.GroupGuardService }, { type: i8.ActiveGroupService }, { type: i9.TaskResourceService }, { type: i10.LanguageService }, { type: i11.DynamicNavigationRouteProviderService }]; }, propDecorators: { viewPath: [{
337
+ }], ctorParameters: function () { return [{ type: i1.ConfigurationService }, { type: i2.Router }, { type: i3.LoggerService }, { type: i4.UserService }, { type: i5.AccessService }, { type: i6.ActiveGroupService }, { type: i7.TaskResourceService }, { type: i8.LanguageService }, { type: i9.DynamicNavigationRouteProviderService }]; }, propDecorators: { viewPath: [{
385
338
  type: Input
386
339
  }], parentUrl: [{
387
340
  type: Input
388
341
  }], routerChange: [{
389
342
  type: Input
390
343
  }] } });
391
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLXRyZWUvYWJzdHJhY3QtbmF2aWdhdGlvbi10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQsT0FBTyxFQUFDLGFBQWEsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQU0zRSxPQUFPLEVBQUMsMENBQTBDLEVBQUMsTUFBTSxxRUFBcUUsQ0FBQztBQUUvSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFckUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsWUFBWSxFQUFDLE1BQU0saURBQWlELENBQUM7Ozs7Ozs7Ozs7Ozs7QUFtQmxHLE1BQU0sT0FBZ0IsK0JBQWdDLFNBQVEsMENBQTBDO0lBaUJwRyxZQUFnQyxPQUE2QixFQUM3QixPQUFlLEVBQ2YsSUFBbUIsRUFDbkIsWUFBeUIsRUFDekIsVUFBNEIsRUFDNUIsZUFBc0MsRUFDdEMsV0FBOEIsRUFDOUIsbUJBQXVDLEVBQ3ZDLG9CQUF5QyxFQUN6QyxnQkFBaUMsRUFDakMsd0JBQStEO1FBQzNGLEtBQUssRUFBRSxDQUFDO1FBWG9CLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBQzdCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25CLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLG9CQUFlLEdBQWYsZUFBZSxDQUF1QjtRQUN0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDOUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDakMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUF1QztRQWZ2Rix3QkFBbUIsR0FBRyxDQUFDLENBQUM7UUFpQjVCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxpQkFBaUIsQ0FBaUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLHVCQUF1QixFQUFrQixDQUFDO1FBQ2hFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNwRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksYUFBYSxDQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDO1NBQy9DO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRztZQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxZQUFZLGFBQWEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQ3pGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDeEYsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDMUQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXO1FBQ1AsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUNyQjtTQUNKO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsRUFBRTtZQUN4QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUM7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBRU0sUUFBUSxDQUFDLENBQVMsRUFBRSxJQUFvQjtRQUMzQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRVMsaUJBQWlCO1FBQ3ZCLElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEUsS0FBSyxHQUFHLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDO1NBQ3ZEO2FBQU07WUFDSCxLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzVGO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRVMsb0NBQW9DO1FBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNPLHNCQUFzQixDQUM1QixLQUFZLEVBQ1osU0FBaUIsRUFDakIscUJBQTZDO1FBRTdDLElBQUksQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLHdCQUF3QixHQUFHLEtBQUssQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBMEIsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBZSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTVCLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9ELHdCQUF3QixHQUFHLElBQUksQ0FBQztnQkFDaEMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBRS9ELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ3hFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLElBQUksS0FBSyxDQUFDLENBQUM7Z0JBQ2xGLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLElBQUksS0FBSyxDQUFDLENBQUM7Z0JBRTlFLE9BQU8sQ0FBQyxXQUFXO2FBQ3RCO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN2RCxPQUFPLENBQUMsV0FBVzthQUN0QjtZQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVwRCxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7Z0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUM7YUFDN0Y7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFO2dCQUM3RSxPQUFPLENBQUMsV0FBVzthQUN0QjtZQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxJQUFJLEdBQW1CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDeEU7Z0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNwQjtpQkFBTTtnQkFDSCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsRUFBRSxxQkFBcUIsSUFBSSxLQUFLLENBQUMsQ0FDcEYsQ0FBQztpQkFDTDthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRVMsYUFBYSxDQUFDLEtBQVc7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDbkIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxJQUFJLE9BQU8sS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDdkMsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO1lBQ3RDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztTQUNyRDtJQUNMLENBQUM7SUFFUyxZQUFZLENBQUMsS0FBVztRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNqQixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUNwQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7U0FDbkQ7SUFDTCxDQUFDO0lBRVMsU0FBUyxDQUFDLElBQVUsRUFBRSxZQUFvQixFQUFFLFNBQWlCO1FBQ25FLE1BQU0sSUFBSSxHQUFtQjtZQUN6QixJQUFJLEVBQUUsSUFBSTtZQUNWLEdBQUcsRUFBRSxJQUFJO1NBQ1osQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRVMsV0FBVyxDQUFDLElBQVUsRUFBRSxZQUFvQjtRQUNsRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0MsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVTLFdBQVcsQ0FBQyxJQUFVO1FBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOzs7T0FHRztJQUNPLG1CQUFtQixDQUFDLElBQVU7UUFDcEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDckcsQ0FBQztJQUVTLG9CQUFvQixDQUFDLElBQVU7UUFDckMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sa0JBQWtCLENBQUMsU0FBaUIsRUFBRSxZQUFvQjtRQUNoRSxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNyRSxDQUFDO0lBRVMsYUFBYSxDQUFDLEtBQTRCLEVBQUUsV0FBb0I7UUFDdEUsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU87U0FDVjtRQUNELE1BQU0sWUFBWSxHQUFHLFdBQVcsS0FBSyxJQUFJLElBQUksV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQzdGLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQzthQUNuRDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxhQUFhLENBQUMsSUFBVSxFQUFFLEdBQVc7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtZQUNqQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO2dCQUMxQixPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxDQUFDLE1BQU0sMkNBQTJDLENBQUMsQ0FBQzthQUNyRztZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QztRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxZQUFZO2VBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztlQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDO2VBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxlQUFlLENBQUMsSUFBVSxFQUFFLEdBQVc7UUFDN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sb0JBQW9CLENBQUMsSUFBVTtRQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxnQkFBZ0IsQ0FBQyxJQUFVLEVBQUUsR0FBVztRQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFUyxhQUFhO1FBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNyRjtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ08scUJBQXFCLENBQUMsSUFBVTtRQUN0QyxPQUFPLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxLQUFLLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDO0lBQ25GLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLHdCQUF3QixDQUFDLGNBQXNCLEVBQUUsYUFBb0M7UUFDM0YsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtZQUM1RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDMUM7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNuRyxhQUFhLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUNoRCxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVTLDRCQUE0QjtRQUNsQyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNsRSxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FDbEUsRUFBQyxJQUFJLEVBQUUsRUFBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBQyxFQUFFLFlBQVksRUFBRSx3QkFBd0IsQ0FBQywrQkFBeUMsRUFBQyxDQUNySCxDQUFDLENBQUMsSUFBSSxDQUNILEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDWCxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDdEIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzFFO3FCQUFNO29CQUNILElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG9EQUFvRDswQkFDOUQsbURBQW1ELENBQUMsQ0FBQztvQkFDM0QsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2pCO1lBQ0wsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3BCLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsQ0FBQyx3QkFBaUQsRUFBRSxFQUFFO1lBQ3RELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU0sU0FBUyxJQUFJLHdCQUF3QixFQUFFO2dCQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDakU7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVTLDZCQUE2QixDQUFDLG1CQUFxQztRQUN6RSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDakMsbUJBQW1CLENBQUMsT0FBTyxDQUN2QixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNiLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2pCLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyx3QkFBd0IsQ0FBQyx1Q0FBdUMsQ0FDL0YsRUFBRTtnQkFDQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDckM7UUFDTCxDQUFDLENBQ0osQ0FBQztRQUVGLElBQUksaUJBQWlCLENBQUM7UUFDdEIsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLHdCQUF3QixDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDdEcsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO2dCQUN2QixpQkFBaUIsR0FBRyxPQUFPLENBQUM7YUFDL0I7WUFDRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1R0FBdUcsQ0FBQyxDQUFDO1NBQzVIO1FBRUQsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFHLEVBQUU7WUFDbEUsTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFDN0QsS0FBSyxHQUFHLHdCQUF3QixDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQztZQUN2RSxNQUFNLE9BQU8sR0FBbUIsRUFBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFDLENBQUM7WUFFcEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQztZQUNoRCxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDBHQUEwRyxDQUFDLENBQUM7Z0JBQzVILFNBQVM7YUFDWjtZQUNELE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQzdELEtBQUssR0FBRyx3QkFBd0IsQ0FBQywrQkFBK0IsQ0FBQyxFQUNqRSx3QkFBd0IsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBRTdFLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUM1RCxLQUFLLEdBQUcsd0JBQXdCLENBQUMsK0JBQStCLENBQUMsRUFDakUsd0JBQXdCLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUU1RSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUUvRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUM7bUJBQ3hCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7bUJBQ2xHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbEcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN4QjtTQUNKO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLG1CQUFtQixDQUFDLE1BQXFCO1FBQy9DLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sRUFBRTtZQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLElBQUksZ0VBQWdFLENBQUMsQ0FBQzthQUMvRztZQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDekI7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzs2SEE3YWlCLCtCQUErQjtpSEFBL0IsK0JBQStCLG1MQUZ2QyxFQUFFOzRGQUVNLCtCQUErQjtrQkFKcEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxRQUFRLEVBQUUsRUFBRTtpQkFDZjtnYkFHbUIsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxTQUFTO3NCQUF4QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmVzdGVkVHJlZUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7U2VydmljZXMsIFZpZXcsIFZpZXdzfSBmcm9tICcuLi8uLi8uLi9jb21tb25zL3NjaGVtYSc7XG5pbXBvcnQge05hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TWF0VHJlZU5lc3RlZERhdGFTb3VyY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi91c2VyL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQge1JvbGVHdWFyZFNlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGhvcml6YXRpb24vcm9sZS9yb2xlLWd1YXJkLnNlcnZpY2UnO1xuaW1wb3J0IHtBdXRob3JpdHlHdWFyZFNlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGhvcml6YXRpb24vYXV0aG9yaXR5L2F1dGhvcml0eS1ndWFyZC5zZXJ2aWNlJztcbmltcG9ydCB7R3JvdXBHdWFyZFNlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGhvcml6YXRpb24vZ3JvdXAvZ3JvdXAtZ3VhcmQuc2VydmljZSc7XG5pbXBvcnQge0Fic3RyYWN0TmF2aWdhdGlvblJlc2l6YWJsZURyYXdlckNvbXBvbmVudH0gZnJvbSAnLi4vbmF2aWdhdGlvbi1kcmF3ZXIvYWJzdHJhY3QtbmF2aWdhdGlvbi1yZXNpemFibGUtZHJhd2VyLmNvbXBvbmVudCc7XG5pbXBvcnQge0FjdGl2ZUdyb3VwU2VydmljZX0gZnJvbSAnLi4vLi4vZ3JvdXBzL3NlcnZpY2VzL2FjdGl2ZS1ncm91cC5zZXJ2aWNlJztcbmltcG9ydCB7Y29uY2F0TWFwLCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCB0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1Rhc2tSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9lbmdpbmUtZW5kcG9pbnQvdGFzay1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7U2ltcGxlRmlsdGVyfSBmcm9tICcuLi8uLi9maWx0ZXIvbW9kZWxzL3NpbXBsZS1maWx0ZXInO1xuaW1wb3J0IHtoYXNDb250ZW50fSBmcm9tICcuLi8uLi91dGlsaXR5L3BhZ2luYXRpb24vcGFnZS1oYXMtY29udGVudCc7XG5pbXBvcnQge0RhdGFHcm91cH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9kYXRhLWdyb3Vwcyc7XG5pbXBvcnQge0dyb3VwTmF2aWdhdGlvbkNvbnN0YW50c30gZnJvbSAnLi4vbW9kZWwvZ3JvdXAtbmF2aWdhdGlvbi1jb25zdGFudHMnO1xuaW1wb3J0IHtyZWZyZXNoVHJlZX0gZnJvbSAnLi4vLi4vdXRpbGl0eS9yZWZyZXNoLXRyZWUnO1xuaW1wb3J0IHtnZXRGaWVsZH0gZnJvbSAnLi4vLi4vdXRpbGl0eS9nZXQtZmllbGQnO1xuaW1wb3J0IHtleHRyYWN0SWNvbkFuZFRpdGxlLCBleHRyYWN0Um9sZXN9IGZyb20gJy4uL3V0aWxpdHkvbmF2aWdhdGlvbi1pdGVtLXRhc2stdXRpbGl0eS1tZXRob2RzJztcbmltcG9ydCB7TGFuZ3VhZ2VTZXJ2aWNlfSBmcm9tICcuLi8uLi90cmFuc2xhdGUvbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNOYXZpZ2F0aW9uUm91dGVQcm92aWRlclNlcnZpY2Vcbn0gZnJvbSAnLi4vLi4vcm91dGluZy9keW5hbWljLW5hdmlnYXRpb24tcm91dGUtcHJvdmlkZXIvZHluYW1pYy1uYXZpZ2F0aW9uLXJvdXRlLXByb3ZpZGVyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25Ob2RlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaWNvbj86IHN0cmluZztcbiAgICB1cmw6IHN0cmluZztcbiAgICBjaGlsZHJlbj86IEFycmF5PE5hdmlnYXRpb25Ob2RlPjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICB0cmFuc2xhdGU/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1uYXZpZ2F0aW9uLXRyZWUnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE5hdmlnYXRpb25UcmVlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3ROYXZpZ2F0aW9uUmVzaXphYmxlRHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgcHVibGljIHZpZXdQYXRoOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHBhcmVudFVybDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByb3V0ZXJDaGFuZ2U6IGJvb2xlYW47XG5cbiAgICBwcm90ZWN0ZWQgX3JlbG9hZE5hdmlnYXRpb246IFJlcGxheVN1YmplY3Q8dm9pZD47XG4gICAgcHJvdGVjdGVkIF9ncm91cE5hdmlnYXRpb25Db25maWc6IFNlcnZpY2VzWydncm91cE5hdmlnYXRpb24nXTtcblxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj47XG4gICAgcHJpdmF0ZSBfc3ViR3JvdXBSZXNvbHV0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfc3ViTGFuZ0NoYW5nZTogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgX2dyb3VwTmF2Tm9kZXNDb3VudCA9IDA7XG5cbiAgICB0cmVlQ29udHJvbDogTmVzdGVkVHJlZUNvbnRyb2w8TmF2aWdhdGlvbk5vZGU+O1xuICAgIGRhdGFTb3VyY2U6IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPE5hdmlnYXRpb25Ob2RlPjtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbmZpZzogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9yb2xlR3VhcmQ6IFJvbGVHdWFyZFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYXV0aG9yaXR5R3VhcmQ6IEF1dGhvcml0eUd1YXJkU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ncm91cEd1YXJkOiBHcm91cEd1YXJkU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmVHcm91cFNlcnZpY2U6IEFjdGl2ZUdyb3VwU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90YXNrUmVzb3VyY2VTZXJ2aWNlOiBUYXNrUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX25hdmlnYXRpb25Sb3V0ZVByb3ZpZGVyOiBEeW5hbWljTmF2aWdhdGlvblJvdXRlUHJvdmlkZXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8TmF2aWdhdGlvbk5vZGU+KG5vZGUgPT4gbm9kZS5jaGlsZHJlbik7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZTxOYXZpZ2F0aW9uTm9kZT4oKTtcbiAgICAgICAgdGhpcy5fZ3JvdXBOYXZpZ2F0aW9uQ29uZmlnID0gdGhpcy5fY29uZmlnLmdldENvbmZpZ3VyYXRpb25TdWJ0cmVlKFsnc2VydmljZXMnLCAnZ3JvdXBOYXZpZ2F0aW9uJ10pO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2RlcyhfY29uZmlnLmdldENvbmZpZ3VyYXRpb25TdWJ0cmVlKFsndmlld3MnXSksICcnKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlTGV2ZWxzKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICAgICAgdGhpcy5fcmVsb2FkTmF2aWdhdGlvbiA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICBpZiAodGhpcy52aWV3UGF0aCAmJiB0aGlzLnBhcmVudFVybCAhPT0gdW5kZWZpbmVkICYmIHRoaXMucm91dGVyQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmVOYXZpZ2F0aW9uTm9kZXNXaXRoT2Zmc2V0Um9vdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucyA9IFtcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kICYmIHRoaXMucm91dGVyQ2hhbmdlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3JlbG9hZE5hdmlnYXRpb24ubmV4dCgpKSxcbiAgICAgICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXIkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWxvYWROYXZpZ2F0aW9uLm5leHQoKSksXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVHcm91cFNlcnZpY2UuYWN0aXZlR3JvdXBzJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVsb2FkTmF2aWdhdGlvbi5uZXh0KCkpXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5fcmVsb2FkTmF2aWdhdGlvbi5waXBlKGRlYm91bmNlVGltZSgxMDApKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMuX3N1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghc3ViLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlbG9hZE5hdmlnYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgaWYgKHRoaXMuX3N1Ykdyb3VwUmVzb2x1dGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJHcm91cFJlc29sdXRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc3ViTGFuZ0NoYW5nZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJMYW5nQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzQ2hpbGQoXzogbnVtYmVyLCBub2RlOiBOYXZpZ2F0aW9uTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISFub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZU5hdmlnYXRpb24oKTogdm9pZCB7XG4gICAgICAgIGxldCBub2RlcztcbiAgICAgICAgaWYgKHRoaXMudmlld1BhdGggJiYgdGhpcy5wYXJlbnRVcmwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJvdXRlckNoYW5nZSkge1xuICAgICAgICAgICAgbm9kZXMgPSB0aGlzLnJlc29sdmVOYXZpZ2F0aW9uTm9kZXNXaXRoT2Zmc2V0Um9vdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZXMgPSB0aGlzLnJlc29sdmVOYXZpZ2F0aW9uTm9kZXModGhpcy5fY29uZmlnLmdldENvbmZpZ3VyYXRpb25TdWJ0cmVlKFsndmlld3MnXSksICcnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IG5vZGVzO1xuICAgICAgICB0aGlzLnJlc29sdmVMZXZlbHModGhpcy5kYXRhU291cmNlLmRhdGEpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlTmF2aWdhdGlvbk5vZGVzV2l0aE9mZnNldFJvb3QoKTogQXJyYXk8TmF2aWdhdGlvbk5vZGU+IHtcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMuX2NvbmZpZy5nZXRWaWV3QnlQYXRoKHRoaXMudmlld1BhdGgpO1xuICAgICAgICBpZiAodmlldyAmJiB2aWV3LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzKHZpZXcuY2hpbGRyZW4sIHRoaXMucGFyZW50VXJsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIHByb3ZpZGVkIHtAbGluayBWaWV3c30gb2JqZWN0IGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbmF2aWdhdGlvbiB0cmVlXG4gICAgICogQHBhcmFtIHZpZXdzIG5hdmlnYXRpb24gY29uZmlndXJhdGlvblxuICAgICAqIEBwYXJhbSBwYXJlbnRVcmwgVVJMIG9mIHRoZSBwYXJlbnQgbmF2aWdhdGlvbiB0cmVlIG5vZGVcbiAgICAgKiBAcGFyYW0gYW5jZXN0b3JOb2RlQ29udGFpbmVyIGlmIHRoZSBwYXJlbnQgbm9kZSBoYXMgbm8gbmF2aWdhdGlvbiB0aGlzIGF0dHJpYnV0ZSBjb250YWlucyB0aGVcbiAgICAgKiBjbG9zZXN0IGFuY2VzdG9yIHRoYXQgaGFzIG5hdmlnYXRpb25cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVOYXZpZ2F0aW9uTm9kZXMoXG4gICAgICAgIHZpZXdzOiBWaWV3cyxcbiAgICAgICAgcGFyZW50VXJsOiBzdHJpbmcsXG4gICAgICAgIGFuY2VzdG9yTm9kZUNvbnRhaW5lcj86IEFycmF5PE5hdmlnYXRpb25Ob2RlPlxuICAgICk6IEFycmF5PE5hdmlnYXRpb25Ob2RlPiB7XG4gICAgICAgIGlmICghdmlld3MgfHwgT2JqZWN0LmtleXModmlld3MpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZ3JvdXBOYXZpZ2F0aW9uR2VuZXJhdGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5vZGVzOiBBcnJheTxOYXZpZ2F0aW9uTm9kZT4gPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXModmlld3MpLmZvckVhY2goKHZpZXdLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IHZpZXdzW3ZpZXdLZXldO1xuXG4gICAgICAgICAgICBpZiAoIWdyb3VwTmF2aWdhdGlvbkdlbmVyYXRlZCAmJiB0aGlzLmlzR3JvdXBOYXZpZ2F0aW9uTm9kZSh2aWV3KSkge1xuICAgICAgICAgICAgICAgIGdyb3VwTmF2aWdhdGlvbkdlbmVyYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0UG9zaXRpb24gPSAoYW5jZXN0b3JOb2RlQ29udGFpbmVyID8/IG5vZGVzKS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9zdWJMYW5nQ2hhbmdlID0gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldExhbmdDaGFuZ2UkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkR3JvdXBOYXZpZ2F0aW9uTm9kZXMoaW5zZXJ0UG9zaXRpb24sIGFuY2VzdG9yTm9kZUNvbnRhaW5lciA/PyBub2Rlcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkR3JvdXBOYXZpZ2F0aW9uTm9kZXMoaW5zZXJ0UG9zaXRpb24sIGFuY2VzdG9yTm9kZUNvbnRhaW5lciA/PyBub2Rlcyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNOYXZpZ2F0aW9uKHZpZXcpICYmICF0aGlzLmhhc1N1YlJvdXRlcyh2aWV3KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJvdXRlU2VnbWVudCA9IHRoaXMuZ2V0Tm9kZVJvdXRlU2VnbWVudCh2aWV3KTtcblxuICAgICAgICAgICAgaWYgKHJvdXRlU2VnbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3V0ZSBzZWdtZW50IGRvZXNudCBleGlzdCBpbiB2aWV3ICcgKyBwYXJlbnRVcmwgKyAnLycgKyB2aWV3S2V5ICsgJyAhJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5jYW5BY2Nlc3NWaWV3KHZpZXcsIHRoaXMuYXBwZW5kUm91dGVTZWdtZW50KHBhcmVudFVybCwgcm91dGVTZWdtZW50KSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc05hdmlnYXRpb24odmlldykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlOiBOYXZpZ2F0aW9uTm9kZSA9IHRoaXMuYnVpbGROb2RlKHZpZXcsIHJvdXRlU2VnbWVudCwgcGFyZW50VXJsKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTdWJSb3V0ZXModmlldykpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbiA9IHRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2Rlcyh2aWV3LmNoaWxkcmVuLCBub2RlLnVybCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1N1YlJvdXRlcyh2aWV3KSkge1xuICAgICAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKC4uLnRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2RlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFJvdXRlU2VnbWVudChwYXJlbnRVcmwsIHJvdXRlU2VnbWVudCksIGFuY2VzdG9yTm9kZUNvbnRhaW5lciA/PyBub2RlcylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhc05hdmlnYXRpb24ocm91dGU6IFZpZXcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFyb3V0ZS5uYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5uYXZpZ2F0aW9uID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiByb3V0ZS5uYXZpZ2F0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm91dGUubmF2aWdhdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyb3V0ZS5uYXZpZ2F0aW9uKS5sZW5ndGggIT09IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFzU3ViUm91dGVzKHJvdXRlOiBWaWV3KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcm91dGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdXRlLmNoaWxkcmVuID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJvdXRlLmNoaWxkcmVuKS5sZW5ndGggIT09IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYnVpbGROb2RlKHZpZXc6IFZpZXcsIHJvdXRlU2VnbWVudDogc3RyaW5nLCBwYXJlbnRVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25Ob2RlIHtcbiAgICAgICAgY29uc3Qgbm9kZTogTmF2aWdhdGlvbk5vZGUgPSB7XG4gICAgICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgICAgICAgdXJsOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIG5vZGUubmFtZSA9IHRoaXMuZ2V0Tm9kZU5hbWUodmlldywgcm91dGVTZWdtZW50KTtcbiAgICAgICAgbm9kZS5pY29uID0gdGhpcy5nZXROb2RlSWNvbih2aWV3KTtcbiAgICAgICAgbm9kZS51cmwgPSB0aGlzLmFwcGVuZFJvdXRlU2VnbWVudChwYXJlbnRVcmwsIHJvdXRlU2VnbWVudCk7XG4gICAgICAgIG5vZGUudHJhbnNsYXRlID0gdGhpcy5nZXROb2RlVHJhbnNsYXRlRmxhZyh2aWV3KTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE5vZGVOYW1lKHZpZXc6IFZpZXcsIHJvdXRlU2VnbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHZpZXcubmF2aWdhdGlvblsndGl0bGUnXSkge1xuICAgICAgICAgICAgcmV0dXJuIHZpZXcubmF2aWdhdGlvblsndGl0bGUnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHIgPSByb3V0ZVNlZ21lbnQucmVwbGFjZSgnXycsICcgJyk7XG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXROb2RlSWNvbih2aWV3OiBWaWV3KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICF2aWV3Lm5hdmlnYXRpb25bJ2ljb24nXSA/IHVuZGVmaW5lZCA6IHZpZXcubmF2aWdhdGlvblsnaWNvbiddO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB2aWV3IGNvbmZpZ3VyYXRpb24gb2Ygc29tZSB2aWV3LCB3aG9zZSByb3V0ZVNlZ21lbnQgd2Ugd2FudCB0byBkZXRlcm1pbmVcbiAgICAgKiBAcmV0dXJucyB0aGUgcm91dGVTZWdtZW50IGZvciB0aGUgcHJvdmlkZWQgdmlldywgb3IgdW5kZWZpbmVkIGlmIG5vbmUgaXMgc3BlY2lmaWVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldE5vZGVSb3V0ZVNlZ21lbnQodmlldzogVmlldyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAhIXZpZXcucm91dGluZyAmJiAodHlwZW9mIHZpZXcucm91dGluZy5wYXRoID09PSAnc3RyaW5nJykgPyB2aWV3LnJvdXRpbmcucGF0aCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Tm9kZVRyYW5zbGF0ZUZsYWcodmlldzogVmlldyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmlldy5uYXZpZ2F0aW9uWyd0cmFuc2xhdGUnXSA/PyBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIHRoZSByb3V0ZSBzZWdtZW50IHRvIHRoZSBwYXJlbnQgVVJMLlxuICAgICAqIEBwYXJhbSBwYXJlbnRVcmwgVVJMIG9mIHRoZSBwYXJlbnQuIFNob3VsZCBub3QgZW5kIHdpdGggJy8nXG4gICAgICogQHBhcmFtIHJvdXRlU2VnbWVudCBVUkwgc2VnbWVudCBvZiB0aGUgY2hpbGRcbiAgICAgKiBAcmV0dXJucyBgcGFyZW50VXJsL3JvdXRlU2VnbWVudGAgaWYgdGhlIGByb3V0ZVNlZ21lbnRgIGlzIHRydXRoeSAobm90IGFuIGVtcHR5IHN0cmluZykuXG4gICAgICogUmV0dXJucyBgcGFyZW50VXJsYCBpZiBgcm91dGVTZWdtZW50YCBpcyBmYWxzeSAoZW1wdHkgc3RyaW5nKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYXBwZW5kUm91dGVTZWdtZW50KHBhcmVudFVybDogc3RyaW5nLCByb3V0ZVNlZ21lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiByb3V0ZVNlZ21lbnQgPyBwYXJlbnRVcmwgKyAnLycgKyByb3V0ZVNlZ21lbnQgOiBwYXJlbnRVcmw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVMZXZlbHMobm9kZXM6IEFycmF5PE5hdmlnYXRpb25Ob2RlPiwgcGFyZW50TGV2ZWw/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IHBhcmVudExldmVsID09PSBudWxsIHx8IHBhcmVudExldmVsID09PSB1bmRlZmluZWQgPyAwIDogcGFyZW50TGV2ZWwgKyAxO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgbm9kZS5sZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTGV2ZWxzKG5vZGUuY2hpbGRyZW4sIGN1cnJlbnRMZXZlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB2aWV3IHRoZSB2aWV3IHdob3NlIGFjY2VzcyBwZXJtaXNzaW9ucyB3ZSB3YW50IHRvIGNoZWNrXG4gICAgICogQHBhcmFtIHVybCBVUkwgdG8gd2hpY2ggdGhlIHZpZXcgbWFwcy4gSXMgdXNlZCBvbmx5IGZvciBlcnJvciBtZXNzYWdlIGdlbmVyYXRpb25cbiAgICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSB1c2VyIGNhbiBhY2Nlc3MgdGhlIHByb3ZpZGVkIHZpZXdcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY2FuQWNjZXNzVmlldyh2aWV3OiBWaWV3LCB1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXZpZXcuaGFzT3duUHJvcGVydHkoJ2FjY2VzcycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygdmlldy5hY2Nlc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAodmlldy5hY2Nlc3MgPT09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmlldy5hY2Nlc3MgIT09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhY2Nlc3Mgb3B0aW9uICcke3ZpZXcuYWNjZXNzfScuIE9ubHkgJ3B1YmxpYycgb3IgJ3ByaXZhdGUnIGlzIGFsbG93ZWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuX3VzZXJTZXJ2aWNlLnVzZXIuaXNFbXB0eSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICF0aGlzLl91c2VyU2VydmljZS51c2VyLmlzRW1wdHkoKSAvLyBBdXRoR3VhcmRcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnBhc3Nlc1JvbGVHdWFyZCh2aWV3LCB1cmwpXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5wYXNzZXNBdXRob3JpdHlHdWFyZCh2aWV3KVxuICAgICAgICAgICAgICAgICYmIHRoaXMucGFzc2VzR3JvdXBHdWFyZCh2aWV3LCB1cmwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB2aWV3IHRoZSB2aWV3IHdob3NlIGFjY2VzcyBwZXJtaXNzaW9ucyB3ZSB3YW50IHRvIGNoZWNrXG4gICAgICogQHBhcmFtIHVybCBVUkwgdG8gd2hpY2ggdGhlIHZpZXcgbWFwcy4gSXMgdXNlZCBvbmx5IGZvciBlcnJvciBtZXNzYWdlIGdlbmVyYXRpb25cbiAgICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSB1c2VyIHBhc3NlcyB0aGUgcm9sZSBndWFyZCBjb25kaXRpb24gZm9yIGFjY2Vzc2luZyB0aGUgc3BlY2lmaWVkIHZpZXdcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGFzc2VzUm9sZUd1YXJkKHZpZXc6IFZpZXcsIHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdmlldy5hY2Nlc3MuaGFzT3duUHJvcGVydHkoJ3JvbGUnKSB8fCB0aGlzLl9yb2xlR3VhcmQuY2FuQWNjZXNzVmlldyh2aWV3LCB1cmwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB2aWV3IHRoZSB2aWV3IHdob3NlIGFjY2VzcyBwZXJtaXNzaW9ucyB3ZSB3YW50IHRvIGNoZWNrXG4gICAgICogQHJldHVybnMgd2hldGhlciB0aGUgdXNlciBwYXNzZXMgdGhlIGF1dGhvcml0eSBndWFyZCBjb25kaXRpb24gZm9yIGFjY2Vzc2luZyB0aGUgc3BlY2lmaWVkIHZpZXdcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGFzc2VzQXV0aG9yaXR5R3VhcmQodmlldzogVmlldyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXZpZXcuYWNjZXNzLmhhc093blByb3BlcnR5KCdhdXRob3JpdHknKSB8fCB0aGlzLl9hdXRob3JpdHlHdWFyZC5jYW5BY2Nlc3NWaWV3KHZpZXcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB2aWV3IHRoZSB2aWV3IHdob3NlIGFjY2VzcyBwZXJtaXNzaW9ucyB3ZSB3YW50IHRvIGNoZWNrXG4gICAgICogQHBhcmFtIHVybCBVUkwgdG8gd2hpY2ggdGhlIHZpZXcgbWFwcy4gSXMgdXNlZCBvbmx5IGZvciBlcnJvciBtZXNzYWdlIGdlbmVyYXRpb25cbiAgICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSB1c2VyIHBhc3NlcyB0aGUgcm9sZSBndWFyZCBjb25kaXRpb24gZm9yIGFjY2Vzc2luZyB0aGUgc3BlY2lmaWVkIHZpZXdcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGFzc2VzR3JvdXBHdWFyZCh2aWV3OiBWaWV3LCB1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXZpZXcuYWNjZXNzLmhhc093blByb3BlcnR5KCdncm91cCcpIHx8IHRoaXMuX2dyb3VwR3VhcmQuY2FuQWNjZXNzVmlldyh2aWV3LCB1cmwpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlQ2hhbmdlKCkge1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5fY29uZmlnLmdldFZpZXdCeVBhdGgodGhpcy52aWV3UGF0aCk7XG4gICAgICAgIGlmICh2aWV3ICYmIHZpZXcuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzKHZpZXcuY2hpbGRyZW4sIHRoaXMucGFyZW50VXJsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc29sdmVMZXZlbHModGhpcy5kYXRhU291cmNlLmRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbGF5b3V0IG9mIHRoZSBwcm92aWRlZCB7QGxpbmsgVmlld30gbm9kZSdzIG5hbWUgaW5kaWNhdGVzIGl0IGlzIGFcbiAgICAgKiBbZ3JvdXAgbmF2aWdhdGlvbiBvdXRsZXRde0BsaW5rIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cyNHUk9VUF9OQVZJR0FUSU9OX09VVExFVH0uIFJldHVybnMgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzR3JvdXBOYXZpZ2F0aW9uTm9kZSh2aWV3OiBWaWV3KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2aWV3Py5sYXlvdXQ/Lm5hbWUgPT09IEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5HUk9VUF9OQVZJR0FUSU9OX09VVExFVDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JjZXMgYSByZWxvYWQgb2YgdGhlIGdyb3VwIG5hdmlnYXRpb24gbm9kZXMuXG4gICAgICogQHBhcmFtIGluc2VydFBvc2l0aW9uIHRoZSBwb3NpdGlvbiBpbiB0aGUgY29udGFpbmVyIHdoZXJlIGdyb3VwIG5hdmlnYXRpb24gbm9kZXMgcmVzaWRlXG4gICAgICogQHBhcmFtIG5vZGVDb250YWluZXIgdGhlIG5vZGUgY29udGFpbmVyIHRoYXQgY29udGFpbnMgdGhlIGdyb3VwIG5hdmlnYXRpb24gbm9kZXNcbiAgICAgKiAoY2FuIGJlIGFuIGlubmVyIG5vZGUgb2YgdGhlIG5hdmlnYXRpb24gdHJlZSBvciBpdHMgcm9vdClcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbG9hZEdyb3VwTmF2aWdhdGlvbk5vZGVzKGluc2VydFBvc2l0aW9uOiBudW1iZXIsIG5vZGVDb250YWluZXI6IEFycmF5PE5hdmlnYXRpb25Ob2RlPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fc3ViR3JvdXBSZXNvbHV0aW9uICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuX3N1Ykdyb3VwUmVzb2x1dGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Ykdyb3VwUmVzb2x1dGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3ViR3JvdXBSZXNvbHV0aW9uID0gdGhpcy5nZW5lcmF0ZUdyb3VwTmF2aWdhdGlvbk5vZGVzKCkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZ3JvdXBOYXZOb2RlcyA9PiB7XG4gICAgICAgICAgICBub2RlQ29udGFpbmVyLnNwbGljZShpbnNlcnRQb3NpdGlvbiwgdGhpcy5fZ3JvdXBOYXZOb2Rlc0NvdW50LCAuLi5ncm91cE5hdk5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMuX2dyb3VwTmF2Tm9kZXNDb3VudCA9IGdyb3VwTmF2Tm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgcmVmcmVzaFRyZWUodGhpcy5kYXRhU291cmNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlR3JvdXBOYXZpZ2F0aW9uTm9kZXMoKTogT2JzZXJ2YWJsZTxBcnJheTxOYXZpZ2F0aW9uTm9kZT4+IHtcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHRoaXMuX2FjdGl2ZUdyb3VwU2VydmljZS5hY3RpdmVHcm91cHMubWFwKGdyb3VwQ2FzZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGFza1Jlc291cmNlU2VydmljZS5zZWFyY2hUYXNrKFNpbXBsZUZpbHRlci5mcm9tVGFza1F1ZXJ5KFxuICAgICAgICAgICAgICAgIHtjYXNlOiB7aWQ6IGdyb3VwQ2FzZS5zdHJpbmdJZH0sIHRyYW5zaXRpb25JZDogR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLk5BVklHQVRJT05fQ09ORklHX1RSQU5TSVRJT05fSUQgYXMgc3RyaW5nfVxuICAgICAgICAgICAgKSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAodGFza1BhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29udGVudCh0YXNrUGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmdldERhdGEodGFza1BhZ2UuY29udGVudFswXS5zdHJpbmdJZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ0dyb3VwIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0YXNrIHdhcyBub3QgZm91bmQuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJyBOYXZpZ2F0aW9uIGZvciB0aGlzIGdyb3VwIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjb25jYXRNYXAobyA9PiBvKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSkpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG5hdmlnYXRpb25Db25maWd1cmF0aW9uczogQXJyYXk8QXJyYXk8RGF0YUdyb3VwPj4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5hdkNvbmZpZyBvZiBuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5jb252ZXJ0RGF0YWdyb3Vwc1RvTmF2RW50cmllcyhuYXZDb25maWcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnZlcnREYXRhZ3JvdXBzVG9OYXZFbnRyaWVzKG5hdkNvbmZpZ0RhdGFncm91cHM6IEFycmF5PERhdGFHcm91cD4pOiBBcnJheTxOYXZpZ2F0aW9uTm9kZT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgY29uc3QgZW50cnlEYXRhR3JvdXBJbmRpY2VzID0gW107XG4gICAgICAgIG5hdkNvbmZpZ0RhdGFncm91cHMuZm9yRWFjaChcbiAgICAgICAgICAgIChncm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkID0+IGZpZWxkLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuTkFWSUdBVElPTl9FTlRSWV9NQVJLRVJfRklFTERfSURfU1VGRklYXG4gICAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeURhdGFHcm91cEluZGljZXMucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBuYXZFbnRyaWVzVGFza1JlZjtcbiAgICAgICAgbmF2Q29uZmlnRGF0YWdyb3Vwcy5zb21lKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tSZWYgPSBnZXRGaWVsZChncm91cC5maWVsZHMsIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5OQVZJR0FUSU9OX0VOVFJJRVNfVEFTS19SRUZfRklFTERfSUQpO1xuICAgICAgICAgICAgaWYgKHRhc2tSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5hdkVudHJpZXNUYXNrUmVmID0gdGFza1JlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhIXRhc2tSZWY7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghbmF2RW50cmllc1Rhc2tSZWYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0YXNrIGNvbnRhaW5zIG5vIHRhc2sgcmVmIHdpdGggZW50cmllcy4gTmF2aWdhdGlvbiBjYW5ub3QgYmUgY29uc3RydWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IG9yZGVyID0gMDsgb3JkZXIgPCBuYXZFbnRyaWVzVGFza1JlZi52YWx1ZS5sZW5ndGg7IG9yZGVyICsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGVudHJ5RGF0YUdyb3VwSW5kaWNlc1tvcmRlcl07XG4gICAgICAgICAgICBjb25zdCBsYWJlbCA9IGV4dHJhY3RJY29uQW5kVGl0bGUobmF2Q29uZmlnRGF0YWdyb3Vwcy5zbGljZShpbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleCArIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5EQVRBR1JPVVBTX1BFUl9OQVZJR0FUSU9OX0VOVFJZKSk7XG4gICAgICAgICAgICBjb25zdCBuZXdOb2RlOiBOYXZpZ2F0aW9uTm9kZSA9IHt1cmw6ICcnLCAuLi5sYWJlbH07XG5cbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX25hdmlnYXRpb25Sb3V0ZVByb3ZpZGVyLnJvdXRlO1xuICAgICAgICAgICAgaWYgKHVybCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBObyBVUkwgaXMgY29uZmlndXJlZCBpbiBuYWUuanNvbiBmb3IgY29uZmlndXJhYmxlIGdyb3VwIG5hdmlnYXRpb24uIER5bmFtaWMgbmF2aWdhdGlvbiBlbnRyeSB3YXMgaWdub3JlZGApO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3Tm9kZS51cmwgPSBgLyR7dXJsfS8ke25hdkVudHJpZXNUYXNrUmVmLnZhbHVlW29yZGVyXX1gO1xuICAgICAgICAgICAgY29uc3QgYWxsb3dlZFJvbGVzID0gZXh0cmFjdFJvbGVzKG5hdkNvbmZpZ0RhdGFncm91cHMuc2xpY2UoaW5kZXgsXG4gICAgICAgICAgICAgICAgaW5kZXggKyBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuREFUQUdST1VQU19QRVJfTkFWSUdBVElPTl9FTlRSWSksXG4gICAgICAgICAgICAgICAgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLk5BVklHQVRJT05fRU5UUllfQUxMT1dFRF9ST0xFU19GSUVMRF9JRF9TVUZGSVgpO1xuXG4gICAgICAgICAgICBjb25zdCBiYW5uZWRSb2xlcyA9IGV4dHJhY3RSb2xlcyhuYXZDb25maWdEYXRhZ3JvdXBzLnNsaWNlKGluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4ICsgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLkRBVEFHUk9VUFNfUEVSX05BVklHQVRJT05fRU5UUlkpLFxuICAgICAgICAgICAgICAgIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5OQVZJR0FUSU9OX0VOVFJZX0JBTk5FRF9ST0xFU19GSUVMRF9JRF9TVUZGSVgpO1xuXG4gICAgICAgICAgICBjb25zdCBzcGxpdEFsbG93ZWRSb2xlcyA9IHRoaXMuZXh0cmFjdFJvbGVBbmROZXRJZChhbGxvd2VkUm9sZXMpO1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRCYW5uZWRSb2xlcyA9IHRoaXMuZXh0cmFjdFJvbGVBbmROZXRJZChiYW5uZWRSb2xlcyk7XG5cbiAgICAgICAgICAgIGlmICgoc3BsaXRBbGxvd2VkUm9sZXMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgIHx8IHNwbGl0QWxsb3dlZFJvbGVzLnNvbWUoaWRQYWlyID0+IHRoaXMuX3VzZXJTZXJ2aWNlLmhhc1JvbGVCeUlkZW50aWZpZXIoaWRQYWlyWzBdLCBpZFBhaXJbMV0pKSlcbiAgICAgICAgICAgICAgICAmJiAhc3BsaXRCYW5uZWRSb2xlcy5zb21lKGlkUGFpciA9PiB0aGlzLl91c2VyU2VydmljZS5oYXNSb2xlQnlJZGVudGlmaWVyKGlkUGFpclswXSwgaWRQYWlyWzFdKSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXdOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwbGl0cyB0aGUgcHJvdmlkZWQgc3RyaW5ncyBvbiB0aGUgJzonIGNoYXJhY3RlciBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB0aGUgcmVzdWx0aW5nIHNwbGl0cy5cbiAgICAgKlxuICAgICAqIElmIGFueSBvZiB0aGUgaW5wdXQgc3RyaW5ncyBzcGxpdCBpbnRvIGZld2VyIG9yIG1vcmUgdGhhbiAyIHN0cmluZ3MgYW4gZXJyb3IgaXMgdGhyb3duLlxuICAgICAqXG4gICAgICogQHBhcmFtIGpvaW5lZCBhIGxpc3Qgb2Ygc3RyaW5ncyBpbiB0aGUgZm9ybSBgPHJvbGUgaWRlbnRpZmllcj46PG5ldCBpZGVudGlmaWVyPmBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZXh0cmFjdFJvbGVBbmROZXRJZChqb2luZWQ6IEFycmF5PHN0cmluZz4pOiBBcnJheTxBcnJheTxzdHJpbmc+PiB7XG4gICAgICAgIGNvbnN0IHNwbGl0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBqb2luZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0UGFpciA9IHBhaXIuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIGlmIChzcGxpdFBhaXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcm9sZS1uZXQgcGFpciAnJHtwYWlyfScgaGFzIGludmFsaWQgZm9ybWF0ISBDYW5ub3QgZXh0cmFjdCByb2xlIGFuZCBuZXQgaWRlbnRpZmllcnMuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGxpdC5wdXNoKHNwbGl0UGFpcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwbGl0O1xuICAgIH1cbn1cbiJdfQ==
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbmF2aWdhdGlvbi10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLXRyZWUvYWJzdHJhY3QtbmF2aWdhdGlvbi10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQsT0FBTyxFQUFDLGFBQWEsRUFBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUczRSxPQUFPLEVBQ0gsMENBQTBDLEVBQzdDLE1BQU0scUVBQXFFLENBQUM7QUFFN0UsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRXJFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFDLG1CQUFtQixFQUFFLFlBQVksRUFBQyxNQUFNLGlEQUFpRCxDQUFDOzs7Ozs7Ozs7OztBQW9CbEcs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UyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxnRUFBZ0UsQ0FBQyxDQUFDO2FBQy9HO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7OzZIQTFYaUIsK0JBQStCO2lIQUEvQiwrQkFBK0IsbUxBRnZDLEVBQUU7NEZBRU0sK0JBQStCO2tCQUpwRCxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSw4QkFBOEI7b0JBQ3hDLFFBQVEsRUFBRSxFQUFFO2lCQUNmO3VXQUdtQixRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZXN0ZWRUcmVlQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtTZXJ2aWNlcywgVmlldywgVmlld3N9IGZyb20gJy4uLy4uLy4uL2NvbW1vbnMvc2NoZW1hJztcbmltcG9ydCB7TmF2aWdhdGlvbkVuZCwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3ROYXZpZ2F0aW9uUmVzaXphYmxlRHJhd2VyQ29tcG9uZW50XG59IGZyb20gJy4uL25hdmlnYXRpb24tZHJhd2VyL2Fic3RyYWN0LW5hdmlnYXRpb24tcmVzaXphYmxlLWRyYXdlci5jb21wb25lbnQnO1xuaW1wb3J0IHtBY3RpdmVHcm91cFNlcnZpY2V9IGZyb20gJy4uLy4uL2dyb3Vwcy9zZXJ2aWNlcy9hY3RpdmUtZ3JvdXAuc2VydmljZSc7XG5pbXBvcnQge2NvbmNhdE1hcCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtUYXNrUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3Rhc2stcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge1NpbXBsZUZpbHRlcn0gZnJvbSAnLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyJztcbmltcG9ydCB7aGFzQ29udGVudH0gZnJvbSAnLi4vLi4vdXRpbGl0eS9wYWdpbmF0aW9uL3BhZ2UtaGFzLWNvbnRlbnQnO1xuaW1wb3J0IHtEYXRhR3JvdXB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvZGF0YS1ncm91cHMnO1xuaW1wb3J0IHtHcm91cE5hdmlnYXRpb25Db25zdGFudHN9IGZyb20gJy4uL21vZGVsL2dyb3VwLW5hdmlnYXRpb24tY29uc3RhbnRzJztcbmltcG9ydCB7cmVmcmVzaFRyZWV9IGZyb20gJy4uLy4uL3V0aWxpdHkvcmVmcmVzaC10cmVlJztcbmltcG9ydCB7Z2V0RmllbGR9IGZyb20gJy4uLy4uL3V0aWxpdHkvZ2V0LWZpZWxkJztcbmltcG9ydCB7ZXh0cmFjdEljb25BbmRUaXRsZSwgZXh0cmFjdFJvbGVzfSBmcm9tICcuLi91dGlsaXR5L25hdmlnYXRpb24taXRlbS10YXNrLXV0aWxpdHktbWV0aG9kcyc7XG5pbXBvcnQge0xhbmd1YWdlU2VydmljZX0gZnJvbSAnLi4vLi4vdHJhbnNsYXRlL2xhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBEeW5hbWljTmF2aWdhdGlvblJvdXRlUHJvdmlkZXJTZXJ2aWNlXG59IGZyb20gJy4uLy4uL3JvdXRpbmcvZHluYW1pYy1uYXZpZ2F0aW9uLXJvdXRlLXByb3ZpZGVyL2R5bmFtaWMtbmF2aWdhdGlvbi1yb3V0ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7QWNjZXNzU2VydmljZX0gZnJvbSBcIi4uLy4uL2F1dGhvcml6YXRpb24vcGVybWlzc2lvbi9hY2Nlc3Muc2VydmljZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25Ob2RlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaWNvbj86IHN0cmluZztcbiAgICB1cmw6IHN0cmluZztcbiAgICBjaGlsZHJlbj86IEFycmF5PE5hdmlnYXRpb25Ob2RlPjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICB0cmFuc2xhdGU/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1uYXZpZ2F0aW9uLXRyZWUnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE5hdmlnYXRpb25UcmVlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3ROYXZpZ2F0aW9uUmVzaXphYmxlRHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCkgcHVibGljIHZpZXdQYXRoOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIHBhcmVudFVybDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByb3V0ZXJDaGFuZ2U6IGJvb2xlYW47XG5cbiAgICBwcm90ZWN0ZWQgX3JlbG9hZE5hdmlnYXRpb246IFJlcGxheVN1YmplY3Q8dm9pZD47XG4gICAgcHJvdGVjdGVkIF9ncm91cE5hdmlnYXRpb25Db25maWc6IFNlcnZpY2VzWydncm91cE5hdmlnYXRpb24nXTtcblxuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj47XG4gICAgcHJpdmF0ZSBfc3ViR3JvdXBSZXNvbHV0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfc3ViTGFuZ0NoYW5nZTogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgX2dyb3VwTmF2Tm9kZXNDb3VudCA9IDA7XG5cbiAgICB0cmVlQ29udHJvbDogTmVzdGVkVHJlZUNvbnRyb2w8TmF2aWdhdGlvbk5vZGU+O1xuICAgIGRhdGFTb3VyY2U6IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPE5hdmlnYXRpb25Ob2RlPjtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbmZpZzogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY2Nlc3NTZXJ2aWNlOiBBY2Nlc3NTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2ZUdyb3VwU2VydmljZTogQWN0aXZlR3JvdXBTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tSZXNvdXJjZVNlcnZpY2U6IFRhc2tSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbmF2aWdhdGlvblJvdXRlUHJvdmlkZXI6IER5bmFtaWNOYXZpZ2F0aW9uUm91dGVQcm92aWRlclNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxOYXZpZ2F0aW9uTm9kZT4obm9kZSA9PiBub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPE5hdmlnYXRpb25Ob2RlPigpO1xuICAgICAgICB0aGlzLl9ncm91cE5hdmlnYXRpb25Db25maWcgPSB0aGlzLl9jb25maWcuZ2V0Q29uZmlndXJhdGlvblN1YnRyZWUoWydzZXJ2aWNlcycsICdncm91cE5hdmlnYXRpb24nXSk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzKF9jb25maWcuZ2V0Q29uZmlndXJhdGlvblN1YnRyZWUoWyd2aWV3cyddKSwgJycpO1xuICAgICAgICB0aGlzLnJlc29sdmVMZXZlbHModGhpcy5kYXRhU291cmNlLmRhdGEpO1xuICAgICAgICB0aGlzLl9yZWxvYWROYXZpZ2F0aW9uID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0aGlzLnZpZXdQYXRoICYmIHRoaXMucGFyZW50VXJsICE9PSB1bmRlZmluZWQgJiYgdGhpcy5yb3V0ZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2Rlc1dpdGhPZmZzZXRSb290KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zID0gW1xuICAgICAgICAgICAgdGhpcy5fcm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgdGhpcy5yb3V0ZXJDaGFuZ2UpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcmVsb2FkTmF2aWdhdGlvbi5uZXh0KCkpLFxuICAgICAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UudXNlciQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3JlbG9hZE5hdmlnYXRpb24ubmV4dCgpKSxcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUdyb3VwU2VydmljZS5hY3RpdmVHcm91cHMkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWxvYWROYXZpZ2F0aW9uLm5leHQoKSlcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICB0aGlzLl9yZWxvYWROYXZpZ2F0aW9uLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5fc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFzdWIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVsb2FkTmF2aWdhdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAodGhpcy5fc3ViR3JvdXBSZXNvbHV0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Ykdyb3VwUmVzb2x1dGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zdWJMYW5nQ2hhbmdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YkxhbmdDaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYXNDaGlsZChfOiBudW1iZXIsIG5vZGU6IE5hdmlnYXRpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIW5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlTmF2aWdhdGlvbigpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5vZGVzO1xuICAgICAgICBpZiAodGhpcy52aWV3UGF0aCAmJiB0aGlzLnBhcmVudFVybCAhPT0gdW5kZWZpbmVkICYmIHRoaXMucm91dGVyQ2hhbmdlKSB7XG4gICAgICAgICAgICBub2RlcyA9IHRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2Rlc1dpdGhPZmZzZXRSb290KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlcyA9IHRoaXMucmVzb2x2ZU5hdmlnYXRpb25Ob2Rlcyh0aGlzLl9jb25maWcuZ2V0Q29uZmlndXJhdGlvblN1YnRyZWUoWyd2aWV3cyddKSwgJycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gbm9kZXM7XG4gICAgICAgIHRoaXMucmVzb2x2ZUxldmVscyh0aGlzLmRhdGFTb3VyY2UuZGF0YSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVOYXZpZ2F0aW9uTm9kZXNXaXRoT2Zmc2V0Um9vdCgpOiBBcnJheTxOYXZpZ2F0aW9uTm9kZT4ge1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5fY29uZmlnLmdldFZpZXdCeVBhdGgodGhpcy52aWV3UGF0aCk7XG4gICAgICAgIGlmICh2aWV3ICYmIHZpZXcuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVOYXZpZ2F0aW9uTm9kZXModmlldy5jaGlsZHJlbiwgdGhpcy5wYXJlbnRVcmwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgcHJvdmlkZWQge0BsaW5rIFZpZXdzfSBvYmplY3QgaW50byB0aGUgY29ycmVzcG9uZGluZyBuYXZpZ2F0aW9uIHRyZWVcbiAgICAgKiBAcGFyYW0gdmlld3MgbmF2aWdhdGlvbiBjb25maWd1cmF0aW9uXG4gICAgICogQHBhcmFtIHBhcmVudFVybCBVUkwgb2YgdGhlIHBhcmVudCBuYXZpZ2F0aW9uIHRyZWUgbm9kZVxuICAgICAqIEBwYXJhbSBhbmNlc3Rvck5vZGVDb250YWluZXIgaWYgdGhlIHBhcmVudCBub2RlIGhhcyBubyBuYXZpZ2F0aW9uIHRoaXMgYXR0cmlidXRlIGNvbnRhaW5zIHRoZVxuICAgICAqIGNsb3Nlc3QgYW5jZXN0b3IgdGhhdCBoYXMgbmF2aWdhdGlvblxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZU5hdmlnYXRpb25Ob2RlcyhcbiAgICAgICAgdmlld3M6IFZpZXdzLFxuICAgICAgICBwYXJlbnRVcmw6IHN0cmluZyxcbiAgICAgICAgYW5jZXN0b3JOb2RlQ29udGFpbmVyPzogQXJyYXk8TmF2aWdhdGlvbk5vZGU+XG4gICAgKTogQXJyYXk8TmF2aWdhdGlvbk5vZGU+IHtcbiAgICAgICAgaWYgKCF2aWV3cyB8fCBPYmplY3Qua2V5cyh2aWV3cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBncm91cE5hdmlnYXRpb25HZW5lcmF0ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgbm9kZXM6IEFycmF5PE5hdmlnYXRpb25Ob2RlPiA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyh2aWV3cykuZm9yRWFjaCgodmlld0tleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gdmlld3Nbdmlld0tleV07XG5cbiAgICAgICAgICAgIGlmICghZ3JvdXBOYXZpZ2F0aW9uR2VuZXJhdGVkICYmIHRoaXMuaXNHcm91cE5hdmlnYXRpb25Ob2RlKHZpZXcpKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBOYXZpZ2F0aW9uR2VuZXJhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRQb3NpdGlvbiA9IChhbmNlc3Rvck5vZGVDb250YWluZXIgPz8gbm9kZXMpLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3N1YkxhbmdDaGFuZ2UgPSB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0TGFuZ0NoYW5nZSQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRHcm91cE5hdmlnYXRpb25Ob2RlcyhpbnNlcnRQb3NpdGlvbiwgYW5jZXN0b3JOb2RlQ29udGFpbmVyID8/IG5vZGVzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRHcm91cE5hdmlnYXRpb25Ob2RlcyhpbnNlcnRQb3NpdGlvbiwgYW5jZXN0b3JOb2RlQ29udGFpbmVyID8/IG5vZGVzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc05hdmlnYXRpb24odmlldykgJiYgIXRoaXMuaGFzU3ViUm91dGVzKHZpZXcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gdGhpcy5nZXROb2RlUm91dGVTZWdtZW50KHZpZXcpO1xuXG4gICAgICAgICAgICBpZiAocm91dGVTZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JvdXRlIHNlZ21lbnQgZG9lc250IGV4aXN0IGluIHZpZXcgJyArIHBhcmVudFVybCArICcvJyArIHZpZXdLZXkgKyAnICEnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9hY2Nlc3NTZXJ2aWNlLmNhbkFjY2Vzc1ZpZXcodmlldywgdGhpcy5hcHBlbmRSb3V0ZVNlZ21lbnQocGFyZW50VXJsLCByb3V0ZVNlZ21lbnQpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzTmF2aWdhdGlvbih2aWV3KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGU6IE5hdmlnYXRpb25Ob2RlID0gdGhpcy5idWlsZE5vZGUodmlldywgcm91dGVTZWdtZW50LCBwYXJlbnRVcmwpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1N1YlJvdXRlcyh2aWV3KSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gdGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzKHZpZXcuY2hpbGRyZW4sIG5vZGUudXJsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU3ViUm91dGVzKHZpZXcpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goLi4udGhpcy5yZXNvbHZlTmF2aWdhdGlvbk5vZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kUm91dGVTZWdtZW50KHBhcmVudFVybCwgcm91dGVTZWdtZW50KSwgYW5jZXN0b3JOb2RlQ29udGFpbmVyID8/IG5vZGVzKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBub2RlcztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFzTmF2aWdhdGlvbihyb3V0ZTogVmlldyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXJvdXRlLm5hdmlnYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdXRlLm5hdmlnYXRpb24gPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdXRlLm5hdmlnYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5uYXZpZ2F0aW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJvdXRlLm5hdmlnYXRpb24pLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYXNTdWJSb3V0ZXMocm91dGU6IFZpZXcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFyb3V0ZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm91dGUuY2hpbGRyZW4gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocm91dGUuY2hpbGRyZW4pLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBidWlsZE5vZGUodmlldzogVmlldywgcm91dGVTZWdtZW50OiBzdHJpbmcsIHBhcmVudFVybDogc3RyaW5nKTogTmF2aWdhdGlvbk5vZGUge1xuICAgICAgICBjb25zdCBub2RlOiBOYXZpZ2F0aW9uTm9kZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgICAgICB1cmw6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZS5uYW1lID0gdGhpcy5nZXROb2RlTmFtZSh2aWV3LCByb3V0ZVNlZ21lbnQpO1xuICAgICAgICBub2RlLmljb24gPSB0aGlzLmdldE5vZGVJY29uKHZpZXcpO1xuICAgICAgICBub2RlLnVybCA9IHRoaXMuYXBwZW5kUm91dGVTZWdtZW50KHBhcmVudFVybCwgcm91dGVTZWdtZW50KTtcbiAgICAgICAgbm9kZS50cmFuc2xhdGUgPSB0aGlzLmdldE5vZGVUcmFuc2xhdGVGbGFnKHZpZXcpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Tm9kZU5hbWUodmlldzogVmlldywgcm91dGVTZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodmlldy5uYXZpZ2F0aW9uWyd0aXRsZSddKSB7XG4gICAgICAgICAgICByZXR1cm4gdmlldy5uYXZpZ2F0aW9uWyd0aXRsZSddO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ciA9IHJvdXRlU2VnbWVudC5yZXBsYWNlKCdfJywgJyAnKTtcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE5vZGVJY29uKHZpZXc6IFZpZXcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gIXZpZXcubmF2aWdhdGlvblsnaWNvbiddID8gdW5kZWZpbmVkIDogdmlldy5uYXZpZ2F0aW9uWydpY29uJ107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHZpZXcgY29uZmlndXJhdGlvbiBvZiBzb21lIHZpZXcsIHdob3NlIHJvdXRlU2VnbWVudCB3ZSB3YW50IHRvIGRldGVybWluZVxuICAgICAqIEByZXR1cm5zIHRoZSByb3V0ZVNlZ21lbnQgZm9yIHRoZSBwcm92aWRlZCB2aWV3LCBvciB1bmRlZmluZWQgaWYgbm9uZSBpcyBzcGVjaWZpZWRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0Tm9kZVJvdXRlU2VnbWVudCh2aWV3OiBWaWV3KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICEhdmlldy5yb3V0aW5nICYmICh0eXBlb2Ygdmlldy5yb3V0aW5nLnBhdGggPT09ICdzdHJpbmcnKSA/IHZpZXcucm91dGluZy5wYXRoIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXROb2RlVHJhbnNsYXRlRmxhZyh2aWV3OiBWaWV3KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2aWV3Lm5hdmlnYXRpb25bJ3RyYW5zbGF0ZSddID8/IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGVuZHMgdGhlIHJvdXRlIHNlZ21lbnQgdG8gdGhlIHBhcmVudCBVUkwuXG4gICAgICogQHBhcmFtIHBhcmVudFVybCBVUkwgb2YgdGhlIHBhcmVudC4gU2hvdWxkIG5vdCBlbmQgd2l0aCAnLydcbiAgICAgKiBAcGFyYW0gcm91dGVTZWdtZW50IFVSTCBzZWdtZW50IG9mIHRoZSBjaGlsZFxuICAgICAqIEByZXR1cm5zIGBwYXJlbnRVcmwvcm91dGVTZWdtZW50YCBpZiB0aGUgYHJvdXRlU2VnbWVudGAgaXMgdHJ1dGh5IChub3QgYW4gZW1wdHkgc3RyaW5nKS5cbiAgICAgKiBSZXR1cm5zIGBwYXJlbnRVcmxgIGlmIGByb3V0ZVNlZ21lbnRgIGlzIGZhbHN5IChlbXB0eSBzdHJpbmcpLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhcHBlbmRSb3V0ZVNlZ21lbnQocGFyZW50VXJsOiBzdHJpbmcsIHJvdXRlU2VnbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHJvdXRlU2VnbWVudCA/IHBhcmVudFVybCArICcvJyArIHJvdXRlU2VnbWVudCA6IHBhcmVudFVybDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVzb2x2ZUxldmVscyhub2RlczogQXJyYXk8TmF2aWdhdGlvbk5vZGU+LCBwYXJlbnRMZXZlbD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIW5vZGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudExldmVsID0gcGFyZW50TGV2ZWwgPT09IG51bGwgfHwgcGFyZW50TGV2ZWwgPT09IHVuZGVmaW5lZCA/IDAgOiBwYXJlbnRMZXZlbCArIDE7XG4gICAgICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBub2RlLmxldmVsID0gY3VycmVudExldmVsO1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmVMZXZlbHMobm9kZS5jaGlsZHJlbiwgY3VycmVudExldmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVDaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9jb25maWcuZ2V0Vmlld0J5UGF0aCh0aGlzLnZpZXdQYXRoKTtcbiAgICAgICAgaWYgKHZpZXcgJiYgdmlldy5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnJlc29sdmVOYXZpZ2F0aW9uTm9kZXModmlldy5jaGlsZHJlbiwgdGhpcy5wYXJlbnRVcmwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzb2x2ZUxldmVscyh0aGlzLmRhdGFTb3VyY2UuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBsYXlvdXQgb2YgdGhlIHByb3ZpZGVkIHtAbGluayBWaWV3fSBub2RlJ3MgbmFtZSBpbmRpY2F0ZXMgaXQgaXMgYVxuICAgICAqIFtncm91cCBuYXZpZ2F0aW9uIG91dGxldF17QGxpbmsgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzI0dST1VQX05BVklHQVRJT05fT1VUTEVUfS4gUmV0dXJucyBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNHcm91cE5hdmlnYXRpb25Ob2RlKHZpZXc6IFZpZXcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZpZXc/LmxheW91dD8ubmFtZSA9PT0gR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLkdST1VQX05BVklHQVRJT05fT1VUTEVUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcmNlcyBhIHJlbG9hZCBvZiB0aGUgZ3JvdXAgbmF2aWdhdGlvbiBub2Rlcy5cbiAgICAgKiBAcGFyYW0gaW5zZXJ0UG9zaXRpb24gdGhlIHBvc2l0aW9uIGluIHRoZSBjb250YWluZXIgd2hlcmUgZ3JvdXAgbmF2aWdhdGlvbiBub2RlcyByZXNpZGVcbiAgICAgKiBAcGFyYW0gbm9kZUNvbnRhaW5lciB0aGUgbm9kZSBjb250YWluZXIgdGhhdCBjb250YWlucyB0aGUgZ3JvdXAgbmF2aWdhdGlvbiBub2Rlc1xuICAgICAqIChjYW4gYmUgYW4gaW5uZXIgbm9kZSBvZiB0aGUgbmF2aWdhdGlvbiB0cmVlIG9yIGl0cyByb290KVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBsb2FkR3JvdXBOYXZpZ2F0aW9uTm9kZXMoaW5zZXJ0UG9zaXRpb246IG51bWJlciwgbm9kZUNvbnRhaW5lcjogQXJyYXk8TmF2aWdhdGlvbk5vZGU+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9zdWJHcm91cFJlc29sdXRpb24gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5fc3ViR3JvdXBSZXNvbHV0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5fc3ViR3JvdXBSZXNvbHV0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJHcm91cFJlc29sdXRpb24gPSB0aGlzLmdlbmVyYXRlR3JvdXBOYXZpZ2F0aW9uTm9kZXMoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShncm91cE5hdk5vZGVzID0+IHtcbiAgICAgICAgICAgIG5vZGVDb250YWluZXIuc3BsaWNlKGluc2VydFBvc2l0aW9uLCB0aGlzLl9ncm91cE5hdk5vZGVzQ291bnQsIC4uLmdyb3VwTmF2Tm9kZXMpO1xuICAgICAgICAgICAgdGhpcy5fZ3JvdXBOYXZOb2Rlc0NvdW50ID0gZ3JvdXBOYXZOb2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICByZWZyZXNoVHJlZSh0aGlzLmRhdGFTb3VyY2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVHcm91cE5hdmlnYXRpb25Ob2RlcygpOiBPYnNlcnZhYmxlPEFycmF5PE5hdmlnYXRpb25Ob2RlPj4ge1xuICAgICAgICByZXR1cm4gZm9ya0pvaW4odGhpcy5fYWN0aXZlR3JvdXBTZXJ2aWNlLmFjdGl2ZUdyb3Vwcy5tYXAoZ3JvdXBDYXNlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLnNlYXJjaFRhc2soU2ltcGxlRmlsdGVyLmZyb21UYXNrUXVlcnkoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjYXNlOiB7aWQ6IGdyb3VwQ2FzZS5zdHJpbmdJZH0sXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25JZDogR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLk5BVklHQVRJT05fQ09ORklHX1RSQU5TSVRJT05fSUQgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAodGFza1BhZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQ29udGVudCh0YXNrUGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmdldERhdGEodGFza1BhZ2UuY29udGVudFswXS5zdHJpbmdJZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ0dyb3VwIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0YXNrIHdhcyBub3QgZm91bmQuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJyBOYXZpZ2F0aW9uIGZvciB0aGlzIGdyb3VwIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjb25jYXRNYXAobyA9PiBvKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSkpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG5hdmlnYXRpb25Db25maWd1cmF0aW9uczogQXJyYXk8QXJyYXk8RGF0YUdyb3VwPj4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5hdkNvbmZpZyBvZiBuYXZpZ2F0aW9uQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5jb252ZXJ0RGF0YWdyb3Vwc1RvTmF2RW50cmllcyhuYXZDb25maWcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvbnZlcnREYXRhZ3JvdXBzVG9OYXZFbnRyaWVzKG5hdkNvbmZpZ0RhdGFncm91cHM6IEFycmF5PERhdGFHcm91cD4pOiBBcnJheTxOYXZpZ2F0aW9uTm9kZT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgY29uc3QgZW50cnlEYXRhR3JvdXBJbmRpY2VzID0gW107XG4gICAgICAgIG5hdkNvbmZpZ0RhdGFncm91cHMuZm9yRWFjaChcbiAgICAgICAgICAgIChncm91cCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuZmllbGRzLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkID0+IGZpZWxkLnN0cmluZ0lkID09PSBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuTkFWSUdBVElPTl9FTlRSWV9NQVJLRVJfRklFTERfSURfU1VGRklYXG4gICAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgICAgICBlbnRyeURhdGFHcm91cEluZGljZXMucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBuYXZFbnRyaWVzVGFza1JlZjtcbiAgICAgICAgbmF2Q29uZmlnRGF0YWdyb3Vwcy5zb21lKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2tSZWYgPSBnZXRGaWVsZChncm91cC5maWVsZHMsIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5OQVZJR0FUSU9OX0VOVFJJRVNfVEFTS19SRUZfRklFTERfSUQpO1xuICAgICAgICAgICAgaWYgKHRhc2tSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG5hdkVudHJpZXNUYXNrUmVmID0gdGFza1JlZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhIXRhc2tSZWY7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghbmF2RW50cmllc1Rhc2tSZWYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbiB0YXNrIGNvbnRhaW5zIG5vIHRhc2sgcmVmIHdpdGggZW50cmllcy4gTmF2aWdhdGlvbiBjYW5ub3QgYmUgY29uc3RydWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IG9yZGVyID0gMDsgb3JkZXIgPCBuYXZFbnRyaWVzVGFza1JlZi52YWx1ZS5sZW5ndGg7IG9yZGVyKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZW50cnlEYXRhR3JvdXBJbmRpY2VzW29yZGVyXTtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZXh0cmFjdEljb25BbmRUaXRsZShuYXZDb25maWdEYXRhZ3JvdXBzLnNsaWNlKGluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4ICsgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLkRBVEFHUk9VUFNfUEVSX05BVklHQVRJT05fRU5UUlkpKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld05vZGU6IE5hdmlnYXRpb25Ob2RlID0ge3VybDogJycsIC4uLmxhYmVsfTtcblxuICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5fbmF2aWdhdGlvblJvdXRlUHJvdmlkZXIucm91dGU7XG4gICAgICAgICAgICBpZiAodXJsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYE5vIFVSTCBpcyBjb25maWd1cmVkIGluIG5hZS5qc29uIGZvciBjb25maWd1cmFibGUgZ3JvdXAgbmF2aWdhdGlvbi4gRHluYW1pYyBuYXZpZ2F0aW9uIGVudHJ5IHdhcyBpZ25vcmVkYCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdOb2RlLnVybCA9IGAvJHt1cmx9LyR7bmF2RW50cmllc1Rhc2tSZWYudmFsdWVbb3JkZXJdfWA7XG4gICAgICAgICAgICBjb25zdCBhbGxvd2VkUm9sZXMgPSBleHRyYWN0Um9sZXMobmF2Q29uZmlnRGF0YWdyb3Vwcy5zbGljZShpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggKyBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuREFUQUdST1VQU19QRVJfTkFWSUdBVElPTl9FTlRSWSksXG4gICAgICAgICAgICAgICAgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLk5BVklHQVRJT05fRU5UUllfQUxMT1dFRF9ST0xFU19GSUVMRF9JRF9TVUZGSVgpO1xuXG4gICAgICAgICAgICBjb25zdCBiYW5uZWRSb2xlcyA9IGV4dHJhY3RSb2xlcyhuYXZDb25maWdEYXRhZ3JvdXBzLnNsaWNlKGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBpbmRleCArIEdyb3VwTmF2aWdhdGlvbkNvbnN0YW50cy5EQVRBR1JPVVBTX1BFUl9OQVZJR0FUSU9OX0VOVFJZKSxcbiAgICAgICAgICAgICAgICBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuTkFWSUdBVElPTl9FTlRSWV9CQU5ORURfUk9MRVNfRklFTERfSURfU1VGRklYKTtcblxuICAgICAgICAgICAgY29uc3Qgc3BsaXRBbGxvd2VkUm9sZXMgPSB0aGlzLmV4dHJhY3RSb2xlQW5kTmV0SWQoYWxsb3dlZFJvbGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0QmFubmVkUm9sZXMgPSB0aGlzLmV4dHJhY3RSb2xlQW5kTmV0SWQoYmFubmVkUm9sZXMpO1xuXG4gICAgICAgICAgICBpZiAoKHNwbGl0QWxsb3dlZFJvbGVzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICB8fCBzcGxpdEFsbG93ZWRSb2xlcy5zb21lKGlkUGFpciA9PiB0aGlzLl91c2VyU2VydmljZS5oYXNSb2xlQnlJZGVudGlmaWVyKGlkUGFpclswXSwgaWRQYWlyWzFdKSkpXG4gICAgICAgICAgICAgICAgJiYgIXNwbGl0QmFubmVkUm9sZXMuc29tZShpZFBhaXIgPT4gdGhpcy5fdXNlclNlcnZpY2UuaGFzUm9sZUJ5SWRlbnRpZmllcihpZFBhaXJbMF0sIGlkUGFpclsxXSkpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdHMgdGhlIHByb3ZpZGVkIHN0cmluZ3Mgb24gdGhlICc6JyBjaGFyYWN0ZXIgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHJlc3VsdGluZyBzcGxpdHMuXG4gICAgICpcbiAgICAgKiBJZiBhbnkgb2YgdGhlIGlucHV0IHN0cmluZ3Mgc3BsaXQgaW50byBmZXdlciBvciBtb3JlIHRoYW4gMiBzdHJpbmdzIGFuIGVycm9yIGlzIHRocm93bi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBqb2luZWQgYSBsaXN0IG9mIHN0cmluZ3MgaW4gdGhlIGZvcm0gYDxyb2xlIGlkZW50aWZpZXI+OjxuZXQgaWRlbnRpZmllcj5gXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGV4dHJhY3RSb2xlQW5kTmV0SWQoam9pbmVkOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xuICAgICAgICBjb25zdCBzcGxpdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2Ygam9pbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdFBhaXIgPSBwYWlyLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBpZiAoc3BsaXRQYWlyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHJvbGUtbmV0IHBhaXIgJyR7cGFpcn0nIGhhcyBpbnZhbGlkIGZvcm1hdCEgQ2Fubm90IGV4dHJhY3Qgcm9sZSBhbmQgbmV0IGlkZW50aWZpZXJzLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3BsaXQucHVzaChzcGxpdFBhaXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcGxpdDtcbiAgICB9XG59XG4iXX0=
@@ -3,17 +3,21 @@ export * from './quick-panel/public-api';
3
3
  /* COMPONENTS */
4
4
  export * from './navigation-tree/abstract-navigation-tree.component';
5
5
  export * from './navigation-drawer/abstract-navigation-drawer.component';
6
+ export * from './navigation-double-drawer/abstract-navigation-double-drawer';
6
7
  export * from './navigation-rail/abstract-navigation-rail.component';
7
8
  export * from './group-navigation-component-resolver/abstract-group-navigation-component-resolver.component';
8
9
  /* SERVICES */
9
10
  export * from './group-navigation-component-resolver/group-navigation-component-resolver.service';
10
11
  export * from './utility/filter-extraction.service';
12
+ export * from './service/uri.service';
13
+ export * from './service/uri-resource.service';
11
14
  /* MODELS */
12
15
  export * from './model/group-navigation-constants';
13
16
  export * from './model/group-navigation-component-resolver-component-injection-token';
14
17
  export * from './model/filter-case-injection-token';
15
18
  export * from './model/group-navigation-item-label';
19
+ export * from './model/uri-resource';
16
20
  /* UTILITY METHODS */
17
21
  export * from './utility/navigation-item-task-utility-methods';
18
22
  export * from './group-navigation-component-resolver/group-navigation-view-id-segment-factory';
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvbmF2aWdhdGlvbi9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixjQUFjLDBCQUEwQixDQUFDO0FBRXpDLGdCQUFnQjtBQUNoQixjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYyxzREFBc0QsQ0FBQztBQUNyRSxjQUFjLDhGQUE4RixDQUFDO0FBRTdHLGNBQWM7QUFDZCxjQUFjLG1GQUFtRixDQUFDO0FBQ2xHLGNBQWMscUNBQXFDLENBQUM7QUFFcEQsWUFBWTtBQUNaLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyx1RUFBdUUsQ0FBQztBQUN0RixjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMscUNBQXFDLENBQUM7QUFFcEQscUJBQXFCO0FBQ3JCLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyxnRkFBZ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIEFQSVMgKi9cbmV4cG9ydCAqIGZyb20gJy4vcXVpY2stcGFuZWwvcHVibGljLWFwaSc7XG5cbi8qIENPTVBPTkVOVFMgKi9cbmV4cG9ydCAqIGZyb20gJy4vbmF2aWdhdGlvbi10cmVlL2Fic3RyYWN0LW5hdmlnYXRpb24tdHJlZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9uYXZpZ2F0aW9uLWRyYXdlci9hYnN0cmFjdC1uYXZpZ2F0aW9uLWRyYXdlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9uYXZpZ2F0aW9uLXJhaWwvYWJzdHJhY3QtbmF2aWdhdGlvbi1yYWlsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3VwLW5hdmlnYXRpb24tY29tcG9uZW50LXJlc29sdmVyL2Fic3RyYWN0LWdyb3VwLW5hdmlnYXRpb24tY29tcG9uZW50LXJlc29sdmVyLmNvbXBvbmVudCc7XG5cbi8qIFNFUlZJQ0VTICovXG5leHBvcnQgKiBmcm9tICcuL2dyb3VwLW5hdmlnYXRpb24tY29tcG9uZW50LXJlc29sdmVyL2dyb3VwLW5hdmlnYXRpb24tY29tcG9uZW50LXJlc29sdmVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXR5L2ZpbHRlci1leHRyYWN0aW9uLnNlcnZpY2UnO1xuXG4vKiBNT0RFTFMgKi9cbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvZ3JvdXAtbmF2aWdhdGlvbi1jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC9ncm91cC1uYXZpZ2F0aW9uLWNvbXBvbmVudC1yZXNvbHZlci1jb21wb25lbnQtaW5qZWN0aW9uLXRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvZmlsdGVyLWNhc2UtaW5qZWN0aW9uLXRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvZ3JvdXAtbmF2aWdhdGlvbi1pdGVtLWxhYmVsJztcblxuLyogVVRJTElUWSBNRVRIT0RTICovXG5leHBvcnQgKiBmcm9tICcuL3V0aWxpdHkvbmF2aWdhdGlvbi1pdGVtLXRhc2stdXRpbGl0eS1tZXRob2RzJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JvdXAtbmF2aWdhdGlvbi1jb21wb25lbnQtcmVzb2x2ZXIvZ3JvdXAtbmF2aWdhdGlvbi12aWV3LWlkLXNlZ21lbnQtZmFjdG9yeSc7XG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvbmF2aWdhdGlvbi9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixjQUFjLDBCQUEwQixDQUFDO0FBRXpDLGdCQUFnQjtBQUNoQixjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYyw4REFBOEQsQ0FBQztBQUM3RSxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsOEZBQThGLENBQUM7QUFFN0csY0FBYztBQUNkLGNBQWMsbUZBQW1GLENBQUM7QUFDbEcsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZ0NBQWdDLENBQUM7QUFFL0MsWUFBWTtBQUNaLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyx1RUFBdUUsQ0FBQztBQUN0RixjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxxQkFBcUI7QUFDckIsY0FBYyxnREFBZ0QsQ0FBQztBQUMvRCxjQUFjLGdGQUFnRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogQVBJUyAqL1xuZXhwb3J0ICogZnJvbSAnLi9xdWljay1wYW5lbC9wdWJsaWMtYXBpJztcblxuLyogQ09NUE9ORU5UUyAqL1xuZXhwb3J0ICogZnJvbSAnLi9uYXZpZ2F0aW9uLXRyZWUvYWJzdHJhY3QtbmF2aWdhdGlvbi10cmVlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL25hdmlnYXRpb24tZHJhd2VyL2Fic3RyYWN0LW5hdmlnYXRpb24tZHJhd2VyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL25hdmlnYXRpb24tZG91YmxlLWRyYXdlci9hYnN0cmFjdC1uYXZpZ2F0aW9uLWRvdWJsZS1kcmF3ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9uYXZpZ2F0aW9uLXJhaWwvYWJzdHJhY3QtbmF2aWdhdGlvbi1yYWlsLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3VwLW5hdmlnYXRpb24tY29tcG9uZW50LXJlc29sdmVyL2Fic3RyYWN0LWdyb3VwLW5hdmlnYXRpb24tY29tcG9uZW50LXJlc29sdmVyLmNvbXBvbmVudCc7XG5cbi8qIFNFUlZJQ0VTICovXG5leHBvcnQgKiBmcm9tICcuL2dyb3VwLW5hdmlnYXRpb24tY29tcG9uZW50LXJlc29sdmVyL2dyb3VwLW5hdmlnYXRpb24tY29tcG9uZW50LXJlc29sdmVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXR5L2ZpbHRlci1leHRyYWN0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlL3VyaS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZS91cmktcmVzb3VyY2Uuc2VydmljZSc7XG5cbi8qIE1PREVMUyAqL1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC9ncm91cC1uYXZpZ2F0aW9uLWNvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVsL2dyb3VwLW5hdmlnYXRpb24tY29tcG9uZW50LXJlc29sdmVyLWNvbXBvbmVudC1pbmplY3Rpb24tdG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC9maWx0ZXItY2FzZS1pbmplY3Rpb24tdG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC9ncm91cC1uYXZpZ2F0aW9uLWl0ZW0tbGFiZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbC91cmktcmVzb3VyY2UnO1xuXG4vKiBVVElMSVRZIE1FVEhPRFMgKi9cbmV4cG9ydCAqIGZyb20gJy4vdXRpbGl0eS9uYXZpZ2F0aW9uLWl0ZW0tdGFzay11dGlsaXR5LW1ldGhvZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cC1uYXZpZ2F0aW9uLWNvbXBvbmVudC1yZXNvbHZlci9ncm91cC1uYXZpZ2F0aW9uLXZpZXctaWQtc2VnbWVudC1mYWN0b3J5JztcbiJdfQ==
@@ -0,0 +1,35 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { AbstractResourceService } from '../../resources/abstract-endpoint/abstract-resource.service';
3
+ import { map } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../resources/resource-provider.service";
6
+ import * as i2 from "../../configuration/configuration.service";
7
+ /**
8
+ * Service for accessing backend resource to resolve URI objects
9
+ * */
10
+ export class UriResourceService extends AbstractResourceService {
11
+ constructor(provider, configService) {
12
+ super('petrinet', provider, configService);
13
+ }
14
+ getRoot() {
15
+ return this._resourceProvider.get$('uri/root', this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNode')));
16
+ }
17
+ getByLevel(level) {
18
+ return this._resourceProvider.get$('uri/level/' + level, this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNodes')));
19
+ }
20
+ getNodesByParent(parentId) {
21
+ return this._resourceProvider.get$('uri/parent/' + parentId, this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNodes')));
22
+ }
23
+ getNodeByUri(uriPath) {
24
+ return this._resourceProvider.get$('uri/' + btoa(uriPath), this.SERVER_URL).pipe(map(r => this.changeType(r, 'uriNode')));
25
+ }
26
+ }
27
+ UriResourceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UriResourceService, deps: [{ token: i1.ResourceProvider }, { token: i2.ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
28
+ UriResourceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UriResourceService, providedIn: 'root' });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UriResourceService, decorators: [{
30
+ type: Injectable,
31
+ args: [{
32
+ providedIn: 'root'
33
+ }]
34
+ }], ctorParameters: function () { return [{ type: i1.ResourceProvider }, { type: i2.ConfigurationService }]; } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJpLXJlc291cmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL25hdmlnYXRpb24vc2VydmljZS91cmktcmVzb3VyY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBS3BHLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUVuQzs7S0FFSztBQUlMLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSx1QkFBdUI7SUFFM0QsWUFBWSxRQUEwQixFQUFFLGFBQW1DO1FBQ3ZFLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxPQUFPO1FBQ1YsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUNoRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFhO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQzFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsUUFBZ0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDOUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxZQUFZLENBQUMsT0FBZTtRQUMvQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUM1RSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQzs7Z0hBeEJRLGtCQUFrQjtvSEFBbEIsa0JBQWtCLGNBRmYsTUFBTTs0RkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RSZXNvdXJjZVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9hYnN0cmFjdC1lbmRwb2ludC9hYnN0cmFjdC1yZXNvdXJjZS5zZXJ2aWNlJztcbmltcG9ydCB7UmVzb3VyY2VQcm92aWRlcn0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Jlc291cmNlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtVcmlOb2RlUmVzb3VyY2V9IGZyb20gJy4uL21vZGVsL3VyaS1yZXNvdXJjZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBhY2Nlc3NpbmcgYmFja2VuZCByZXNvdXJjZSB0byByZXNvbHZlIFVSSSBvYmplY3RzXG4gKiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVcmlSZXNvdXJjZVNlcnZpY2UgZXh0ZW5kcyBBYnN0cmFjdFJlc291cmNlU2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm92aWRlcjogUmVzb3VyY2VQcm92aWRlciwgY29uZmlnU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoJ3BldHJpbmV0JywgcHJvdmlkZXIsIGNvbmZpZ1NlcnZpY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSb290KCk6IE9ic2VydmFibGU8VXJpTm9kZVJlc291cmNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJ3VyaS9yb290JywgdGhpcy5TRVJWRVJfVVJMKS5waXBlKFxuICAgICAgICAgICAgbWFwKHIgPT4gdGhpcy5jaGFuZ2VUeXBlKHIsICd1cmlOb2RlJykpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlMZXZlbChsZXZlbDogbnVtYmVyKTogT2JzZXJ2YWJsZTxBcnJheTxVcmlOb2RlUmVzb3VyY2U+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVByb3ZpZGVyLmdldCQoJ3VyaS9sZXZlbC8nICsgbGV2ZWwsIHRoaXMuU0VSVkVSX1VSTCkucGlwZShcbiAgICAgICAgICAgIG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCAndXJpTm9kZXMnKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb2Rlc0J5UGFyZW50KHBhcmVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PFVyaU5vZGVSZXNvdXJjZT4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgndXJpL3BhcmVudC8nICsgcGFyZW50SWQsIHRoaXMuU0VSVkVSX1VSTCkucGlwZShcbiAgICAgICAgICAgIG1hcChyID0+IHRoaXMuY2hhbmdlVHlwZShyLCAndXJpTm9kZXMnKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROb2RlQnlVcmkodXJpUGF0aDogc3RyaW5nKTogT2JzZXJ2YWJsZTxVcmlOb2RlUmVzb3VyY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlUHJvdmlkZXIuZ2V0JCgndXJpLycgKyBidG9hKHVyaVBhdGgpLCB0aGlzLlNFUlZFUl9VUkwpLnBpcGUoXG4gICAgICAgICAgICBtYXAociA9PiB0aGlzLmNoYW5nZVR5cGUociwgJ3VyaU5vZGUnKSkpO1xuICAgIH1cbn1cbiJdfQ==