@igo2/geo 1.13.4 → 1.14.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 (73) hide show
  1. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +4 -1
  2. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
  3. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  4. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  5. package/esm2020/lib/draw/draw/draw-popup.component.mjs +562 -32
  6. package/esm2020/lib/draw/draw/draw.component.mjs +360 -130
  7. package/esm2020/lib/draw/draw/draw.module.mjs +12 -4
  8. package/esm2020/lib/draw/shared/draw-style.service.mjs +2 -2
  9. package/esm2020/lib/draw/shared/draw.enum.mjs +14 -1
  10. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  11. package/esm2020/lib/draw/shared/draw.utils.mjs +19 -1
  12. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +43 -16
  13. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +21 -8
  14. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +12 -2
  15. package/esm2020/lib/geometry/shared/controls/draw.mjs +53 -10
  16. package/esm2020/lib/import-export/shared/export.service.mjs +2 -2
  17. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  18. package/esm2020/lib/import-export/shared/import.service.mjs +26 -6
  19. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
  20. package/esm2020/lib/map/shared/hover-feature.directive.mjs +2 -2
  21. package/esm2020/lib/map/shared/map.utils.mjs +4 -1
  22. package/esm2020/lib/map/shared/mapOffline.directive.mjs +7 -7
  23. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +33 -4
  24. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  25. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +12 -12
  26. package/esm2020/lib/print/shared/geopdf.mjs +58 -0
  27. package/esm2020/lib/print/shared/index.mjs +2 -1
  28. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  29. package/esm2020/lib/print/shared/print.service.mjs +118 -64
  30. package/esm2020/lib/query/shared/query.service.mjs +7 -4
  31. package/esm2020/lib/search/search-bar/search-bar.component.mjs +30 -28
  32. package/esm2020/lib/search/search-results/search-results.component.mjs +22 -13
  33. package/esm2020/lib/search/shared/search.utils.mjs +2 -1
  34. package/esm2020/lib/search/shared/sources/icherche.mjs +70 -58
  35. package/esm2020/lib/search/shared/sources/index.mjs +1 -3
  36. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +20 -9
  37. package/fesm2015/igo2-geo.mjs +1505 -529
  38. package/fesm2015/igo2-geo.mjs.map +1 -1
  39. package/fesm2020/igo2-geo.mjs +1456 -525
  40. package/fesm2020/igo2-geo.mjs.map +1 -1
  41. package/lib/catalog/shared/catalog.abstract.d.ts +1 -0
  42. package/lib/datasource/shared/datasources/datasource.interface.d.ts +1 -0
  43. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +1 -0
  44. package/lib/draw/draw/draw-popup.component.d.ts +52 -5
  45. package/lib/draw/draw/draw.component.d.ts +34 -4
  46. package/lib/draw/draw/draw.module.d.ts +3 -1
  47. package/lib/draw/shared/draw.enum.d.ts +11 -0
  48. package/lib/draw/shared/draw.interface.d.ts +4 -0
  49. package/lib/draw/shared/draw.utils.d.ts +2 -0
  50. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +3 -1
  51. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +2 -1
  52. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +7 -1
  53. package/lib/geometry/shared/controls/draw.d.ts +18 -0
  54. package/lib/import-export/shared/import.interface.d.ts +2 -1
  55. package/lib/import-export/shared/import.service.d.ts +7 -0
  56. package/lib/layer/shared/layers/layer.interface.d.ts +4 -0
  57. package/lib/map/shared/map.utils.d.ts +1 -0
  58. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -0
  59. package/lib/offline/geoDB/geoDB.interface.d.ts +1 -0
  60. package/lib/offline/geoDB/geoDB.service.d.ts +3 -3
  61. package/lib/print/shared/geopdf.d.ts +1 -0
  62. package/lib/print/shared/index.d.ts +1 -0
  63. package/lib/print/shared/print.interface.d.ts +5 -0
  64. package/lib/print/shared/print.service.d.ts +17 -8
  65. package/lib/search/search-bar/search-bar.component.d.ts +8 -8
  66. package/lib/search/search-results/search-results.component.d.ts +4 -1
  67. package/lib/search/shared/sources/index.d.ts +0 -2
  68. package/lib/workspace/shared/edition-workspace.service.d.ts +4 -0
  69. package/package.json +4 -4
  70. package/esm2020/lib/search/shared/sources/cadastre.mjs +0 -126
  71. package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +0 -23
  72. package/lib/search/shared/sources/cadastre.d.ts +0 -33
  73. package/lib/search/shared/sources/cadastre.providers.d.ts +0 -18
@@ -1,61 +1,591 @@
1
1
  import { Component, Inject, Input } from '@angular/core';
2
2
  import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
+ import { CoordinatesUnit, GeometryType, LabelType } from '../shared/draw.enum';
4
+ import { transform } from 'ol/proj';
5
+ import { roundCoordTo } from '../../map/shared';
6
+ import OlFeature from 'ol/Feature';
7
+ import { measureOlGeometryLength, measureOlGeometryArea, metersToUnit, squareMetersToUnit } from '../../measure/shared/measure.utils';
8
+ import { MeasureLengthUnit, MeasureLengthUnitAbbreviation, MeasureAreaUnit, MeasureAreaUnitAbbreviation, } from '../../measure/shared/measure.enum';
9
+ import { fromCircle } from 'ol/geom/Polygon';
10
+ import { getLength } from 'ol/sphere';
11
+ import Circle from 'ol/geom/Circle';
12
+ import { DDtoDMS } from '../shared/draw.utils';
3
13
  import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/material/dialog";
5
- import * as i2 from "@angular/material/button";
6
- import * as i3 from "@angular/material/form-field";
7
- import * as i4 from "@angular/material/input";
8
- import * as i5 from "@ngx-translate/core";
14
+ import * as i1 from "@igo2/core";
15
+ import * as i2 from "@angular/material/dialog";
16
+ import * as i3 from "@angular/common";
17
+ import * as i4 from "@angular/material/button";
18
+ import * as i5 from "@angular/material/button-toggle";
19
+ import * as i6 from "@angular/material/form-field";
20
+ import * as i7 from "@angular/material/input";
21
+ import * as i8 from "@angular/material/select";
22
+ import * as i9 from "@angular/material/core";
23
+ import * as i10 from "@angular/material/radio";
24
+ import * as i11 from "@angular/material/checkbox";
25
+ import * as i12 from "@ngx-translate/core";
26
+ function DrawPopupComponent_div_12_mat_radio_group_5_mat_radio_button_1_Template(rf, ctx) { if (rf & 1) {
27
+ const _r10 = i0.ɵɵgetCurrentView();
28
+ i0.ɵɵelementStart(0, "mat-radio-button", 11);
29
+ i0.ɵɵlistener("change", function DrawPopupComponent_div_12_mat_radio_group_5_mat_radio_button_1_Template_mat_radio_button_change_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r9.onLabelTypeChange($event.value)); });
30
+ i0.ɵɵtext(1);
31
+ i0.ɵɵelementEnd();
32
+ } if (rf & 2) {
33
+ const option_r8 = ctx.$implicit;
34
+ const ctx_r7 = i0.ɵɵnextContext(3);
35
+ i0.ɵɵproperty("value", option_r8.value)("disabled", ctx_r7.optionAvailable(option_r8.value))("checked", option_r8.checked);
36
+ i0.ɵɵadvance(1);
37
+ i0.ɵɵtextInterpolate1(" ", ctx_r7.getProperLengthLabel(option_r8.value), " ");
38
+ } }
39
+ function DrawPopupComponent_div_12_mat_radio_group_5_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "mat-radio-group", 5);
41
+ i0.ɵɵtemplate(1, DrawPopupComponent_div_12_mat_radio_group_5_mat_radio_button_1_Template, 2, 4, "mat-radio-button", 10);
42
+ i0.ɵɵelementEnd();
43
+ } if (rf & 2) {
44
+ const ctx_r2 = i0.ɵɵnextContext(2);
45
+ i0.ɵɵadvance(1);
46
+ i0.ɵɵproperty("ngForOf", ctx_r2.arrayBuiltInType);
47
+ } }
48
+ function DrawPopupComponent_div_12_ng_container_6_mat_checkbox_1_Template(rf, ctx) { if (rf & 1) {
49
+ const _r14 = i0.ɵɵgetCurrentView();
50
+ i0.ɵɵelementStart(0, "mat-checkbox", 13);
51
+ i0.ɵɵlistener("change", function DrawPopupComponent_div_12_ng_container_6_mat_checkbox_1_Template_mat_checkbox_change_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r13.onLabelTypeChange($event.source.value, $event.checked)); });
52
+ i0.ɵɵtext(1);
53
+ i0.ɵɵelementEnd();
54
+ } if (rf & 2) {
55
+ const option_r12 = ctx.$implicit;
56
+ const ctx_r11 = i0.ɵɵnextContext(3);
57
+ i0.ɵɵproperty("value", option_r12.value)("disabled", ctx_r11.optionAvailable(option_r12.value))("checked", option_r12.checked);
58
+ i0.ɵɵadvance(1);
59
+ i0.ɵɵtextInterpolate1(" ", ctx_r11.getProperLengthLabel(option_r12.value), " ");
60
+ } }
61
+ function DrawPopupComponent_div_12_ng_container_6_Template(rf, ctx) { if (rf & 1) {
62
+ i0.ɵɵelementContainerStart(0, 5);
63
+ i0.ɵɵtemplate(1, DrawPopupComponent_div_12_ng_container_6_mat_checkbox_1_Template, 2, 4, "mat-checkbox", 12);
64
+ i0.ɵɵelementContainerEnd();
65
+ } if (rf & 2) {
66
+ const ctx_r3 = i0.ɵɵnextContext(2);
67
+ i0.ɵɵadvance(1);
68
+ i0.ɵɵproperty("ngForOf", ctx_r3.arrayBuiltInType);
69
+ } }
70
+ function DrawPopupComponent_div_12_div_7_mat_option_6_Template(rf, ctx) { if (rf & 1) {
71
+ i0.ɵɵelementStart(0, "mat-option", 3);
72
+ i0.ɵɵtext(1);
73
+ i0.ɵɵelementEnd();
74
+ } if (rf & 2) {
75
+ const unit_r17 = ctx.$implicit;
76
+ i0.ɵɵproperty("value", unit_r17);
77
+ i0.ɵɵadvance(1);
78
+ i0.ɵɵtextInterpolate1(" ", unit_r17, " ");
79
+ } }
80
+ function DrawPopupComponent_div_12_div_7_Template(rf, ctx) { if (rf & 1) {
81
+ const _r19 = i0.ɵɵgetCurrentView();
82
+ i0.ɵɵelementStart(0, "div")(1, "mat-form-field", 14);
83
+ i0.ɵɵelement(2, "input", 15, 16);
84
+ i0.ɵɵelementEnd();
85
+ i0.ɵɵelementStart(4, "mat-form-field", 17)(5, "mat-select", 18);
86
+ i0.ɵɵlistener("selectionChange", function DrawPopupComponent_div_12_div_7_Template_mat_select_selectionChange_5_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r18 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r18.onChangeCoordinateUnit($event.value)); });
87
+ i0.ɵɵtemplate(6, DrawPopupComponent_div_12_div_7_mat_option_6_Template, 2, 2, "mat-option", 19);
88
+ i0.ɵɵelementEnd()()();
89
+ } if (rf & 2) {
90
+ const ctx_r4 = i0.ɵɵnextContext(2);
91
+ i0.ɵɵadvance(2);
92
+ i0.ɵɵpropertyInterpolate("value", ctx_r4.currentCoordinates);
93
+ i0.ɵɵadvance(3);
94
+ i0.ɵɵproperty("value", ctx_r4.coordinatesMeasureUnit);
95
+ i0.ɵɵadvance(1);
96
+ i0.ɵɵproperty("ngForOf", ctx_r4.allCoordinatesUnits);
97
+ } }
98
+ function DrawPopupComponent_div_12_div_8_mat_option_6_Template(rf, ctx) { if (rf & 1) {
99
+ i0.ɵɵelementStart(0, "mat-option", 3);
100
+ i0.ɵɵtext(1);
101
+ i0.ɵɵelementEnd();
102
+ } if (rf & 2) {
103
+ const unit_r22 = ctx.$implicit;
104
+ const ctx_r21 = i0.ɵɵnextContext(3);
105
+ i0.ɵɵproperty("value", unit_r22);
106
+ i0.ɵɵadvance(1);
107
+ i0.ɵɵtextInterpolate1(" ", ctx_r21.getLengthUnitEnum(unit_r22), " ");
108
+ } }
109
+ function DrawPopupComponent_div_12_div_8_Template(rf, ctx) { if (rf & 1) {
110
+ const _r24 = i0.ɵɵgetCurrentView();
111
+ i0.ɵɵelementStart(0, "div")(1, "mat-form-field", 14);
112
+ i0.ɵɵelement(2, "input", 20, 16);
113
+ i0.ɵɵelementEnd();
114
+ i0.ɵɵelementStart(4, "mat-form-field", 17)(5, "mat-select", 18);
115
+ i0.ɵɵlistener("selectionChange", function DrawPopupComponent_div_12_div_8_Template_mat_select_selectionChange_5_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r23.onChangeLengthUnit($event.value)); });
116
+ i0.ɵɵtemplate(6, DrawPopupComponent_div_12_div_8_mat_option_6_Template, 2, 2, "mat-option", 19);
117
+ i0.ɵɵelementEnd()()();
118
+ } if (rf & 2) {
119
+ const ctx_r5 = i0.ɵɵnextContext(2);
120
+ i0.ɵɵadvance(2);
121
+ i0.ɵɵpropertyInterpolate("placeholder", ctx_r5.lengthLabelT);
122
+ i0.ɵɵpropertyInterpolate("value", ctx_r5.currentLength);
123
+ i0.ɵɵadvance(3);
124
+ i0.ɵɵproperty("value", ctx_r5.lengthMeasureUnit);
125
+ i0.ɵɵadvance(1);
126
+ i0.ɵɵproperty("ngForOf", ctx_r5.allLengthUnits);
127
+ } }
128
+ function DrawPopupComponent_div_12_div_9_mat_option_7_Template(rf, ctx) { if (rf & 1) {
129
+ i0.ɵɵelementStart(0, "mat-option", 3);
130
+ i0.ɵɵtext(1);
131
+ i0.ɵɵelementEnd();
132
+ } if (rf & 2) {
133
+ const unit_r27 = ctx.$implicit;
134
+ const ctx_r26 = i0.ɵɵnextContext(3);
135
+ i0.ɵɵproperty("value", unit_r27);
136
+ i0.ɵɵadvance(1);
137
+ i0.ɵɵtextInterpolate1(" ", ctx_r26.getAreaUnitEnum(unit_r27), " ");
138
+ } }
139
+ function DrawPopupComponent_div_12_div_9_Template(rf, ctx) { if (rf & 1) {
140
+ const _r29 = i0.ɵɵgetCurrentView();
141
+ i0.ɵɵelementStart(0, "div")(1, "mat-form-field", 14);
142
+ i0.ɵɵelement(2, "input", 20, 16);
143
+ i0.ɵɵpipe(4, "translate");
144
+ i0.ɵɵelementEnd();
145
+ i0.ɵɵelementStart(5, "mat-form-field", 17)(6, "mat-select", 18);
146
+ i0.ɵɵlistener("selectionChange", function DrawPopupComponent_div_12_div_9_Template_mat_select_selectionChange_6_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r28 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r28.onChangeAreaUnit($event.value)); });
147
+ i0.ɵɵtemplate(7, DrawPopupComponent_div_12_div_9_mat_option_7_Template, 2, 2, "mat-option", 19);
148
+ i0.ɵɵelementEnd()()();
149
+ } if (rf & 2) {
150
+ const ctx_r6 = i0.ɵɵnextContext(2);
151
+ i0.ɵɵadvance(2);
152
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(4, 4, "igo.geo.draw.labelType.Area"));
153
+ i0.ɵɵpropertyInterpolate("value", ctx_r6.currentArea);
154
+ i0.ɵɵadvance(4);
155
+ i0.ɵɵproperty("value", ctx_r6.areaMeasureUnit);
156
+ i0.ɵɵadvance(1);
157
+ i0.ɵɵproperty("ngForOf", ctx_r6.allAreaUnits);
158
+ } }
159
+ function DrawPopupComponent_div_12_Template(rf, ctx) { if (rf & 1) {
160
+ const _r31 = i0.ɵɵgetCurrentView();
161
+ i0.ɵɵelementStart(0, "div")(1, "div")(2, "p", 5);
162
+ i0.ɵɵtext(3);
163
+ i0.ɵɵpipe(4, "translate");
164
+ i0.ɵɵelementEnd();
165
+ i0.ɵɵtemplate(5, DrawPopupComponent_div_12_mat_radio_group_5_Template, 2, 1, "mat-radio-group", 6);
166
+ i0.ɵɵtemplate(6, DrawPopupComponent_div_12_ng_container_6_Template, 2, 1, "ng-container", 6);
167
+ i0.ɵɵtemplate(7, DrawPopupComponent_div_12_div_7_Template, 7, 3, "div", 4);
168
+ i0.ɵɵtemplate(8, DrawPopupComponent_div_12_div_8_Template, 7, 4, "div", 4);
169
+ i0.ɵɵtemplate(9, DrawPopupComponent_div_12_div_9_Template, 8, 6, "div", 4);
170
+ i0.ɵɵelementEnd();
171
+ i0.ɵɵelementStart(10, "div", 7)(11, "button", 8);
172
+ i0.ɵɵlistener("click", function DrawPopupComponent_div_12_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r31); const ctx_r30 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r30.cancelDrawing()); });
173
+ i0.ɵɵtext(12);
174
+ i0.ɵɵpipe(13, "translate");
175
+ i0.ɵɵelementEnd();
176
+ i0.ɵɵelementStart(14, "button", 9);
177
+ i0.ɵɵlistener("click", function DrawPopupComponent_div_12_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r31); const ctx_r32 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r32.confirm()); });
178
+ i0.ɵɵtext(15);
179
+ i0.ɵɵelementEnd()()();
180
+ } if (rf & 2) {
181
+ const ctx_r0 = i0.ɵɵnextContext();
182
+ i0.ɵɵadvance(3);
183
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 8, "igo.geo.draw.builtInInstructions"));
184
+ i0.ɵɵadvance(2);
185
+ i0.ɵɵproperty("ngIf", ctx_r0.olGeometryType !== "Polygon");
186
+ i0.ɵɵadvance(1);
187
+ i0.ɵɵproperty("ngIf", ctx_r0.olGeometryType === "Polygon");
188
+ i0.ɵɵadvance(1);
189
+ i0.ɵɵproperty("ngIf", ctx_r0.labelFlag === ctx_r0.labelType.Coordinates);
190
+ i0.ɵɵadvance(1);
191
+ i0.ɵɵproperty("ngIf", ctx_r0.labelFlag === ctx_r0.labelType.Length || ctx_r0.polygonCheck === 2);
192
+ i0.ɵɵadvance(1);
193
+ i0.ɵɵproperty("ngIf", ctx_r0.labelFlag === ctx_r0.labelType.Area || ctx_r0.polygonCheck === 2);
194
+ i0.ɵɵadvance(3);
195
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(13, 10, "igo.geo.draw.cancel"), " ");
196
+ i0.ɵɵadvance(3);
197
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.noLabelButton(), " ");
198
+ } }
199
+ function DrawPopupComponent_div_13_Template(rf, ctx) { if (rf & 1) {
200
+ const _r36 = i0.ɵɵgetCurrentView();
201
+ i0.ɵɵelementStart(0, "div")(1, "div")(2, "p", 5);
202
+ i0.ɵɵtext(3);
203
+ i0.ɵɵpipe(4, "translate");
204
+ i0.ɵɵelementEnd();
205
+ i0.ɵɵelementStart(5, "mat-form-field", 21)(6, "input", 22, 16);
206
+ i0.ɵɵlistener("select", function DrawPopupComponent_div_13_Template_input_select_6_listener() { return true; })("input", function DrawPopupComponent_div_13_Template_input_input_6_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r35 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r35.getLabelLength($event.target.value)); });
207
+ i0.ɵɵpipe(8, "translate");
208
+ i0.ɵɵelementEnd()()();
209
+ i0.ɵɵelementStart(9, "div", 7)(10, "button", 8);
210
+ i0.ɵɵlistener("click", function DrawPopupComponent_div_13_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r36); const ctx_r37 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r37.cancelDrawing()); });
211
+ i0.ɵɵtext(11);
212
+ i0.ɵɵpipe(12, "translate");
213
+ i0.ɵɵelementEnd();
214
+ i0.ɵɵelementStart(13, "button", 9);
215
+ i0.ɵɵlistener("click", function DrawPopupComponent_div_13_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r36); const _r33 = i0.ɵɵreference(7); const ctx_r38 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r38.confirm(_r33.value)); });
216
+ i0.ɵɵtext(14);
217
+ i0.ɵɵelementEnd()()();
218
+ } if (rf & 2) {
219
+ const ctx_r1 = i0.ɵɵnextContext();
220
+ i0.ɵɵadvance(3);
221
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 5, "igo.geo.draw.dialogInstruction"));
222
+ i0.ɵɵadvance(3);
223
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(8, 7, "igo.geo.draw.dialogTitle"));
224
+ i0.ɵɵpropertyInterpolate("value", ctx_r1.currentLabel);
225
+ i0.ɵɵadvance(5);
226
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(12, 9, "igo.geo.draw.cancel"), " ");
227
+ i0.ɵɵadvance(3);
228
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.noLabelButton(), " ");
229
+ } }
9
230
  export class DrawPopupComponent {
10
- constructor(dialogRef, data) {
231
+ constructor(languageService, dialogRef, data) {
232
+ this.languageService = languageService;
11
233
  this.dialogRef = dialogRef;
12
234
  this.data = data;
13
235
  this.confirmFlag = false;
236
+ this.labelFlag = LabelType.Custom;
237
+ this.geometryType = GeometryType;
238
+ this.labelType = LabelType;
239
+ this.arrayBuiltInType = [];
240
+ this.olGeometryType = undefined;
241
+ this.polygonCheck = 0; // Count for polygon label types checkboxes
242
+ this.currentLabel = this.data.olGeometry.get('draw');
243
+ this.labelLength = this.currentLabel ? this.currentLabel.length : 0;
244
+ let olGeometry;
245
+ const projection = this.data.map.ol.getView().getProjection();
246
+ if (this.data.olGeometry instanceof OlFeature) {
247
+ if (this.data.olGeometry.get('rad')) {
248
+ const longitudeLatitude = [this.data.olGeometry.get('longitude'), this.data.olGeometry.get('latitude')];
249
+ this.olGeometryType = GeometryType.Circle;
250
+ olGeometry = new Circle(longitudeLatitude, this.data.olGeometry.get('rad'));
251
+ }
252
+ else {
253
+ this.olGeometryType = this.data.olGeometry.getGeometry().getType();
254
+ olGeometry = this.data.olGeometry.get('geometry');
255
+ }
256
+ }
257
+ else {
258
+ this.olGeometryType = this.data.olGeometry.getType();
259
+ olGeometry = this.data.olGeometry;
260
+ }
261
+ if (this.olGeometryType === GeometryType.Point || this.olGeometryType === GeometryType.Circle) {
262
+ if (this.data.olGeometry instanceof OlFeature) {
263
+ let longitude = this.data.olGeometry.get('longitude');
264
+ let latitude = this.data.olGeometry.get('latitude');
265
+ this.longlatDD = roundCoordTo([longitude, latitude], 5);
266
+ this.coordinatesInDD = '(' + latitude + ', '
267
+ + longitude + ')';
268
+ }
269
+ else {
270
+ let point4326 = transform(this.data.olGeometry.getFlatCoordinates(), projection, 'EPSG:4326');
271
+ this.longlatDD = roundCoordTo([point4326[0], point4326[1]], 5);
272
+ this.coordinatesInDD =
273
+ '(' + this.longlatDD[1] + ', ' + this.longlatDD[0] + ')';
274
+ }
275
+ this.currentCoordinates = this.coordinatesInDD;
276
+ }
277
+ if (this.olGeometryType === GeometryType.LineString) {
278
+ this.lengthInMeters = measureOlGeometryLength(olGeometry, projection.getCode()).toFixed(2);
279
+ this.currentLength = this.lengthInMeters;
280
+ }
281
+ else if (this.olGeometryType === GeometryType.Polygon) {
282
+ this.lengthInMeters = measureOlGeometryLength(olGeometry, projection.getCode()).toFixed(2);
283
+ this.currentLength = this.lengthInMeters;
284
+ this.areaInMetersSquare = measureOlGeometryArea(olGeometry, projection.getCode()).toFixed(2);
285
+ this.currentArea = this.areaInMetersSquare;
286
+ }
287
+ else if (this.olGeometryType === GeometryType.Circle) {
288
+ let circularPolygon = fromCircle(olGeometry, 10000);
289
+ const radius = this.getRadius(circularPolygon);
290
+ this.lengthInMeters = radius.toFixed(2);
291
+ this.currentLength = this.lengthInMeters;
292
+ this.areaInMetersSquare = measureOlGeometryArea(circularPolygon, projection.getCode()).toFixed(2);
293
+ this.currentArea = this.areaInMetersSquare;
294
+ }
295
+ if (data.olGeometry.get('labelType') === LabelType.Coordinates) {
296
+ this.onLabelTypeChange(LabelType.Predefined);
297
+ this.onLabelTypeChange(LabelType.Coordinates, true);
298
+ this.coordinatesMeasureUnit = data.olGeometry.get('measureUnit');
299
+ }
300
+ else if (data.olGeometry.get('labelType') === LabelType.Length) {
301
+ this.onLabelTypeChange(LabelType.Predefined);
302
+ this.onLabelTypeChange(LabelType.Length, true);
303
+ this.lengthMeasureUnit = data.olGeometry.get('measureUnit');
304
+ }
305
+ else if (data.olGeometry.get('labelType') === LabelType.Area) {
306
+ this.onLabelTypeChange(LabelType.Predefined);
307
+ this.onLabelTypeChange(LabelType.Area, true);
308
+ this.areaMeasureUnit = data.olGeometry.get('measureUnit');
309
+ }
310
+ else if (data.olGeometry.get('labelType')?.length === 2) {
311
+ this.onLabelTypeChange(LabelType.Predefined);
312
+ this.onLabelTypeChange(LabelType.Length, true);
313
+ this.onLabelTypeChange(LabelType.Area, true);
314
+ this.lengthMeasureUnit = data.olGeometry.get('measureUnit')[0];
315
+ this.areaMeasureUnit = data.olGeometry.get('measureUnit')[1];
316
+ }
317
+ this.buildArrayType();
14
318
  }
319
+ /**
320
+ * HTML Interactions
321
+ */
15
322
  cancelDrawing() {
16
323
  this.dialogRef.close();
17
324
  }
18
- confirm(labelString) {
325
+ confirm(input) {
19
326
  this.confirmFlag = true;
20
- this.dialogRef.close(labelString);
327
+ if (this.labelFlag === LabelType.Predefined) {
328
+ this.dialogRef.close();
329
+ }
330
+ else if (this.labelFlag === LabelType.Custom) {
331
+ this.dialogRef.close({
332
+ label: input
333
+ });
334
+ }
335
+ else if (this.labelFlag === LabelType.Coordinates) {
336
+ this.dialogRef.close({
337
+ label: this.currentCoordinates,
338
+ measureUnit: this.coordinatesMeasureUnit
339
+ });
340
+ }
341
+ else if (this.olGeometryType === GeometryType.Polygon) {
342
+ if (this.polygonCheck === 2) {
343
+ this.labelFlag = [LabelType.Length, LabelType.Area];
344
+ this.dialogRef.close({
345
+ label: 'P: ' + this.currentLength + ' ' + MeasureLengthUnitAbbreviation[MeasureLengthUnit.Meters] + '\n'
346
+ + this.languageService.translate.instant('igo.geo.draw.labelType.A') + this.currentArea + ' ' +
347
+ MeasureAreaUnitAbbreviation[MeasureAreaUnit.SquareMeters], measureUnit: [this.lengthMeasureUnit, this.areaMeasureUnit]
348
+ });
349
+ }
350
+ else {
351
+ this.labelFlag === LabelType.Length ?
352
+ this.dialogRef.close({
353
+ label: 'P: ' + this.currentLength + ' ' + MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],
354
+ measureUnit: this.lengthMeasureUnit
355
+ }) :
356
+ this.dialogRef.close({
357
+ label: this.currentArea + ' ' + MeasureAreaUnitAbbreviation[this.areaMeasureUnit],
358
+ measureUnit: this.areaMeasureUnit
359
+ });
360
+ }
361
+ }
362
+ else if (this.labelFlag === LabelType.Length) {
363
+ if (this.olGeometryType === GeometryType.Circle) {
364
+ this.dialogRef.close({
365
+ label: 'R: ' + this.currentLength + ' ' + MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],
366
+ measureUnit: this.lengthMeasureUnit
367
+ });
368
+ }
369
+ else if (this.olGeometryType === GeometryType.LineString) {
370
+ this.dialogRef.close({
371
+ label: this.currentLength + ' ' + MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],
372
+ measureUnit: this.lengthMeasureUnit
373
+ });
374
+ }
375
+ }
376
+ else if (this.labelFlag === LabelType.Area) {
377
+ this.dialogRef.close({
378
+ label: this.currentArea + ' ' + MeasureAreaUnitAbbreviation[this.areaMeasureUnit],
379
+ measureUnit: this.areaMeasureUnit
380
+ });
381
+ }
382
+ }
383
+ onLabelTypeChange(labelType, checked) {
384
+ if (labelType !== LabelType.Predefined &&
385
+ labelType !== LabelType.Custom &&
386
+ this.olGeometryType === GeometryType.Polygon) {
387
+ this.arrayBuiltInType.find(type => type.value === labelType) ?
388
+ this.arrayBuiltInType.find(type => type.value === labelType).checked = checked : this.labelFlag = undefined;
389
+ checked ? this.labelFlag = labelType : this.labelFlag = this.arrayBuiltInType.find(type => type.checked)?.value;
390
+ }
391
+ else {
392
+ this.labelFlag = labelType;
393
+ }
394
+ if (labelType === LabelType.Predefined) {
395
+ if (this.olGeometryType === GeometryType.Point) {
396
+ this.labelFlag = LabelType.Coordinates;
397
+ this.currentCoordinates = this.coordinatesInDD;
398
+ this.coordinatesMeasureUnit = CoordinatesUnit.DecimalDegree;
399
+ }
400
+ else if (this.olGeometryType === GeometryType.LineString) {
401
+ this.labelFlag = LabelType.Length;
402
+ this.currentLength = this.lengthInMeters;
403
+ this.lengthMeasureUnit = MeasureLengthUnit.Meters;
404
+ }
405
+ }
406
+ else if (labelType === LabelType.Area) {
407
+ this.currentArea = this.areaInMetersSquare;
408
+ this.areaMeasureUnit = MeasureAreaUnit.SquareMeters;
409
+ }
410
+ else if (labelType === LabelType.Length) {
411
+ this.currentLength = this.lengthInMeters;
412
+ this.lengthMeasureUnit = MeasureLengthUnit.Meters;
413
+ }
414
+ else if (this.labelFlag === LabelType.Coordinates) {
415
+ this.currentCoordinates = this.coordinatesInDD;
416
+ this.coordinatesMeasureUnit = CoordinatesUnit.DecimalDegree;
417
+ }
418
+ const labeltypes = [this.labelType.Length, this.labelType.Area];
419
+ if (this.olGeometryType === GeometryType.Polygon &&
420
+ labeltypes.includes(labelType)) {
421
+ checked ? this.polygonCheck += 1 : this.polygonCheck -= 1;
422
+ ;
423
+ }
424
+ else {
425
+ this.polygonCheck = 0;
426
+ }
427
+ }
428
+ onChangeLengthUnit(lengthUnit) {
429
+ this.lengthMeasureUnit = lengthUnit;
430
+ this.currentLength = metersToUnit(Number(this.lengthInMeters), lengthUnit).toFixed(2);
431
+ }
432
+ onChangeAreaUnit(areaUnit) {
433
+ this.areaMeasureUnit = areaUnit;
434
+ this.currentArea = squareMetersToUnit(Number(this.areaInMetersSquare), areaUnit).toFixed(2);
435
+ }
436
+ onChangeCoordinateUnit(coordinatesUnit) {
437
+ this.coordinatesMeasureUnit = coordinatesUnit;
438
+ let coordinates = DDtoDMS(this.longlatDD, coordinatesUnit);
439
+ this.currentCoordinates = '(' + coordinates[1] + ', ' + coordinates[0] + ')';
440
+ }
441
+ buildArrayType() {
442
+ for (const labelType of Object.values(LabelType)) {
443
+ if (labelType !== LabelType.Custom && labelType !== LabelType.Predefined) {
444
+ this.arrayBuiltInType.push({
445
+ value: labelType,
446
+ checked: this.selectOptions(labelType) ||
447
+ this.labelFlag === labelType ||
448
+ (this.polygonCheck === 2 && labelType !== LabelType.Coordinates)
449
+ });
450
+ }
451
+ }
452
+ }
453
+ noLabelButton() {
454
+ if (this.labelFlag === LabelType.Predefined || (this.labelFlag === LabelType.Custom && this.labelLength === 0)) {
455
+ return this.languageService.translate.instant('igo.geo.draw.noLabel');
456
+ }
457
+ return 'OK';
458
+ }
459
+ get customOrPredefined() {
460
+ if (this.labelFlag === LabelType.Custom) {
461
+ return LabelType.Custom;
462
+ }
463
+ return LabelType.Predefined;
464
+ }
465
+ optionAvailable(currentOption) {
466
+ switch (this.olGeometryType) {
467
+ case GeometryType.Point:
468
+ if (currentOption === LabelType.Coordinates) {
469
+ return false;
470
+ }
471
+ return true;
472
+ case GeometryType.LineString:
473
+ if (currentOption === LabelType.Length) {
474
+ return false;
475
+ }
476
+ return true;
477
+ case GeometryType.Polygon:
478
+ if (currentOption === LabelType.Coordinates) {
479
+ return true;
480
+ }
481
+ return false;
482
+ default:
483
+ return false;
484
+ }
485
+ }
486
+ get allLengthUnits() {
487
+ return Object.values(MeasureLengthUnit);
488
+ }
489
+ getLengthUnitEnum(lengthUnit) {
490
+ return MeasureLengthUnitAbbreviation[lengthUnit];
491
+ }
492
+ get allAreaUnits() {
493
+ return Object.values(MeasureAreaUnit);
494
+ }
495
+ get allCoordinatesUnits() {
496
+ return Object.values(CoordinatesUnit);
497
+ }
498
+ getAreaUnitEnum(areaUnit) {
499
+ return MeasureAreaUnitAbbreviation[areaUnit];
500
+ }
501
+ getRadius(olGeometry) {
502
+ const length = getLength(olGeometry);
503
+ return Number(length / (2 * Math.PI));
504
+ }
505
+ get lengthLabelT() {
506
+ if (this.olGeometryType === GeometryType.Polygon) {
507
+ return this.languageService.translate.instant('igo.geo.measure.perimeter');
508
+ }
509
+ if (this.olGeometryType === GeometryType.Circle) {
510
+ return this.languageService.translate.instant('igo.geo.search.coordinates.radius');
511
+ }
512
+ return this.languageService.translate.instant('igo.geo.draw.labelType.Length');
513
+ }
514
+ getLabelLength(event) {
515
+ this.labelLength = event.length;
516
+ }
517
+ selectOptions(option) {
518
+ if (this.olGeometryType === GeometryType.Point) {
519
+ return option === LabelType.Coordinates;
520
+ }
521
+ else if (this.olGeometryType === GeometryType.LineString) {
522
+ return option === LabelType.Length;
523
+ }
524
+ }
525
+ getProperLengthLabel(option) {
526
+ if (option === LabelType.Length) {
527
+ if (this.olGeometryType === GeometryType.Polygon) {
528
+ return this.languageService.translate.instant('igo.geo.measure.perimeter');
529
+ }
530
+ if (this.olGeometryType === GeometryType.Circle) {
531
+ return this.languageService.translate.instant('igo.geo.search.coordinates.radius');
532
+ }
533
+ return this.languageService.translate.instant('igo.geo.draw.labelType.Length');
534
+ }
535
+ return this.languageService.translate.instant('igo.geo.draw.labelType.' + option);
21
536
  }
22
537
  }
23
- DrawPopupComponent.ɵfac = function DrawPopupComponent_Factory(t) { return new (t || DrawPopupComponent)(i0.ɵɵdirectiveInject(i1.MatDialogRef), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA)); };
24
- DrawPopupComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawPopupComponent, selectors: [["igo-draw-popup-component"]], inputs: { confirmFlag: "confirmFlag" }, decls: 14, vars: 10, consts: [["mat-dialog-content", ""], [1, "mat-typography"], [1, "example-full-width"], ["matInput", "", 3, "placeholder", "value"], ["input", ""], ["mat-dialog-actions", ""], ["mat-raised-button", "", 3, "click"], ["mat-raised-button", "", "color", "primary", 3, "click"]], template: function DrawPopupComponent_Template(rf, ctx) { if (rf & 1) {
25
- const _r1 = i0.ɵɵgetCurrentView();
26
- i0.ɵɵelementStart(0, "div", 0)(1, "p", 1);
538
+ DrawPopupComponent.ɵfac = function DrawPopupComponent_Factory(t) { return new (t || DrawPopupComponent)(i0.ɵɵdirectiveInject(i1.LanguageService), i0.ɵɵdirectiveInject(i2.MatDialogRef), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA)); };
539
+ DrawPopupComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawPopupComponent, selectors: [["igo-draw-popup-component"]], inputs: { confirmFlag: "confirmFlag", labelFlag: "labelFlag", coordinatesMeasureUnit: "coordinatesMeasureUnit", lengthMeasureUnit: "lengthMeasureUnit", areaMeasureUnit: "areaMeasureUnit" }, decls: 14, vars: 14, consts: [["mat-dialog-title", ""], [1, "geometry-type-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], [4, "ngIf"], [1, "mat-typography"], ["class", "mat-typography", 4, "ngIf"], ["mat-dialog-actions", ""], ["mat-raised-button", "", 3, "click"], ["mat-raised-button", "", "color", "primary", 3, "click"], [3, "value", "disabled", "checked", "change", 4, "ngFor", "ngForOf"], [3, "value", "disabled", "checked", "change"], ["class", "mat-typography", 3, "value", "disabled", "checked", "change", 4, "ngFor", "ngForOf"], [1, "mat-typography", 3, "value", "disabled", "checked", "change"], [1, "readOnly-Input"], ["matInput", "", "placeholder", "(Latitude, Longitude)", "readonly", "", 3, "value"], ["input", ""], [1, "unit-field"], [3, "value", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], ["matInput", "", "readonly", "", 3, "placeholder", "value"], [1, "input"], ["matInput", "", "cdkFocusInitial", "", 3, "placeholder", "value", "select", "input"]], template: function DrawPopupComponent_Template(rf, ctx) { if (rf & 1) {
540
+ i0.ɵɵelementStart(0, "div")(1, "h2", 0);
27
541
  i0.ɵɵtext(2);
28
542
  i0.ɵɵpipe(3, "translate");
29
- i0.ɵɵelementEnd();
30
- i0.ɵɵelementStart(4, "mat-form-field", 2);
31
- i0.ɵɵelement(5, "input", 3, 4);
32
- i0.ɵɵpipe(7, "translate");
33
543
  i0.ɵɵelementEnd()();
34
- i0.ɵɵelementStart(8, "div", 5)(9, "button", 6);
35
- i0.ɵɵlistener("click", function DrawPopupComponent_Template_button_click_9_listener() { return ctx.cancelDrawing(); });
544
+ i0.ɵɵelementStart(4, "div", 1)(5, "mat-button-toggle-group", 2);
545
+ i0.ɵɵlistener("change", function DrawPopupComponent_Template_mat_button_toggle_group_change_5_listener($event) { return ctx.onLabelTypeChange($event.value); });
546
+ i0.ɵɵelementStart(6, "mat-button-toggle", 3);
547
+ i0.ɵɵtext(7);
548
+ i0.ɵɵpipe(8, "translate");
549
+ i0.ɵɵelementEnd();
550
+ i0.ɵɵelementStart(9, "mat-button-toggle", 3);
36
551
  i0.ɵɵtext(10);
37
552
  i0.ɵɵpipe(11, "translate");
38
- i0.ɵɵelementEnd();
39
- i0.ɵɵelementStart(12, "button", 7);
40
- i0.ɵɵlistener("click", function DrawPopupComponent_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r1); const _r0 = i0.ɵɵreference(6); return i0.ɵɵresetView(ctx.confirm(_r0.value)); });
41
- i0.ɵɵtext(13, "OK ");
42
- i0.ɵɵelementEnd()();
553
+ i0.ɵɵelementEnd()()();
554
+ i0.ɵɵtemplate(12, DrawPopupComponent_div_12_Template, 16, 12, "div", 4);
555
+ i0.ɵɵtemplate(13, DrawPopupComponent_div_13_Template, 15, 11, "div", 4);
43
556
  } if (rf & 2) {
44
557
  i0.ɵɵadvance(2);
45
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.draw.dialogInstruction"));
558
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 8, "igo.geo.draw.popupTitle"), " ");
46
559
  i0.ɵɵadvance(3);
47
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(7, 6, "igo.geo.draw.dialogTitle"));
48
- i0.ɵɵpropertyInterpolate("value", ctx.data.currentLabel);
49
- i0.ɵɵadvance(5);
50
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(11, 8, "igo.geo.draw.cancel"), " ");
51
- } }, dependencies: [i2.MatButton, i3.MatFormField, i4.MatInput, i1.MatDialogContent, i1.MatDialogActions, i5.TranslatePipe] });
560
+ i0.ɵɵproperty("value", ctx.customOrPredefined);
561
+ i0.ɵɵadvance(1);
562
+ i0.ɵɵproperty("value", ctx.labelType.Custom);
563
+ i0.ɵɵadvance(1);
564
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 10, "igo.geo.draw.labelType.custom"), " ");
565
+ i0.ɵɵadvance(2);
566
+ i0.ɵɵproperty("value", ctx.labelType.Predefined);
567
+ i0.ɵɵadvance(1);
568
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 12, "igo.geo.draw.labelType.predefined"), " ");
569
+ i0.ɵɵadvance(2);
570
+ i0.ɵɵproperty("ngIf", ctx.labelFlag !== ctx.labelType.Custom);
571
+ i0.ɵɵadvance(1);
572
+ i0.ɵɵproperty("ngIf", ctx.labelFlag === ctx.labelType.Custom);
573
+ } }, dependencies: [i3.NgForOf, i3.NgIf, i4.MatButton, i5.MatButtonToggleGroup, i5.MatButtonToggle, i6.MatFormField, i7.MatInput, i8.MatSelect, i9.MatOption, i2.MatDialogTitle, i2.MatDialogActions, i10.MatRadioGroup, i10.MatRadioButton, i11.MatCheckbox, i12.TranslatePipe], styles: [".mat-radio-button[_ngcontent-%COMP%] ~ .mat-radio-button[_ngcontent-%COMP%]{margin-left:16px}.readOnly-Input[_ngcontent-%COMP%]{width:200px!important}.unit-field[_ngcontent-%COMP%]{width:50px;margin-left:10px;margin-top:10px}.mat-form-field[_ngcontent-%COMP%]{position:-webkit-sticky!important;position:sticky!important}.coordinatesInputView[_ngcontent-%COMP%]{top:5em!important} .mat-form-field-wrapper{margin-bottom:-1.25em;margin-top:.25em}.geometry-type-toggle[_ngcontent-%COMP%], .mat-dialog-actions[_ngcontent-%COMP%]{display:flex!important;justify-content:center}.input[_ngcontent-%COMP%]{width:auto!important}.mat-button-toggle-group[_ngcontent-%COMP%], .mat-button-toggle[_ngcontent-%COMP%]{width:100%}mat-checkbox[_ngcontent-%COMP%]{margin-right:10px}"] });
52
574
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrawPopupComponent, [{
53
575
  type: Component,
54
- args: [{ selector: 'igo-draw-popup-component', template: "<div mat-dialog-content>\n <p class=\"mat-typography\">{{ 'igo.geo.draw.dialogInstruction' | translate }}</p>\n <mat-form-field class=\"example-full-width\">\n <input\n #input\n matInput\n placeholder=\"{{'igo.geo.draw.dialogTitle' | translate}}\"\n value=\"{{data.currentLabel}}\"/>\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button \n mat-raised-button \n (click)=\"cancelDrawing()\">{{'igo.geo.draw.cancel' | translate}}\n </button>\n <button \n mat-raised-button \n color=\"primary\" \n (click)=\"confirm(input.value)\">OK\n </button>\n</div>\n" }]
55
- }], function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
576
+ args: [{ selector: 'igo-draw-popup-component', template: "<div>\n <h2 mat-dialog-title>\n {{ 'igo.geo.draw.popupTitle' | translate }}\n </h2>\n</div>\n\n\n<div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onLabelTypeChange($event.value)\" [value]=\"customOrPredefined\">\n <mat-button-toggle [value]=\"labelType.Custom\" >\n {{ 'igo.geo.draw.labelType.custom' | translate }}\n </mat-button-toggle>\n <mat-button-toggle [value]=\"labelType.Predefined\">\n {{ 'igo.geo.draw.labelType.predefined' | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div *ngIf=\"labelFlag !== labelType.Custom\">\n <div>\n <p class=\"mat-typography\">{{ 'igo.geo.draw.builtInInstructions' | translate }}</p>\n <mat-radio-group *ngIf=\"olGeometryType !== 'Polygon'\" class=\"mat-typography\">\n <mat-radio-button *ngFor=\"let option of arrayBuiltInType\" [value]=\"option.value\" [disabled]=\"optionAvailable(option.value)\" \n (change)=\"onLabelTypeChange($event.value)\" [checked]=\"option.checked\">\n {{getProperLengthLabel(option.value)}}\n </mat-radio-button>\n </mat-radio-group>\n <ng-container class=\"mat-typography\" *ngIf=\"olGeometryType === 'Polygon'\">\n <mat-checkbox\n *ngFor=\"let option of arrayBuiltInType\"\n class=\"mat-typography\"\n [value]=\"option.value\"\n [disabled]=\"optionAvailable(option.value)\"\n (change)=\"onLabelTypeChange($event.source.value, $event.checked)\"\n [checked]=\"option.checked\">\n {{getProperLengthLabel(option.value)}}\n </mat-checkbox>\n </ng-container>\n <div *ngIf=\"labelFlag === labelType.Coordinates\">\n <mat-form-field class=\"readOnly-Input\">\n <input\n #input\n matInput\n placeholder=\"(Latitude, Longitude)\"\n value=\"{{currentCoordinates}}\" readonly>\n </mat-form-field>\n <mat-form-field class=\"unit-field\">\n <mat-select [value]=\"coordinatesMeasureUnit\" (selectionChange)=\"onChangeCoordinateUnit($event.value)\">\n <mat-option *ngFor=\"let unit of allCoordinatesUnits\" [value]=\"unit\">\n {{unit}}\n </mat-option>\n </mat-select> \n </mat-form-field>\n </div>\n <div *ngIf=\"labelFlag === labelType.Length || polygonCheck === 2\">\n <mat-form-field class=\"readOnly-Input\">\n <input\n #input\n matInput\n placeholder={{lengthLabelT}}\n value=\"{{currentLength}}\" readonly>\n </mat-form-field>\n <mat-form-field class=\"unit-field\">\n <mat-select [value]=\"lengthMeasureUnit\" (selectionChange)=\"onChangeLengthUnit($event.value)\">\n <mat-option *ngFor=\"let unit of allLengthUnits\" [value]=\"unit\">\n {{getLengthUnitEnum(unit)}}\n </mat-option>\n </mat-select> \n </mat-form-field>\n </div>\n <div *ngIf=\"labelFlag === labelType.Area || polygonCheck === 2\">\n <mat-form-field class=\"readOnly-Input\">\n <input\n #input\n matInput\n placeholder=\"{{ 'igo.geo.draw.labelType.Area' | translate }}\"\n value=\"{{currentArea}}\" readonly>\n </mat-form-field>\n <mat-form-field class=\"unit-field\">\n <mat-select [value]=\"areaMeasureUnit\" (selectionChange)=\"onChangeAreaUnit($event.value)\">\n <mat-option *ngFor=\"let unit of allAreaUnits\" [value]=\"unit\">\n {{getAreaUnitEnum(unit)}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n\n <div mat-dialog-actions>\n <button mat-raised-button (click)=\"cancelDrawing()\" >\n {{'igo.geo.draw.cancel' | translate}}\n </button>\n <button \n mat-raised-button \n color=\"primary\" \n (click)=\"confirm()\"> \n {{noLabelButton()}} \n </button>\n </div>\n</div>\n\n<div *ngIf=\"labelFlag === labelType.Custom\">\n <div>\n <p class=\"mat-typography\">{{ 'igo.geo.draw.dialogInstruction' | translate }}</p>\n <mat-form-field class=\"input\">\n <input\n #input\n matInput\n (select)=\"true\"\n (input)=\"getLabelLength($event.target.value)\"\n placeholder=\"{{'igo.geo.draw.dialogTitle' | translate}}\"\n value=\"{{ currentLabel }}\"\n cdkFocusInitial/>\n </mat-form-field>\n </div>\n \n <div mat-dialog-actions>\n <button mat-raised-button (click)=\"cancelDrawing()\" >\n {{'igo.geo.draw.cancel' | translate}}\n </button>\n <button \n mat-raised-button \n color=\"primary\" \n (click)=\"confirm(input.value)\">\n {{noLabelButton()}}\n </button>\n </div>\n</div>\n", styles: [".mat-radio-button~.mat-radio-button{margin-left:16px}.readOnly-Input{width:200px!important}.unit-field{width:50px;margin-left:10px;margin-top:10px}.mat-form-field{position:-webkit-sticky!important;position:sticky!important}.coordinatesInputView{top:5em!important}::ng-deep .mat-form-field-wrapper{margin-bottom:-1.25em;margin-top:.25em}.geometry-type-toggle,.mat-dialog-actions{display:flex!important;justify-content:center}.input{width:auto!important}.mat-button-toggle-group,.mat-button-toggle{width:100%}mat-checkbox{margin-right:10px}\n"] }]
577
+ }], function () { return [{ type: i1.LanguageService }, { type: i2.MatDialogRef }, { type: undefined, decorators: [{
56
578
  type: Inject,
57
579
  args: [MAT_DIALOG_DATA]
58
580
  }] }]; }, { confirmFlag: [{
59
581
  type: Input
582
+ }], labelFlag: [{
583
+ type: Input
584
+ }], coordinatesMeasureUnit: [{
585
+ type: Input
586
+ }], lengthMeasureUnit: [{
587
+ type: Input
588
+ }], areaMeasureUnit: [{
589
+ type: Input
60
590
  }] }); })();
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy1wb3B1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQU96RSxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLFlBQ1MsU0FBMkMsRUFDbEIsSUFBOEI7UUFEdkQsY0FBUyxHQUFULFNBQVMsQ0FBa0M7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBMEI7UUFKdkQsZ0JBQVcsR0FBWSxLQUFLLENBQUM7SUFJNEIsQ0FBQztJQUVuRSxhQUFhO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxDQUFDLFdBQW1CO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O29GQWRVLGtCQUFrQiw4REFLbkIsZUFBZTtxRUFMZCxrQkFBa0I7O1FDUi9CLDhCQUF3QixXQUFBO1FBQ0ksWUFBa0Q7O1FBQUEsaUJBQUk7UUFDaEYseUNBQTJDO1FBQ3pDLDhCQUlpQzs7UUFDbkMsaUJBQWlCLEVBQUE7UUFFbkIsOEJBQXdCLGdCQUFBO1FBR3BCLCtGQUFTLG1CQUFlLElBQUM7UUFBQyxhQUM1Qjs7UUFBQSxpQkFBUztRQUNULGtDQUdpQztRQUEvQixzSkFBUyxlQUFBLHNCQUFvQixDQUFBLElBQUM7UUFBQyxvQkFDakM7UUFBQSxpQkFBUyxFQUFBOztRQWxCaUIsZUFBa0Q7UUFBbEQsNEVBQWtEO1FBS3hFLGVBQXdEO1FBQXhELHlGQUF3RDtRQUN4RCx3REFBNkI7UUFNTCxlQUM1QjtRQUQ0Qiw0RUFDNUI7O3VGRE5XLGtCQUFrQjtjQUw5QixTQUFTOzJCQUNFLDBCQUEwQjs7c0JBU2pDLE1BQU07dUJBQUMsZUFBZTt3QkFKaEIsV0FBVztrQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tZHJhdy1wb3B1cC1jb21wb25lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJhdy1wb3B1cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RyYXctcG9wdXAuY29tcG9uZW50LnNjc3MnXVxuICB9KVxuZXhwb3J0IGNsYXNzIERyYXdQb3B1cENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNvbmZpcm1GbGFnOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPERyYXdQb3B1cENvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiB7IGN1cnJlbnRMYWJlbDogc3RyaW5nIH0pe31cblxuICBjYW5jZWxEcmF3aW5nKCkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICBjb25maXJtKGxhYmVsU3RyaW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbmZpcm1GbGFnID0gdHJ1ZTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShsYWJlbFN0cmluZyk7XG4gIH1cbn1cbiIsIjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICA8cCBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+e3sgJ2lnby5nZW8uZHJhdy5kaWFsb2dJbnN0cnVjdGlvbicgfCB0cmFuc2xhdGUgfX08L3A+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImV4YW1wbGUtZnVsbC13aWR0aFwiPlxuICAgIDxpbnB1dFxuICAgICAgI2lucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLmRyYXcuZGlhbG9nVGl0bGUnIHwgdHJhbnNsYXRlfX1cIlxuICAgICAgdmFsdWU9XCJ7e2RhdGEuY3VycmVudExhYmVsfX1cIi8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8YnV0dG9uIFxuICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxuICAgIChjbGljayk9XCJjYW5jZWxEcmF3aW5nKClcIj57eydpZ28uZ2VvLmRyYXcuY2FuY2VsJyB8IHRyYW5zbGF0ZX19XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uIFxuICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxuICAgIGNvbG9yPVwicHJpbWFyeVwiIFxuICAgIChjbGljayk9XCJjb25maXJtKGlucHV0LnZhbHVlKVwiPk9LXG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
591
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy1wb3B1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBVSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsWUFBWSxFQUNaLGtCQUFrQixFQUNuQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsNkJBQTZCLEVBQzdCLGVBQWUsRUFDZiwyQkFBMkIsR0FDNUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUNBekMsNENBQ3NFO0lBQXRFLHlOQUFVLGVBQUEsc0NBQStCLENBQUEsSUFBQztJQUN4QyxZQUNGO0lBQUEsaUJBQW1COzs7O0lBSHVDLHVDQUFzQixxREFBQSw4QkFBQTtJQUU5RSxlQUNGO0lBREUsNkVBQ0Y7OztJQUpGLDBDQUE2RTtJQUMzRSx1SEFHbUI7SUFDckIsaUJBQWtCOzs7SUFKcUIsZUFBbUI7SUFBbkIsaURBQW1COzs7O0lBTXhELHdDQU02QjtJQUQzQiwrTUFBVSxlQUFBLDhEQUFzRCxDQUFBLElBQUM7SUFFakUsWUFDRjtJQUFBLGlCQUFlOzs7O0lBTGIsd0NBQXNCLHVEQUFBLCtCQUFBO0lBSXRCLGVBQ0Y7SUFERSwrRUFDRjs7O0lBVEYsZ0NBQTBFO0lBQ3hFLDRHQVFlO0lBQ2pCLDBCQUFlOzs7SUFSUSxlQUFtQjtJQUFuQixpREFBbUI7OztJQW1CcEMscUNBQW9FO0lBQ2xFLFlBQ0Y7SUFBQSxpQkFBYTs7O0lBRndDLGdDQUFjO0lBQ2pFLGVBQ0Y7SUFERSx5Q0FDRjs7OztJQVpOLDJCQUFpRCx5QkFBQTtJQUU3QyxnQ0FJMEM7SUFDNUMsaUJBQWlCO0lBQ2pCLDBDQUFtQyxxQkFBQTtJQUNZLHVNQUFtQixlQUFBLDRDQUFvQyxDQUFBLElBQUM7SUFDbkcsK0ZBRWE7SUFDZixpQkFBYSxFQUFBLEVBQUE7OztJQVBYLGVBQThCO0lBQTlCLDREQUE4QjtJQUdwQixlQUFnQztJQUFoQyxxREFBZ0M7SUFDYixlQUFzQjtJQUF0QixvREFBc0I7OztJQWdCbkQscUNBQStEO0lBQzdELFlBQ0Y7SUFBQSxpQkFBYTs7OztJQUZtQyxnQ0FBYztJQUM1RCxlQUNGO0lBREUsb0VBQ0Y7Ozs7SUFaTiwyQkFBa0UseUJBQUE7SUFFOUQsZ0NBSXFDO0lBQ3ZDLGlCQUFpQjtJQUNqQiwwQ0FBbUMscUJBQUE7SUFDTyx1TUFBbUIsZUFBQSx3Q0FBZ0MsQ0FBQSxJQUFDO0lBQzFGLCtGQUVhO0lBQ2YsaUJBQWEsRUFBQSxFQUFBOzs7SUFSWCxlQUE0QjtJQUE1Qiw0REFBNEI7SUFDNUIsdURBQXlCO0lBR2YsZUFBMkI7SUFBM0IsZ0RBQTJCO0lBQ1IsZUFBaUI7SUFBakIsK0NBQWlCOzs7SUFnQjlDLHFDQUE2RDtJQUMzRCxZQUNGO0lBQUEsaUJBQWE7Ozs7SUFGaUMsZ0NBQWM7SUFDMUQsZUFDRjtJQURFLGtFQUNGOzs7O0lBWk4sMkJBQWdFLHlCQUFBO0lBRTVELGdDQUltQzs7SUFDckMsaUJBQWlCO0lBQ2pCLDBDQUFtQyxxQkFBQTtJQUNLLHVNQUFtQixlQUFBLHNDQUE4QixDQUFBLElBQUM7SUFDdEYsK0ZBRWE7SUFDZixpQkFBYSxFQUFBLEVBQUE7OztJQVJYLGVBQTZEO0lBQTdELDRGQUE2RDtJQUM3RCxxREFBdUI7SUFHYixlQUF5QjtJQUF6Qiw4Q0FBeUI7SUFDTixlQUFlO0lBQWYsNkNBQWU7Ozs7SUE5RHRELDJCQUE0QyxVQUFBLFdBQUE7SUFFZCxZQUFvRDs7SUFBQSxpQkFBSTtJQUNsRixrR0FLa0I7SUFDbEIsNEZBVWU7SUFDZiwwRUFlTTtJQUNOLDBFQWVNO0lBQ04sMEVBZU07SUFDUixpQkFBTTtJQUdOLCtCQUF3QixpQkFBQTtJQUNJLG1LQUFTLGVBQUEsdUJBQWUsQ0FBQSxJQUFDO0lBQ2pELGFBQ0Y7O0lBQUEsaUJBQVM7SUFDVCxrQ0FHc0I7SUFBcEIsbUtBQVMsZUFBQSxpQkFBUyxDQUFBLElBQUM7SUFDbkIsYUFDRjtJQUFBLGlCQUFTLEVBQUEsRUFBQTs7O0lBOUVpQixlQUFvRDtJQUFwRCw4RUFBb0Q7SUFDNUQsZUFBa0M7SUFBbEMsMERBQWtDO0lBTWQsZUFBa0M7SUFBbEMsMERBQWtDO0lBV2xFLGVBQXlDO0lBQXpDLHdFQUF5QztJQWdCekMsZUFBMEQ7SUFBMUQsZ0dBQTBEO0lBZ0IxRCxlQUF3RDtJQUF4RCw4RkFBd0Q7SUFxQjVELGVBQ0Y7SUFERSw4RUFDRjtJQUtFLGVBQ0Y7SUFERSx1REFDRjs7OztJQUlKLDJCQUE0QyxVQUFBLFdBQUE7SUFFZCxZQUFrRDs7SUFBQSxpQkFBSTtJQUNoRiwwQ0FBOEIsb0JBQUE7SUFJMUIsdUdBQVUsSUFBSSxJQUFDLDBKQUNOLGVBQUEsMkNBQW1DLENBQUEsSUFEN0I7O0lBSGpCLGlCQU9tQixFQUFBLEVBQUE7SUFJdkIsOEJBQXdCLGlCQUFBO0lBQ0ksbUtBQVMsZUFBQSx1QkFBZSxDQUFBLElBQUM7SUFDakQsYUFDRjs7SUFBQSxpQkFBUztJQUNULGtDQUdpQztJQUEvQixtTUFBUyxlQUFBLDJCQUFvQixDQUFBLElBQUM7SUFDOUIsYUFDRjtJQUFBLGlCQUFTLEVBQUEsRUFBQTs7O0lBdEJpQixlQUFrRDtJQUFsRCw0RUFBa0Q7SUFPeEUsZUFBd0Q7SUFBeEQseUZBQXdEO0lBQ3hELHNEQUEwQjtJQU81QixlQUNGO0lBREUsNkVBQ0Y7SUFLRSxlQUNGO0lBREUsdURBQ0Y7O0FEaEdKLE1BQU0sT0FBTyxrQkFBa0I7SUEyQjdCLFlBQ1UsZUFBZ0MsRUFDakMsU0FBMkMsRUFDbEIsSUFBc0M7UUFGOUQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQWtDO1FBQ2xCLFNBQUksR0FBSixJQUFJLENBQWtDO1FBN0IvRCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixjQUFTLEdBQXVDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFLbkUsaUJBQVksR0FBRyxZQUFZLENBQUM7UUFDNUIsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN0QixxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFPN0IsbUJBQWMsR0FBaUIsU0FBUyxDQUFDO1FBU3pDLGlCQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsMkNBQTJDO1FBT2hFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLFVBQVUsQ0FBQztRQUVmLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUU5RCxJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxZQUFZLFNBQVMsRUFBRTtZQUM1QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBQztnQkFDbEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDeEcsSUFBSSxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO2dCQUMxQyxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDN0U7aUJBQ0c7Z0JBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkUsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNuRDtTQUNGO2FBQ0c7WUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JELFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUNuQztRQUVELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxZQUFZLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssWUFBWSxDQUFDLE1BQU0sRUFBQztZQUM1RixJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxZQUFZLFNBQVMsRUFBQztnQkFDM0MsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsR0FBRyxRQUFRLEdBQUcsSUFBSTtzQkFDMUMsU0FBUyxHQUFHLEdBQUcsQ0FBQzthQUNuQjtpQkFDSTtnQkFDSCxJQUFJLFNBQVMsR0FBRyxTQUFTLENBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFLEVBQ3pDLFVBQVUsRUFDVixXQUFXLENBQ1osQ0FBQztnQkFDRixJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLGVBQWU7b0JBQ2xCLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUM1RDtZQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFlBQVksQ0FBQyxVQUFVLEVBQUM7WUFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUMxQzthQUNJLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxZQUFZLENBQUMsT0FBTyxFQUFDO1lBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLFVBQVUsRUFBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7U0FDNUM7YUFDSSxJQUFHLElBQUksQ0FBQyxjQUFjLEtBQUssWUFBWSxDQUFDLE1BQU0sRUFBQztZQUNsRCxJQUFJLGVBQWUsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN6QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcscUJBQXFCLENBQUMsZUFBZSxFQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUM1QztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxDQUFDLFdBQVcsRUFBRTtZQUM5RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNsRTthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBRTtZQUNoRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUM3RDthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtZQUM5RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDM0Q7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUg7O09BRUc7SUFFSCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBRyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxVQUFVLEVBQUM7WUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN4QjthQUNJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFDO1lBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUNuQixLQUFLLEVBQUUsS0FBSzthQUNiLENBQUMsQ0FBQztTQUNKO2FBQ0ksSUFBRyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxXQUFXLEVBQUM7WUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCO2dCQUM5QixXQUFXLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjthQUN6QyxDQUFDLENBQUM7U0FDSjthQUNJLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQ3JELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0JBQ25CLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsNkJBQTZCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSTswQkFDdEcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHO3dCQUM3RiwyQkFBMkIsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7aUJBQ3ZILENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDbkIsS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7d0JBQy9GLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO3FCQUNwQyxDQUFDLENBQUMsQ0FBQztvQkFDSixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzt3QkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLDJCQUEyQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7d0JBQ2pGLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZTtxQkFDbEMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjthQUNJLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFDO1lBQzNDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFDO2dCQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztvQkFDbkIsS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7b0JBQy9GLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2lCQUNwQyxDQUFDLENBQUM7YUFDSjtpQkFDSSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssWUFBWSxDQUFDLFVBQVUsRUFBRTtnQkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsR0FBRyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7b0JBQ3ZGLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2lCQUNwQyxDQUFDLENBQUM7YUFDSjtTQUNGO2FBQ0ksSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUM7WUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUNqRixXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWU7YUFDbEMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBb0IsRUFBRSxPQUFpQjtRQUN2RCxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsVUFBVTtZQUNwQyxTQUFTLEtBQUssU0FBUyxDQUFDLE1BQU07WUFDOUIsSUFBSSxDQUFDLGNBQWMsS0FBSyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQzlHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUM7U0FDbkg7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxTQUFTLEtBQUssU0FBUyxDQUFDLFVBQVUsRUFBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssWUFBWSxDQUFDLEtBQUssRUFBRTtnQkFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUM7YUFDN0Q7aUJBQ0ksSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFlBQVksQ0FBQyxVQUFVLEVBQUM7Z0JBQ3ZELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDO2FBQ25EO1NBQ0Y7YUFDSSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFDO1lBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQzNDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztTQUNyRDthQUNJLElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUM7WUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7U0FDbkQ7YUFDSSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFdBQVcsRUFBQztZQUNoRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUMvQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQztTQUM3RDtRQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRSxJQUNFLElBQUksQ0FBQyxjQUFjLEtBQUssWUFBWSxDQUFDLE9BQU87WUFDNUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNoQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztZQUFBLENBQUM7U0FDNUQ7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQTZCO1FBQzlDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQXlCO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsc0JBQXNCLENBQUMsZUFBZ0M7UUFDckQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGVBQWUsQ0FBQztRQUM5QyxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUMvRSxDQUFDO0lBRUQsY0FBYztRQUNaLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBQztZQUMvQyxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsTUFBTSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsVUFBVSxFQUFDO2dCQUN2RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO29CQUN6QixLQUFLLEVBQUUsU0FBUztvQkFDaEIsT0FBTyxFQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO3dCQUM3QixJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVM7d0JBQzVCLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQyxXQUFXLENBQUM7aUJBQ25FLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUM7WUFDN0csT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUN2RTtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFDO1lBQ3RDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztTQUN6QjtRQUNELE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUM5QixDQUFDO0lBRUQsZUFBZSxDQUFDLGFBQXdCO1FBQ3RDLFFBQU8sSUFBSSxDQUFDLGNBQWMsRUFBQztZQUN6QixLQUFLLFlBQVksQ0FBQyxLQUFLO2dCQUNyQixJQUFJLGFBQWEsS0FBSyxTQUFTLENBQUMsV0FBVyxFQUFDO29CQUMxQyxPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssWUFBWSxDQUFDLFVBQVU7Z0JBQzFCLElBQUksYUFBYSxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUM7b0JBQ3JDLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxZQUFZLENBQUMsT0FBTztnQkFDdkIsSUFBSSxhQUFhLEtBQUssU0FBUyxDQUFDLFdBQVcsRUFBQztvQkFDMUMsT0FBTyxJQUFJLENBQUM7aUJBQ2I7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZjtnQkFDRSxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGlCQUFpQixDQUFDLFVBQTZCO1FBQzdDLE9BQU8sNkJBQTZCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBeUI7UUFDdkMsT0FBTywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sU0FBUyxDQUFDLFVBQVU7UUFDMUIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFlBQVksQ0FBQyxPQUFPLEVBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUM1RTtRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFDO1lBQzlDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7U0FDcEY7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBTTtRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFNO1FBQ2xCLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxZQUFZLENBQUMsS0FBSyxFQUFDO1lBQzdDLE9BQU8sTUFBTSxLQUFLLFNBQVMsQ0FBQyxXQUFXLENBQUM7U0FDekM7YUFDSSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssWUFBWSxDQUFDLFVBQVUsRUFBQztZQUN2RCxPQUFPLE1BQU0sS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQU07UUFDekIsSUFBSSxNQUFNLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBQztZQUM5QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssWUFBWSxDQUFDLE9BQU8sRUFBQztnQkFDL0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQzthQUM1RTtZQUNELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFDO2dCQUM5QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO2FBQ3BGO1lBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUNoRjtRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3BGLENBQUM7O29GQWpXVSxrQkFBa0Isd0dBOEJuQixlQUFlO3FFQTlCZCxrQkFBa0I7UUMvQi9CLDJCQUFLLFlBQUE7UUFFRCxZQUNGOztRQUFBLGlCQUFLLEVBQUE7UUFJUCw4QkFBaUQsaUNBQUE7UUFFN0Msd0hBQVUsbUNBQStCLElBQUM7UUFDMUMsNENBQStDO1FBQzdDLFlBQ0Y7O1FBQUEsaUJBQW9CO1FBQ3BCLDRDQUFrRDtRQUNoRCxhQUNGOztRQUFBLGlCQUFvQixFQUFBLEVBQUE7UUFJeEIsdUVBa0ZNO1FBRU4sdUVBMEJNOztRQS9IRixlQUNGO1FBREUsZ0ZBQ0Y7UUFNNkMsZUFBNEI7UUFBNUIsOENBQTRCO1FBQ3BELGVBQTBCO1FBQTFCLDRDQUEwQjtRQUMzQyxlQUNGO1FBREUsdUZBQ0Y7UUFDbUIsZUFBOEI7UUFBOUIsZ0RBQThCO1FBQy9DLGVBQ0Y7UUFERSw0RkFDRjtRQUlFLGVBQW9DO1FBQXBDLDZEQUFvQztRQW9GcEMsZUFBb0M7UUFBcEMsNkRBQW9DOzt1RkR4RTdCLGtCQUFrQjtjQUw5QixTQUFTOzJCQUNFLDBCQUEwQjs7c0JBa0NqQyxNQUFNO3VCQUFDLGVBQWU7d0JBN0JoQixXQUFXO2tCQUFuQixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLHNCQUFzQjtrQkFBOUIsS0FBSztZQUNHLGlCQUFpQjtrQkFBekIsS0FBSztZQUNHLGVBQWU7a0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZXNVbml0LCBHZW9tZXRyeVR5cGUsIExhYmVsVHlwZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LmVudW0nO1xuaW1wb3J0IHsgdHJhbnNmb3JtIH0gZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgeyBJZ29NYXAsIHJvdW5kQ29vcmRUbyB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQnO1xuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCB7XG4gIG1lYXN1cmVPbEdlb21ldHJ5TGVuZ3RoLFxuICBtZWFzdXJlT2xHZW9tZXRyeUFyZWEsXG4gIG1ldGVyc1RvVW5pdCxcbiAgc3F1YXJlTWV0ZXJzVG9Vbml0XG59IGZyb20gJy4uLy4uL21lYXN1cmUvc2hhcmVkL21lYXN1cmUudXRpbHMnO1xuaW1wb3J0IHtcbiAgTWVhc3VyZUxlbmd0aFVuaXQsXG4gIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uLFxuICBNZWFzdXJlQXJlYVVuaXQsXG4gIE1lYXN1cmVBcmVhVW5pdEFiYnJldmlhdGlvbixcbn0gZnJvbSAnLi4vLi4vbWVhc3VyZS9zaGFyZWQvbWVhc3VyZS5lbnVtJztcblxuaW1wb3J0IHtmcm9tQ2lyY2xlfSBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xuaW1wb3J0IHsgZ2V0TGVuZ3RoIH0gZnJvbSAnb2wvc3BoZXJlJztcbmltcG9ydCBDaXJjbGUgZnJvbSAnb2wvZ2VvbS9DaXJjbGUnO1xuaW1wb3J0IHsgRER0b0RNUyB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LnV0aWxzJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tZHJhdy1wb3B1cC1jb21wb25lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJhdy1wb3B1cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RyYXctcG9wdXAuY29tcG9uZW50LnNjc3MnXVxuICB9KVxuZXhwb3J0IGNsYXNzIERyYXdQb3B1cENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNvbmZpcm1GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxhYmVsRmxhZzogTGFiZWxUeXBlIHwgW0xhYmVsVHlwZSwgTGFiZWxUeXBlXSA9IExhYmVsVHlwZS5DdXN0b207XG4gIEBJbnB1dCgpIGNvb3JkaW5hdGVzTWVhc3VyZVVuaXQ6IENvb3JkaW5hdGVzVW5pdDtcbiAgQElucHV0KCkgbGVuZ3RoTWVhc3VyZVVuaXQ6IE1lYXN1cmVMZW5ndGhVbml0O1xuICBASW5wdXQoKSBhcmVhTWVhc3VyZVVuaXQ6IE1lYXN1cmVBcmVhVW5pdDtcblxuICBwdWJsaWMgZ2VvbWV0cnlUeXBlID0gR2VvbWV0cnlUeXBlO1xuICBwdWJsaWMgbGFiZWxUeXBlID0gTGFiZWxUeXBlO1xuICBwdWJsaWMgYXJyYXlCdWlsdEluVHlwZTogYW55W10gPSBbXTtcblxuICBwdWJsaWMgY3VycmVudExhYmVsOiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50Q29vcmRpbmF0ZXM6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRBcmVhOiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50TGVuZ3RoOiBzdHJpbmc7XG5cbiAgcHVibGljIG9sR2VvbWV0cnlUeXBlOiBHZW9tZXRyeVR5cGUgPSB1bmRlZmluZWQ7XG4gIHB1YmxpYyBsZW5ndGhJbk1ldGVyczogc3RyaW5nO1xuICBwdWJsaWMgYXJlYUluTWV0ZXJzU3F1YXJlOiBzdHJpbmc7XG4gIHB1YmxpYyBjb29yZGluYXRlc0luREQ6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRDb29yZGluYXRlc1VuaXQ6IHN0cmluZztcblxuICBwcml2YXRlIGxvbmdsYXRERDogW251bWJlciwgbnVtYmVyXTtcbiAgcHJpdmF0ZSBsYWJlbExlbmd0aDogbnVtYmVyO1xuXG4gIHB1YmxpYyBwb2x5Z29uQ2hlY2sgPSAwOyAvLyBDb3VudCBmb3IgcG9seWdvbiBsYWJlbCB0eXBlcyBjaGVja2JveGVzXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RHJhd1BvcHVwQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHsgb2xHZW9tZXRyeTogYW55LCBtYXA6IElnb01hcCB9XG4gICAgKSB7XG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMuZGF0YS5vbEdlb21ldHJ5LmdldCgnZHJhdycpO1xuICAgICAgdGhpcy5sYWJlbExlbmd0aCA9IHRoaXMuY3VycmVudExhYmVsID8gdGhpcy5jdXJyZW50TGFiZWwubGVuZ3RoOiAwO1xuICAgICAgbGV0IG9sR2VvbWV0cnk7XG5cbiAgICAgIGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLmRhdGEubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCk7XG5cbiAgICAgIGlmKHRoaXMuZGF0YS5vbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xGZWF0dXJlKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEub2xHZW9tZXRyeS5nZXQoJ3JhZCcpKXtcbiAgICAgICAgICBjb25zdCBsb25naXR1ZGVMYXRpdHVkZSA9IFt0aGlzLmRhdGEub2xHZW9tZXRyeS5nZXQoJ2xvbmdpdHVkZScpLCB0aGlzLmRhdGEub2xHZW9tZXRyeS5nZXQoJ2xhdGl0dWRlJyldO1xuICAgICAgICAgIHRoaXMub2xHZW9tZXRyeVR5cGUgPSBHZW9tZXRyeVR5cGUuQ2lyY2xlO1xuICAgICAgICAgIG9sR2VvbWV0cnkgPSBuZXcgQ2lyY2xlKGxvbmdpdHVkZUxhdGl0dWRlLCB0aGlzLmRhdGEub2xHZW9tZXRyeS5nZXQoJ3JhZCcpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIHRoaXMub2xHZW9tZXRyeVR5cGUgPSB0aGlzLmRhdGEub2xHZW9tZXRyeS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKTtcbiAgICAgICAgICBvbEdlb21ldHJ5ID0gdGhpcy5kYXRhLm9sR2VvbWV0cnkuZ2V0KCdnZW9tZXRyeScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNle1xuICAgICAgICB0aGlzLm9sR2VvbWV0cnlUeXBlID0gdGhpcy5kYXRhLm9sR2VvbWV0cnkuZ2V0VHlwZSgpO1xuICAgICAgICBvbEdlb21ldHJ5ID0gdGhpcy5kYXRhLm9sR2VvbWV0cnk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUG9pbnQgfHwgdGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLkNpcmNsZSl7XG4gICAgICAgIGlmKHRoaXMuZGF0YS5vbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xGZWF0dXJlKXtcbiAgICAgICAgICBsZXQgbG9uZ2l0dWRlID0gdGhpcy5kYXRhLm9sR2VvbWV0cnkuZ2V0KCdsb25naXR1ZGUnKTtcbiAgICAgICAgICBsZXQgbGF0aXR1ZGUgPSB0aGlzLmRhdGEub2xHZW9tZXRyeS5nZXQoJ2xhdGl0dWRlJyk7XG4gICAgICAgICAgdGhpcy5sb25nbGF0REQgPSByb3VuZENvb3JkVG8oW2xvbmdpdHVkZSwgbGF0aXR1ZGVdLCA1KTtcbiAgICAgICAgICB0aGlzLmNvb3JkaW5hdGVzSW5ERCA9ICcoJyArIGxhdGl0dWRlICsgJywgJ1xuICAgICAgICAgICsgbG9uZ2l0dWRlICsgJyknO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGxldCBwb2ludDQzMjYgPSB0cmFuc2Zvcm0oXG4gICAgICAgICAgICB0aGlzLmRhdGEub2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKSxcbiAgICAgICAgICAgIHByb2plY3Rpb24sXG4gICAgICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5sb25nbGF0REQgPSByb3VuZENvb3JkVG8oW3BvaW50NDMyNlswXSwgcG9pbnQ0MzI2WzFdXSwgNSk7XG4gICAgICAgICAgdGhpcy5jb29yZGluYXRlc0luREQgPVxuICAgICAgICAgICAgJygnICsgdGhpcy5sb25nbGF0RERbMV0gKyAnLCAnICsgdGhpcy5sb25nbGF0RERbMF0gKyAnKSc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNvb3JkaW5hdGVzSW5ERDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTGluZVN0cmluZyl7XG4gICAgICAgIHRoaXMubGVuZ3RoSW5NZXRlcnMgPSBtZWFzdXJlT2xHZW9tZXRyeUxlbmd0aChvbEdlb21ldHJ5LCBwcm9qZWN0aW9uLmdldENvZGUoKSkudG9GaXhlZCgyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TGVuZ3RoID0gdGhpcy5sZW5ndGhJbk1ldGVycztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5Qb2x5Z29uKXtcbiAgICAgICAgdGhpcy5sZW5ndGhJbk1ldGVycyA9IG1lYXN1cmVPbEdlb21ldHJ5TGVuZ3RoKG9sR2VvbWV0cnksIHByb2plY3Rpb24uZ2V0Q29kZSgpKS50b0ZpeGVkKDIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRMZW5ndGggPSB0aGlzLmxlbmd0aEluTWV0ZXJzO1xuICAgICAgICB0aGlzLmFyZWFJbk1ldGVyc1NxdWFyZSA9IG1lYXN1cmVPbEdlb21ldHJ5QXJlYShvbEdlb21ldHJ5LHByb2plY3Rpb24uZ2V0Q29kZSgpKS50b0ZpeGVkKDIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRBcmVhID0gdGhpcy5hcmVhSW5NZXRlcnNTcXVhcmU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5DaXJjbGUpe1xuICAgICAgICBsZXQgY2lyY3VsYXJQb2x5Z29uID0gZnJvbUNpcmNsZShvbEdlb21ldHJ5LCAxMDAwMCk7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMuZ2V0UmFkaXVzKGNpcmN1bGFyUG9seWdvbik7XG4gICAgICAgIHRoaXMubGVuZ3RoSW5NZXRlcnMgPSByYWRpdXMudG9GaXhlZCgyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TGVuZ3RoID0gdGhpcy5sZW5ndGhJbk1ldGVycztcbiAgICAgICAgdGhpcy5hcmVhSW5NZXRlcnNTcXVhcmUgPSBtZWFzdXJlT2xHZW9tZXRyeUFyZWEoY2lyY3VsYXJQb2x5Z29uLHByb2plY3Rpb24uZ2V0Q29kZSgpKS50b0ZpeGVkKDIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRBcmVhID0gdGhpcy5hcmVhSW5NZXRlcnNTcXVhcmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLm9sR2VvbWV0cnkuZ2V0KCdsYWJlbFR5cGUnKSA9PT0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzKSB7XG4gICAgICAgIHRoaXMub25MYWJlbFR5cGVDaGFuZ2UoTGFiZWxUeXBlLlByZWRlZmluZWQpO1xuICAgICAgICB0aGlzLm9uTGFiZWxUeXBlQ2hhbmdlKExhYmVsVHlwZS5Db29yZGluYXRlcywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY29vcmRpbmF0ZXNNZWFzdXJlVW5pdCA9IGRhdGEub2xHZW9tZXRyeS5nZXQoJ21lYXN1cmVVbml0Jyk7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEub2xHZW9tZXRyeS5nZXQoJ2xhYmVsVHlwZScpID09PSBMYWJlbFR5cGUuTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMub25MYWJlbFR5cGVDaGFuZ2UoTGFiZWxUeXBlLlByZWRlZmluZWQpO1xuICAgICAgICB0aGlzLm9uTGFiZWxUeXBlQ2hhbmdlKExhYmVsVHlwZS5MZW5ndGgsIHRydWUpO1xuICAgICAgICB0aGlzLmxlbmd0aE1lYXN1cmVVbml0ID0gZGF0YS5vbEdlb21ldHJ5LmdldCgnbWVhc3VyZVVuaXQnKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5vbEdlb21ldHJ5LmdldCgnbGFiZWxUeXBlJykgPT09IExhYmVsVHlwZS5BcmVhKSB7XG4gICAgICAgIHRoaXMub25MYWJlbFR5cGVDaGFuZ2UoTGFiZWxUeXBlLlByZWRlZmluZWQpO1xuICAgICAgICB0aGlzLm9uTGFiZWxUeXBlQ2hhbmdlKExhYmVsVHlwZS5BcmVhLCB0cnVlKTtcbiAgICAgICAgdGhpcy5hcmVhTWVhc3VyZVVuaXQgPSBkYXRhLm9sR2VvbWV0cnkuZ2V0KCdtZWFzdXJlVW5pdCcpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLm9sR2VvbWV0cnkuZ2V0KCdsYWJlbFR5cGUnKT8ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHRoaXMub25MYWJlbFR5cGVDaGFuZ2UoTGFiZWxUeXBlLlByZWRlZmluZWQpO1xuICAgICAgICB0aGlzLm9uTGFiZWxUeXBlQ2hhbmdlKExhYmVsVHlwZS5MZW5ndGgsIHRydWUpO1xuICAgICAgICB0aGlzLm9uTGFiZWxUeXBlQ2hhbmdlKExhYmVsVHlwZS5BcmVhLCB0cnVlKTtcbiAgICAgICAgdGhpcy5sZW5ndGhNZWFzdXJlVW5pdCA9IGRhdGEub2xHZW9tZXRyeS5nZXQoJ21lYXN1cmVVbml0JylbMF07XG4gICAgICAgIHRoaXMuYXJlYU1lYXN1cmVVbml0ID0gZGF0YS5vbEdlb21ldHJ5LmdldCgnbWVhc3VyZVVuaXQnKVsxXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVpbGRBcnJheVR5cGUoKTtcbiAgICB9XG5cbiAgLyoqXG4gICAqIEhUTUwgSW50ZXJhY3Rpb25zXG4gICAqL1xuXG4gIGNhbmNlbERyYXdpbmcoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIGNvbmZpcm0oaW5wdXQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbmZpcm1GbGFnID0gdHJ1ZTtcbiAgICBpZih0aGlzLmxhYmVsRmxhZyA9PT0gTGFiZWxUeXBlLlByZWRlZmluZWQpe1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5sYWJlbEZsYWcgPT09IExhYmVsVHlwZS5DdXN0b20pe1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xuICAgICAgICBsYWJlbDogaW5wdXRcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmKHRoaXMubGFiZWxGbGFnID09PSBMYWJlbFR5cGUuQ29vcmRpbmF0ZXMpe1xuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xuICAgICAgICBsYWJlbDogdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMsXG4gICAgICAgIG1lYXN1cmVVbml0OiB0aGlzLmNvb3JkaW5hdGVzTWVhc3VyZVVuaXRcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUG9seWdvbikge1xuICAgICAgaWYgKHRoaXMucG9seWdvbkNoZWNrID09PSAyKSB7XG4gICAgICAgIHRoaXMubGFiZWxGbGFnID0gW0xhYmVsVHlwZS5MZW5ndGgsIExhYmVsVHlwZS5BcmVhXTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xuICAgICAgICAgIGxhYmVsOiAnUDogJyArIHRoaXMuY3VycmVudExlbmd0aCArICcgJyArIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uW01lYXN1cmVMZW5ndGhVbml0Lk1ldGVyc10gKyAnXFxuJ1xuICAgICAgICAgICsgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZHJhdy5sYWJlbFR5cGUuQScpICsgdGhpcy5jdXJyZW50QXJlYSArICcgJyArXG4gICAgICAgICAgTWVhc3VyZUFyZWFVbml0QWJicmV2aWF0aW9uW01lYXN1cmVBcmVhVW5pdC5TcXVhcmVNZXRlcnNdLCBtZWFzdXJlVW5pdDogW3RoaXMubGVuZ3RoTWVhc3VyZVVuaXQsIHRoaXMuYXJlYU1lYXN1cmVVbml0XVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFiZWxGbGFnID09PSBMYWJlbFR5cGUuTGVuZ3RoID9cbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xuICAgICAgICAgIGxhYmVsOiAnUDogJyArIHRoaXMuY3VycmVudExlbmd0aCArICcgJyArIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uW3RoaXMubGVuZ3RoTWVhc3VyZVVuaXRdLFxuICAgICAgICAgIG1lYXN1cmVVbml0OiB0aGlzLmxlbmd0aE1lYXN1cmVVbml0XG4gICAgICAgIH0pIDpcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmN1cnJlbnRBcmVhICsgJyAnICsgTWVhc3VyZUFyZWFVbml0QWJicmV2aWF0aW9uW3RoaXMuYXJlYU1lYXN1cmVVbml0XSxcbiAgICAgICAgICBtZWFzdXJlVW5pdDogdGhpcy5hcmVhTWVhc3VyZVVuaXRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMubGFiZWxGbGFnID09PSBMYWJlbFR5cGUuTGVuZ3RoKXtcbiAgICAgIGlmICh0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuQ2lyY2xlKXtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xuICAgICAgICAgIGxhYmVsOiAnUjogJyArIHRoaXMuY3VycmVudExlbmd0aCArICcgJyArIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uW3RoaXMubGVuZ3RoTWVhc3VyZVVuaXRdLFxuICAgICAgICAgIG1lYXN1cmVVbml0OiB0aGlzLmxlbmd0aE1lYXN1cmVVbml0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLkxpbmVTdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xuICAgICAgICAgIGxhYmVsOiB0aGlzLmN1cnJlbnRMZW5ndGggKyAnICcgKyBNZWFzdXJlTGVuZ3RoVW5pdEFiYnJldmlhdGlvblt0aGlzLmxlbmd0aE1lYXN1cmVVbml0XSxcbiAgICAgICAgICBtZWFzdXJlVW5pdDogdGhpcy5sZW5ndGhNZWFzdXJlVW5pdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5sYWJlbEZsYWcgPT09IExhYmVsVHlwZS5BcmVhKXtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHtcbiAgICAgICAgbGFiZWw6IHRoaXMuY3VycmVudEFyZWEgKyAnICcgKyBNZWFzdXJlQXJlYVVuaXRBYmJyZXZpYXRpb25bdGhpcy5hcmVhTWVhc3VyZVVuaXRdLFxuICAgICAgICBtZWFzdXJlVW5pdDogdGhpcy5hcmVhTWVhc3VyZVVuaXRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uTGFiZWxUeXBlQ2hhbmdlKGxhYmVsVHlwZTogTGFiZWxUeXBlLCBjaGVja2VkPzogYm9vbGVhbil7XG4gICAgaWYgKGxhYmVsVHlwZSAhPT0gTGFiZWxUeXBlLlByZWRlZmluZWQgJiZcbiAgICAgIGxhYmVsVHlwZSAhPT0gTGFiZWxUeXBlLkN1c3RvbSAmJlxuICAgICAgdGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLlBvbHlnb24pIHtcbiAgICAgICAgdGhpcy5hcnJheUJ1aWx0SW5UeXBlLmZpbmQodHlwZSA9PiB0eXBlLnZhbHVlID09PSBsYWJlbFR5cGUpID9cbiAgICAgICAgICB0aGlzLmFycmF5QnVpbHRJblR5cGUuZmluZCh0eXBlID0+IHR5cGUudmFsdWUgPT09IGxhYmVsVHlwZSkuY2hlY2tlZCA9IGNoZWNrZWQgOiB0aGlzLmxhYmVsRmxhZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgY2hlY2tlZCA/IHRoaXMubGFiZWxGbGFnID0gbGFiZWxUeXBlIDogdGhpcy5sYWJlbEZsYWcgPSB0aGlzLmFycmF5QnVpbHRJblR5cGUuZmluZCh0eXBlID0+IHR5cGUuY2hlY2tlZCk/LnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhYmVsRmxhZyA9IGxhYmVsVHlwZTtcbiAgICB9XG5cbiAgICBpZiAobGFiZWxUeXBlID09PSBMYWJlbFR5cGUuUHJlZGVmaW5lZCl7XG4gICAgICBpZiAodGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLlBvaW50ICl7XG4gICAgICAgIHRoaXMubGFiZWxGbGFnID0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzO1xuICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY29vcmRpbmF0ZXNJbkREO1xuICAgICAgICB0aGlzLmNvb3JkaW5hdGVzTWVhc3VyZVVuaXQgPSBDb29yZGluYXRlc1VuaXQuRGVjaW1hbERlZ3JlZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nKXtcbiAgICAgICAgdGhpcy5sYWJlbEZsYWcgPSBMYWJlbFR5cGUuTGVuZ3RoO1xuICAgICAgICB0aGlzLmN1cnJlbnRMZW5ndGggPSB0aGlzLmxlbmd0aEluTWV0ZXJzO1xuICAgICAgICB0aGlzLmxlbmd0aE1lYXN1cmVVbml0ID0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChsYWJlbFR5cGUgPT09IExhYmVsVHlwZS5BcmVhKXtcbiAgICAgIHRoaXMuY3VycmVudEFyZWEgPSB0aGlzLmFyZWFJbk1ldGVyc1NxdWFyZTtcbiAgICAgIHRoaXMuYXJlYU1lYXN1cmVVbml0ID0gTWVhc3VyZUFyZWFVbml0LlNxdWFyZU1ldGVycztcbiAgICB9XG4gICAgZWxzZSBpZiAobGFiZWxUeXBlID09PSBMYWJlbFR5cGUuTGVuZ3RoKXtcbiAgICAgIHRoaXMuY3VycmVudExlbmd0aCA9IHRoaXMubGVuZ3RoSW5NZXRlcnM7XG4gICAgICB0aGlzLmxlbmd0aE1lYXN1cmVVbml0ID0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmxhYmVsRmxhZyA9PT0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzKXtcbiAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jb29yZGluYXRlc0luREQ7XG4gICAgICB0aGlzLmNvb3JkaW5hdGVzTWVhc3VyZVVuaXQgPSBDb29yZGluYXRlc1VuaXQuRGVjaW1hbERlZ3JlZTtcbiAgICB9XG5cbiAgICBjb25zdCBsYWJlbHR5cGVzID0gW3RoaXMubGFiZWxUeXBlLkxlbmd0aCwgdGhpcy5sYWJlbFR5cGUuQXJlYV07XG4gICAgaWYgKFxuICAgICAgdGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLlBvbHlnb24gJiZcbiAgICAgIGxhYmVsdHlwZXMuaW5jbHVkZXMobGFiZWxUeXBlKSkge1xuICAgICAgY2hlY2tlZCA/IHRoaXMucG9seWdvbkNoZWNrICs9IDEgOiB0aGlzLnBvbHlnb25DaGVjayAtPSAxOztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb2x5Z29uQ2hlY2sgPSAwO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlTGVuZ3RoVW5pdChsZW5ndGhVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCl7XG4gICAgdGhpcy5sZW5ndGhNZWFzdXJlVW5pdCA9IGxlbmd0aFVuaXQ7XG4gICAgdGhpcy5jdXJyZW50TGVuZ3RoID0gbWV0ZXJzVG9Vbml0KE51bWJlcih0aGlzLmxlbmd0aEluTWV0ZXJzKSwgbGVuZ3RoVW5pdCkudG9GaXhlZCgyKTtcbiAgfVxuXG4gIG9uQ2hhbmdlQXJlYVVuaXQoYXJlYVVuaXQ6IE1lYXN1cmVBcmVhVW5pdCl7XG4gICAgdGhpcy5hcmVhTWVhc3VyZVVuaXQgPSBhcmVhVW5pdDtcbiAgICB0aGlzLmN1cnJlbnRBcmVhID0gc3F1YXJlTWV0ZXJzVG9Vbml0KE51bWJlcih0aGlzLmFyZWFJbk1ldGVyc1NxdWFyZSksIGFyZWFVbml0KS50b0ZpeGVkKDIpO1xuICB9XG5cbiAgb25DaGFuZ2VDb29yZGluYXRlVW5pdChjb29yZGluYXRlc1VuaXQ6IENvb3JkaW5hdGVzVW5pdCl7XG4gICAgdGhpcy5jb29yZGluYXRlc01lYXN1cmVVbml0ID0gY29vcmRpbmF0ZXNVbml0O1xuICAgIGxldCBjb29yZGluYXRlcyA9IEREdG9ETVModGhpcy5sb25nbGF0REQsIGNvb3JkaW5hdGVzVW5pdCk7XG4gICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSAnKCcgKyBjb29yZGluYXRlc1sxXSArICcsICcgKyBjb29yZGluYXRlc1swXSArICcpJztcbiAgfVxuXG4gIGJ1aWxkQXJyYXlUeXBlKCkge1xuICAgIGZvciAoY29uc3QgbGFiZWxUeXBlIG9mIE9iamVjdC52YWx1ZXMoTGFiZWxUeXBlKSl7XG4gICAgICBpZiAobGFiZWxUeXBlICE9PSBMYWJlbFR5cGUuQ3VzdG9tICYmIGxhYmVsVHlwZSAhPT0gTGFiZWxUeXBlLlByZWRlZmluZWQpe1xuICAgICAgICB0aGlzLmFycmF5QnVpbHRJblR5cGUucHVzaCh7XG4gICAgICAgICAgdmFsdWU6IGxhYmVsVHlwZSxcbiAgICAgICAgICBjaGVja2VkOlxuICAgICAgICAgICAgdGhpcy5zZWxlY3RPcHRpb25zKGxhYmVsVHlwZSkgfHxcbiAgICAgICAgICAgIHRoaXMubGFiZWxGbGFnID09PSBsYWJlbFR5cGUgfHxcbiAgICAgICAgICAgICh0aGlzLnBvbHlnb25DaGVjayA9PT0gMiAmJiBsYWJlbFR5cGUgIT09IExhYmVsVHlwZS5Db29yZGluYXRlcylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbm9MYWJlbEJ1dHRvbigpe1xuICAgIGlmICh0aGlzLmxhYmVsRmxhZyA9PT0gTGFiZWxUeXBlLlByZWRlZmluZWQgfHwgKHRoaXMubGFiZWxGbGFnID09PSBMYWJlbFR5cGUuQ3VzdG9tICYmIHRoaXMubGFiZWxMZW5ndGggPT09IDApKXtcbiAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kcmF3Lm5vTGFiZWwnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ09LJztcbiAgfVxuXG4gIGdldCBjdXN0b21PclByZWRlZmluZWQoKXtcbiAgICBpZiAodGhpcy5sYWJlbEZsYWcgPT09IExhYmVsVHlwZS5DdXN0b20pe1xuICAgICAgcmV0dXJuIExhYmVsVHlwZS5DdXN0b207XG4gICAgfVxuICAgIHJldHVybiBMYWJlbFR5cGUuUHJlZGVmaW5lZDtcbiAgfVxuXG4gIG9wdGlvbkF2YWlsYWJsZShjdXJyZW50T3B0aW9uOiBMYWJlbFR5cGUpe1xuICAgIHN3aXRjaCh0aGlzLm9sR2VvbWV0cnlUeXBlKXtcbiAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLlBvaW50OlxuICAgICAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzKXtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nOlxuICAgICAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gTGFiZWxUeXBlLkxlbmd0aCl7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuUG9seWdvbjpcbiAgICAgICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IExhYmVsVHlwZS5Db29yZGluYXRlcyl7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhbGxMZW5ndGhVbml0cygpOiBzdHJpbmdbXXtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhNZWFzdXJlTGVuZ3RoVW5pdCk7XG4gIH1cblxuICBnZXRMZW5ndGhVbml0RW51bShsZW5ndGhVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCl7XG4gICAgcmV0dXJuIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uW2xlbmd0aFVuaXRdO1xuICB9XG5cbiAgZ2V0IGFsbEFyZWFVbml0cygpOiBzdHJpbmdbXXtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhNZWFzdXJlQXJlYVVuaXQpO1xuICB9XG5cbiAgZ2V0IGFsbENvb3JkaW5hdGVzVW5pdHMoKTogc3RyaW5nW117XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoQ29vcmRpbmF0ZXNVbml0KTtcbiAgfVxuXG4gIGdldEFyZWFVbml0RW51bShhcmVhVW5pdDogTWVhc3VyZUFyZWFVbml0KXtcbiAgICByZXR1cm4gTWVhc3VyZUFyZWFVbml0QWJicmV2aWF0aW9uW2FyZWFVbml0XTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmFkaXVzKG9sR2VvbWV0cnkpOiBudW1iZXJ7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0TGVuZ3RoKG9sR2VvbWV0cnkpO1xuICAgIHJldHVybiBOdW1iZXIobGVuZ3RoIC8gKDIgKiBNYXRoLlBJKSk7XG4gIH1cblxuICBnZXQgbGVuZ3RoTGFiZWxUKCl7XG4gICAgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5Qb2x5Z29uKXtcbiAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5tZWFzdXJlLnBlcmltZXRlcicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLkNpcmNsZSl7XG4gICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uc2VhcmNoLmNvb3JkaW5hdGVzLnJhZGl1cycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZHJhdy5sYWJlbFR5cGUuTGVuZ3RoJyk7XG4gIH1cblxuICBnZXRMYWJlbExlbmd0aChldmVudD8pe1xuICAgIHRoaXMubGFiZWxMZW5ndGggPSBldmVudC5sZW5ndGg7XG4gIH1cblxuICBzZWxlY3RPcHRpb25zKG9wdGlvbil7XG4gICAgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5Qb2ludCl7XG4gICAgICByZXR1cm4gb3B0aW9uID09PSBMYWJlbFR5cGUuQ29vcmRpbmF0ZXM7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nKXtcbiAgICAgIHJldHVybiBvcHRpb24gPT09IExhYmVsVHlwZS5MZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJvcGVyTGVuZ3RoTGFiZWwob3B0aW9uKXtcbiAgICBpZiAob3B0aW9uID09PSBMYWJlbFR5cGUuTGVuZ3RoKXtcbiAgICAgIGlmICh0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUG9seWdvbil7XG4gICAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5tZWFzdXJlLnBlcmltZXRlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5DaXJjbGUpe1xuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uc2VhcmNoLmNvb3JkaW5hdGVzLnJhZGl1cycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcubGFiZWxUeXBlLkxlbmd0aCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZHJhdy5sYWJlbFR5cGUuJyArIG9wdGlvbik7XG4gIH1cblxuXG59XG4iLCI8ZGl2PlxuICA8aDIgbWF0LWRpYWxvZy10aXRsZT5cbiAgICB7eyAnaWdvLmdlby5kcmF3LnBvcHVwVGl0bGUnIHwgdHJhbnNsYXRlIH19XG4gIDwvaDI+XG48L2Rpdj5cblxuXG48ZGl2IGNsYXNzPVwiZ2VvbWV0cnktdHlwZS10b2dnbGUgbWF0LXR5cG9ncmFwaHlcIj5cbiAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgKGNoYW5nZSk9XCJvbkxhYmVsVHlwZUNoYW5nZSgkZXZlbnQudmFsdWUpXCIgW3ZhbHVlXT1cImN1c3RvbU9yUHJlZGVmaW5lZFwiPlxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwibGFiZWxUeXBlLkN1c3RvbVwiID5cbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcubGFiZWxUeXBlLmN1c3RvbScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwibGFiZWxUeXBlLlByZWRlZmluZWRcIj5cbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcubGFiZWxUeXBlLnByZWRlZmluZWQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwibGFiZWxGbGFnICE9PSBsYWJlbFR5cGUuQ3VzdG9tXCI+XG4gIDxkaXY+XG4gICAgPHAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiPnt7ICdpZ28uZ2VvLmRyYXcuYnVpbHRJbkluc3RydWN0aW9ucycgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgPG1hdC1yYWRpby1ncm91cCAqbmdJZj1cIm9sR2VvbWV0cnlUeXBlICE9PSAnUG9seWdvbidcIiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+XG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFycmF5QnVpbHRJblR5cGVcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCIgW2Rpc2FibGVkXT1cIm9wdGlvbkF2YWlsYWJsZShvcHRpb24udmFsdWUpXCIgXG4gICAgICAoY2hhbmdlKT1cIm9uTGFiZWxUeXBlQ2hhbmdlKCRldmVudC52YWx1ZSlcIiBbY2hlY2tlZF09XCJvcHRpb24uY2hlY2tlZFwiPlxuICAgICAgICB7e2dldFByb3Blckxlbmd0aExhYmVsKG9wdGlvbi52YWx1ZSl9fVxuICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgIDxuZy1jb250YWluZXIgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiICpuZ0lmPVwib2xHZW9tZXRyeVR5cGUgPT09ICdQb2x5Z29uJ1wiPlxuICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFycmF5QnVpbHRJblR5cGVcIlxuICAgICAgICBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCJcbiAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb25BdmFpbGFibGUob3B0aW9uLnZhbHVlKVwiXG4gICAgICAgIChjaGFuZ2UpPVwib25MYWJlbFR5cGVDaGFuZ2UoJGV2ZW50LnNvdXJjZS52YWx1ZSwgJGV2ZW50LmNoZWNrZWQpXCJcbiAgICAgICAgW2NoZWNrZWRdPVwib3B0aW9uLmNoZWNrZWRcIj5cbiAgICAgICAge3tnZXRQcm9wZXJMZW5ndGhMYWJlbChvcHRpb24udmFsdWUpfX1cbiAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgKm5nSWY9XCJsYWJlbEZsYWcgPT09IGxhYmVsVHlwZS5Db29yZGluYXRlc1wiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicmVhZE9ubHktSW5wdXRcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgI2lucHV0XG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIihMYXRpdHVkZSwgTG9uZ2l0dWRlKVwiXG4gICAgICAgICAgdmFsdWU9XCJ7e2N1cnJlbnRDb29yZGluYXRlc319XCIgcmVhZG9ubHk+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidW5pdC1maWVsZFwiPlxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiY29vcmRpbmF0ZXNNZWFzdXJlVW5pdFwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25DaGFuZ2VDb29yZGluYXRlVW5pdCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHVuaXQgb2YgYWxsQ29vcmRpbmF0ZXNVbml0c1wiIFt2YWx1ZV09XCJ1bml0XCI+XG4gICAgICAgICAgICB7e3VuaXR9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PiAgXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJsYWJlbEZsYWcgPT09IGxhYmVsVHlwZS5MZW5ndGggfHwgcG9seWdvbkNoZWNrID09PSAyXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJyZWFkT25seS1JbnB1dFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt7bGVuZ3RoTGFiZWxUfX1cbiAgICAgICAgICB2YWx1ZT1cInt7Y3VycmVudExlbmd0aH19XCIgcmVhZG9ubHk+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidW5pdC1maWVsZFwiPlxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwibGVuZ3RoTWVhc3VyZVVuaXRcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ2hhbmdlTGVuZ3RoVW5pdCgkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHVuaXQgb2YgYWxsTGVuZ3RoVW5pdHNcIiBbdmFsdWVdPVwidW5pdFwiPlxuICAgICAgICAgICAge3tnZXRMZW5ndGhVbml0RW51bSh1bml0KX19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+ICBcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImxhYmVsRmxhZyA9PT0gbGFiZWxUeXBlLkFyZWEgfHwgcG9seWdvbkNoZWNrID09PSAyXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJyZWFkT25seS1JbnB1dFwiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8uZHJhdy5sYWJlbFR5cGUuQXJlYScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHZhbHVlPVwie3tjdXJyZW50QXJlYX19XCIgcmVhZG9ubHk+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidW5pdC1maWVsZFwiPlxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiYXJlYU1lYXN1cmVVbml0XCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZUFyZWFVbml0KCRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdW5pdCBvZiBhbGxBcmVhVW5pdHNcIiBbdmFsdWVdPVwidW5pdFwiPlxuICAgICAgICAgICAge3tnZXRBcmVhVW5pdEVudW0odW5pdCl9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIChjbGljayk9XCJjYW5jZWxEcmF3aW5nKClcIiA+XG4gICAgICB7eydpZ28uZ2VvLmRyYXcuY2FuY2VsJyB8IHRyYW5zbGF0ZX19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBcbiAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxuICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXG4gICAgICAoY2xpY2spPVwiY29uZmlybSgpXCI+IFxuICAgICAge3tub0xhYmVsQnV0dG9uKCl9fSBcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cImxhYmVsRmxhZyA9PT0gbGFiZWxUeXBlLkN1c3RvbVwiPlxuICA8ZGl2PlxuICAgIDxwIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj57eyAnaWdvLmdlby5kcmF3LmRpYWxvZ0luc3RydWN0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJpbnB1dFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICAoc2VsZWN0KT1cInRydWVcIlxuICAgICAgICAoaW5wdXQpPVwiZ2V0TGFiZWxMZW5ndGgoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2lnby5nZW8uZHJhdy5kaWFsb2dUaXRsZScgfCB0cmFuc2xhdGV9fVwiXG4gICAgICAgIHZhbHVlPVwie3sgY3VycmVudExhYmVsIH19XCJcbiAgICAgICAgY2RrRm9jdXNJbml0aWFsLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbiAgXG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cImNhbmNlbERyYXdpbmcoKVwiID5cbiAgICAgIHt7J2lnby5nZW8uZHJhdy5jYW5jZWwnIHwgdHJhbnNsYXRlfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIFxuICAgICAgbWF0LXJhaXNlZC1idXR0b24gXG4gICAgICBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgIChjbGljayk9XCJjb25maXJtKGlucHV0LnZhbHVlKVwiPlxuICAgICAge3tub0xhYmVsQnV0dG9uKCl9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19