@igo2/geo 1.13.0 → 1.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/esm2020/lib/datasource/shared/capabilities.service.mjs +22 -17
  2. package/esm2020/lib/draw/draw/draw-popup.component.mjs +5 -5
  3. package/esm2020/lib/draw/draw/draw.component.mjs +384 -273
  4. package/esm2020/lib/draw/draw/draw.module.mjs +19 -15
  5. package/esm2020/lib/draw/shared/draw-style.service.mjs +35 -18
  6. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  7. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +51 -24
  8. package/esm2020/lib/feature/shared/feature.utils.mjs +4 -5
  9. package/esm2020/lib/feature/shared/store.mjs +14 -2
  10. package/esm2020/lib/filter/filter.module.mjs +2 -2
  11. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +2 -2
  12. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +2 -2
  13. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +2 -2
  14. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +44 -39
  15. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +23 -10
  16. package/esm2020/lib/import-export/import-export/import-export.component.mjs +98 -68
  17. package/esm2020/lib/import-export/import-export.module.mjs +6 -3
  18. package/esm2020/lib/import-export/shared/import.utils.mjs +3 -2
  19. package/esm2020/lib/layer/index.mjs +2 -1
  20. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +28 -22
  21. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +47 -28
  22. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +3 -3
  23. package/esm2020/lib/layer/layer.module.mjs +19 -7
  24. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
  25. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +4 -1
  26. package/esm2020/lib/layer/style-modal/index.mjs +2 -0
  27. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +288 -0
  28. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +21 -18
  29. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  30. package/esm2020/lib/query/shared/query.service.mjs +4 -1
  31. package/esm2020/lib/search/search-bar/search-bar.component.mjs +16 -14
  32. package/esm2020/lib/search/shared/search.utils.mjs +13 -1
  33. package/esm2020/lib/workspace/shared/edition-workspace.mjs +8 -6
  34. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +9 -4
  35. package/fesm2015/igo2-geo.mjs +3784 -3199
  36. package/fesm2015/igo2-geo.mjs.map +1 -1
  37. package/fesm2020/igo2-geo.mjs +3726 -3169
  38. package/fesm2020/igo2-geo.mjs.map +1 -1
  39. package/lib/draw/draw/draw-popup.component.d.ts +0 -3
  40. package/lib/draw/draw/draw.component.d.ts +71 -50
  41. package/lib/draw/draw/draw.module.d.ts +13 -10
  42. package/lib/draw/shared/draw-style.service.d.ts +7 -1
  43. package/lib/draw/shared/draw.interface.d.ts +4 -0
  44. package/lib/feature/feature-details/feature-details.component.d.ts +4 -0
  45. package/lib/feature/shared/store.d.ts +1 -0
  46. package/lib/import-export/import-export/import-export.component.d.ts +2 -0
  47. package/lib/import-export/import-export.module.d.ts +1 -1
  48. package/lib/layer/index.d.ts +1 -0
  49. package/lib/layer/layer-list/layer-list.component.d.ts +3 -4
  50. package/lib/layer/layer.module.d.ts +20 -18
  51. package/lib/layer/shared/layers/layer.interface.d.ts +1 -0
  52. package/lib/layer/shared/layers/vector-layer.d.ts +2 -1
  53. package/lib/layer/style-modal/index.d.ts +1 -0
  54. package/lib/layer/style-modal/style-modal.component.d.ts +42 -0
  55. package/lib/map/geolocate-button/geolocate-button.component.d.ts +3 -1
  56. package/lib/map/shared/map.interface.d.ts +2 -1
  57. package/package.json +8 -8
@@ -3,14 +3,15 @@ import { Subject } from 'rxjs';
3
3
  import { takeUntil } from 'rxjs/operators';
4
4
  import { userAgent } from '@igo2/utils';
5
5
  import { getEntityTitle, getEntityIcon } from '@igo2/common';
6
+ import { Clipboard } from '@igo2/utils';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@angular/common/http";
8
9
  import * as i2 from "@angular/platform-browser";
9
10
  import * as i3 from "@igo2/core";
10
11
  import * as i4 from "@angular/common";
11
12
  import * as i5 from "@angular/material/icon";
12
- import * as i6 from "@ngx-translate/core";
13
- import * as i7 from "@igo2/common";
13
+ import * as i6 from "@igo2/common";
14
+ import * as i7 from "@ngx-translate/core";
14
15
  function FeatureDetailsComponent_table_0_tr_2_td_1_Template(rf, ctx) { if (rf & 1) {
15
16
  i0.ɵɵelementStart(0, "td");
16
17
  i0.ɵɵelement(1, "mat-icon", 7);
@@ -21,9 +22,14 @@ function FeatureDetailsComponent_table_0_tr_2_td_1_Template(rf, ctx) { if (rf &
21
22
  i0.ɵɵpropertyInterpolate("svgIcon", ctx_r4.icon);
22
23
  } }
23
24
  function FeatureDetailsComponent_table_0_tr_2_td_2_Template(rf, ctx) { if (rf & 1) {
25
+ const _r14 = i0.ɵɵgetCurrentView();
24
26
  i0.ɵɵelementStart(0, "td")(1, "a", 8);
25
27
  i0.ɵɵtext(2);
26
28
  i0.ɵɵpipe(3, "translate");
29
+ i0.ɵɵelementEnd();
30
+ i0.ɵɵelementStart(4, "button", 9);
31
+ i0.ɵɵlistener("click", function FeatureDetailsComponent_table_0_tr_2_td_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r14); const property_r3 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r12.copyTextToClipboard(property_r3.value)); });
32
+ i0.ɵɵelement(5, "mat-icon", 10);
27
33
  i0.ɵɵelementEnd()();
28
34
  } if (rf & 2) {
29
35
  const property_r3 = i0.ɵɵnextContext().$implicit;
@@ -34,7 +40,7 @@ function FeatureDetailsComponent_table_0_tr_2_td_2_Template(rf, ctx) { if (rf &
34
40
  i0.ɵɵtextInterpolate2(" ", i0.ɵɵpipeBind1(3, 3, "igo.geo.targetHtmlUrl"), " ", ctx_r5.title, "");
35
41
  } }
36
42
  function FeatureDetailsComponent_table_0_tr_2_td_3_Template(rf, ctx) { if (rf & 1) {
37
- i0.ɵɵelementStart(0, "td", 9);
43
+ i0.ɵɵelementStart(0, "td", 11);
38
44
  i0.ɵɵtext(1);
39
45
  i0.ɵɵelementEnd();
40
46
  } if (rf & 2) {
@@ -43,16 +49,16 @@ function FeatureDetailsComponent_table_0_tr_2_td_3_Template(rf, ctx) { if (rf &
43
49
  i0.ɵɵtextInterpolate1(" ", property_r3.key, " ");
44
50
  } }
45
51
  function FeatureDetailsComponent_table_0_tr_2_td_4_Template(rf, ctx) { if (rf & 1) {
46
- i0.ɵɵelement(0, "td", 10);
52
+ i0.ɵɵelement(0, "td", 12);
47
53
  } if (rf & 2) {
48
54
  const property_r3 = i0.ɵɵnextContext().$implicit;
49
55
  i0.ɵɵproperty("innerHTML", property_r3.value, i0.ɵɵsanitizeHtml);
50
56
  } }
51
57
  const _c0 = function () { return { "cursor": "pointer", "color": "blue" }; };
52
58
  function FeatureDetailsComponent_table_0_tr_2_td_5_Template(rf, ctx) { if (rf & 1) {
53
- const _r17 = i0.ɵɵgetCurrentView();
54
- i0.ɵɵelementStart(0, "td")(1, "u", 11);
55
- i0.ɵɵlistener("click", function FeatureDetailsComponent_table_0_tr_2_td_5_Template_u_click_1_listener() { i0.ɵɵrestoreView(_r17); const property_r3 = i0.ɵɵnextContext().$implicit; const ctx_r15 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r15.openSecureUrl(property_r3.value)); });
59
+ const _r20 = i0.ɵɵgetCurrentView();
60
+ i0.ɵɵelementStart(0, "td")(1, "u", 13);
61
+ i0.ɵɵlistener("click", function FeatureDetailsComponent_table_0_tr_2_td_5_Template_u_click_1_listener() { i0.ɵɵrestoreView(_r20); const property_r3 = i0.ɵɵnextContext().$implicit; const ctx_r18 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r18.openSecureUrl(property_r3.value)); });
56
62
  i0.ɵɵtext(2);
57
63
  i0.ɵɵelementEnd()();
58
64
  } if (rf & 2) {
@@ -64,11 +70,15 @@ function FeatureDetailsComponent_table_0_tr_2_td_5_Template(rf, ctx) { if (rf &
64
70
  i0.ɵɵtextInterpolate(ctx_r8.getEmbeddedLinkText(property_r3.value));
65
71
  } }
66
72
  function FeatureDetailsComponent_table_0_tr_2_td_6_Template(rf, ctx) { if (rf & 1) {
67
- const _r21 = i0.ɵɵgetCurrentView();
68
- i0.ɵɵelementStart(0, "td")(1, "u", 11);
69
- i0.ɵɵlistener("click", function FeatureDetailsComponent_table_0_tr_2_td_6_Template_u_click_1_listener() { i0.ɵɵrestoreView(_r21); const property_r3 = i0.ɵɵnextContext().$implicit; const ctx_r19 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r19.openSecureUrl(property_r3.value)); });
73
+ const _r24 = i0.ɵɵgetCurrentView();
74
+ i0.ɵɵelementStart(0, "td")(1, "u", 13);
75
+ i0.ɵɵlistener("click", function FeatureDetailsComponent_table_0_tr_2_td_6_Template_u_click_1_listener() { i0.ɵɵrestoreView(_r24); const property_r3 = i0.ɵɵnextContext().$implicit; const ctx_r22 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r22.openSecureUrl(property_r3.value)); });
70
76
  i0.ɵɵtext(2);
71
77
  i0.ɵɵpipe(3, "translate");
78
+ i0.ɵɵelementEnd();
79
+ i0.ɵɵelementStart(4, "button", 9);
80
+ i0.ɵɵlistener("click", function FeatureDetailsComponent_table_0_tr_2_td_6_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r24); const property_r3 = i0.ɵɵnextContext().$implicit; const ctx_r25 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r25.copyTextToClipboard(property_r3.value)); });
81
+ i0.ɵɵelement(5, "mat-icon", 10);
72
82
  i0.ɵɵelementEnd()();
73
83
  } if (rf & 2) {
74
84
  i0.ɵɵadvance(1);
@@ -77,10 +87,10 @@ function FeatureDetailsComponent_table_0_tr_2_td_6_Template(rf, ctx) { if (rf &
77
87
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, "igo.geo.targetHtmlUrl"));
78
88
  } }
79
89
  function FeatureDetailsComponent_table_0_tr_2_td_7_Template(rf, ctx) { if (rf & 1) {
80
- const _r24 = i0.ɵɵgetCurrentView();
81
- i0.ɵɵelementStart(0, "td")(1, "a", 12);
82
- i0.ɵɵlistener("click", function FeatureDetailsComponent_table_0_tr_2_td_7_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r24); const property_r3 = i0.ɵɵnextContext().$implicit; const ctx_r22 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r22.openSecureUrl(property_r3.value)); });
83
- i0.ɵɵelement(2, "img", 13);
90
+ const _r29 = i0.ɵɵgetCurrentView();
91
+ i0.ɵɵelementStart(0, "td")(1, "a", 14);
92
+ i0.ɵɵlistener("click", function FeatureDetailsComponent_table_0_tr_2_td_7_Template_a_click_1_listener() { i0.ɵɵrestoreView(_r29); const property_r3 = i0.ɵɵnextContext().$implicit; const ctx_r27 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r27.openSecureUrl(property_r3.value)); });
93
+ i0.ɵɵelement(2, "img", 15);
84
94
  i0.ɵɵpipe(3, "async");
85
95
  i0.ɵɵpipe(4, "secureImage");
86
96
  i0.ɵɵelementEnd()();
@@ -92,7 +102,7 @@ function FeatureDetailsComponent_table_0_tr_2_td_7_Template(rf, ctx) { if (rf &
92
102
  i0.ɵɵpropertyInterpolate("src", i0.ɵɵpipeBind1(3, 2, i0.ɵɵpipeBind1(4, 4, property_r3.value)), i0.ɵɵsanitizeUrl);
93
103
  } }
94
104
  function FeatureDetailsComponent_table_0_tr_2_td_8_Template(rf, ctx) { if (rf & 1) {
95
- i0.ɵɵelement(0, "td", 10);
105
+ i0.ɵɵelement(0, "td", 12);
96
106
  i0.ɵɵpipe(1, "json");
97
107
  } if (rf & 2) {
98
108
  const property_r3 = i0.ɵɵnextContext().$implicit;
@@ -101,11 +111,11 @@ function FeatureDetailsComponent_table_0_tr_2_td_8_Template(rf, ctx) { if (rf &
101
111
  function FeatureDetailsComponent_table_0_tr_2_Template(rf, ctx) { if (rf & 1) {
102
112
  i0.ɵɵelementStart(0, "tr");
103
113
  i0.ɵɵtemplate(1, FeatureDetailsComponent_table_0_tr_2_td_1_Template, 2, 1, "td", 4);
104
- i0.ɵɵtemplate(2, FeatureDetailsComponent_table_0_tr_2_td_2_Template, 4, 5, "td", 4);
114
+ i0.ɵɵtemplate(2, FeatureDetailsComponent_table_0_tr_2_td_2_Template, 6, 5, "td", 4);
105
115
  i0.ɵɵtemplate(3, FeatureDetailsComponent_table_0_tr_2_td_3_Template, 2, 1, "td", 5);
106
116
  i0.ɵɵtemplate(4, FeatureDetailsComponent_table_0_tr_2_td_4_Template, 1, 1, "td", 6);
107
117
  i0.ɵɵtemplate(5, FeatureDetailsComponent_table_0_tr_2_td_5_Template, 3, 3, "td", 4);
108
- i0.ɵɵtemplate(6, FeatureDetailsComponent_table_0_tr_2_td_6_Template, 4, 5, "td", 4);
118
+ i0.ɵɵtemplate(6, FeatureDetailsComponent_table_0_tr_2_td_6_Template, 6, 5, "td", 4);
109
119
  i0.ɵɵtemplate(7, FeatureDetailsComponent_table_0_tr_2_td_7_Template, 5, 6, "td", 4);
110
120
  i0.ɵɵtemplate(8, FeatureDetailsComponent_table_0_tr_2_td_8_Template, 2, 3, "td", 6);
111
121
  i0.ɵɵelementEnd();
@@ -140,7 +150,7 @@ function FeatureDetailsComponent_table_0_Template(rf, ctx) { if (rf & 1) {
140
150
  i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(3, 1, ctx_r0.filterFeatureProperties(ctx_r0.feature)));
141
151
  } }
142
152
  function FeatureDetailsComponent_iframe_1_Template(rf, ctx) { if (rf & 1) {
143
- i0.ɵɵelement(0, "iframe", 14);
153
+ i0.ɵɵelement(0, "iframe", 16);
144
154
  } if (rf & 2) {
145
155
  const ctx_r1 = i0.ɵɵnextContext();
146
156
  i0.ɵɵproperty("srcdoc", ctx_r1.htmlSanitizer(ctx_r1.feature.properties), i0.ɵɵsanitizeHtml)("src", ctx_r1.urlSanitizer(ctx_r1.feature.properties.url), i0.ɵɵsanitizeResourceUrl);
@@ -279,9 +289,17 @@ export class FeatureDetailsComponent {
279
289
  }
280
290
  isEmbeddedLink(value) {
281
291
  if (typeof value === 'string') {
282
- const regex = /^<a/;
283
- return regex.test(value);
292
+ const matchRegex = /<a/g;
293
+ const match = value.match(matchRegex) || [];
294
+ const count = match.length;
295
+ if (count === 1) {
296
+ return true;
297
+ }
298
+ else {
299
+ return false;
300
+ }
284
301
  }
302
+ return false;
285
303
  }
286
304
  getEmbeddedLinkText(value) {
287
305
  const regex = /(?:>).*?(?=<|$)/;
@@ -347,19 +365,28 @@ export class FeatureDetailsComponent {
347
365
  }
348
366
  return feature.properties;
349
367
  }
368
+ /**
369
+ * Copy the url to a clipboard
370
+ */
371
+ copyTextToClipboard(value) {
372
+ const successful = Clipboard.copy(value);
373
+ if (successful) {
374
+ this.messageService.success('igo.geo.query.link.message');
375
+ }
376
+ }
350
377
  }
351
378
  FeatureDetailsComponent.ɵfac = function FeatureDetailsComponent_Factory(t) { return new (t || FeatureDetailsComponent)(i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.DomSanitizer), i0.ɵɵdirectiveInject(i3.NetworkService), i0.ɵɵdirectiveInject(i3.MessageService), i0.ɵɵdirectiveInject(i3.LanguageService), i0.ɵɵdirectiveInject(i3.ConfigService)); };
352
- FeatureDetailsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FeatureDetailsComponent, selectors: [["igo-feature-details"]], inputs: { source: "source", map: "map", toolbox: "toolbox", feature: "feature" }, outputs: { routeEvent: "routeEvent", selectFeature: "selectFeature", htmlDisplayEvent: "htmlDisplayEvent" }, decls: 2, vars: 2, consts: [["class", "igo-striped mat-typography", 4, "ngIf"], [3, "srcdoc", "src", 4, "ngIf"], [1, "igo-striped", "mat-typography"], [4, "ngFor", "ngForOf"], [4, "ngIf"], ["id", "keyValue", 4, "ngIf"], [3, "innerHTML", 4, "ngIf"], ["mat-list-avatar", "", 3, "svgIcon"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href"], ["id", "keyValue"], [3, "innerHTML"], [3, "ngStyle", "click"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["width", "225", "height", "auto", 3, "src"], [3, "srcdoc", "src"]], template: function FeatureDetailsComponent_Template(rf, ctx) { if (rf & 1) {
379
+ FeatureDetailsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FeatureDetailsComponent, selectors: [["igo-feature-details"]], inputs: { source: "source", map: "map", toolbox: "toolbox", feature: "feature" }, outputs: { routeEvent: "routeEvent", selectFeature: "selectFeature", htmlDisplayEvent: "htmlDisplayEvent" }, decls: 2, vars: 2, consts: [["class", "igo-striped mat-typography", 4, "ngIf"], [3, "srcdoc", "src", 4, "ngIf"], [1, "igo-striped", "mat-typography"], [4, "ngFor", "ngForOf"], [4, "ngIf"], ["id", "keyValue", 4, "ngIf"], [3, "innerHTML", 4, "ngIf"], ["mat-list-avatar", "", 3, "svgIcon"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href"], ["mat-icon-button", "", 1, "copyClipboard", 3, "click"], ["svgIcon", "content-copy"], ["id", "keyValue"], [3, "innerHTML"], [3, "ngStyle", "click"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href", "click"], ["igoImageError", "", "width", "225", "height", "auto", 3, "src"], [3, "srcdoc", "src"]], template: function FeatureDetailsComponent_Template(rf, ctx) { if (rf & 1) {
353
380
  i0.ɵɵtemplate(0, FeatureDetailsComponent_table_0_Template, 4, 3, "table", 0);
354
381
  i0.ɵɵtemplate(1, FeatureDetailsComponent_iframe_1_Template, 1, 2, "iframe", 1);
355
382
  } if (rf & 2) {
356
383
  i0.ɵɵproperty("ngIf", ctx.ready && ctx.feature && ctx.isObject(ctx.feature.properties) && ctx.feature.properties.target !== "iframe");
357
384
  i0.ɵɵadvance(1);
358
385
  i0.ɵɵproperty("ngIf", ctx.isHtmlDisplay());
359
- } }, dependencies: [i4.NgForOf, i4.NgIf, i4.NgStyle, i5.MatIcon, i4.AsyncPipe, i4.JsonPipe, i6.TranslatePipe, i7.KeyValuePipe, i7.SecureImagePipe], styles: ["table[_ngcontent-%COMP%]{width:100%}table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:5px}#keyValue[_ngcontent-%COMP%]{width:30%}table[_ngcontent-%COMP%] .routing{cursor:pointer}iframe[_ngcontent-%COMP%]{height:calc(100% - 4px);width:100%;border:0}"], changeDetection: 0 });
386
+ } }, dependencies: [i4.NgForOf, i4.NgIf, i4.NgStyle, i5.MatIcon, i6.ImageErrorDirective, i4.AsyncPipe, i4.JsonPipe, i7.TranslatePipe, i6.KeyValuePipe, i6.SecureImagePipe], styles: ["table[_ngcontent-%COMP%]{width:100%}table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:5px}#keyValue[_ngcontent-%COMP%]{width:30%}table[_ngcontent-%COMP%] .routing{cursor:pointer}iframe[_ngcontent-%COMP%]{height:calc(100% - 4px);width:100%;border:0}.copyClipboard[_ngcontent-%COMP%]{border:none;background:transparent;cursor:pointer}"], changeDetection: 0 });
360
387
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FeatureDetailsComponent, [{
361
388
  type: Component,
362
- args: [{ selector: 'igo-feature-details', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table class=\"igo-striped mat-typography\" *ngIf=\"ready && feature && isObject(feature.properties) && feature.properties.target !== 'iframe'\">\n <tbody>\n <tr *ngFor=\"let property of filterFeatureProperties(feature) | keyvalue\">\n\n <td *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\">\n <mat-icon mat-list-avatar svgIcon=\"{{icon}}\"></mat-icon>\n </td>\n\n <td *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\">\n <a href=\"{{property.value}}\" target='_blank' rel=\"noopener noreferrer\"> {{ 'igo.geo.targetHtmlUrl' | translate }} {{title}}</a>\n </td>\n\n <td id=\"keyValue\" *ngIf=\"feature.properties.target === undefined\">\n {{property.key}}\n </td>\n\n <td *ngIf=\"feature.properties.target === undefined && !isObject(property.value) && !isUrl(property.value) && !isEmbeddedLink(property.value)\" [innerHTML]=\"property.value\">\n </td>\n\n <td *ngIf=\"feature.properties.target === undefined && isEmbeddedLink(property.value)\">\n <u [ngStyle]=\"{'cursor': 'pointer', 'color': 'blue'}\" (click)=\"openSecureUrl(property.value)\">{{ getEmbeddedLinkText(property.value) }}</u>\n </td>\n\n <td *ngIf=\"feature.properties.target === undefined && !isObject(property.value) && (isDoc(property.value) || isUrl(property.value)) && !isImg(property.value)\">\n <u [ngStyle]=\"{'cursor': 'pointer', 'color': 'blue'}\" (click)=\"openSecureUrl(property.value)\">{{ 'igo.geo.targetHtmlUrl' | translate }}</u>\n </td>\n\n <td *ngIf=\"feature.properties.target === undefined && !isObject(property.value) && isUrl(property.value) && isImg(property.value)\">\n <a href=\"{{property.value}}\" target='_blank' (click)=\"openSecureUrl(property.value)\" rel=\"noopener noreferrer\">\n <img src=\"{{(property.value | secureImage) |\u00A0async}}\" width=\"225\" height=\"auto\">\n </a>\n </td>\n\n <td *ngIf=\"feature.properties.target === undefined && isObject(property.value)\" [innerHTML]=\"property.value | json\">\n </td>\n\n </tr>\n </tbody>\n</table>\n\n<iframe *ngIf=\"isHtmlDisplay()\" [srcdoc]=\"htmlSanitizer(feature.properties)\" [src]=\"urlSanitizer(feature.properties.url)\"></iframe>\n", styles: ["table{width:100%}table td{padding:5px}#keyValue{width:30%}table ::ng-deep .routing{cursor:pointer}iframe{height:calc(100% - 4px);width:100%;border:0}\n"] }]
389
+ args: [{ selector: 'igo-feature-details', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table class=\"igo-striped mat-typography\" *ngIf=\"ready && feature && isObject(feature.properties) && feature.properties.target !== 'iframe'\">\n <tbody>\n <tr *ngFor=\"let property of filterFeatureProperties(feature) | keyvalue\">\n\n <td *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\">\n <mat-icon mat-list-avatar svgIcon=\"{{icon}}\"></mat-icon>\n </td>\n\n <td *ngIf=\"feature.properties.target === '_blank' && property.key === 'url'\">\n <a href=\"{{property.value}}\" target='_blank' rel=\"noopener noreferrer\"> {{ 'igo.geo.targetHtmlUrl' | translate }} {{title}}</a>\n <button class=\"copyClipboard\" mat-icon-button (click)=\"copyTextToClipboard(property.value)\">\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </td>\n\n <td id=\"keyValue\" *ngIf=\"feature.properties.target === undefined\">\n {{property.key}}\n </td>\n\n <td *ngIf=\"feature.properties.target === undefined && !isObject(property.value) && !isUrl(property.value) && !isEmbeddedLink(property.value)\" [innerHTML]=\"property.value\">\n </td>\n\n <td *ngIf=\"feature.properties.target === undefined && isEmbeddedLink(property.value)\">\n <u [ngStyle]=\"{'cursor': 'pointer', 'color': 'blue'}\" (click)=\"openSecureUrl(property.value)\">{{ getEmbeddedLinkText(property.value) }}</u>\n </td>\n\n <td *ngIf=\"feature.properties.target === undefined && !isObject(property.value) && (isDoc(property.value) || isUrl(property.value)) && !isImg(property.value)\">\n <u [ngStyle]=\"{'cursor': 'pointer', 'color': 'blue'}\" (click)=\"openSecureUrl(property.value)\">{{ 'igo.geo.targetHtmlUrl' | translate }}</u>\n <button class=\"copyClipboard\" mat-icon-button (click)=\"copyTextToClipboard(property.value)\">\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </td>\n\n <td *ngIf=\"feature.properties.target === undefined && !isObject(property.value) && isUrl(property.value) && isImg(property.value)\">\n <a href=\"{{property.value}}\" target='_blank' (click)=\"openSecureUrl(property.value)\" rel=\"noopener noreferrer\">\n <img igoImageError src=\"{{(property.value | secureImage) |\u00A0async}}\" width=\"225\" height=\"auto\">\n </a>\n </td>\n\n <td *ngIf=\"feature.properties.target === undefined && isObject(property.value)\" [innerHTML]=\"property.value | json\">\n </td>\n\n </tr>\n </tbody>\n</table>\n\n<iframe *ngIf=\"isHtmlDisplay()\" [srcdoc]=\"htmlSanitizer(feature.properties)\" [src]=\"urlSanitizer(feature.properties.url)\"></iframe>\n", styles: ["table{width:100%}table td{padding:5px}#keyValue{width:30%}table ::ng-deep .routing{cursor:pointer}iframe{height:calc(100% - 4px);width:100%;border:0}.copyClipboard{border:none;background:transparent;cursor:pointer}\n"] }]
363
390
  }], function () { return [{ type: i1.HttpClient }, { type: i0.ChangeDetectorRef }, { type: i2.DomSanitizer }, { type: i3.NetworkService }, { type: i3.MessageService }, { type: i3.LanguageService }, { type: i3.ConfigService }]; }, { source: [{
364
391
  type: Input
365
392
  }], map: [{
@@ -375,4 +402,4 @@ FeatureDetailsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Fea
375
402
  }], htmlDisplayEvent: [{
376
403
  type: Output
377
404
  }] }); })();
378
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZlYXR1cmUvZmVhdHVyZS1kZXRhaWxzL2ZlYXR1cmUtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9mZWF0dXJlL2ZlYXR1cmUtZGV0YWlscy9mZWF0dXJlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBRXZCLE1BQU0sRUFDTixZQUFZLEVBR2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztJQ2J2RCwwQkFBNkU7SUFDM0UsOEJBQXdEO0lBQzFELGlCQUFLOzs7SUFEdUIsZUFBa0I7SUFBbEIsZ0RBQWtCOzs7SUFHOUMsMEJBQTZFLFdBQUE7SUFDSCxZQUFtRDs7SUFBQSxpQkFBSSxFQUFBOzs7O0lBQTVILGVBQXlCO0lBQXpCLHFFQUF5QjtJQUE0QyxlQUFtRDtJQUFuRCxnR0FBbUQ7OztJQUc3SCw2QkFBa0U7SUFDaEUsWUFDRjtJQUFBLGlCQUFLOzs7SUFESCxlQUNGO0lBREUsZ0RBQ0Y7OztJQUVBLHlCQUNLOzs7SUFEeUksZ0VBQTRCOzs7OztJQUcxSywwQkFBc0YsWUFBQTtJQUM5QixnT0FBUyxlQUFBLHdDQUE2QixDQUFBLElBQUM7SUFBQyxZQUF5QztJQUFBLGlCQUFJLEVBQUE7Ozs7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Q0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDMUMsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFDRCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDNUIsQ0FBQzs7OEZBdk9VLHVCQUF1QjswRUFBdkIsdUJBQXVCO1FDaENwQyw0RUFzQ1E7UUFFUiw4RUFBbUk7O1FBeEN4RixxSUFBZ0c7UUF3Q2xJLGVBQXFCO1FBQXJCLDBDQUFxQjs7dUZEUmpCLHVCQUF1QjtjQVBuQyxTQUFTOzJCQUNFLHFCQUFxQixtQkFHZCx1QkFBdUIsQ0FBQyxNQUFNOzRPQVMzQyxNQUFNO2tCQURULEtBQUs7WUFTRyxHQUFHO2tCQUFYLEtBQUs7WUFFRyxPQUFPO2tCQUFmLEtBQUs7WUFHRixPQUFPO2tCQURWLEtBQUs7WUFhSSxVQUFVO2tCQUFuQixNQUFNO1lBQ0csYUFBYTtrQkFBdEIsTUFBTTtZQUNHLGdCQUFnQjtrQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgdXNlckFnZW50IH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UsIENvbm5lY3Rpb25TdGF0ZSwgTWVzc2FnZVNlcnZpY2UsIExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuaW1wb3J0IHsgZ2V0RW50aXR5VGl0bGUsIGdldEVudGl0eUljb24gfSBmcm9tICdAaWdvMi9jb21tb24nO1xuaW1wb3J0IHR5cGUgeyBUb29sYm94IH0gZnJvbSAnQGlnbzIvY29tbW9uJztcblxuaW1wb3J0IHsgRmVhdHVyZSB9IGZyb20gJy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBTZWFyY2hTb3VyY2UgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2hhcmVkL3NvdXJjZXMvc291cmNlJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1mZWF0dXJlLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuXG5leHBvcnQgY2xhc3MgRmVhdHVyZURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3RhdGU6IENvbm5lY3Rpb25TdGF0ZTtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkeSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBzb3VyY2UoKTogU2VhcmNoU291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlO1xuICB9XG4gIHNldCBzb3VyY2UodmFsdWU6IFNlYXJjaFNvdXJjZSkge1xuICAgIHRoaXMuX3NvdXJjZSA9IHZhbHVlO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XG5cbiAgQElucHV0KCkgdG9vbGJveDogVG9vbGJveDtcblxuICBASW5wdXQoKVxuICBnZXQgZmVhdHVyZSgpOiBGZWF0dXJlIHtcbiAgICByZXR1cm4gdGhpcy5fZmVhdHVyZTtcbiAgfVxuICBzZXQgZmVhdHVyZSh2YWx1ZTogRmVhdHVyZSkge1xuICAgIHRoaXMuX2ZlYXR1cmUgPSB2YWx1ZTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNlbGVjdEZlYXR1cmUuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmVhdHVyZTogRmVhdHVyZTtcbiAgcHJpdmF0ZSBfc291cmNlOiBTZWFyY2hTb3VyY2U7XG5cbiAgQE91dHB1dCgpIHJvdXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RGZWF0dXJlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgaHRtbERpc3BsYXlFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RW50aXR5VGl0bGUodGhpcy5mZWF0dXJlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBpY29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEVudGl0eUljb24odGhpcy5mZWF0dXJlKSB8fCAnbGluayc7XG4gIH1cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubmV0d29ya1NlcnZpY2UuY3VycmVudFN0YXRlKCkucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKHN0YXRlOiBDb25uZWN0aW9uU3RhdGUpID0+IHtcbiAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB1cmxTYW5pdGl6ZXIodmFsdWUpOiBTYWZlUmVzb3VyY2VVcmwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodmFsdWUpO1xuICB9XG5cblxuICBpc0h0bWxEaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmZlYXR1cmUgJiYgdGhpcy5pc09iamVjdCh0aGlzLmZlYXR1cmUucHJvcGVydGllcykgJiYgdGhpcy5mZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ID09PSAnaWZyYW1lJykge1xuICAgICAgdGhpcy5odG1sRGlzcGxheUV2ZW50LmVtaXQodHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5odG1sRGlzcGxheUV2ZW50LmVtaXQoZmFsc2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGh0bWxTYW5pdGl6ZXIodmFsdWUpOiBTYWZlUmVzb3VyY2VVcmwge1xuICAgIGlmICghdmFsdWUuYm9keSB8fCB1c2VyQWdlbnQuZ2V0QnJvd3Nlck5hbWUoKSA9PT0gJ0ludGVybmV0IEV4cGxvcmVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWdleEJhc2UgPSAvPGJhc2UgaHJlZj1cIltcXHc6XFwvXFwuXStcIj4vO1xuICAgIGlmICghcmVnZXhCYXNlLnRlc3QodmFsdWUuYm9keSkpIHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodmFsdWUudXJsLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgIHZhbHVlLmJvZHkgPSB2YWx1ZS5ib2R5LnJlcGxhY2UoJzxoZWFkPicsIGA8aGVhZD48YmFzZSBocmVmPVwiJHt1cmwub3JpZ2lufVwiPmApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh2YWx1ZS5ib2R5KTtcbiAgfVxuXG4gIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBvcGVuU2VjdXJlVXJsKHZhbHVlKSB7XG4gICAgbGV0IHVybDogc3RyaW5nO1xuICAgIGNvbnN0IHJlZ2V4RGVwb3QgPSBuZXcgUmVnRXhwKHRoaXMuY29uZmlnU2VydmljZT8uZ2V0Q29uZmlnKCdkZXBvdC51cmwnKSArICcuKj8oPz1cInwkKScpO1xuICAgIGNvbnN0IHJlZ2V4VXJsID0gL2h0dHBzPzpcXC9cXC8od3d3XFwuKT9bLWEtekEtWjAtOUA6JS5fXFwrfiM9XXsxLDI1Nn1cXC5bYS16QS1aMC05KCldezEsNn1cXGIoWy1hLXpBLVowLTkoKUA6JV9cXCsufiM/Ji8vPV0qKS87XG5cbiAgICBpZiAocmVnZXhEZXBvdC50ZXN0KHZhbHVlKSkge1xuICAgICAgdXJsID0gdmFsdWUubWF0Y2gocmVnZXhEZXBvdClbMF07XG5cbiAgICAgIHRoaXMuaHR0cC5nZXQodXJsLCB7XG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoZG9jT3JJbWFnZSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChkb2NPckltYWdlKTtcbiAgICAgICAgd2luZG93Lm9wZW4oZmlsZVVybCwgJ19ibGFuaycpO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby50YXJnZXRIdG1sVXJsVW5hdXRob3JpemVkVGl0bGUnKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRhcmdldEh0bWxVcmxVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihtZXNzYWdlLCB0aXRsZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsID0gdmFsdWUubWF0Y2gocmVnZXhVcmwpWzBdO1xuICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG4gICAgfVxuICB9XG5cbiAgaXNVcmwodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcmVnZXggPSAvXmh0dHBzPzpcXC9cXC8vO1xuICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGlzRG9jKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0aGlzLmlzVXJsKHZhbHVlKSkge1xuICAgICAgICBjb25zdCByZWdleCA9IC8ocGRmfGRvY3g/fHhsc3g/KSQvO1xuICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0ltZyh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09J3N0cmluZycpIHtcbiAgICAgIGlmICh0aGlzLmlzVXJsKHZhbHVlKSkge1xuICAgICAgICBjb25zdCByZWdleCA9IC8oanBlP2d8cG5nfGdpZikkLztcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNFbWJlZGRlZExpbmsodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcmVnZXggPSAvXjxhLztcbiAgICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbWJlZGRlZExpbmtUZXh0KHZhbHVlKSB7XG4gICAgY29uc3QgcmVnZXggPSAvKD86PikuKj8oPz08fCQpLztcbiAgICBsZXQgdGV4dCA9IHZhbHVlLm1hdGNoKHJlZ2V4KVswXSBhcyBzdHJpbmc7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPi9nLCAnJyk7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBmaWx0ZXJGZWF0dXJlUHJvcGVydGllcyhmZWF0dXJlKSB7XG4gICAgY29uc3QgYWxsb3dlZEZpZWxkc0FuZEFsaWFzID0gZmVhdHVyZS5tZXRhID8gZmVhdHVyZS5tZXRhLmFsaWFzIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7fTtcbiAgICBsZXQgb2ZmbGluZUJ1dHRvblN0YXRlO1xuXG4gICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICB0aGlzLm1hcC5vZmZsaW5lQnV0dG9uVG9nZ2xlJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIG9mZmxpbmVCdXR0b25TdGF0ZSA9IHN0YXRlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcyAmJiBmZWF0dXJlLnByb3BlcnRpZXMuUm91dGUgJiYgdGhpcy50b29sYm94ICYmICF0aGlzLnRvb2xib3guZ2V0VG9vbCgnZGlyZWN0aW9ucycpKSB7XG4gICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzLlJvdXRlO1xuICAgIH1cblxuICAgIGlmIChhbGxvd2VkRmllbGRzQW5kQWxpYXMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGFsbG93ZWRGaWVsZHNBbmRBbGlhcykuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIHByb3BlcnRpZXNbYWxsb3dlZEZpZWxkc0FuZEFsaWFzW2ZpZWxkXV0gPSBmZWF0dXJlLnByb3BlcnRpZXNbZmllbGRdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9IGVsc2UgaWYgKG9mZmxpbmVCdXR0b25TdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIW9mZmxpbmVCdXR0b25TdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5jb25uZWN0aW9uICYmIGZlYXR1cmUubWV0YSAmJiBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZSkge1xuICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGUgPSBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZTtcbiAgICAgICAgICBleGNsdWRlQXR0cmlidXRlLmZvckVhY2goYXR0cmlidXRlID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLnByb3BlcnRpZXNbYXR0cmlidXRlXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZS5jb25uZWN0aW9uICYmIGZlYXR1cmUubWV0YSAmJiBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmUpIHtcbiAgICAgICAgICBjb25zdCBleGNsdWRlQXR0cmlidXRlT2ZmbGluZSA9IGZlYXR1cmUubWV0YS5leGNsdWRlQXR0cmlidXRlT2ZmbGluZTtcbiAgICAgICAgICBleGNsdWRlQXR0cmlidXRlT2ZmbGluZS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzW2F0dHJpYnV0ZV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmZWF0dXJlLm1ldGEgJiYgZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lKSB7XG4gICAgICAgICAgY29uc3QgZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmUgPSBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmU7XG4gICAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmUuZm9yRWFjaChhdHRyaWJ1dGUgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1thdHRyaWJ1dGVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmNvbm5lY3Rpb24gJiYgZmVhdHVyZS5tZXRhICYmIGZlYXR1cmUubWV0YS5leGNsdWRlQXR0cmlidXRlKSB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGUgPSBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZTtcbiAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1thdHRyaWJ1dGVdO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc3RhdGUuY29ubmVjdGlvbiAmJiBmZWF0dXJlLm1ldGEgJiYgZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lKSB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lID0gZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lO1xuICAgICAgICBleGNsdWRlQXR0cmlidXRlT2ZmbGluZS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1thdHRyaWJ1dGVdO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmUucHJvcGVydGllcztcbiAgfVxufVxuIiwiPHRhYmxlIGNsYXNzPVwiaWdvLXN0cmlwZWQgbWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cInJlYWR5ICYmIGZlYXR1cmUgJiYgaXNPYmplY3QoZmVhdHVyZS5wcm9wZXJ0aWVzKSAmJiBmZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ICE9PSAnaWZyYW1lJ1wiPlxuICA8dGJvZHk+XG4gICAgPHRyICpuZ0Zvcj1cImxldCBwcm9wZXJ0eSBvZiBmaWx0ZXJGZWF0dXJlUHJvcGVydGllcyhmZWF0dXJlKSB8IGtleXZhbHVlXCI+XG5cbiAgICAgIDx0ZCAqbmdJZj1cImZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09ICdfYmxhbmsnICYmIHByb3BlcnR5LmtleSA9PT0gJ3VybCdcIj5cbiAgICAgICAgPG1hdC1pY29uIG1hdC1saXN0LWF2YXRhciBzdmdJY29uPVwie3tpY29ufX1cIj48L21hdC1pY29uPlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkICpuZ0lmPVwiZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gJ19ibGFuaycgJiYgcHJvcGVydHkua2V5ID09PSAndXJsJ1wiPlxuICAgICAgICA8YSBocmVmPVwie3twcm9wZXJ0eS52YWx1ZX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj4ge3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX0ge3t0aXRsZX19PC9hPlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkIGlkPVwia2V5VmFsdWVcIiAqbmdJZj1cImZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09IHVuZGVmaW5lZFwiPlxuICAgICAgICB7e3Byb3BlcnR5LmtleX19XG4gICAgICA8L3RkPlxuXG4gICAgICA8dGQgKm5nSWY9XCJmZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ID09PSB1bmRlZmluZWQgJiYgIWlzT2JqZWN0KHByb3BlcnR5LnZhbHVlKSAmJiAhaXNVcmwocHJvcGVydHkudmFsdWUpICYmICFpc0VtYmVkZGVkTGluayhwcm9wZXJ0eS52YWx1ZSlcIiBbaW5uZXJIVE1MXT1cInByb3BlcnR5LnZhbHVlXCI+XG4gICAgICA8L3RkPlxuXG4gICAgICA8dGQgKm5nSWY9XCJmZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ID09PSB1bmRlZmluZWQgJiYgaXNFbWJlZGRlZExpbmsocHJvcGVydHkudmFsdWUpXCI+XG4gICAgICAgIDx1IFtuZ1N0eWxlXT1cInsnY3Vyc29yJzogJ3BvaW50ZXInLCAnY29sb3InOiAnYmx1ZSd9XCIgKGNsaWNrKT1cIm9wZW5TZWN1cmVVcmwocHJvcGVydHkudmFsdWUpXCI+e3sgZ2V0RW1iZWRkZWRMaW5rVGV4dChwcm9wZXJ0eS52YWx1ZSkgfX08L3U+XG4gICAgICA8L3RkPlxuXG4gICAgICA8dGQgKm5nSWY9XCJmZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ID09PSB1bmRlZmluZWQgJiYgIWlzT2JqZWN0KHByb3BlcnR5LnZhbHVlKSAmJiAoaXNEb2MocHJvcGVydHkudmFsdWUpIHx8IGlzVXJsKHByb3BlcnR5LnZhbHVlKSkgJiYgIWlzSW1nKHByb3BlcnR5LnZhbHVlKVwiPlxuICAgICAgICA8dSBbbmdTdHlsZV09XCJ7J2N1cnNvcic6ICdwb2ludGVyJywgJ2NvbG9yJzogJ2JsdWUnfVwiIChjbGljayk9XCJvcGVuU2VjdXJlVXJsKHByb3BlcnR5LnZhbHVlKVwiPnt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19PC91PlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkICpuZ0lmPVwiZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkICYmICFpc09iamVjdChwcm9wZXJ0eS52YWx1ZSkgJiYgaXNVcmwocHJvcGVydHkudmFsdWUpICYmIGlzSW1nKHByb3BlcnR5LnZhbHVlKVwiPlxuICAgICAgICA8YSBocmVmPVwie3twcm9wZXJ0eS52YWx1ZX19XCIgdGFyZ2V0PSdfYmxhbmsnIChjbGljayk9XCJvcGVuU2VjdXJlVXJsKHByb3BlcnR5LnZhbHVlKVwiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj5cbiAgICAgICAgICA8aW1nIHNyYz1cInt7KHByb3BlcnR5LnZhbHVlIHwgc2VjdXJlSW1hZ2UpIHzCoGFzeW5jfX1cIiB3aWR0aD1cIjIyNVwiIGhlaWdodD1cImF1dG9cIj5cbiAgICAgICAgPC9hPlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkICpuZ0lmPVwiZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkICYmIGlzT2JqZWN0KHByb3BlcnR5LnZhbHVlKVwiIFtpbm5lckhUTUxdPVwicHJvcGVydHkudmFsdWUgfCBqc29uXCI+XG4gICAgICA8L3RkPlxuXG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG5cbjxpZnJhbWUgKm5nSWY9XCJpc0h0bWxEaXNwbGF5KClcIiBbc3JjZG9jXT1cImh0bWxTYW5pdGl6ZXIoZmVhdHVyZS5wcm9wZXJ0aWVzKVwiIFtzcmNdPVwidXJsU2FuaXRpemVyKGZlYXR1cmUucHJvcGVydGllcy51cmwpXCI+PC9pZnJhbWU+XG4iXX0=
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZlYXR1cmUvZmVhdHVyZS1kZXRhaWxzL2ZlYXR1cmUtZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9mZWF0dXJlL2ZlYXR1cmUtZGV0YWlscy9mZWF0dXJlLWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBRXZCLE1BQU0sRUFDTixZQUFZLEVBR2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU83RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7O0lDcEJsQywwQkFBNkU7SUFDM0UsOEJBQXdEO0lBQzFELGlCQUFLOzs7SUFEdUIsZUFBa0I7SUFBbEIsZ0RBQWtCOzs7O0lBRzlDLDBCQUE2RSxXQUFBO0lBQ0gsWUFBbUQ7O0lBQUEsaUJBQUk7SUFDL0gsaUNBQTRGO0lBQTlDLHFPQUFTLGVBQUEsOENBQW1DLENBQUEsSUFBQztJQUN6RiwrQkFBNEM7SUFDOUMsaUJBQVMsRUFBQTs7OztJQUhOLGVBQXlCO0lBQXpCLHFFQUF5QjtJQUE0QyxlQUFtRDtJQUFuRCxnR0FBbUQ7OztJQU03SCw4QkFBa0U7SUFDaEUsWUFDRjtJQUFBLGlCQUFLOzs7SUFESCxlQUNGO0lBREUsZ0RBQ0Y7OztJQUVBLHlCQUNLOzs7SUFEeUksZ0VBQTRCOzs7OztJQUcxSywwQkFBc0YsWUFBQTtJQUM5QixnT0FBUyxlQUFBLHdDQUE2QixDQUFBLElBQUM7SUFBQyxZQUF5QztJQUFBLGlCQUFJLEVBQUE7Ozs7SUFBeEksZUFBa0Q7SUFBbEQsb0RBQWtEO0lBQXlDLGVBQXlDO0lBQXpDLG1FQUF5Qzs7OztJQUd6SSwwQkFBK0osWUFBQTtJQUN2RyxnT0FBUyxlQUFBLHdDQUE2QixDQUFBLElBQUM7SUFBQyxZQUF5Qzs7SUFBQSxpQkFBSTtJQUMzSSxpQ0FBNEY7SUFBOUMscU9BQVMsZUFBQSw4Q0FBbUMsQ0FBQSxJQUFDO0lBQ3pGLCtCQUE0QztJQUM5QyxpQkFBUyxFQUFBOztJQUhOLGVBQWtEO0lBQWxELG9EQUFrRDtJQUF5QyxlQUF5QztJQUF6QyxtRUFBeUM7Ozs7SUFNekksMEJBQW1JLFlBQUE7SUFDcEYsZ09BQVMsZUFBQSx3Q0FBNkIsQ0FBQSxJQUFDO0lBQ2xGLDBCQUE4Rjs7O0lBQ2hHLGlCQUFJLEVBQUE7OztJQUZELGVBQXlCO0lBQXpCLHFFQUF5QjtJQUNQLGVBQWdEO0lBQWhELGdIQUFnRDs7O0lBSXZFLHlCQUNLOzs7O0lBRDJFLHNGQUFtQzs7O0lBckNySCwwQkFBeUU7SUFFdkUsbUZBRUs7SUFFTCxtRkFLSztJQUVMLG1GQUVLO0lBRUwsbUZBQ0s7SUFFTCxtRkFFSztJQUVMLG1GQUtLO0lBRUwsbUZBSUs7SUFFTCxtRkFDSztJQUVQLGlCQUFLOzs7O0lBdENFLGVBQXNFO0lBQXRFLGlHQUFzRTtJQUl0RSxlQUFzRTtJQUF0RSxpR0FBc0U7SUFPeEQsZUFBNkM7SUFBN0MscUVBQTZDO0lBSTNELGVBQXVJO0lBQXZJLDZMQUF1STtJQUd2SSxlQUErRTtJQUEvRSxpSEFBK0U7SUFJL0UsZUFBd0o7SUFBeEosd05BQXdKO0lBT3hKLGVBQTRIO0lBQTVILGtMQUE0SDtJQU01SCxlQUF5RTtJQUF6RSwyR0FBeUU7OztJQXZDcEYsZ0NBQTZJLFlBQUE7SUFFekksOEVBd0NLOztJQUNQLGlCQUFRLEVBQUE7OztJQXpDbUIsZUFBOEM7SUFBOUMsOEZBQThDOzs7SUE0QzNFLDZCQUFtSTs7O0lBQW5HLDJGQUE0QyxxRkFBQTs7QURkNUUsTUFBTSxPQUFPLHVCQUF1QjtJQWtEbEMsWUFDVSxJQUFnQixFQUNoQixLQUF3QixFQUN4QixTQUF1QixFQUN2QixjQUE4QixFQUM5QixjQUE4QixFQUM5QixlQUFnQyxFQUNoQyxhQUE0QjtRQU41QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUF2RDlCLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMzQyxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBNEJKLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3pDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUM1QyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBMEJ2RCxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBc0IsRUFBRSxFQUFFO1lBQ3pHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQXpERCxJQUNJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLEtBQW1CO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQU1ELElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBYztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQVNEOztPQUVHO0lBQ0gsSUFBSSxLQUFLO1FBQ1AsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksSUFBSTtRQUNOLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUM7SUFDL0MsQ0FBQztJQWlCRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFLO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBR0QsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtZQUN6RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBSztRQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFLEtBQUssbUJBQW1CLEVBQUU7WUFDckUsT0FBTztTQUNSO1FBQ0QsTUFBTSxTQUFTLEdBQUcsMEJBQTBCLENBQUM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2RCxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7U0FDaEY7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxRQUFRLENBQUMsS0FBSztRQUNaLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0lBQ25DLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBSztRQUNqQixJQUFJLEdBQVcsQ0FBQztRQUNoQixNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztRQUN6RixNQUFNLFFBQVEsR0FBRyx1R0FBdUcsQ0FBQztRQUV6SCxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUIsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNqQixZQUFZLEVBQUUsTUFBTTthQUNyQixDQUFDO2lCQUNELFNBQVMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUN4QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QixDQUFDLEVBQ0QsQ0FBQyxLQUFZLEVBQUUsRUFBRTtnQkFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztnQkFDakQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUM3QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDO2dCQUNuQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7YUFDeEM7aUJBQU07Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxPQUFPLEtBQUssS0FBSSxRQUFRLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNyQixNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQztnQkFDakMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2FBQ3hDO2lCQUFNO2dCQUNMLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsS0FBSztRQUNsQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUMzQixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUMzQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ2IsT0FBTyxJQUFJLENBQUM7YUFDZjtpQkFBTTtnQkFDSCxPQUFPLEtBQUssQ0FBQzthQUNoQjtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVDLG1CQUFtQixDQUFDLEtBQUs7UUFDdkIsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUM7UUFDaEMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQVcsQ0FBQztRQUMzQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsT0FBTztRQUM3QixNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUUsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksa0JBQWtCLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakYsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3pHLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7U0FDakM7UUFFRCxJQUFJLHFCQUFxQixFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pELFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkUsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLFVBQVUsQ0FBQztTQUNuQjthQUFNLElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFO1lBQzNDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQzFFLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDdkQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUNuQyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3ZDLENBQUMsQ0FBQyxDQUFDO2lCQUNKO3FCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7b0JBQ3pGLE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztvQkFDckUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUMxQyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3ZDLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7b0JBQ3hELE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztvQkFDckUsdUJBQXVCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO3dCQUMxQyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3ZDLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7U0FDRjthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzFFLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDdkQsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO29CQUNuQyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDekYsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDO2dCQUNyRSx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzFDLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBQ0QsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQixDQUFDLEtBQWE7UUFDL0IsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDOzs4RkF4UFUsdUJBQXVCOzBFQUF2Qix1QkFBdUI7UUNoQ3BDLDRFQTRDUTtRQUVSLDhFQUFtSTs7UUE5Q3hGLHFJQUFnRztRQThDbEksZUFBcUI7UUFBckIsMENBQXFCOzt1RkRkakIsdUJBQXVCO2NBUG5DLFNBQVM7MkJBQ0UscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU07NE9BUzNDLE1BQU07a0JBRFQsS0FBSztZQVNHLEdBQUc7a0JBQVgsS0FBSztZQUVHLE9BQU87a0JBQWYsS0FBSztZQUdGLE9BQU87a0JBRFYsS0FBSztZQWFJLFVBQVU7a0JBQW5CLE1BQU07WUFDRyxhQUFhO2tCQUF0QixNQUFNO1lBQ0csZ0JBQWdCO2tCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyB1c2VyQWdlbnQgfSBmcm9tICdAaWdvMi91dGlscyc7XG5pbXBvcnQgeyBOZXR3b3JrU2VydmljZSwgQ29ubmVjdGlvblN0YXRlLCBNZXNzYWdlU2VydmljZSwgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XG5pbXBvcnQgeyBnZXRFbnRpdHlUaXRsZSwgZ2V0RW50aXR5SWNvbiB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XG5pbXBvcnQgdHlwZSB7IFRvb2xib3ggfSBmcm9tICdAaWdvMi9jb21tb24nO1xuXG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IFNlYXJjaFNvdXJjZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zaGFyZWQvc291cmNlcy9zb3VyY2UnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1mZWF0dXJlLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmVhdHVyZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuXG5leHBvcnQgY2xhc3MgRmVhdHVyZURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3RhdGU6IENvbm5lY3Rpb25TdGF0ZTtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkeSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBzb3VyY2UoKTogU2VhcmNoU291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlO1xuICB9XG4gIHNldCBzb3VyY2UodmFsdWU6IFNlYXJjaFNvdXJjZSkge1xuICAgIHRoaXMuX3NvdXJjZSA9IHZhbHVlO1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XG5cbiAgQElucHV0KCkgdG9vbGJveDogVG9vbGJveDtcblxuICBASW5wdXQoKVxuICBnZXQgZmVhdHVyZSgpOiBGZWF0dXJlIHtcbiAgICByZXR1cm4gdGhpcy5fZmVhdHVyZTtcbiAgfVxuICBzZXQgZmVhdHVyZSh2YWx1ZTogRmVhdHVyZSkge1xuICAgIHRoaXMuX2ZlYXR1cmUgPSB2YWx1ZTtcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNlbGVjdEZlYXR1cmUuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmVhdHVyZTogRmVhdHVyZTtcbiAgcHJpdmF0ZSBfc291cmNlOiBTZWFyY2hTb3VyY2U7XG5cbiAgQE91dHB1dCgpIHJvdXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RGZWF0dXJlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgaHRtbERpc3BsYXlFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RW50aXR5VGl0bGUodGhpcy5mZWF0dXJlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBpY29uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEVudGl0eUljb24odGhpcy5mZWF0dXJlKSB8fCAnbGluayc7XG4gIH1cblxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubmV0d29ya1NlcnZpY2UuY3VycmVudFN0YXRlKCkucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKHN0YXRlOiBDb25uZWN0aW9uU3RhdGUpID0+IHtcbiAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB1cmxTYW5pdGl6ZXIodmFsdWUpOiBTYWZlUmVzb3VyY2VVcmwge1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodmFsdWUpO1xuICB9XG5cblxuICBpc0h0bWxEaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmZlYXR1cmUgJiYgdGhpcy5pc09iamVjdCh0aGlzLmZlYXR1cmUucHJvcGVydGllcykgJiYgdGhpcy5mZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ID09PSAnaWZyYW1lJykge1xuICAgICAgdGhpcy5odG1sRGlzcGxheUV2ZW50LmVtaXQodHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5odG1sRGlzcGxheUV2ZW50LmVtaXQoZmFsc2UpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGh0bWxTYW5pdGl6ZXIodmFsdWUpOiBTYWZlUmVzb3VyY2VVcmwge1xuICAgIGlmICghdmFsdWUuYm9keSB8fCB1c2VyQWdlbnQuZ2V0QnJvd3Nlck5hbWUoKSA9PT0gJ0ludGVybmV0IEV4cGxvcmVyJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWdleEJhc2UgPSAvPGJhc2UgaHJlZj1cIltcXHc6XFwvXFwuXStcIj4vO1xuICAgIGlmICghcmVnZXhCYXNlLnRlc3QodmFsdWUuYm9keSkpIHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodmFsdWUudXJsLCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgIHZhbHVlLmJvZHkgPSB2YWx1ZS5ib2R5LnJlcGxhY2UoJzxoZWFkPicsIGA8aGVhZD48YmFzZSBocmVmPVwiJHt1cmwub3JpZ2lufVwiPmApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCh2YWx1ZS5ib2R5KTtcbiAgfVxuXG4gIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBvcGVuU2VjdXJlVXJsKHZhbHVlKSB7XG4gICAgbGV0IHVybDogc3RyaW5nO1xuICAgIGNvbnN0IHJlZ2V4RGVwb3QgPSBuZXcgUmVnRXhwKHRoaXMuY29uZmlnU2VydmljZT8uZ2V0Q29uZmlnKCdkZXBvdC51cmwnKSArICcuKj8oPz1cInwkKScpO1xuICAgIGNvbnN0IHJlZ2V4VXJsID0gL2h0dHBzPzpcXC9cXC8od3d3XFwuKT9bLWEtekEtWjAtOUA6JS5fXFwrfiM9XXsxLDI1Nn1cXC5bYS16QS1aMC05KCldezEsNn1cXGIoWy1hLXpBLVowLTkoKUA6JV9cXCsufiM/Ji8vPV0qKS87XG5cbiAgICBpZiAocmVnZXhEZXBvdC50ZXN0KHZhbHVlKSkge1xuICAgICAgdXJsID0gdmFsdWUubWF0Y2gocmVnZXhEZXBvdClbMF07XG5cbiAgICAgIHRoaXMuaHR0cC5nZXQodXJsLCB7XG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoZG9jT3JJbWFnZSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChkb2NPckltYWdlKTtcbiAgICAgICAgd2luZG93Lm9wZW4oZmlsZVVybCwgJ19ibGFuaycpO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby50YXJnZXRIdG1sVXJsVW5hdXRob3JpemVkVGl0bGUnKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRhcmdldEh0bWxVcmxVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihtZXNzYWdlLCB0aXRsZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsID0gdmFsdWUubWF0Y2gocmVnZXhVcmwpWzBdO1xuICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG4gICAgfVxuICB9XG5cbiAgaXNVcmwodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcmVnZXggPSAvXmh0dHBzPzpcXC9cXC8vO1xuICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGlzRG9jKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0aGlzLmlzVXJsKHZhbHVlKSkge1xuICAgICAgICBjb25zdCByZWdleCA9IC8ocGRmfGRvY3g/fHhsc3g/KSQvO1xuICAgICAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0ltZyh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09J3N0cmluZycpIHtcbiAgICAgIGlmICh0aGlzLmlzVXJsKHZhbHVlKSkge1xuICAgICAgICBjb25zdCByZWdleCA9IC8oanBlP2d8cG5nfGdpZikkLztcbiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNFbWJlZGRlZExpbmsodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBtYXRjaFJlZ2V4ID0gLzxhL2c7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdmFsdWUubWF0Y2gobWF0Y2hSZWdleCkgfHwgW107XG4gICAgICAgIGNvbnN0IGNvdW50ID0gbWF0Y2gubGVuZ3RoO1xuICAgICAgICBpZiAoY291bnQgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuICBnZXRFbWJlZGRlZExpbmtUZXh0KHZhbHVlKSB7XG4gICAgY29uc3QgcmVnZXggPSAvKD86PikuKj8oPz08fCQpLztcbiAgICBsZXQgdGV4dCA9IHZhbHVlLm1hdGNoKHJlZ2V4KVswXSBhcyBzdHJpbmc7XG4gICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPi9nLCAnJyk7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBmaWx0ZXJGZWF0dXJlUHJvcGVydGllcyhmZWF0dXJlKSB7XG4gICAgY29uc3QgYWxsb3dlZEZpZWxkc0FuZEFsaWFzID0gZmVhdHVyZS5tZXRhID8gZmVhdHVyZS5tZXRhLmFsaWFzIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7fTtcbiAgICBsZXQgb2ZmbGluZUJ1dHRvblN0YXRlO1xuXG4gICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICB0aGlzLm1hcC5vZmZsaW5lQnV0dG9uVG9nZ2xlJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShzdGF0ZSA9PiB7XG4gICAgICAgIG9mZmxpbmVCdXR0b25TdGF0ZSA9IHN0YXRlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGZlYXR1cmUucHJvcGVydGllcyAmJiBmZWF0dXJlLnByb3BlcnRpZXMuUm91dGUgJiYgdGhpcy50b29sYm94ICYmICF0aGlzLnRvb2xib3guZ2V0VG9vbCgnZGlyZWN0aW9ucycpKSB7XG4gICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzLlJvdXRlO1xuICAgIH1cblxuICAgIGlmIChhbGxvd2VkRmllbGRzQW5kQWxpYXMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGFsbG93ZWRGaWVsZHNBbmRBbGlhcykuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIHByb3BlcnRpZXNbYWxsb3dlZEZpZWxkc0FuZEFsaWFzW2ZpZWxkXV0gPSBmZWF0dXJlLnByb3BlcnRpZXNbZmllbGRdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9IGVsc2UgaWYgKG9mZmxpbmVCdXR0b25TdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIW9mZmxpbmVCdXR0b25TdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5jb25uZWN0aW9uICYmIGZlYXR1cmUubWV0YSAmJiBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZSkge1xuICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGUgPSBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZTtcbiAgICAgICAgICBleGNsdWRlQXR0cmlidXRlLmZvckVhY2goYXR0cmlidXRlID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLnByb3BlcnRpZXNbYXR0cmlidXRlXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5zdGF0ZS5jb25uZWN0aW9uICYmIGZlYXR1cmUubWV0YSAmJiBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmUpIHtcbiAgICAgICAgICBjb25zdCBleGNsdWRlQXR0cmlidXRlT2ZmbGluZSA9IGZlYXR1cmUubWV0YS5leGNsdWRlQXR0cmlidXRlT2ZmbGluZTtcbiAgICAgICAgICBleGNsdWRlQXR0cmlidXRlT2ZmbGluZS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzW2F0dHJpYnV0ZV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmZWF0dXJlLm1ldGEgJiYgZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lKSB7XG4gICAgICAgICAgY29uc3QgZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmUgPSBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmU7XG4gICAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmUuZm9yRWFjaChhdHRyaWJ1dGUgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1thdHRyaWJ1dGVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmNvbm5lY3Rpb24gJiYgZmVhdHVyZS5tZXRhICYmIGZlYXR1cmUubWV0YS5leGNsdWRlQXR0cmlidXRlKSB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGUgPSBmZWF0dXJlLm1ldGEuZXhjbHVkZUF0dHJpYnV0ZTtcbiAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1thdHRyaWJ1dGVdO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc3RhdGUuY29ubmVjdGlvbiAmJiBmZWF0dXJlLm1ldGEgJiYgZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lKSB7XG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lID0gZmVhdHVyZS5tZXRhLmV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lO1xuICAgICAgICBleGNsdWRlQXR0cmlidXRlT2ZmbGluZS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1thdHRyaWJ1dGVdO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmUucHJvcGVydGllcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3B5IHRoZSB1cmwgdG8gYSBjbGlwYm9hcmRcbiAgICovXG4gIGNvcHlUZXh0VG9DbGlwYm9hcmQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSBDbGlwYm9hcmQuY29weSh2YWx1ZSk7XG4gICAgaWYgKHN1Y2Nlc3NmdWwpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcygnaWdvLmdlby5xdWVyeS5saW5rLm1lc3NhZ2UnKTtcbiAgICB9XG4gIH1cbn1cbiIsIjx0YWJsZSBjbGFzcz1cImlnby1zdHJpcGVkIG1hdC10eXBvZ3JhcGh5XCIgKm5nSWY9XCJyZWFkeSAmJiBmZWF0dXJlICYmIGlzT2JqZWN0KGZlYXR1cmUucHJvcGVydGllcykgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCAhPT0gJ2lmcmFtZSdcIj5cbiAgPHRib2R5PlxuICAgIDx0ciAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgZmlsdGVyRmVhdHVyZVByb3BlcnRpZXMoZmVhdHVyZSkgfCBrZXl2YWx1ZVwiPlxuXG4gICAgICA8dGQgKm5nSWY9XCJmZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ID09PSAnX2JsYW5rJyAmJiBwcm9wZXJ0eS5rZXkgPT09ICd1cmwnXCI+XG4gICAgICAgIDxtYXQtaWNvbiBtYXQtbGlzdC1hdmF0YXIgc3ZnSWNvbj1cInt7aWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDx0ZCAqbmdJZj1cImZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09ICdfYmxhbmsnICYmIHByb3BlcnR5LmtleSA9PT0gJ3VybCdcIj5cbiAgICAgICAgPGEgaHJlZj1cInt7cHJvcGVydHkudmFsdWV9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+IHt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19IHt7dGl0bGV9fTwvYT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvcHlDbGlwYm9hcmRcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNvcHlUZXh0VG9DbGlwYm9hcmQocHJvcGVydHkudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjb250ZW50LWNvcHlcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDx0ZCBpZD1cImtleVZhbHVlXCIgKm5nSWY9XCJmZWF0dXJlLnByb3BlcnRpZXMudGFyZ2V0ID09PSB1bmRlZmluZWRcIj5cbiAgICAgICAge3twcm9wZXJ0eS5rZXl9fVxuICAgICAgPC90ZD5cblxuICAgICAgPHRkICpuZ0lmPVwiZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkICYmICFpc09iamVjdChwcm9wZXJ0eS52YWx1ZSkgJiYgIWlzVXJsKHByb3BlcnR5LnZhbHVlKSAmJiAhaXNFbWJlZGRlZExpbmsocHJvcGVydHkudmFsdWUpXCIgW2lubmVySFRNTF09XCJwcm9wZXJ0eS52YWx1ZVwiPlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkICpuZ0lmPVwiZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkICYmIGlzRW1iZWRkZWRMaW5rKHByb3BlcnR5LnZhbHVlKVwiPlxuICAgICAgICA8dSBbbmdTdHlsZV09XCJ7J2N1cnNvcic6ICdwb2ludGVyJywgJ2NvbG9yJzogJ2JsdWUnfVwiIChjbGljayk9XCJvcGVuU2VjdXJlVXJsKHByb3BlcnR5LnZhbHVlKVwiPnt7IGdldEVtYmVkZGVkTGlua1RleHQocHJvcGVydHkudmFsdWUpIH19PC91PlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkICpuZ0lmPVwiZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkICYmICFpc09iamVjdChwcm9wZXJ0eS52YWx1ZSkgJiYgKGlzRG9jKHByb3BlcnR5LnZhbHVlKSB8fCBpc1VybChwcm9wZXJ0eS52YWx1ZSkpICYmICFpc0ltZyhwcm9wZXJ0eS52YWx1ZSlcIj5cbiAgICAgICAgPHUgW25nU3R5bGVdPVwieydjdXJzb3InOiAncG9pbnRlcicsICdjb2xvcic6ICdibHVlJ31cIiAoY2xpY2spPVwib3BlblNlY3VyZVVybChwcm9wZXJ0eS52YWx1ZSlcIj57eyAnaWdvLmdlby50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fTwvdT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvcHlDbGlwYm9hcmRcIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNvcHlUZXh0VG9DbGlwYm9hcmQocHJvcGVydHkudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjb250ZW50LWNvcHlcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDx0ZCAqbmdJZj1cImZlYXR1cmUucHJvcGVydGllcy50YXJnZXQgPT09IHVuZGVmaW5lZCAmJiAhaXNPYmplY3QocHJvcGVydHkudmFsdWUpICYmIGlzVXJsKHByb3BlcnR5LnZhbHVlKSAmJiBpc0ltZyhwcm9wZXJ0eS52YWx1ZSlcIj5cbiAgICAgICAgPGEgaHJlZj1cInt7cHJvcGVydHkudmFsdWV9fVwiIHRhcmdldD0nX2JsYW5rJyAoY2xpY2spPVwib3BlblNlY3VyZVVybChwcm9wZXJ0eS52YWx1ZSlcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+XG4gICAgICAgICAgPGltZyBpZ29JbWFnZUVycm9yIHNyYz1cInt7KHByb3BlcnR5LnZhbHVlIHwgc2VjdXJlSW1hZ2UpIHzCoGFzeW5jfX1cIiB3aWR0aD1cIjIyNVwiIGhlaWdodD1cImF1dG9cIj5cbiAgICAgICAgPC9hPlxuICAgICAgPC90ZD5cblxuICAgICAgPHRkICpuZ0lmPVwiZmVhdHVyZS5wcm9wZXJ0aWVzLnRhcmdldCA9PT0gdW5kZWZpbmVkICYmIGlzT2JqZWN0KHByb3BlcnR5LnZhbHVlKVwiIFtpbm5lckhUTUxdPVwicHJvcGVydHkudmFsdWUgfCBqc29uXCI+XG4gICAgICA8L3RkPlxuXG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG5cbjxpZnJhbWUgKm5nSWY9XCJpc0h0bWxEaXNwbGF5KClcIiBbc3JjZG9jXT1cImh0bWxTYW5pdGl6ZXIoZmVhdHVyZS5wcm9wZXJ0aWVzKVwiIFtzcmNdPVwidXJsU2FuaXRpemVyKGZlYXR1cmUucHJvcGVydGllcy51cmwpXCI+PC9pZnJhbWU+XG4iXX0=
@@ -1,7 +1,6 @@
1
1
  import * as olextent from 'ol/extent';
2
2
  import * as olproj from 'ol/proj';
3
3
  import * as olstyle from 'ol/style';
4
- import OlGeometryLayout from 'ol/geom/GeometryLayout';
5
4
  import OlPolygon from 'ol/geom/Polygon';
6
5
  import OlPoint from 'ol/geom/Point';
7
6
  import OlLineString from 'ol/geom/LineString';
@@ -73,13 +72,13 @@ export function renderFeatureFromOl(olRenderFeature, projectionIn, olLayer, proj
73
72
  const geometryType = olRenderFeature.getType();
74
73
  if (geometryType === 'Polygon') {
75
74
  const ends = olRenderFeature.getEnds();
76
- geom = new OlPolygon(olRenderFeature.getFlatCoordinates(), OlGeometryLayout.XY, ends);
75
+ geom = new OlPolygon(olRenderFeature.getFlatCoordinates(), 'XY', ends);
77
76
  }
78
77
  else if (geometryType === 'Point') {
79
- geom = new OlPoint(olRenderFeature.getFlatCoordinates(), OlGeometryLayout.XY);
78
+ geom = new OlPoint(olRenderFeature.getFlatCoordinates(), 'XY');
80
79
  }
81
80
  else if (geometryType === 'LineString') {
82
- geom = new OlLineString(olRenderFeature.getFlatCoordinates(), OlGeometryLayout.XY);
81
+ geom = new OlLineString(olRenderFeature.getFlatCoordinates(), 'XY');
83
82
  }
84
83
  const geometry = olFormat.writeGeometryObject(geom, {
85
84
  dataProjection: projectionOut,
@@ -345,4 +344,4 @@ export function computeOlFeaturesDiff(source, target) {
345
344
  remove: olFeaturesToRemove
346
345
  };
347
346
  }
348
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxVQUFVLENBQUM7QUFFcEMsT0FBTyxnQkFBZ0IsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDcEMsT0FBTyxZQUFZLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxlQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFJaEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuQyxPQUFPLEVBRUwsV0FBVyxFQUNYLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGlCQUFpQixFQUNsQixNQUFNLGNBQWMsQ0FBQztBQUd0QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixPQUFnQixFQUNoQixhQUFxQixFQUNyQixLQUE4QjtJQUU5QixLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUVwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1FBQzlDLGNBQWMsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUNsQyxpQkFBaUIsRUFBRSxhQUFhO0tBQ2pDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFaEMsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtRQUN2QixTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdEM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ2hDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDaEQ7SUFFRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1FBQ3BDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDeEQ7SUFFRCxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDN0QsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1FBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM1QztJQUVELFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFbkUsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUN0QixTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDcEM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDdEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDbkQ7SUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7UUFDcEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNwRDtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLGVBQWdDLEVBQ2hDLFlBQW9CLEVBQ3BCLE9BQTJCLEVBQzNCLGFBQWEsR0FBRyxXQUFXO0lBRTNCLElBQUksSUFBSSxDQUFDO0lBQ1QsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLE9BQU8sQ0FBQztJQUNaLElBQUksY0FBYyxDQUFDO0lBRW5CLElBQUksT0FBTyxFQUFFO1FBQ1gsS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1lBQ3hELGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO1NBQ3ZFO0tBQ0Y7U0FBTTtRQUNMLEtBQUssR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3ZDO0lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUN2QyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbkQsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRS9DLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtRQUM5QixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTyxFQUFjLENBQUM7UUFDbkQsSUFBSSxHQUFHLElBQUksU0FBUyxDQUNsQixlQUFlLENBQUMsa0JBQWtCLEVBQUUsRUFDcEMsZ0JBQWdCLENBQUMsRUFBRSxFQUNuQixJQUFJLENBQ0wsQ0FBQztLQUNIO1NBQU0sSUFBSSxZQUFZLEtBQUssT0FBTyxFQUFFO1FBQ25DLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUMvRTtTQUFNLElBQUksWUFBWSxLQUFLLFlBQVksRUFBRTtRQUN4QyxJQUFJLEdBQUcsSUFBSSxZQUFZLENBQ3JCLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxFQUNwQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQ3BCLENBQUM7S0FDSDtJQUVELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUU7UUFDbEQsY0FBYyxFQUFFLGFBQWE7UUFDN0IsaUJBQWlCLEVBQUUsWUFBWTtLQUNoQyxDQUFvQixDQUFDO0lBRXRCLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0RSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxhQUFhLENBQXFDLENBQUM7SUFDcEksT0FBTztRQUNMLElBQUksRUFBRSxPQUFPO1FBQ2IsVUFBVSxFQUFFLGFBQWE7UUFDekIsTUFBTTtRQUNOLElBQUksRUFBRTtZQUNKLEVBQUU7WUFDRixLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9DLFFBQVE7WUFDUixnQkFBZ0IsRUFBRSxPQUFPO1lBQ3pCLHVCQUF1QixFQUFFLGNBQWM7U0FDeEM7UUFDRCxVQUFVO1FBQ1YsUUFBUTtRQUNSLEVBQUUsRUFBRSxlQUFlO0tBQ3BCLENBQUM7QUFDSixDQUFDO0FBQ0Q7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixTQUFnQyxFQUNoQyxZQUFvQixFQUNwQixPQUEyQixFQUMzQixhQUFhLEdBQUcsV0FBVztJQUUzQixJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksT0FBTyxDQUFDO0lBQ1osSUFBSSxjQUFjLENBQUM7SUFDbkIsSUFBSSxRQUFRLENBQUMsQ0FBQywyQ0FBMkM7SUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUV2QyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7UUFDdEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLFVBQVUsQ0FBQztJQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLEVBQUU7UUFDMUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQ3JFLGNBQWMsRUFBRSxhQUFhO1FBQzdCLGlCQUFpQixFQUFFLFlBQVk7S0FDaEMsQ0FBb0IsQ0FBQztJQUV0QixJQUFJLE9BQU8sRUFBRTtRQUNYLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkQsSUFBSSxhQUFhLEVBQUU7WUFDakIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN6QyxjQUFjLEdBQUcsYUFBYSxDQUFDLHVCQUF1QixDQUFDO1lBQ3ZELFFBQVE7Z0JBQ04sYUFBYSxDQUFDLFFBQVE7b0JBQ3RCLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFFLENBQUM7U0FDaEg7S0FDRjtTQUFNO1FBQ0wsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDakM7SUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5RyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRWhELE9BQU87UUFDTCxJQUFJLEVBQUUsT0FBTztRQUNiLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLEVBQUU7WUFDSixFQUFFO1lBQ0YsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMvQyxRQUFRO1lBQ1IsUUFBUSxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUU7WUFDakMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQzlCLGdCQUFnQixFQUFFLE9BQU87WUFDekIsdUJBQXVCLEVBQUUsY0FBYztTQUN4QztRQUNELFVBQVU7UUFDVixRQUFRO1FBQ1IsRUFBRSxFQUFFLFNBQVM7S0FDZCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxHQUFXLEVBQ1gsU0FBZ0M7SUFFaEMsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXRDLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakQsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pELElBQUksZUFBZSxLQUFLLFNBQVMsSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUU7UUFDdEUsUUFBUSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQy9CLGVBQWUsRUFDZixtQkFBbUIsRUFDbkIsR0FBRyxDQUFDLFVBQVUsQ0FDZixDQUFDO0tBQ0g7U0FBTTtRQUNMLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQyxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUU7WUFDdkIsUUFBUSxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNuQztLQUNGO0lBRUQsT0FBTyxRQUE0QyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsR0FBVyxFQUNYLFVBQW1DO0lBRW5DLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUV0QyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBZ0MsRUFBRSxFQUFFO1FBQ3RELE1BQU0sYUFBYSxHQUFHLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RCxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBMEMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixNQUF3QyxFQUN4QyxLQUF1QztJQUV2QyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsT0FBTztRQUNMLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ25ELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDckQsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxHQUFXLEVBQ1gsY0FBZ0Q7SUFFaEQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDdkIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUN2RCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBS3pDLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxHQUFXLEVBQ1gsY0FBZ0QsRUFDaEQsU0FBa0I7SUFFbEIsMEVBQTBFO0lBQzFFLDREQUE0RDtJQUM1RCxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMxQyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2pELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTVELElBQUksa0JBQWtCLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2pFLHVCQUF1QjtRQUN2QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsT0FBTyxrQkFBa0IsR0FBRyxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsR0FBVyxFQUNYLFVBQW1DLEVBQ25DLFNBQXdCLGFBQWEsQ0FBQyxPQUFPLEVBQzdDLEtBQXdDLEVBQ3hDLFNBQWtCO0lBRWxCLE1BQU0sY0FBYyxHQUFHLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoRSxJQUFJLFVBQVUsR0FBRyxjQUFjLENBQUM7SUFDaEMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQ3ZCLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzdDO0lBRUQsSUFBSSxNQUFNLEtBQUssYUFBYSxDQUFDLElBQUksRUFBRTtRQUNqQyxHQUFHLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUM3QztTQUFNLElBQUksTUFBTSxLQUFLLGFBQWEsQ0FBQyxJQUFJLEVBQUU7UUFDeEMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDN0M7U0FBTSxJQUFJLE1BQU0sS0FBSyxhQUFhLENBQUMsT0FBTyxFQUFFO1FBQzNDLElBQ0Usb0JBQW9CLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQztZQUN6Qyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLFNBQVMsQ0FBQyxFQUN4RDtZQUNBLEdBQUcsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdDO0tBQ0Y7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxTQUFnQztJQUM1RCxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBbUIsRUFBRSxLQUFtQjtJQUN4RSxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQzdCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQ2pDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQztRQUNELE9BQU87S0FDUjtJQUVELEtBQUssR0FBRyxLQUFLO1FBQ1gsQ0FBQyxDQUFDLEtBQUs7UUFDUCxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUM7WUFDZCxNQUFNLEVBQUUsSUFBSSxpQkFBaUIsRUFBRTtTQUNoQyxDQUFDLENBQUM7SUFDUCxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQ2pDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNqQztBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsTUFBK0IsRUFDL0IsTUFBK0I7SUFLL0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBZ0MsRUFBRSxFQUFFO1FBQ2xELGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWdDLEVBQUUsRUFBRTtRQUNsRCxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUM5QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDcEM7YUFBTSxJQUNMLFlBQVksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsS0FBSyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQ3hFO1lBQ0Esa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3BDO2FBQU07WUFDTCxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQWdDLEVBQUUsRUFBRTtRQUN6RSxPQUFPLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsR0FBRyxFQUFFLGVBQWU7UUFDcEIsTUFBTSxFQUFFLGtCQUFrQjtLQUMzQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9sZXh0ZW50IGZyb20gJ29sL2V4dGVudCc7XG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgKiBhcyBvbHN0eWxlIGZyb20gJ29sL3N0eWxlJztcbmltcG9ydCBPbEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XG5pbXBvcnQgT2xHZW9tZXRyeUxheW91dCBmcm9tICdvbC9nZW9tL0dlb21ldHJ5TGF5b3V0JztcbmltcG9ydCBPbFBvbHlnb24gZnJvbSAnb2wvZ2VvbS9Qb2x5Z29uJztcbmltcG9ydCBPbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xuaW1wb3J0IE9sTGluZVN0cmluZyBmcm9tICdvbC9nZW9tL0xpbmVTdHJpbmcnO1xuaW1wb3J0IE9sUmVuZGVyRmVhdHVyZSBmcm9tICdvbC9yZW5kZXIvRmVhdHVyZSc7XG5pbXBvcnQgT2xGb3JtYXRHZW9KU09OIGZyb20gJ29sL2Zvcm1hdC9HZW9KU09OJztcbmltcG9ydCBPbExheWVyIGZyb20gJ29sL2xheWVyL0xheWVyJztcbmltcG9ydCBPbFNvdXJjZSBmcm9tICdvbC9zb3VyY2UvU291cmNlJztcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBFbnRpdHlLZXksXG4gIGdldEVudGl0eUlkLFxuICBnZXRFbnRpdHlUaXRsZSxcbiAgZ2V0RW50aXR5UmV2aXNpb24sXG4gIGdldEVudGl0eUljb24sXG4gIGdldEVudGl0eVByb3BlcnR5XG59IGZyb20gJ0BpZ28yL2NvbW1vbic7XG5cbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcCc7XG5pbXBvcnQgeyBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9yLWxheWVyJztcbmltcG9ydCB7IEZlYXR1cmVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZSc7XG5pbXBvcnQgeyBGRUFUVVJFLCBGZWF0dXJlTW90aW9uIH0gZnJvbSAnLi9mZWF0dXJlLmVudW1zJztcbmltcG9ydCB7IEZlYXR1cmUsIEZlYXR1cmVHZW9tZXRyeSB9IGZyb20gJy4vZmVhdHVyZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZlYXR1cmVTdG9yZSB9IGZyb20gJy4vc3RvcmUnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBPcGVubGF5ZXJzIGZlYXR1cmUgb2JqZWN0IG91dCBvZiBhIGZlYXR1cmUgZGVmaW5pdGlvbi5cbiAqIFRoZSBvdXRwdXQgb2JqZWN0IGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgZmVhdHVyZSBpZC5cbiAqIEBwYXJhbSBmZWF0dXJlIEZlYXR1cmUgZGVmaW5pdGlvblxuICogQHBhcmFtIHByb2plY3Rpb25PdXQgRmVhdHVyZSBvYmplY3QgcHJvamVjdGlvblxuICogQHJldHVybnMgT3BlbkxheWVycyBmZWF0dXJlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmVhdHVyZVRvT2woXG4gIGZlYXR1cmU6IEZlYXR1cmUsXG4gIHByb2plY3Rpb25PdXQ6IHN0cmluZyxcbiAgZ2V0SWQ/OiAoRmVhdHVyZSkgPT4gRW50aXR5S2V5XG4pOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4ge1xuICBnZXRJZCA9IGdldElkID8gZ2V0SWQgOiBnZXRFbnRpdHlJZDtcblxuICBjb25zdCBvbEZvcm1hdCA9IG5ldyBPbEZvcm1hdEdlb0pTT04oKTtcbiAgY29uc3Qgb2xGZWF0dXJlID0gb2xGb3JtYXQucmVhZEZlYXR1cmUoZmVhdHVyZSwge1xuICAgIGRhdGFQcm9qZWN0aW9uOiBmZWF0dXJlLnByb2plY3Rpb24sXG4gICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb25PdXRcbiAgfSk7XG5cbiAgb2xGZWF0dXJlLnNldElkKGdldElkKGZlYXR1cmUpKTtcblxuICBjb25zdCB0aXRsZSA9IGdldEVudGl0eVRpdGxlKGZlYXR1cmUpO1xuICBpZiAodGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIG9sRmVhdHVyZS5zZXQoJ190aXRsZScsIHRpdGxlLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChmZWF0dXJlLmV4dGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb2xGZWF0dXJlLnNldCgnX2V4dGVudCcsIGZlYXR1cmUuZXh0ZW50LCB0cnVlKTtcbiAgfVxuXG4gIGlmIChmZWF0dXJlLnByb2plY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIG9sRmVhdHVyZS5zZXQoJ19wcm9qZWN0aW9uJywgZmVhdHVyZS5wcm9qZWN0aW9uLCB0cnVlKTtcbiAgfVxuXG4gIGNvbnN0IG1hcFRpdGxlID0gZ2V0RW50aXR5UHJvcGVydHkoZmVhdHVyZSwgJ21ldGEubWFwVGl0bGUnKTtcbiAgaWYgKG1hcFRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBvbEZlYXR1cmUuc2V0KCdfbWFwVGl0bGUnLCBtYXBUaXRsZSwgdHJ1ZSk7XG4gIH1cblxuICBvbEZlYXR1cmUuc2V0KCdfZW50aXR5UmV2aXNpb24nLCBnZXRFbnRpdHlSZXZpc2lvbihmZWF0dXJlKSwgdHJ1ZSk7XG5cbiAgY29uc3QgaWNvbiA9IGdldEVudGl0eUljb24oZmVhdHVyZSk7XG4gIGlmIChpY29uICE9PSB1bmRlZmluZWQpIHtcbiAgICBvbEZlYXR1cmUuc2V0KCdfaWNvbicsIGljb24sIHRydWUpO1xuICB9XG5cbiAgaWYgKGZlYXR1cmUubWV0YSAmJiBmZWF0dXJlLm1ldGEuc3R5bGUpIHtcbiAgICBvbEZlYXR1cmUuc2V0KCdfc3R5bGUnLCBmZWF0dXJlLm1ldGEuc3R5bGUsIHRydWUpO1xuICB9XG5cbiAgaWYgKGZlYXR1cmUuc291cmNlSWQpIHtcbiAgICBvbEZlYXR1cmUuc2V0KCdfc291cmNlSWQnLCBmZWF0dXJlLnNvdXJjZUlkLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBvbEZlYXR1cmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJGZWF0dXJlRnJvbU9sKFxuICBvbFJlbmRlckZlYXR1cmU6IE9sUmVuZGVyRmVhdHVyZSxcbiAgcHJvamVjdGlvbkluOiBzdHJpbmcsXG4gIG9sTGF5ZXI/OiBPbExheWVyPE9sU291cmNlPixcbiAgcHJvamVjdGlvbk91dCA9ICdFUFNHOjQzMjYnXG4pOiBGZWF0dXJlIHtcbiAgbGV0IGdlb207XG4gIGxldCB0aXRsZTtcbiAgbGV0IGV4Y2x1ZGU7XG4gIGxldCBleGNsdWRlT2ZmbGluZTtcblxuICBpZiAob2xMYXllcikge1xuICAgIHRpdGxlID0gb2xMYXllci5nZXQoJ3RpdGxlJyk7XG4gICAgaWYgKG9sTGF5ZXIuZ2V0KCdzb3VyY2VPcHRpb25zJykpIHtcbiAgICAgIGV4Y2x1ZGUgPSBvbExheWVyLmdldCgnc291cmNlT3B0aW9ucycpLmV4Y2x1ZGVBdHRyaWJ1dGU7XG4gICAgICBleGNsdWRlT2ZmbGluZSA9IG9sTGF5ZXIuZ2V0KCdzb3VyY2VPcHRpb25zJykuZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRpdGxlID0gb2xSZW5kZXJGZWF0dXJlLmdldCgnX3RpdGxlJyk7XG4gIH1cblxuICBjb25zdCBvbEZvcm1hdCA9IG5ldyBPbEZvcm1hdEdlb0pTT04oKTtcbiAgY29uc3QgcHJvcGVydGllcyA9IG9sUmVuZGVyRmVhdHVyZS5nZXRQcm9wZXJ0aWVzKCk7XG4gIGNvbnN0IGdlb21ldHJ5VHlwZSA9IG9sUmVuZGVyRmVhdHVyZS5nZXRUeXBlKCk7XG5cbiAgaWYgKGdlb21ldHJ5VHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgY29uc3QgZW5kcyA9IG9sUmVuZGVyRmVhdHVyZS5nZXRFbmRzKCkgYXMgbnVtYmVyW107XG4gICAgZ2VvbSA9IG5ldyBPbFBvbHlnb24oXG4gICAgICBvbFJlbmRlckZlYXR1cmUuZ2V0RmxhdENvb3JkaW5hdGVzKCksXG4gICAgICBPbEdlb21ldHJ5TGF5b3V0LlhZLFxuICAgICAgZW5kc1xuICAgICk7XG4gIH0gZWxzZSBpZiAoZ2VvbWV0cnlUeXBlID09PSAnUG9pbnQnKSB7XG4gICAgZ2VvbSA9IG5ldyBPbFBvaW50KG9sUmVuZGVyRmVhdHVyZS5nZXRGbGF0Q29vcmRpbmF0ZXMoKSwgT2xHZW9tZXRyeUxheW91dC5YWSk7XG4gIH0gZWxzZSBpZiAoZ2VvbWV0cnlUeXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICBnZW9tID0gbmV3IE9sTGluZVN0cmluZyhcbiAgICAgIG9sUmVuZGVyRmVhdHVyZS5nZXRGbGF0Q29vcmRpbmF0ZXMoKSxcbiAgICAgIE9sR2VvbWV0cnlMYXlvdXQuWFlcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZ2VvbWV0cnkgPSBvbEZvcm1hdC53cml0ZUdlb21ldHJ5T2JqZWN0KGdlb20sIHtcbiAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvbk91dCxcbiAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbkluXG4gIH0pIGFzIEZlYXR1cmVHZW9tZXRyeTtcblxuICBjb25zdCBpZCA9IG9sUmVuZGVyRmVhdHVyZS5nZXRJZCgpID8gb2xSZW5kZXJGZWF0dXJlLmdldElkKCkgOiB1dWlkKCk7XG4gIGNvbnN0IG1hcFRpdGxlID0gb2xSZW5kZXJGZWF0dXJlLmdldCgnX21hcFRpdGxlJyk7XG4gIGNvbnN0IGV4dGVudCA9IG9scHJvai50cmFuc2Zvcm1FeHRlbnQob2xSZW5kZXJGZWF0dXJlLmdldEV4dGVudCgpLCBwcm9qZWN0aW9uSW4sIHByb2plY3Rpb25PdXQpIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgcHJvamVjdGlvbjogcHJvamVjdGlvbk91dCxcbiAgICBleHRlbnQsXG4gICAgbWV0YToge1xuICAgICAgaWQsXG4gICAgICB0aXRsZTogdGl0bGUgPyB0aXRsZSA6IG1hcFRpdGxlID8gbWFwVGl0bGUgOiBpZCxcbiAgICAgIG1hcFRpdGxlLFxuICAgICAgZXhjbHVkZUF0dHJpYnV0ZTogZXhjbHVkZSxcbiAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lOiBleGNsdWRlT2ZmbGluZVxuICAgIH0sXG4gICAgcHJvcGVydGllcyxcbiAgICBnZW9tZXRyeSxcbiAgICBvbDogb2xSZW5kZXJGZWF0dXJlXG4gIH07XG59XG4vKipcbiAqIENyZWF0ZSBhIGZlYXR1cmUgb2JqZWN0IG91dCBvZiBhbiBPTCBmZWF0dXJlXG4gKiBUaGUgb3V0cHV0IG9iamVjdCBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGZlYXR1cmUgaWQuXG4gKiBAcGFyYW0gb2xGZWF0dXJlIE9MIEZlYXR1cmVcbiAqIEBwYXJhbSBwcm9qZWN0aW9uSW4gT0wgZmVhdHVyZSBwcm9qZWN0aW9uXG4gKiBAcGFyYW0gb2xMYXllciBPTCBMYXllclxuICogQHBhcmFtIHByb2plY3Rpb25PdXQgRmVhdHVyZSBwcm9qZWN0aW9uXG4gKiBAcmV0dXJucyBGZWF0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZWF0dXJlRnJvbU9sKFxuICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgcHJvamVjdGlvbkluOiBzdHJpbmcsXG4gIG9sTGF5ZXI/OiBPbExheWVyPE9sU291cmNlPixcbiAgcHJvamVjdGlvbk91dCA9ICdFUFNHOjQzMjYnXG4pOiBGZWF0dXJlIHtcbiAgbGV0IHRpdGxlO1xuICBsZXQgZXhjbHVkZTtcbiAgbGV0IGV4Y2x1ZGVPZmZsaW5lO1xuICBsZXQgaWRDb2x1bW47IC8vIGZvciBhcmNnaXNyZXN0IGFuZCB0aWxlYXJjZ2lzcmVzdCBzb3VyY2VcbiAgY29uc3Qgb2xGb3JtYXQgPSBuZXcgT2xGb3JtYXRHZW9KU09OKCk7XG5cbiAgY29uc3Qga2V5cyA9IG9sRmVhdHVyZS5nZXRLZXlzKCkuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAha2V5LnN0YXJ0c1dpdGgoJ18nKSAmJiBrZXkgIT09ICdnZW9tZXRyeSc7XG4gIH0pO1xuICBjb25zdCBwcm9wZXJ0aWVzID0ga2V5cy5yZWR1Y2UoKGFjYzogb2JqZWN0LCBrZXk6IHN0cmluZykgPT4ge1xuICAgIGFjY1trZXldID0gb2xGZWF0dXJlLmdldChrZXkpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICBjb25zdCBnZW9tZXRyeSA9IG9sRm9ybWF0LndyaXRlR2VvbWV0cnlPYmplY3Qob2xGZWF0dXJlLmdldEdlb21ldHJ5KCksIHtcbiAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvbk91dCxcbiAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbkluXG4gIH0pIGFzIEZlYXR1cmVHZW9tZXRyeTtcblxuICBpZiAob2xMYXllcikge1xuICAgIHRpdGxlID0gb2xMYXllci5nZXQoJ3RpdGxlJyk7XG4gICAgY29uc3Qgc291cmNlT3B0aW9ucyA9IG9sTGF5ZXIuZ2V0KCdzb3VyY2VPcHRpb25zJyk7XG4gICAgaWYgKHNvdXJjZU9wdGlvbnMpIHtcbiAgICAgIGV4Y2x1ZGUgPSBzb3VyY2VPcHRpb25zLmV4Y2x1ZGVBdHRyaWJ1dGU7XG4gICAgICBleGNsdWRlT2ZmbGluZSA9IHNvdXJjZU9wdGlvbnMuZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmU7XG4gICAgICBpZENvbHVtbiA9XG4gICAgICAgIHNvdXJjZU9wdGlvbnMuaWRDb2x1bW4gfHxcbiAgICAgICAgKChzb3VyY2VPcHRpb25zLnR5cGUgPT09ICdhcmNnaXNyZXN0JyB8fCBzb3VyY2VPcHRpb25zLnR5cGUgPT09ICd0aWxlYXJjZ2lzcmVzdCcpID8gJ09CSkVDVElEJyA6IHVuZGVmaW5lZCApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aXRsZSA9IG9sRmVhdHVyZS5nZXQoJ190aXRsZScpO1xuICB9XG4gIGNvbnN0IG1hcFRpdGxlID0gb2xGZWF0dXJlLmdldCgnX21hcFRpdGxlJyk7XG4gIGNvbnN0IGlkID0gb2xGZWF0dXJlLmdldElkKCkgPyBvbEZlYXR1cmUuZ2V0SWQoKSA6IG9sRmVhdHVyZS5nZXQoaWRDb2x1bW4pID8gb2xGZWF0dXJlLmdldChpZENvbHVtbikgOiB1dWlkKCk7XG4gIGNvbnN0IG5ld0ZlYXR1cmUgPSBvbEZlYXR1cmUuZ2V0KCdfbmV3RmVhdHVyZScpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogRkVBVFVSRSxcbiAgICBwcm9qZWN0aW9uOiBwcm9qZWN0aW9uT3V0LFxuICAgIGV4dGVudDogb2xGZWF0dXJlLmdldCgnX2V4dGVudCcpLFxuICAgIG1ldGE6IHtcbiAgICAgIGlkLFxuICAgICAgdGl0bGU6IHRpdGxlID8gdGl0bGUgOiBtYXBUaXRsZSA/IG1hcFRpdGxlIDogaWQsXG4gICAgICBtYXBUaXRsZSxcbiAgICAgIHJldmlzaW9uOiBvbEZlYXR1cmUuZ2V0UmV2aXNpb24oKSxcbiAgICAgIHN0eWxlOiBvbEZlYXR1cmUuZ2V0KCdfc3R5bGUnKSxcbiAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGU6IGV4Y2x1ZGUsXG4gICAgICBleGNsdWRlQXR0cmlidXRlT2ZmbGluZTogZXhjbHVkZU9mZmxpbmVcbiAgICB9LFxuICAgIHByb3BlcnRpZXMsXG4gICAgZ2VvbWV0cnksXG4gICAgb2w6IG9sRmVhdHVyZVxuICB9O1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gT0wgZmVhdHVyZSBleHRlbnQgaW4gaXQncyBtYXAgcHJvamVjdGlvblxuICogQHBhcmFtIG1hcCBNYXBcbiAqIEBwYXJhbSBvbEZlYXR1cmUgT0wgZmVhdHVyZVxuICogQHJldHVybnMgRXh0ZW50IGluIHRoZSBtYXAgcHJvamVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU9sRmVhdHVyZUV4dGVudChcbiAgbWFwOiBJZ29NYXAsXG4gIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+XG4pOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGxldCBvbEV4dGVudCA9IG9sZXh0ZW50LmNyZWF0ZUVtcHR5KCk7XG5cbiAgY29uc3Qgb2xGZWF0dXJlRXh0ZW50ID0gb2xGZWF0dXJlLmdldCgnX2V4dGVudCcpO1xuICBjb25zdCBvbEZlYXR1cmVQcm9qZWN0aW9uID0gb2xGZWF0dXJlLmdldCgnX3Byb2plY3Rpb24nKTtcbiAgaWYgKG9sRmVhdHVyZUV4dGVudCAhPT0gdW5kZWZpbmVkICYmIG9sRmVhdHVyZVByb2plY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIG9sRXh0ZW50ID0gb2xwcm9qLnRyYW5zZm9ybUV4dGVudChcbiAgICAgIG9sRmVhdHVyZUV4dGVudCxcbiAgICAgIG9sRmVhdHVyZVByb2plY3Rpb24sXG4gICAgICBtYXAucHJvamVjdGlvblxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgb2xHZW9tZXRyeSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpO1xuICAgIGlmIChvbEdlb21ldHJ5ICE9PSBudWxsKSB7XG4gICAgICBvbEV4dGVudCA9IG9sR2VvbWV0cnkuZ2V0RXh0ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9sRXh0ZW50IGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBtdWx0aXBsZSBPTCBmZWF0dXJlcyBleHRlbnQgaW4gdGhlaXIgbWFwIHByb2plY3Rpb25cbiAqIEBwYXJhbSBtYXAgTWFwXG4gKiBAcGFyYW0gb2xGZWF0dXJlcyBPTCBmZWF0dXJlc1xuICogQHJldHVybnMgRXh0ZW50IGluIHRoZSBtYXAgcHJvamVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU9sRmVhdHVyZXNFeHRlbnQoXG4gIG1hcDogSWdvTWFwLFxuICBvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXVxuKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBleHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpO1xuXG4gIG9sRmVhdHVyZXMuZm9yRWFjaCgob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcbiAgICBjb25zdCBmZWF0dXJlRXh0ZW50ID0gY29tcHV0ZU9sRmVhdHVyZUV4dGVudChtYXAsIG9sRmVhdHVyZSk7XG4gICAgb2xleHRlbnQuZXh0ZW5kKGV4dGVudCwgZmVhdHVyZUV4dGVudCk7XG4gIH0pO1xuXG4gIHJldHVybiBleHRlbnQgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbi8qKlxuICogU2NhbGUgYW4gZXh0ZW50LlxuICogQHBhcmFtIGV4dGVudCBFeHRlbnRcbiAqIEBwYXJhbSBTY2FsaW5nIGZhY3RvcnMgZm9yIHRvcCwgcmlnaHQsIGJvdHRvbSBhbmQgbGVmdCBkaXJlY3Rpb25zLCBpbiB0aGF0IG9yZGVyXG4gKiBAcmV0dXJucyBTY2FsZWQgZXh0ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUV4dGVudChcbiAgZXh0ZW50OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgc2NhbGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG4pOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IFt3aWR0aCwgaGVpZ2h0XSA9IG9sZXh0ZW50LmdldFNpemUoZXh0ZW50KTtcbiAgcmV0dXJuIFtcbiAgICBzY2FsZVszXSA/IGV4dGVudFswXSAtIHdpZHRoICogc2NhbGVbM10gOiBleHRlbnRbMF0sXG4gICAgc2NhbGVbMl0gPyBleHRlbnRbMV0gLSBoZWlnaHQgKiBzY2FsZVsyXSA6IGV4dGVudFsxXSxcbiAgICBzY2FsZVsxXSA/IGV4dGVudFsyXSArIHdpZHRoICogc2NhbGVbMV0gOiBleHRlbnRbMl0sXG4gICAgc2NhbGVbMF0gPyBleHRlbnRbM10gKyBoZWlnaHQgKiBzY2FsZVswXSA6IGV4dGVudFszXVxuICBdO1xufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIGZlYXR1cmVzIGFyZSBvdXQgb2Ygdmlldy5cbiAqIElmIGZlYXR1cmVzIGFyZSB0b28gY2xvc2UgdG8gdGhlIGVkZ2UsIHRoZXkgYXJlIGNvbnNpZGVyZWQgb3V0IG9mIHZpZXcuXG4gKiBXZSBkZWZpbmUgdGhlIGVkZ2UgYXMgNSUgb2YgdGhlIGV4dGVudCBzaXplLlxuICogQHBhcmFtIG1hcCBNYXBcbiAqIEBwYXJhbSBmZWF0dXJlc0V4dGVudCBUaGUgZmVhdHVyZXMncyBleHRlbnRcbiAqIEByZXR1cm5zIFJldHVybiB0cnVlIGlmIGZlYXR1cmVzIGFyZSBvdXQgb2Ygdmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmVhdHVyZXNBcmVPdXRPZlZpZXcoXG4gIG1hcDogSWdvTWFwLFxuICBmZWF0dXJlc0V4dGVudDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1cbikge1xuICBjb25zdCBtYXBFeHRlbnQgPSBtYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCk7XG4gIGNvbnN0IGVkZ2VSYXRpbyA9IDAuMDU7XG4gIGNvbnN0IHNjYWxlID0gWy0xLCAtMSwgLTEsIC0xXS5tYXAoeCA9PiB4ICogZWRnZVJhdGlvKTtcbiAgY29uc3Qgdmlld0V4dGVudCA9IHNjYWxlRXh0ZW50KG1hcEV4dGVudCwgc2NhbGUgYXMgW1xuICAgIG51bWJlcixcbiAgICBudW1iZXIsXG4gICAgbnVtYmVyLFxuICAgIG51bWJlclxuICBdKTtcblxuICByZXR1cm4gIW9sZXh0ZW50LmNvbnRhaW5zRXh0ZW50KHZpZXdFeHRlbnQsIGZlYXR1cmVzRXh0ZW50KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiBmZWF0dXJlcyBhcmUgdG9vIGRlZXAgaW50byB0aGUgdmlldy4gVGhpcyByZXN1bHRzXG4gKiBpbiBmZWF0dXJlcyBiZWluZyB0b28gc21hbGwuXG4gKiBGZWF0dXJlcyBhcmUgY29uc2lkZXJlZCB0b28gc21hbGwgaWYgdGhlaXIgZXh0ZW50IG9jY3VwaWVzIGxlc3MgdGhhblxuICogMSUgb2YgdGhlIG1hcCBleHRlbnQuXG4gKiBAcGFyYW0gbWFwIE1hcFxuICogQHBhcmFtIGZlYXR1cmVzRXh0ZW50IFRoZSBmZWF0dXJlcydzIGV4dGVudFxuICogQHBhcmFtIGFyZWFSYXRpbyBUaGUgZmVhdHVyZXMgZXh0ZW50IHRvIHZpZXcgZXh0ZW50IGFjY2VwdGFibGUgcmF0aW9cbiAqIEByZXR1cm5zIFJldHVybiB0cnVlIGlmIGZlYXR1cmVzIGFyZSB0b28gZGVlcCBpbiB0aGUgdmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmVhdHVyZXNBcmVUb29EZWVwSW5WaWV3KFxuICBtYXA6IElnb01hcCxcbiAgZmVhdHVyZXNFeHRlbnQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBhcmVhUmF0aW8/OiBudW1iZXJcbikge1xuICAvLyBBbiBhcmVhIHJhdGlvIG9mIDAuMDA0IG1lYW5zIHRoYXQgdGhlIGZlYXR1cmUgZXh0ZW50J3Mgd2lkdGggYW5kIGhlaWdodFxuICAvLyBzaG91bGQgYmUgYWJvdXQgMS8xNiBvZiB0aGUgbWFwIGV4dGVudCdzIHdpZHRoIGFuZCBoZWlnaHRcbiAgYXJlYVJhdGlvID0gYXJlYVJhdGlvID8gYXJlYVJhdGlvIDogMC4wMDQ7XG4gIGNvbnN0IG1hcEV4dGVudCA9IG1hcC52aWV3Q29udHJvbGxlci5nZXRFeHRlbnQoKTtcbiAgY29uc3QgbWFwRXh0ZW50QXJlYSA9IG9sZXh0ZW50LmdldEFyZWEobWFwRXh0ZW50KTtcbiAgY29uc3QgZmVhdHVyZXNFeHRlbnRBcmVhID0gb2xleHRlbnQuZ2V0QXJlYShmZWF0dXJlc0V4dGVudCk7XG5cbiAgaWYgKGZlYXR1cmVzRXh0ZW50QXJlYSA9PT0gMCAmJiBtYXAudmlld0NvbnRyb2xsZXIuZ2V0Wm9vbSgpID4gMTMpIHtcbiAgICAvLyBJbiBjYXNlIGl0J3MgYSBwb2ludFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmZWF0dXJlc0V4dGVudEFyZWEgLyBtYXBFeHRlbnRBcmVhIDwgYXJlYVJhdGlvO1xufVxuXG4vKipcbiAqIEZpdCB2aWV3IHRvIGluY2x1ZGUgdGhlIGZlYXR1cmVzIGV4dGVudC5cbiAqIEJ5IGRlZmF1bHQsIHRoaXMgbWV0aG9kIHdpbGwgbGV0IHRoZSBmZWF0dXJlcyBvY2N1cHkgYWJvdXQgNTAlIG9mIHRoZSB2aWV3cG9ydC5cbiAqIEBwYXJhbSBtYXAgTWFwXG4gKiBAcGFyYW0gb2xGZWF0dXJlcyBPTCBmZWF0dXJlc1xuICogQHBhcmFtIG1vdGlvbiBUbyBtb3Rpb24gdG8gdGhlIG5ldyBtYXAgdmlld1xuICogQHBhcmFtIHNjYWxlIElmIHRoaXMgaXMgZGVmaW5lZCwgdGhlIG9yaWdpbmFsIHZpZXcgd2lsbCBiZSBzY2FsZWRcbiAqICBieSB0aGF0IGZhY3RvciBiZWZvcmUgYW55IGxvZ2ljIGlzIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlVG9PbEZlYXR1cmVzKFxuICBtYXA6IElnb01hcCxcbiAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gIG1vdGlvbjogRmVhdHVyZU1vdGlvbiA9IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCxcbiAgc2NhbGU/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgYXJlYVJhdGlvPzogbnVtYmVyXG4pIHtcbiAgY29uc3QgZmVhdHVyZXNFeHRlbnQgPSBjb21wdXRlT2xGZWF0dXJlc0V4dGVudChtYXAsIG9sRmVhdHVyZXMpO1xuICBsZXQgdmlld0V4dGVudCA9IGZlYXR1cmVzRXh0ZW50O1xuICBpZiAoc2NhbGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHZpZXdFeHRlbnQgPSBzY2FsZUV4dGVudCh2aWV3RXh0ZW50LCBzY2FsZSk7XG4gIH1cblxuICBpZiAobW90aW9uID09PSBGZWF0dXJlTW90aW9uLlpvb20pIHtcbiAgICBtYXAudmlld0NvbnRyb2xsZXIuem9vbVRvRXh0ZW50KHZpZXdFeHRlbnQpO1xuICB9IGVsc2UgaWYgKG1vdGlvbiA9PT0gRmVhdHVyZU1vdGlvbi5Nb3ZlKSB7XG4gICAgbWFwLnZpZXdDb250cm9sbGVyLm1vdmVUb0V4dGVudCh2aWV3RXh0ZW50KTtcbiAgfSBlbHNlIGlmIChtb3Rpb24gPT09IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCkge1xuICAgIGlmIChcbiAgICAgIGZlYXR1cmVzQXJlT3V0T2ZWaWV3KG1hcCwgZmVhdHVyZXNFeHRlbnQpIHx8XG4gICAgICBmZWF0dXJlc0FyZVRvb0RlZXBJblZpZXcobWFwLCBmZWF0dXJlc0V4dGVudCwgYXJlYVJhdGlvKVxuICAgICkge1xuICAgICAgbWFwLnZpZXdDb250cm9sbGVyLnpvb21Ub0V4dGVudCh2aWV3RXh0ZW50KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBIaWRlIGFuIE9MIGZlYXR1cmVcbiAqIEBwYXJhbSBvbEZlYXR1cmUgT0wgZmVhdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZU9sRmVhdHVyZShvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5Pikge1xuICBvbEZlYXR1cmUuc2V0U3R5bGUobmV3IG9sc3R5bGUuU3R5bGUoe30pKTtcbn1cblxuLyoqXG4gKiBUcnkgdG8gYmluZCBhIGxheWVyIHRvIGEgc3RvcmUgaWYgbm9uZSBpcyBib3VuZCBhbHJlYWR5LlxuICogVGhlIGxheWVyIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgc3RvcmUncyBtYXAuXG4gKiBJZiBubyBsYXllciBpcyBnaXZlbiB0byB0aGF0IGZ1bmN0aW9uLCBhIGJhc2ljIG9uZSB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gc3RvcmUgVGhlIHN0b3JlIHRvIGJpbmQgdGhlIGxheWVyXG4gKiBAcGFyYW0gbGF5ZXIgQW4gb3B0aW9uYWwgVmVjdG9yTGF5ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeUJpbmRTdG9yZUxheWVyKHN0b3JlOiBGZWF0dXJlU3RvcmUsIGxheWVyPzogVmVjdG9yTGF5ZXIpIHtcbiAgaWYgKHN0b3JlLmxheWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoc3RvcmUubGF5ZXIubWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0b3JlLm1hcC5hZGRMYXllcihzdG9yZS5sYXllcik7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxheWVyID0gbGF5ZXJcbiAgICA/IGxheWVyXG4gICAgOiBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpXG4gICAgICB9KTtcbiAgc3RvcmUuYmluZExheWVyKGxheWVyKTtcbiAgaWYgKHN0b3JlLmxheWVyLm1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RvcmUubWFwLmFkZExheWVyKHN0b3JlLmxheWVyKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbXB1dGUgYSBkaWZmIGJldHdlZW4gYSBzb3VyY2UgYXJyYXkgb2YgT2wgZmVhdHVyZXMgYW5kIGEgdGFyZ2V0IGFycmF5XG4gKiBAcGFyYW0gc291cmNlIFNvdXJjZSBhcnJheSBvZiBPTCBmZWF0dXJlc1xuICogQHBhcmFtIHN0YXJnZXQgVGFyZ2V0IGFycmF5IG9mIE9MIGZlYXR1cmVzXG4gKiBAcmV0dXJucyBGZWF0dXJlcyB0byBhZGQgYW5kIHJlbW92ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU9sRmVhdHVyZXNEaWZmKFxuICBzb3VyY2U6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICB0YXJnZXQ6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdXG4pOiB7XG4gIGFkZDogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W107XG4gIHJlbW92ZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W107XG59IHtcbiAgY29uc3Qgb2xGZWF0dXJlc01hcCA9IG5ldyBNYXAoKTtcbiAgdGFyZ2V0LmZvckVhY2goKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgb2xGZWF0dXJlc01hcC5zZXQob2xGZWF0dXJlLmdldElkKCksIG9sRmVhdHVyZSk7XG4gIH0pO1xuXG4gIGNvbnN0IG9sRmVhdHVyZXNUb1JlbW92ZSA9IFtdO1xuICBzb3VyY2UuZm9yRWFjaCgob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcbiAgICBjb25zdCBuZXdPbEZlYXR1cmUgPSBvbEZlYXR1cmVzTWFwLmdldChvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgaWYgKG5ld09sRmVhdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvbEZlYXR1cmVzVG9SZW1vdmUucHVzaChvbEZlYXR1cmUpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBuZXdPbEZlYXR1cmUuZ2V0KCdfZW50aXR5UmV2aXNpb24nKSAhPT0gb2xGZWF0dXJlLmdldCgnX2VudGl0eVJldmlzaW9uJylcbiAgICApIHtcbiAgICAgIG9sRmVhdHVyZXNUb1JlbW92ZS5wdXNoKG9sRmVhdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sRmVhdHVyZXNNYXAuZGVsZXRlKG5ld09sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG9sRmVhdHVyZXNUb0FkZElkcyA9IEFycmF5LmZyb20ob2xGZWF0dXJlc01hcC5rZXlzKCkpO1xuICBjb25zdCBvbEZlYXR1cmVzVG9BZGQgPSB0YXJnZXQuZmlsdGVyKChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgIHJldHVybiBvbEZlYXR1cmVzVG9BZGRJZHMuaW5kZXhPZihvbEZlYXR1cmUuZ2V0SWQoKSkgPj0gMDtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGQ6IG9sRmVhdHVyZXNUb0FkZCxcbiAgICByZW1vdmU6IG9sRmVhdHVyZXNUb1JlbW92ZVxuICB9O1xufVxuIl19
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxVQUFVLENBQUM7QUFHcEMsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sWUFBWSxNQUFNLG9CQUFvQixDQUFDO0FBRTlDLE9BQU8sZUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBSWhELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkMsT0FBTyxFQUVMLFdBQVcsRUFDWCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixpQkFBaUIsRUFDbEIsTUFBTSxjQUFjLENBQUM7QUFHdEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJekQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsT0FBZ0IsRUFDaEIsYUFBcUIsRUFDckIsS0FBOEI7SUFFOUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFFcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUN2QyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtR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QU0sSUFDTCxZQUFZLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEtBQUssU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUN4RTtZQUNBLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNwQzthQUFNO1lBQ0wsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFnQyxFQUFFLEVBQUU7UUFDekUsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLEdBQUcsRUFBRSxlQUFlO1FBQ3BCLE1BQU0sRUFBRSxrQkFBa0I7S0FDM0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvbGV4dGVudCBmcm9tICdvbC9leHRlbnQnO1xuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xuaW1wb3J0ICogYXMgb2xzdHlsZSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHR5cGUgeyBHZW9tZXRyeUxheW91dCB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IE9sUG9seWdvbiBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xuaW1wb3J0IE9sUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XG5pbXBvcnQgT2xMaW5lU3RyaW5nIGZyb20gJ29sL2dlb20vTGluZVN0cmluZyc7XG5pbXBvcnQgT2xSZW5kZXJGZWF0dXJlIGZyb20gJ29sL3JlbmRlci9GZWF0dXJlJztcbmltcG9ydCBPbEZvcm1hdEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuaW1wb3J0IE9sTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvTGF5ZXInO1xuaW1wb3J0IE9sU291cmNlIGZyb20gJ29sL3NvdXJjZS9Tb3VyY2UnO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9sR2VvbWV0cnkgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICdAaWdvMi91dGlscyc7XG5cbmltcG9ydCB7XG4gIEVudGl0eUtleSxcbiAgZ2V0RW50aXR5SWQsXG4gIGdldEVudGl0eVRpdGxlLFxuICBnZXRFbnRpdHlSZXZpc2lvbixcbiAgZ2V0RW50aXR5SWNvbixcbiAgZ2V0RW50aXR5UHJvcGVydHlcbn0gZnJvbSAnQGlnbzIvY29tbW9uJztcblxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwJztcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlJztcbmltcG9ydCB7IEZFQVRVUkUsIEZlYXR1cmVNb3Rpb24gfSBmcm9tICcuL2ZlYXR1cmUuZW51bXMnO1xuaW1wb3J0IHsgRmVhdHVyZSwgRmVhdHVyZUdlb21ldHJ5IH0gZnJvbSAnLi9mZWF0dXJlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgRmVhdHVyZVN0b3JlIH0gZnJvbSAnLi9zdG9yZSc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIE9wZW5sYXllcnMgZmVhdHVyZSBvYmplY3Qgb3V0IG9mIGEgZmVhdHVyZSBkZWZpbml0aW9uLlxuICogVGhlIG91dHB1dCBvYmplY3QgaGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBmZWF0dXJlIGlkLlxuICogQHBhcmFtIGZlYXR1cmUgRmVhdHVyZSBkZWZpbml0aW9uXG4gKiBAcGFyYW0gcHJvamVjdGlvbk91dCBGZWF0dXJlIG9iamVjdCBwcm9qZWN0aW9uXG4gKiBAcmV0dXJucyBPcGVuTGF5ZXJzIGZlYXR1cmUgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZWF0dXJlVG9PbChcbiAgZmVhdHVyZTogRmVhdHVyZSxcbiAgcHJvamVjdGlvbk91dDogc3RyaW5nLFxuICBnZXRJZD86IChGZWF0dXJlKSA9PiBFbnRpdHlLZXlcbik6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PiB7XG4gIGdldElkID0gZ2V0SWQgPyBnZXRJZCA6IGdldEVudGl0eUlkO1xuXG4gIGNvbnN0IG9sRm9ybWF0ID0gbmV3IE9sRm9ybWF0R2VvSlNPTigpO1xuICBjb25zdCBvbEZlYXR1cmUgPSBvbEZvcm1hdC5yZWFkRmVhdHVyZShmZWF0dXJlLCB7XG4gICAgZGF0YVByb2plY3Rpb246IGZlYXR1cmUucHJvamVjdGlvbixcbiAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbk91dFxuICB9KTtcblxuICBvbEZlYXR1cmUuc2V0SWQoZ2V0SWQoZmVhdHVyZSkpO1xuXG4gIGNvbnN0IHRpdGxlID0gZ2V0RW50aXR5VGl0bGUoZmVhdHVyZSk7XG4gIGlmICh0aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb2xGZWF0dXJlLnNldCgnX3RpdGxlJywgdGl0bGUsIHRydWUpO1xuICB9XG5cbiAgaWYgKGZlYXR1cmUuZXh0ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBvbEZlYXR1cmUuc2V0KCdfZXh0ZW50JywgZmVhdHVyZS5leHRlbnQsIHRydWUpO1xuICB9XG5cbiAgaWYgKGZlYXR1cmUucHJvamVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb2xGZWF0dXJlLnNldCgnX3Byb2plY3Rpb24nLCBmZWF0dXJlLnByb2plY3Rpb24sIHRydWUpO1xuICB9XG5cbiAgY29uc3QgbWFwVGl0bGUgPSBnZXRFbnRpdHlQcm9wZXJ0eShmZWF0dXJlLCAnbWV0YS5tYXBUaXRsZScpO1xuICBpZiAobWFwVGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgIG9sRmVhdHVyZS5zZXQoJ19tYXBUaXRsZScsIG1hcFRpdGxlLCB0cnVlKTtcbiAgfVxuXG4gIG9sRmVhdHVyZS5zZXQoJ19lbnRpdHlSZXZpc2lvbicsIGdldEVudGl0eVJldmlzaW9uKGZlYXR1cmUpLCB0cnVlKTtcblxuICBjb25zdCBpY29uID0gZ2V0RW50aXR5SWNvbihmZWF0dXJlKTtcbiAgaWYgKGljb24gIT09IHVuZGVmaW5lZCkge1xuICAgIG9sRmVhdHVyZS5zZXQoJ19pY29uJywgaWNvbiwgdHJ1ZSk7XG4gIH1cblxuICBpZiAoZmVhdHVyZS5tZXRhICYmIGZlYXR1cmUubWV0YS5zdHlsZSkge1xuICAgIG9sRmVhdHVyZS5zZXQoJ19zdHlsZScsIGZlYXR1cmUubWV0YS5zdHlsZSwgdHJ1ZSk7XG4gIH1cblxuICBpZiAoZmVhdHVyZS5zb3VyY2VJZCkge1xuICAgIG9sRmVhdHVyZS5zZXQoJ19zb3VyY2VJZCcsIGZlYXR1cmUuc291cmNlSWQsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIG9sRmVhdHVyZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckZlYXR1cmVGcm9tT2woXG4gIG9sUmVuZGVyRmVhdHVyZTogT2xSZW5kZXJGZWF0dXJlLFxuICBwcm9qZWN0aW9uSW46IHN0cmluZyxcbiAgb2xMYXllcj86IE9sTGF5ZXI8T2xTb3VyY2U+LFxuICBwcm9qZWN0aW9uT3V0ID0gJ0VQU0c6NDMyNidcbik6IEZlYXR1cmUge1xuICBsZXQgZ2VvbTtcbiAgbGV0IHRpdGxlO1xuICBsZXQgZXhjbHVkZTtcbiAgbGV0IGV4Y2x1ZGVPZmZsaW5lO1xuXG4gIGlmIChvbExheWVyKSB7XG4gICAgdGl0bGUgPSBvbExheWVyLmdldCgndGl0bGUnKTtcbiAgICBpZiAob2xMYXllci5nZXQoJ3NvdXJjZU9wdGlvbnMnKSkge1xuICAgICAgZXhjbHVkZSA9IG9sTGF5ZXIuZ2V0KCdzb3VyY2VPcHRpb25zJykuZXhjbHVkZUF0dHJpYnV0ZTtcbiAgICAgIGV4Y2x1ZGVPZmZsaW5lID0gb2xMYXllci5nZXQoJ3NvdXJjZU9wdGlvbnMnKS5leGNsdWRlQXR0cmlidXRlT2ZmbGluZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGl0bGUgPSBvbFJlbmRlckZlYXR1cmUuZ2V0KCdfdGl0bGUnKTtcbiAgfVxuXG4gIGNvbnN0IG9sRm9ybWF0ID0gbmV3IE9sRm9ybWF0R2VvSlNPTigpO1xuICBjb25zdCBwcm9wZXJ0aWVzID0gb2xSZW5kZXJGZWF0dXJlLmdldFByb3BlcnRpZXMoKTtcbiAgY29uc3QgZ2VvbWV0cnlUeXBlID0gb2xSZW5kZXJGZWF0dXJlLmdldFR5cGUoKTtcblxuICBpZiAoZ2VvbWV0cnlUeXBlID09PSAnUG9seWdvbicpIHtcbiAgICBjb25zdCBlbmRzID0gb2xSZW5kZXJGZWF0dXJlLmdldEVuZHMoKSBhcyBudW1iZXJbXTtcbiAgICBnZW9tID0gbmV3IE9sUG9seWdvbihcbiAgICAgIG9sUmVuZGVyRmVhdHVyZS5nZXRGbGF0Q29vcmRpbmF0ZXMoKSxcbiAgICAgICdYWScgYXMgR2VvbWV0cnlMYXlvdXQsXG4gICAgICBlbmRzXG4gICAgKTtcbiAgfSBlbHNlIGlmIChnZW9tZXRyeVR5cGUgPT09ICdQb2ludCcpIHtcbiAgICBnZW9tID0gbmV3IE9sUG9pbnQob2xSZW5kZXJGZWF0dXJlLmdldEZsYXRDb29yZGluYXRlcygpLCAnWFknIGFzIEdlb21ldHJ5TGF5b3V0KTtcbiAgfSBlbHNlIGlmIChnZW9tZXRyeVR5cGUgPT09ICdMaW5lU3RyaW5nJykge1xuICAgIGdlb20gPSBuZXcgT2xMaW5lU3RyaW5nKFxuICAgICAgb2xSZW5kZXJGZWF0dXJlLmdldEZsYXRDb29yZGluYXRlcygpLFxuICAgICAgJ1hZJyBhcyBHZW9tZXRyeUxheW91dCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZ2VvbWV0cnkgPSBvbEZvcm1hdC53cml0ZUdlb21ldHJ5T2JqZWN0KGdlb20sIHtcbiAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvbk91dCxcbiAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbkluXG4gIH0pIGFzIEZlYXR1cmVHZW9tZXRyeTtcblxuICBjb25zdCBpZCA9IG9sUmVuZGVyRmVhdHVyZS5nZXRJZCgpID8gb2xSZW5kZXJGZWF0dXJlLmdldElkKCkgOiB1dWlkKCk7XG4gIGNvbnN0IG1hcFRpdGxlID0gb2xSZW5kZXJGZWF0dXJlLmdldCgnX21hcFRpdGxlJyk7XG4gIGNvbnN0IGV4dGVudCA9IG9scHJvai50cmFuc2Zvcm1FeHRlbnQob2xSZW5kZXJGZWF0dXJlLmdldEV4dGVudCgpLCBwcm9qZWN0aW9uSW4sIHByb2plY3Rpb25PdXQpIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgcHJvamVjdGlvbjogcHJvamVjdGlvbk91dCxcbiAgICBleHRlbnQsXG4gICAgbWV0YToge1xuICAgICAgaWQsXG4gICAgICB0aXRsZTogdGl0bGUgPyB0aXRsZSA6IG1hcFRpdGxlID8gbWFwVGl0bGUgOiBpZCxcbiAgICAgIG1hcFRpdGxlLFxuICAgICAgZXhjbHVkZUF0dHJpYnV0ZTogZXhjbHVkZSxcbiAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGVPZmZsaW5lOiBleGNsdWRlT2ZmbGluZVxuICAgIH0sXG4gICAgcHJvcGVydGllcyxcbiAgICBnZW9tZXRyeSxcbiAgICBvbDogb2xSZW5kZXJGZWF0dXJlXG4gIH07XG59XG4vKipcbiAqIENyZWF0ZSBhIGZlYXR1cmUgb2JqZWN0IG91dCBvZiBhbiBPTCBmZWF0dXJlXG4gKiBUaGUgb3V0cHV0IG9iamVjdCBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGZlYXR1cmUgaWQuXG4gKiBAcGFyYW0gb2xGZWF0dXJlIE9MIEZlYXR1cmVcbiAqIEBwYXJhbSBwcm9qZWN0aW9uSW4gT0wgZmVhdHVyZSBwcm9qZWN0aW9uXG4gKiBAcGFyYW0gb2xMYXllciBPTCBMYXllclxuICogQHBhcmFtIHByb2plY3Rpb25PdXQgRmVhdHVyZSBwcm9qZWN0aW9uXG4gKiBAcmV0dXJucyBGZWF0dXJlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZWF0dXJlRnJvbU9sKFxuICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgcHJvamVjdGlvbkluOiBzdHJpbmcsXG4gIG9sTGF5ZXI/OiBPbExheWVyPE9sU291cmNlPixcbiAgcHJvamVjdGlvbk91dCA9ICdFUFNHOjQzMjYnXG4pOiBGZWF0dXJlIHtcbiAgbGV0IHRpdGxlO1xuICBsZXQgZXhjbHVkZTtcbiAgbGV0IGV4Y2x1ZGVPZmZsaW5lO1xuICBsZXQgaWRDb2x1bW47IC8vIGZvciBhcmNnaXNyZXN0IGFuZCB0aWxlYXJjZ2lzcmVzdCBzb3VyY2VcbiAgY29uc3Qgb2xGb3JtYXQgPSBuZXcgT2xGb3JtYXRHZW9KU09OKCk7XG5cbiAgY29uc3Qga2V5cyA9IG9sRmVhdHVyZS5nZXRLZXlzKCkuZmlsdGVyKChrZXk6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAha2V5LnN0YXJ0c1dpdGgoJ18nKSAmJiBrZXkgIT09ICdnZW9tZXRyeSc7XG4gIH0pO1xuICBjb25zdCBwcm9wZXJ0aWVzID0ga2V5cy5yZWR1Y2UoKGFjYzogb2JqZWN0LCBrZXk6IHN0cmluZykgPT4ge1xuICAgIGFjY1trZXldID0gb2xGZWF0dXJlLmdldChrZXkpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICBjb25zdCBnZW9tZXRyeSA9IG9sRm9ybWF0LndyaXRlR2VvbWV0cnlPYmplY3Qob2xGZWF0dXJlLmdldEdlb21ldHJ5KCksIHtcbiAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvbk91dCxcbiAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbkluXG4gIH0pIGFzIEZlYXR1cmVHZW9tZXRyeTtcblxuICBpZiAob2xMYXllcikge1xuICAgIHRpdGxlID0gb2xMYXllci5nZXQoJ3RpdGxlJyk7XG4gICAgY29uc3Qgc291cmNlT3B0aW9ucyA9IG9sTGF5ZXIuZ2V0KCdzb3VyY2VPcHRpb25zJyk7XG4gICAgaWYgKHNvdXJjZU9wdGlvbnMpIHtcbiAgICAgIGV4Y2x1ZGUgPSBzb3VyY2VPcHRpb25zLmV4Y2x1ZGVBdHRyaWJ1dGU7XG4gICAgICBleGNsdWRlT2ZmbGluZSA9IHNvdXJjZU9wdGlvbnMuZXhjbHVkZUF0dHJpYnV0ZU9mZmxpbmU7XG4gICAgICBpZENvbHVtbiA9XG4gICAgICAgIHNvdXJjZU9wdGlvbnMuaWRDb2x1bW4gfHxcbiAgICAgICAgKChzb3VyY2VPcHRpb25zLnR5cGUgPT09ICdhcmNnaXNyZXN0JyB8fCBzb3VyY2VPcHRpb25zLnR5cGUgPT09ICd0aWxlYXJjZ2lzcmVzdCcpID8gJ09CSkVDVElEJyA6IHVuZGVmaW5lZCApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aXRsZSA9IG9sRmVhdHVyZS5nZXQoJ190aXRsZScpO1xuICB9XG4gIGNvbnN0IG1hcFRpdGxlID0gb2xGZWF0dXJlLmdldCgnX21hcFRpdGxlJyk7XG4gIGNvbnN0IGlkID0gb2xGZWF0dXJlLmdldElkKCkgPyBvbEZlYXR1cmUuZ2V0SWQoKSA6IG9sRmVhdHVyZS5nZXQoaWRDb2x1bW4pID8gb2xGZWF0dXJlLmdldChpZENvbHVtbikgOiB1dWlkKCk7XG4gIGNvbnN0IG5ld0ZlYXR1cmUgPSBvbEZlYXR1cmUuZ2V0KCdfbmV3RmVhdHVyZScpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogRkVBVFVSRSxcbiAgICBwcm9qZWN0aW9uOiBwcm9qZWN0aW9uT3V0LFxuICAgIGV4dGVudDogb2xGZWF0dXJlLmdldCgnX2V4dGVudCcpLFxuICAgIG1ldGE6IHtcbiAgICAgIGlkLFxuICAgICAgdGl0bGU6IHRpdGxlID8gdGl0bGUgOiBtYXBUaXRsZSA/IG1hcFRpdGxlIDogaWQsXG4gICAgICBtYXBUaXRsZSxcbiAgICAgIHJldmlzaW9uOiBvbEZlYXR1cmUuZ2V0UmV2aXNpb24oKSxcbiAgICAgIHN0eWxlOiBvbEZlYXR1cmUuZ2V0KCdfc3R5bGUnKSxcbiAgICAgIGV4Y2x1ZGVBdHRyaWJ1dGU6IGV4Y2x1ZGUsXG4gICAgICBleGNsdWRlQXR0cmlidXRlT2ZmbGluZTogZXhjbHVkZU9mZmxpbmVcbiAgICB9LFxuICAgIHByb3BlcnRpZXMsXG4gICAgZ2VvbWV0cnksXG4gICAgb2w6IG9sRmVhdHVyZVxuICB9O1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gT0wgZmVhdHVyZSBleHRlbnQgaW4gaXQncyBtYXAgcHJvamVjdGlvblxuICogQHBhcmFtIG1hcCBNYXBcbiAqIEBwYXJhbSBvbEZlYXR1cmUgT0wgZmVhdHVyZVxuICogQHJldHVybnMgRXh0ZW50IGluIHRoZSBtYXAgcHJvamVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU9sRmVhdHVyZUV4dGVudChcbiAgbWFwOiBJZ29NYXAsXG4gIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+XG4pOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGxldCBvbEV4dGVudCA9IG9sZXh0ZW50LmNyZWF0ZUVtcHR5KCk7XG5cbiAgY29uc3Qgb2xGZWF0dXJlRXh0ZW50ID0gb2xGZWF0dXJlLmdldCgnX2V4dGVudCcpO1xuICBjb25zdCBvbEZlYXR1cmVQcm9qZWN0aW9uID0gb2xGZWF0dXJlLmdldCgnX3Byb2plY3Rpb24nKTtcbiAgaWYgKG9sRmVhdHVyZUV4dGVudCAhPT0gdW5kZWZpbmVkICYmIG9sRmVhdHVyZVByb2plY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIG9sRXh0ZW50ID0gb2xwcm9qLnRyYW5zZm9ybUV4dGVudChcbiAgICAgIG9sRmVhdHVyZUV4dGVudCxcbiAgICAgIG9sRmVhdHVyZVByb2plY3Rpb24sXG4gICAgICBtYXAucHJvamVjdGlvblxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgb2xHZW9tZXRyeSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpO1xuICAgIGlmIChvbEdlb21ldHJ5ICE9PSBudWxsKSB7XG4gICAgICBvbEV4dGVudCA9IG9sR2VvbWV0cnkuZ2V0RXh0ZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9sRXh0ZW50IGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYSBtdWx0aXBsZSBPTCBmZWF0dXJlcyBleHRlbnQgaW4gdGhlaXIgbWFwIHByb2plY3Rpb25cbiAqIEBwYXJhbSBtYXAgTWFwXG4gKiBAcGFyYW0gb2xGZWF0dXJlcyBPTCBmZWF0dXJlc1xuICogQHJldHVybnMgRXh0ZW50IGluIHRoZSBtYXAgcHJvamVjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU9sRmVhdHVyZXNFeHRlbnQoXG4gIG1hcDogSWdvTWFwLFxuICBvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXVxuKTogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBjb25zdCBleHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpO1xuXG4gIG9sRmVhdHVyZXMuZm9yRWFjaCgob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcbiAgICBjb25zdCBmZWF0dXJlRXh0ZW50ID0gY29tcHV0ZU9sRmVhdHVyZUV4dGVudChtYXAsIG9sRmVhdHVyZSk7XG4gICAgb2xleHRlbnQuZXh0ZW5kKGV4dGVudCwgZmVhdHVyZUV4dGVudCk7XG4gIH0pO1xuXG4gIHJldHVybiBleHRlbnQgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbi8qKlxuICogU2NhbGUgYW4gZXh0ZW50LlxuICogQHBhcmFtIGV4dGVudCBFeHRlbnRcbiAqIEBwYXJhbSBTY2FsaW5nIGZhY3RvcnMgZm9yIHRvcCwgcmlnaHQsIGJvdHRvbSBhbmQgbGVmdCBkaXJlY3Rpb25zLCBpbiB0aGF0IG9yZGVyXG4gKiBAcmV0dXJucyBTY2FsZWQgZXh0ZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUV4dGVudChcbiAgZXh0ZW50OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgc2NhbGU6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG4pOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IFt3aWR0aCwgaGVpZ2h0XSA9IG9sZXh0ZW50LmdldFNpemUoZXh0ZW50KTtcbiAgcmV0dXJuIFtcbiAgICBzY2FsZVszXSA/IGV4dGVudFswXSAtIHdpZHRoICogc2NhbGVbM10gOiBleHRlbnRbMF0sXG4gICAgc2NhbGVbMl0gPyBleHRlbnRbMV0gLSBoZWlnaHQgKiBzY2FsZVsyXSA6IGV4dGVudFsxXSxcbiAgICBzY2FsZVsxXSA/IGV4dGVudFsyXSArIHdpZHRoICogc2NhbGVbMV0gOiBleHRlbnRbMl0sXG4gICAgc2NhbGVbMF0gPyBleHRlbnRbM10gKyBoZWlnaHQgKiBzY2FsZVswXSA6IGV4dGVudFszXVxuICBdO1xufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIGZlYXR1cmVzIGFyZSBvdXQgb2Ygdmlldy5cbiAqIElmIGZlYXR1cmVzIGFyZSB0b28gY2xvc2UgdG8gdGhlIGVkZ2UsIHRoZXkgYXJlIGNvbnNpZGVyZWQgb3V0IG9mIHZpZXcuXG4gKiBXZSBkZWZpbmUgdGhlIGVkZ2UgYXMgNSUgb2YgdGhlIGV4dGVudCBzaXplLlxuICogQHBhcmFtIG1hcCBNYXBcbiAqIEBwYXJhbSBmZWF0dXJlc0V4dGVudCBUaGUgZmVhdHVyZXMncyBleHRlbnRcbiAqIEByZXR1cm5zIFJldHVybiB0cnVlIGlmIGZlYXR1cmVzIGFyZSBvdXQgb2Ygdmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmVhdHVyZXNBcmVPdXRPZlZpZXcoXG4gIG1hcDogSWdvTWFwLFxuICBmZWF0dXJlc0V4dGVudDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1cbikge1xuICBjb25zdCBtYXBFeHRlbnQgPSBtYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCk7XG4gIGNvbnN0IGVkZ2VSYXRpbyA9IDAuMDU7XG4gIGNvbnN0IHNjYWxlID0gWy0xLCAtMSwgLTEsIC0xXS5tYXAoeCA9PiB4ICogZWRnZVJhdGlvKTtcbiAgY29uc3Qgdmlld0V4dGVudCA9IHNjYWxlRXh0ZW50KG1hcEV4dGVudCwgc2NhbGUgYXMgW1xuICAgIG51bWJlcixcbiAgICBudW1iZXIsXG4gICAgbnVtYmVyLFxuICAgIG51bWJlclxuICBdKTtcblxuICByZXR1cm4gIW9sZXh0ZW50LmNvbnRhaW5zRXh0ZW50KHZpZXdFeHRlbnQsIGZlYXR1cmVzRXh0ZW50KTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiBmZWF0dXJlcyBhcmUgdG9vIGRlZXAgaW50byB0aGUgdmlldy4gVGhpcyByZXN1bHRzXG4gKiBpbiBmZWF0dXJlcyBiZWluZyB0b28gc21hbGwuXG4gKiBGZWF0dXJlcyBhcmUgY29uc2lkZXJlZCB0b28gc21hbGwgaWYgdGhlaXIgZXh0ZW50IG9jY3VwaWVzIGxlc3MgdGhhblxuICogMSUgb2YgdGhlIG1hcCBleHRlbnQuXG4gKiBAcGFyYW0gbWFwIE1hcFxuICogQHBhcmFtIGZlYXR1cmVzRXh0ZW50IFRoZSBmZWF0dXJlcydzIGV4dGVudFxuICogQHBhcmFtIGFyZWFSYXRpbyBUaGUgZmVhdHVyZXMgZXh0ZW50IHRvIHZpZXcgZXh0ZW50IGFjY2VwdGFibGUgcmF0aW9cbiAqIEByZXR1cm5zIFJldHVybiB0cnVlIGlmIGZlYXR1cmVzIGFyZSB0b28gZGVlcCBpbiB0aGUgdmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmVhdHVyZXNBcmVUb29EZWVwSW5WaWV3KFxuICBtYXA6IElnb01hcCxcbiAgZmVhdHVyZXNFeHRlbnQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBhcmVhUmF0aW8/OiBudW1iZXJcbikge1xuICAvLyBBbiBhcmVhIHJhdGlvIG9mIDAuMDA0IG1lYW5zIHRoYXQgdGhlIGZlYXR1cmUgZXh0ZW50J3Mgd2lkdGggYW5kIGhlaWdodFxuICAvLyBzaG91bGQgYmUgYWJvdXQgMS8xNiBvZiB0aGUgbWFwIGV4dGVudCdzIHdpZHRoIGFuZCBoZWlnaHRcbiAgYXJlYVJhdGlvID0gYXJlYVJhdGlvID8gYXJlYVJhdGlvIDogMC4wMDQ7XG4gIGNvbnN0IG1hcEV4dGVudCA9IG1hcC52aWV3Q29udHJvbGxlci5nZXRFeHRlbnQoKTtcbiAgY29uc3QgbWFwRXh0ZW50QXJlYSA9IG9sZXh0ZW50LmdldEFyZWEobWFwRXh0ZW50KTtcbiAgY29uc3QgZmVhdHVyZXNFeHRlbnRBcmVhID0gb2xleHRlbnQuZ2V0QXJlYShmZWF0dXJlc0V4dGVudCk7XG5cbiAgaWYgKGZlYXR1cmVzRXh0ZW50QXJlYSA9PT0gMCAmJiBtYXAudmlld0NvbnRyb2xsZXIuZ2V0Wm9vbSgpID4gMTMpIHtcbiAgICAvLyBJbiBjYXNlIGl0J3MgYSBwb2ludFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmZWF0dXJlc0V4dGVudEFyZWEgLyBtYXBFeHRlbnRBcmVhIDwgYXJlYVJhdGlvO1xufVxuXG4vKipcbiAqIEZpdCB2aWV3IHRvIGluY2x1ZGUgdGhlIGZlYXR1cmVzIGV4dGVudC5cbiAqIEJ5IGRlZmF1bHQsIHRoaXMgbWV0aG9kIHdpbGwgbGV0IHRoZSBmZWF0dXJlcyBvY2N1cHkgYWJvdXQgNTAlIG9mIHRoZSB2aWV3cG9ydC5cbiAqIEBwYXJhbSBtYXAgTWFwXG4gKiBAcGFyYW0gb2xGZWF0dXJlcyBPTCBmZWF0dXJlc1xuICogQHBhcmFtIG1vdGlvbiBUbyBtb3Rpb24gdG8gdGhlIG5ldyBtYXAgdmlld1xuICogQHBhcmFtIHNjYWxlIElmIHRoaXMgaXMgZGVmaW5lZCwgdGhlIG9yaWdpbmFsIHZpZXcgd2lsbCBiZSBzY2FsZWRcbiAqICBieSB0aGF0IGZhY3RvciBiZWZvcmUgYW55IGxvZ2ljIGlzIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlVG9PbEZlYXR1cmVzKFxuICBtYXA6IElnb01hcCxcbiAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gIG1vdGlvbjogRmVhdHVyZU1vdGlvbiA9IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCxcbiAgc2NhbGU/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgYXJlYVJhdGlvPzogbnVtYmVyXG4pIHtcbiAgY29uc3QgZmVhdHVyZXNFeHRlbnQgPSBjb21wdXRlT2xGZWF0dXJlc0V4dGVudChtYXAsIG9sRmVhdHVyZXMpO1xuICBsZXQgdmlld0V4dGVudCA9IGZlYXR1cmVzRXh0ZW50O1xuICBpZiAoc2NhbGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHZpZXdFeHRlbnQgPSBzY2FsZUV4dGVudCh2aWV3RXh0ZW50LCBzY2FsZSk7XG4gIH1cblxuICBpZiAobW90aW9uID09PSBGZWF0dXJlTW90aW9uLlpvb20pIHtcbiAgICBtYXAudmlld0NvbnRyb2xsZXIuem9vbVRvRXh0ZW50KHZpZXdFeHRlbnQpO1xuICB9IGVsc2UgaWYgKG1vdGlvbiA9PT0gRmVhdHVyZU1vdGlvbi5Nb3ZlKSB7XG4gICAgbWFwLnZpZXdDb250cm9sbGVyLm1vdmVUb0V4dGVudCh2aWV3RXh0ZW50KTtcbiAgfSBlbHNlIGlmIChtb3Rpb24gPT09IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCkge1xuICAgIGlmIChcbiAgICAgIGZlYXR1cmVzQXJlT3V0T2ZWaWV3KG1hcCwgZmVhdHVyZXNFeHRlbnQpIHx8XG4gICAgICBmZWF0dXJlc0FyZVRvb0RlZXBJblZpZXcobWFwLCBmZWF0dXJlc0V4dGVudCwgYXJlYVJhdGlvKVxuICAgICkge1xuICAgICAgbWFwLnZpZXdDb250cm9sbGVyLnpvb21Ub0V4dGVudCh2aWV3RXh0ZW50KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBIaWRlIGFuIE9MIGZlYXR1cmVcbiAqIEBwYXJhbSBvbEZlYXR1cmUgT0wgZmVhdHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZU9sRmVhdHVyZShvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5Pikge1xuICBvbEZlYXR1cmUuc2V0U3R5bGUobmV3IG9sc3R5bGUuU3R5bGUoe30pKTtcbn1cblxuLyoqXG4gKiBUcnkgdG8gYmluZCBhIGxheWVyIHRvIGEgc3RvcmUgaWYgbm9uZSBpcyBib3VuZCBhbHJlYWR5LlxuICogVGhlIGxheWVyIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgc3RvcmUncyBtYXAuXG4gKiBJZiBubyBsYXllciBpcyBnaXZlbiB0byB0aGF0IGZ1bmN0aW9uLCBhIGJhc2ljIG9uZSB3aWxsIGJlIGNyZWF0ZWQuXG4gKiBAcGFyYW0gc3RvcmUgVGhlIHN0b3JlIHRvIGJpbmQgdGhlIGxheWVyXG4gKiBAcGFyYW0gbGF5ZXIgQW4gb3B0aW9uYWwgVmVjdG9yTGF5ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyeUJpbmRTdG9yZUxheWVyKHN0b3JlOiBGZWF0dXJlU3RvcmUsIGxheWVyPzogVmVjdG9yTGF5ZXIpIHtcbiAgaWYgKHN0b3JlLmxheWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoc3RvcmUubGF5ZXIubWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0b3JlLm1hcC5hZGRMYXllcihzdG9yZS5sYXllcik7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxheWVyID0gbGF5ZXJcbiAgICA/IGxheWVyXG4gICAgOiBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpXG4gICAgICB9KTtcbiAgc3RvcmUuYmluZExheWVyKGxheWVyKTtcbiAgaWYgKHN0b3JlLmxheWVyLm1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RvcmUubWFwLmFkZExheWVyKHN0b3JlLmxheWVyKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbXB1dGUgYSBkaWZmIGJldHdlZW4gYSBzb3VyY2UgYXJyYXkgb2YgT2wgZmVhdHVyZXMgYW5kIGEgdGFyZ2V0IGFycmF5XG4gKiBAcGFyYW0gc291cmNlIFNvdXJjZSBhcnJheSBvZiBPTCBmZWF0dXJlc1xuICogQHBhcmFtIHN0YXJnZXQgVGFyZ2V0IGFycmF5IG9mIE9MIGZlYXR1cmVzXG4gKiBAcmV0dXJucyBGZWF0dXJlcyB0byBhZGQgYW5kIHJlbW92ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU9sRmVhdHVyZXNEaWZmKFxuICBzb3VyY2U6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICB0YXJnZXQ6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdXG4pOiB7XG4gIGFkZDogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W107XG4gIHJlbW92ZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W107XG59IHtcbiAgY29uc3Qgb2xGZWF0dXJlc01hcCA9IG5ldyBNYXAoKTtcbiAgdGFyZ2V0LmZvckVhY2goKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgb2xGZWF0dXJlc01hcC5zZXQob2xGZWF0dXJlLmdldElkKCksIG9sRmVhdHVyZSk7XG4gIH0pO1xuXG4gIGNvbnN0IG9sRmVhdHVyZXNUb1JlbW92ZSA9IFtdO1xuICBzb3VyY2UuZm9yRWFjaCgob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcbiAgICBjb25zdCBuZXdPbEZlYXR1cmUgPSBvbEZlYXR1cmVzTWFwLmdldChvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgaWYgKG5ld09sRmVhdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvbEZlYXR1cmVzVG9SZW1vdmUucHVzaChvbEZlYXR1cmUpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBuZXdPbEZlYXR1cmUuZ2V0KCdfZW50aXR5UmV2aXNpb24nKSAhPT0gb2xGZWF0dXJlLmdldCgnX2VudGl0eVJldmlzaW9uJylcbiAgICApIHtcbiAgICAgIG9sRmVhdHVyZXNUb1JlbW92ZS5wdXNoKG9sRmVhdHVyZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sRmVhdHVyZXNNYXAuZGVsZXRlKG5ld09sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IG9sRmVhdHVyZXNUb0FkZElkcyA9IEFycmF5LmZyb20ob2xGZWF0dXJlc01hcC5rZXlzKCkpO1xuICBjb25zdCBvbEZlYXR1cmVzVG9BZGQgPSB0YXJnZXQuZmlsdGVyKChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgIHJldHVybiBvbEZlYXR1cmVzVG9BZGRJZHMuaW5kZXhPZihvbEZlYXR1cmUuZ2V0SWQoKSkgPj0gMDtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGQ6IG9sRmVhdHVyZXNUb0FkZCxcbiAgICByZW1vdmU6IG9sRmVhdHVyZXNUb1JlbW92ZVxuICB9O1xufVxuIl19
@@ -1,6 +1,7 @@
1
+ import * as olextent from 'ol/extent';
1
2
  import { getEntityId, EntityStore } from '@igo2/common';
2
3
  import { FeatureMotion } from './feature.enums';
3
- import { computeOlFeaturesDiff, featureFromOl, featureToOl, moveToOlFeatures } from './feature.utils';
4
+ import { computeOlFeaturesDiff, featureFromOl, featureToOl, moveToOlFeatures, computeOlFeaturesExtent } from './feature.utils';
4
5
  /**
5
6
  * The class is a specialized version of an EntityStore that stores
6
7
  * features and the map layer to display them on. Synchronization
@@ -89,6 +90,17 @@ export class FeatureStore extends EntityStore {
89
90
  moveToOlFeatures(this.map, olFeatures, motion, viewScale, areaRatio);
90
91
  }
91
92
  }
93
+ setLayerExtent() {
94
+ let features = this.entities$.getValue();
95
+ let extent = olextent.createEmpty();
96
+ let olFeatures = [];
97
+ features.forEach((feature) => {
98
+ olFeatures.push(featureToOl(feature, this.map.projection));
99
+ });
100
+ const featuresExtent = computeOlFeaturesExtent(this.map, olFeatures);
101
+ olextent.extend(extent, featuresExtent);
102
+ this.layer.setExtent(extent);
103
+ }
92
104
  /**
93
105
  * Add features to the the layer
94
106
  * @param features Openlayers feature objects
@@ -109,4 +121,4 @@ export class FeatureStore extends EntityStore {
109
121
  });
110
122
  }
111
123
  }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9mZWF0dXJlL3NoYXJlZC9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQ0wsV0FBVyxFQUVYLFdBQVcsRUFDWixNQUFNLGNBQWMsQ0FBQztBQU10QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0Rzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFlBQTBDLFNBQVEsV0FBYztJQW1CM0UsWUFBWSxRQUFhLEVBQUUsT0FBNEI7UUFDckQsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDekIsQ0FBQztJQVZEOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQStCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM3RSxDQUFDO0lBT0Q7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxLQUFrQjtRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUNkLFFBQW1CLEVBQ25CLFNBQXdCLGFBQWEsQ0FBQyxPQUFPLEVBQzdDLFNBQTRDLEVBQzVDLFNBQWtCLEVBQ2xCLEtBQThCO1FBRTlCLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxV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O0lBQ3pDLENBQUM7SUFFRDs7O09BR0c7SUFDSyx5QkFBeUIsQ0FBQyxVQUFtQztRQUNuRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBZ0MsRUFBRSxFQUFFO1lBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPbEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuXG5pbXBvcnQge1xuICBnZXRFbnRpdHlJZCxcbiAgRW50aXR5S2V5LFxuICBFbnRpdHlTdG9yZVxufSBmcm9tICdAaWdvMi9jb21tb24nO1xuXG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2UnO1xuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllcic7XG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAnO1xuXG5pbXBvcnQgeyBGZWF0dXJlTW90aW9uIH0gZnJvbSAnLi9mZWF0dXJlLmVudW1zJztcbmltcG9ydCB7IEZlYXR1cmUsIEZlYXR1cmVTdG9yZU9wdGlvbnMgfSBmcm9tICcuL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjb21wdXRlT2xGZWF0dXJlc0RpZmYsIGZlYXR1cmVGcm9tT2wsIGZlYXR1cmVUb09sLCBtb3ZlVG9PbEZlYXR1cmVzIH0gZnJvbSAnLi9mZWF0dXJlLnV0aWxzJztcblxuLyoqXG4gKiBUaGUgY2xhc3MgaXMgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGFuIEVudGl0eVN0b3JlIHRoYXQgc3RvcmVzXG4gKiBmZWF0dXJlcyBhbmQgdGhlIG1hcCBsYXllciB0byBkaXNwbGF5IHRoZW0gb24uIFN5bmNocm9uaXphdGlvblxuICogYmV0d2VlbiB0aGUgc3RvcmUgYW5kIHRoZSBsYXllciBpcyBoYW5kbGVkIGJ5IHN0cmF0ZWdpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBGZWF0dXJlU3RvcmU8VCBleHRlbmRzIEZlYXR1cmUgPSBGZWF0dXJlPiBleHRlbmRzIEVudGl0eVN0b3JlPFQ+IHtcblxuICAvKipcbiAgICogVmVjdG9yIGxheWVyIHRvIGRpc3BsYXkgdGhlIGZlYXR1cmVzIG9uXG4gICAqL1xuICBsYXllcjogVmVjdG9yTGF5ZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXAgdGhlIGxheWVyIGlzIGJvdW5kIHRvXG4gICAqL1xuICByZWFkb25seSBtYXA6IElnb01hcDtcblxuICAvKipcbiAgICogVGhlIGxheWVyJ3MgZGF0YSBzb3VyY2VcbiAgICovXG4gIGdldCBzb3VyY2UoKTogRmVhdHVyZURhdGFTb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLmxheWVyID8gdGhpcy5sYXllci5kYXRhU291cmNlIGFzIEZlYXR1cmVEYXRhU291cmNlIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZW50aXRpZXM6IFRbXSwgb3B0aW9uczogRmVhdHVyZVN0b3JlT3B0aW9ucykge1xuICAgIHN1cGVyKGVudGl0aWVzLCBvcHRpb25zKTtcbiAgICB0aGlzLm1hcCA9IG9wdGlvbnMubWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgdGhpcyBzdG9yZSB0byBhIHZlY3RvciBsYXllclxuICAgKiBAcGFyYW0gbGF5ZXIgVmVjdG9yIGxheWVyXG4gICAqIEByZXR1cm5zIEZlYXR1cmUgc3RvcmVcbiAgICovXG4gIGJpbmRMYXllcihsYXllcjogVmVjdG9yTGF5ZXIpOiBGZWF0dXJlU3RvcmUge1xuICAgIHRoaXMubGF5ZXIgPSBsYXllcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGxheWVyJ3MgZmVhdHVyZXMgYW5kIHBlcmZvcm0gYSBtb3Rpb24gdG8gbWFrZSB0aGVtIHZpc2libGUuIFN0cmF0ZWdpZXNcbiAgICogbWFrZSBleHRlbnNpdmUgdXNlIG9mIHRoYXQgbWV0aG9kLlxuICAgKiBAcGFyYW0gZmVhdHVyZXMgRmVhdHVyZXNcbiAgICogQHBhcmFtIG1vdGlvbiBPcHRpb25hbDogVGhlIHR5cGUgb2YgbW90aW9uIHRvIHBlcmZvcm1cbiAgICovXG4gIHNldExheWVyRmVhdHVyZXMoXG4gICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcbiAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24gPSBGZWF0dXJlTW90aW9uLkRlZmF1bHQsXG4gICAgdmlld1NjYWxlPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gICAgYXJlYVJhdGlvPzogbnVtYmVyLFxuICAgIGdldElkPzogKEZlYXR1cmUpID0+IEVudGl0eUtleVxuICApIHtcbiAgICBnZXRJZCA9IGdldElkID8gZ2V0SWQgOiBnZXRFbnRpdHlJZDtcbiAgICB0aGlzLmNoZWNrTGF5ZXIoKTtcblxuICAgIGNvbnN0IG9sRmVhdHVyZXMgPSBmZWF0dXJlc1xuICAgICAgLm1hcCgoZmVhdHVyZTogRmVhdHVyZSkgPT4gZmVhdHVyZVRvT2woZmVhdHVyZSwgdGhpcy5tYXAucHJvamVjdGlvbiwgZ2V0SWQpKTtcbiAgICB0aGlzLnNldExheWVyT2xGZWF0dXJlcyhvbEZlYXR1cmVzLCBtb3Rpb24sIHZpZXdTY2FsZSwgYXJlYVJhdGlvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN0b3JlJ3MgZmVhdHVyZXMgZnJvbSBhbiBhcnJheSBvZiBPTCBmZWF0dXJlcy5cbiAgICogQHBhcmFtIG9sRmVhdHVyZXMgT2wgZmVhdHVyZXNcbiAgICovXG4gIHNldFN0b3JlT2xGZWF0dXJlcyhvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSkge1xuICAgIHRoaXMuY2hlY2tMYXllcigpO1xuXG4gICAgY29uc3QgZmVhdHVyZXMgPSBvbEZlYXR1cmVzLm1hcCgob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcbiAgICAgIG9sRmVhdHVyZS5zZXQoJ19mZWF0dXJlU3RvcmUnLCB0aGlzLCB0cnVlKTtcbiAgICAgIHJldHVybiBmZWF0dXJlRnJvbU9sKG9sRmVhdHVyZSwgdGhpcy5sYXllci5tYXAucHJvamVjdGlvbik7XG4gICAgfSk7XG4gICAgdGhpcy5sb2FkKGZlYXR1cmVzIGFzIFRbXSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFsbCBmZWF0dXJlcyBmcm9tIHRoZSBsYXllclxuICAgKi9cbiAgY2xlYXJMYXllcigpIHtcbiAgICB0aGlzLmNoZWNrTGF5ZXIoKTtcbiAgICB0aGlzLnNvdXJjZS5vbC5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdldGhlciBhIGxheWVyIGlzIGJvdW5kIG9yIG5vdCBhbmQgdGhyb3cgYW4gZXJyb3IgaWYgbm90LlxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0xheWVyKCkge1xuICAgIGlmICh0aGlzLmxheWVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBGZWF0dXJlU3RvcmUgaXMgbm90IGJvdW5kIHRvIGEgbGF5ZXIuJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbGF5ZXIncyBmZWF0dXJlcyBhbmQgcGVyZm9ybSBhIG1vdGlvbiB0byBtYWtlIHRoZW0gdmlzaWJsZS5cbiAgICogQHBhcmFtIGZlYXR1cmVzIE9wZW5sYXllcnMgZmVhdHVyZSBvYmplY3RzXG4gICAqIEBwYXJhbSBtb3Rpb24gT3B0aW9uYWw6IFRoZSB0eXBlIG9mIG1vdGlvbiB0byBwZXJmb3JtXG4gICAqL1xuICBwdWJsaWMgc2V0TGF5ZXJPbEZlYXR1cmVzKFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbiA9IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCxcbiAgICB2aWV3U2NhbGU/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBhcmVhUmF0aW8/OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3Qgb2xTb3VyY2UgPSB0aGlzLmxheWVyLm9sLmdldFNvdXJjZSgpO1xuICAgIGNvbnN0IGRpZmYgPSBjb21wdXRlT2xGZWF0dXJlc0RpZmYob2xTb3VyY2UuZ2V0RmVhdHVyZXMoKSwgb2xGZWF0dXJlcyk7XG4gICAgaWYgKGRpZmYucmVtb3ZlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVtb3ZlT2xGZWF0dXJlc0Zyb21MYXllcihkaWZmLnJlbW92ZSk7XG4gICAgfVxuXG4gICAgaWYgKGRpZmYuYWRkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYWRkT2xGZWF0dXJlc1RvTGF5ZXIoZGlmZi5hZGQpO1xuICAgIH1cblxuICAgIGlmIChkaWZmLmFkZC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJZiBmZWF0dXJlcyBhcmUgYWRkZWQsIGRvIGEgbW90aW9uIHRvd2FyZCB0aGUgbmV3bHkgYWRkZWQgZmVhdHVyZXNcbiAgICAgIG1vdmVUb09sRmVhdHVyZXModGhpcy5tYXAsIGRpZmYuYWRkLCBtb3Rpb24sIHZpZXdTY2FsZSwgYXJlYVJhdGlvKTtcbiAgICB9IGVsc2UgaWYgKGRpZmYucmVtb3ZlLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEVsc2UsIGRvIGEgbW90aW9uIHRvd2FyZCBhbGwgdGhlIGZlYXR1cmVzXG4gICAgICBtb3ZlVG9PbEZlYXR1cmVzKHRoaXMubWFwLCBvbEZlYXR1cmVzLCBtb3Rpb24sIHZpZXdTY2FsZSwgYXJlYVJhdGlvKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGZlYXR1cmVzIHRvIHRoZSB0aGUgbGF5ZXJcbiAgICogQHBhcmFtIGZlYXR1cmVzIE9wZW5sYXllcnMgZmVhdHVyZSBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIGFkZE9sRmVhdHVyZXNUb0xheWVyKG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdKSB7XG4gICAgb2xGZWF0dXJlcy5mb3JFYWNoKChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgICAgb2xGZWF0dXJlLnNldCgnX2ZlYXR1cmVTdG9yZScsIHRoaXMsIHRydWUpO1xuICAgIH0pO1xuICAgIHRoaXMuc291cmNlLm9sLmFkZEZlYXR1cmVzKG9sRmVhdHVyZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBmZWF0dXJlcyBmcm9tIHRoZSB0aGUgbGF5ZXJcbiAgICogQHBhcmFtIGZlYXR1cmVzIE9wZW5sYXllcnMgZmVhdHVyZSBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZU9sRmVhdHVyZXNGcm9tTGF5ZXIob2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10pIHtcbiAgICBvbEZlYXR1cmVzLmZvckVhY2goKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgICB0aGlzLnNvdXJjZS5vbC5yZW1vdmVGZWF0dXJlKG9sRmVhdHVyZSk7XG4gICAgfSk7XG4gIH1cblxufVxuIl19
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9mZWF0dXJlL3NoYXJlZC9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQ0wsV0FBVyxFQUVYLFdBQVcsRUFDWixNQUFNLGNBQWMsQ0FBQztBQU10QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvSDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFlBQTBDLFNBQVEsV0FBYztJQW1CM0UsWUFBWSxRQUFhLEVBQUUsT0FBNEI7UUFDckQsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDekIsQ0FBQztJQVZEOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQStCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM3RSxDQUFDO0lBT0Q7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxLQUFrQjtRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUNkLFFBQW1CLEVBQ25CLFNBQXdCLGFBQWEsQ0FBQyxPQUFPLEVBQzdDLFNBQTRDLEVBQzVDLFNBQWtCLEVBQ2xCLEtBQThCO1FBRTlCLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFD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QU8sRUFBRSxFQUFFO1lBQzNCLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JFLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRDs7O09BR0c7SUFDSyxvQkFBb0IsQ0FBQyxVQUFtQztRQUM5RCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBZ0MsRUFBRSxFQUFFO1lBQ3RELFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0sseUJBQXlCLENBQUMsVUFBbUM7UUFDbkUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQWdDLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9sR2VvbWV0cnkgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCAqIGFzIG9sZXh0ZW50IGZyb20gJ29sL2V4dGVudCc7XG5cbmltcG9ydCB7XG4gIGdldEVudGl0eUlkLFxuICBFbnRpdHlLZXksXG4gIEVudGl0eVN0b3JlXG59IGZyb20gJ0BpZ28yL2NvbW1vbic7XG5cbmltcG9ydCB7IEZlYXR1cmVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZSc7XG5pbXBvcnQgeyBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyJztcbmltcG9ydCB7IElnb01hcCwgTWFwRXh0ZW50IH0gZnJvbSAnLi4vLi4vbWFwJztcblxuaW1wb3J0IHsgRmVhdHVyZU1vdGlvbiB9IGZyb20gJy4vZmVhdHVyZS5lbnVtcyc7XG5pbXBvcnQgeyBGZWF0dXJlLCBGZWF0dXJlU3RvcmVPcHRpb25zIH0gZnJvbSAnLi9mZWF0dXJlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgY29tcHV0ZU9sRmVhdHVyZXNEaWZmLCBmZWF0dXJlRnJvbU9sLCBmZWF0dXJlVG9PbCwgbW92ZVRvT2xGZWF0dXJlcywgY29tcHV0ZU9sRmVhdHVyZXNFeHRlbnQgfSBmcm9tICcuL2ZlYXR1cmUudXRpbHMnO1xuXG4vKipcbiAqIFRoZSBjbGFzcyBpcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYW4gRW50aXR5U3RvcmUgdGhhdCBzdG9yZXNcbiAqIGZlYXR1cmVzIGFuZCB0aGUgbWFwIGxheWVyIHRvIGRpc3BsYXkgdGhlbSBvbi4gU3luY2hyb25pemF0aW9uXG4gKiBiZXR3ZWVuIHRoZSBzdG9yZSBhbmQgdGhlIGxheWVyIGlzIGhhbmRsZWQgYnkgc3RyYXRlZ2llcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEZlYXR1cmVTdG9yZTxUIGV4dGVuZHMgRmVhdHVyZSA9IEZlYXR1cmU+IGV4dGVuZHMgRW50aXR5U3RvcmU8VD4ge1xuXG4gIC8qKlxuICAgKiBWZWN0b3IgbGF5ZXIgdG8gZGlzcGxheSB0aGUgZmVhdHVyZXMgb25cbiAgICovXG4gIGxheWVyOiBWZWN0b3JMYXllcjtcblxuICAvKipcbiAgICogVGhlIG1hcCB0aGUgbGF5ZXIgaXMgYm91bmQgdG9cbiAgICovXG4gIHJlYWRvbmx5IG1hcDogSWdvTWFwO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF5ZXIncyBkYXRhIHNvdXJjZVxuICAgKi9cbiAgZ2V0IHNvdXJjZSgpOiBGZWF0dXJlRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMubGF5ZXIgPyB0aGlzLmxheWVyLmRhdGFTb3VyY2UgYXMgRmVhdHVyZURhdGFTb3VyY2UgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihlbnRpdGllczogVFtdLCBvcHRpb25zOiBGZWF0dXJlU3RvcmVPcHRpb25zKSB7XG4gICAgc3VwZXIoZW50aXRpZXMsIG9wdGlvbnMpO1xuICAgIHRoaXMubWFwID0gb3B0aW9ucy5tYXA7XG4gIH1cblxuICAvKipcbiAgICogQmluZCB0aGlzIHN0b3JlIHRvIGEgdmVjdG9yIGxheWVyXG4gICAqIEBwYXJhbSBsYXllciBWZWN0b3IgbGF5ZXJcbiAgICogQHJldHVybnMgRmVhdHVyZSBzdG9yZVxuICAgKi9cbiAgYmluZExheWVyKGxheWVyOiBWZWN0b3JMYXllcik6IEZlYXR1cmVTdG9yZSB7XG4gICAgdGhpcy5sYXllciA9IGxheWVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbGF5ZXIncyBmZWF0dXJlcyBhbmQgcGVyZm9ybSBhIG1vdGlvbiB0byBtYWtlIHRoZW0gdmlzaWJsZS4gU3RyYXRlZ2llc1xuICAgKiBtYWtlIGV4dGVuc2l2ZSB1c2Ugb2YgdGhhdCBtZXRob2QuXG4gICAqIEBwYXJhbSBmZWF0dXJlcyBGZWF0dXJlc1xuICAgKiBAcGFyYW0gbW90aW9uIE9wdGlvbmFsOiBUaGUgdHlwZSBvZiBtb3Rpb24gdG8gcGVyZm9ybVxuICAgKi9cbiAgc2V0TGF5ZXJGZWF0dXJlcyhcbiAgICBmZWF0dXJlczogRmVhdHVyZVtdLFxuICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbiA9IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCxcbiAgICB2aWV3U2NhbGU/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBhcmVhUmF0aW8/OiBudW1iZXIsXG4gICAgZ2V0SWQ/OiAoRmVhdHVyZSkgPT4gRW50aXR5S2V5XG4gICkge1xuICAgIGdldElkID0gZ2V0SWQgPyBnZXRJZCA6IGdldEVudGl0eUlkO1xuICAgIHRoaXMuY2hlY2tMYXllcigpO1xuXG4gICAgY29uc3Qgb2xGZWF0dXJlcyA9IGZlYXR1cmVzXG4gICAgICAubWFwKChmZWF0dXJlOiBGZWF0dXJlKSA9PiBmZWF0dXJlVG9PbChmZWF0dXJlLCB0aGlzLm1hcC5wcm9qZWN0aW9uLCBnZXRJZCkpO1xuICAgIHRoaXMuc2V0TGF5ZXJPbEZlYXR1cmVzKG9sRmVhdHVyZXMsIG1vdGlvbiwgdmlld1NjYWxlLCBhcmVhUmF0aW8pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3RvcmUncyBmZWF0dXJlcyBmcm9tIGFuIGFycmF5IG9mIE9MIGZlYXR1cmVzLlxuICAgKiBAcGFyYW0gb2xGZWF0dXJlcyBPbCBmZWF0dXJlc1xuICAgKi9cbiAgc2V0U3RvcmVPbEZlYXR1cmVzKG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdKSB7XG4gICAgdGhpcy5jaGVja0xheWVyKCk7XG5cbiAgICBjb25zdCBmZWF0dXJlcyA9IG9sRmVhdHVyZXMubWFwKChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgICAgb2xGZWF0dXJlLnNldCgnX2ZlYXR1cmVTdG9yZScsIHRoaXMsIHRydWUpO1xuICAgICAgcmV0dXJuIGZlYXR1cmVGcm9tT2wob2xGZWF0dXJlLCB0aGlzLmxheWVyLm1hcC5wcm9qZWN0aW9uKTtcbiAgICB9KTtcbiAgICB0aGlzLmxvYWQoZmVhdHVyZXMgYXMgVFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGZlYXR1cmVzIGZyb20gdGhlIGxheWVyXG4gICAqL1xuICBjbGVhckxheWVyKCkge1xuICAgIHRoaXMuY2hlY2tMYXllcigpO1xuICAgIHRoaXMuc291cmNlLm9sLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2V0aGVyIGEgbGF5ZXIgaXMgYm91bmQgb3Igbm90IGFuZCB0aHJvdyBhbiBlcnJvciBpZiBub3QuXG4gICAqL1xuICBwcml2YXRlIGNoZWNrTGF5ZXIoKSB7XG4gICAgaWYgKHRoaXMubGF5ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIEZlYXR1cmVTdG9yZSBpcyBub3QgYm91bmQgdG8gYSBsYXllci4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBsYXllcidzIGZlYXR1cmVzIGFuZCBwZXJmb3JtIGEgbW90aW9uIHRvIG1ha2UgdGhlbSB2aXNpYmxlLlxuICAgKiBAcGFyYW0gZmVhdHVyZXMgT3BlbmxheWVycyBmZWF0dXJlIG9iamVjdHNcbiAgICogQHBhcmFtIG1vdGlvbiBPcHRpb25hbDogVGhlIHR5cGUgb2YgbW90aW9uIHRvIHBlcmZvcm1cbiAgICovXG4gIHB1YmxpYyBzZXRMYXllck9sRmVhdHVyZXMoXG4gICAgb2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10sXG4gICAgbW90aW9uOiBGZWF0dXJlTW90aW9uID0gRmVhdHVyZU1vdGlvbi5EZWZhdWx0LFxuICAgIHZpZXdTY2FsZT86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgIGFyZWFSYXRpbz86IG51bWJlclxuICApIHtcbiAgICBjb25zdCBvbFNvdXJjZSA9IHRoaXMubGF5ZXIub2wuZ2V0U291cmNlKCk7XG4gICAgY29uc3QgZGlmZiA9IGNvbXB1dGVPbEZlYXR1cmVzRGlmZihvbFNvdXJjZS5nZXRGZWF0dXJlcygpLCBvbEZlYXR1cmVzKTtcbiAgICBpZiAoZGlmZi5yZW1vdmUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZW1vdmVPbEZlYXR1cmVzRnJvbUxheWVyKGRpZmYucmVtb3ZlKTtcbiAgICB9XG5cbiAgICBpZiAoZGlmZi5hZGQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hZGRPbEZlYXR1cmVzVG9MYXllcihkaWZmLmFkZCk7XG4gICAgfVxuXG4gICAgaWYgKGRpZmYuYWRkLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIElmIGZlYXR1cmVzIGFyZSBhZGRlZCwgZG8gYSBtb3Rpb24gdG93YXJkIHRoZSBuZXdseSBhZGRlZCBmZWF0dXJlc1xuICAgICAgbW92ZVRvT2xGZWF0dXJlcyh0aGlzLm1hcCwgZGlmZi5hZGQsIG1vdGlvbiwgdmlld1NjYWxlLCBhcmVhUmF0aW8pO1xuICAgIH0gZWxzZSBpZiAoZGlmZi5yZW1vdmUubGVuZ3RoID4gMCkge1xuICAgICAgLy8gRWxzZSwgZG8gYSBtb3Rpb24gdG93YXJkIGFsbCB0aGUgZmVhdHVyZXNcbiAgICAgIG1vdmVUb09sRmVhdHVyZXModGhpcy5tYXAsIG9sRmVhdHVyZXMsIG1vdGlvbiwgdmlld1NjYWxlLCBhcmVhUmF0aW8pO1xuICAgIH1cbiAgfVxuXG4gIHNldExheWVyRXh0ZW50KCk6IHZvaWQge1xuICAgIGxldCBmZWF0dXJlcyA9IHRoaXMuZW50aXRpZXMkLmdldFZhbHVlKCk7XG4gICAgbGV0IGV4dGVudCA9IG9sZXh0ZW50LmNyZWF0ZUVtcHR5KCkgYXMgTWFwRXh0ZW50O1xuICAgIGxldCBvbEZlYXR1cmVzID0gW107XG5cbiAgICBmZWF0dXJlcy5mb3JFYWNoKChmZWF0dXJlKSA9PiB7XG4gICAgICBvbEZlYXR1cmVzLnB1c2goZmVhdHVyZVRvT2woZmVhdHVyZSwgdGhpcy5tYXAucHJvamVjdGlvbikpO1xuICAgIH0pO1xuICAgIGNvbnN0IGZlYXR1cmVzRXh0ZW50ID0gY29tcHV0ZU9sRmVhdHVyZXNFeHRlbnQodGhpcy5tYXAsIG9sRmVhdHVyZXMpO1xuICAgIG9sZXh0ZW50LmV4dGVuZChleHRlbnQsIGZlYXR1cmVzRXh0ZW50KTtcbiAgICB0aGlzLmxheWVyLnNldEV4dGVudChleHRlbnQpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgZmVhdHVyZXMgdG8gdGhlIHRoZSBsYXllclxuICAgKiBAcGFyYW0gZmVhdHVyZXMgT3BlbmxheWVycyBmZWF0dXJlIG9iamVjdHNcbiAgICovXG4gIHByaXZhdGUgYWRkT2xGZWF0dXJlc1RvTGF5ZXIob2xGZWF0dXJlczogT2xGZWF0dXJlPE9sR2VvbWV0cnk+W10pIHtcbiAgICBvbEZlYXR1cmVzLmZvckVhY2goKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgICBvbEZlYXR1cmUuc2V0KCdfZmVhdHVyZVN0b3JlJywgdGhpcywgdHJ1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5zb3VyY2Uub2wuYWRkRmVhdHVyZXMob2xGZWF0dXJlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGZlYXR1cmVzIGZyb20gdGhlIHRoZSBsYXllclxuICAgKiBAcGFyYW0gZmVhdHVyZXMgT3BlbmxheWVycyBmZWF0dXJlIG9iamVjdHNcbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlT2xGZWF0dXJlc0Zyb21MYXllcihvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSkge1xuICAgIG9sRmVhdHVyZXMuZm9yRWFjaCgob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcbiAgICAgIHRoaXMuc291cmNlLm9sLnJlbW92ZUZlYXR1cmUob2xGZWF0dXJlKTtcbiAgICB9KTtcbiAgfVxuXG59XG4iXX0=