@loxia/mst-viewer 8.1.3-202512080252 → 8.1.3-202512081724

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 (139) hide show
  1. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs +1341 -0
  2. package/fesm2022/loxia-mst-viewer-src-generated-openapi.mjs.map +1 -0
  3. package/fesm2022/loxia-mst-viewer.mjs +1500 -301
  4. package/fesm2022/loxia-mst-viewer.mjs.map +1 -1
  5. package/generated/openapi/api/api.d.ts +22 -0
  6. package/generated/openapi/api/appConfigController.service.d.ts +38 -0
  7. package/generated/openapi/api/appConfigController.serviceInterface.d.ts +24 -0
  8. package/generated/openapi/api/bewegingController.service.d.ts +40 -0
  9. package/generated/openapi/api/bewegingController.serviceInterface.d.ts +27 -0
  10. package/generated/openapi/api/class0BuildProperties.service.d.ts +36 -0
  11. package/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +23 -0
  12. package/generated/openapi/api/connectorController.service.d.ts +38 -0
  13. package/generated/openapi/api/connectorController.serviceInterface.d.ts +25 -0
  14. package/generated/openapi/api/logController.service.d.ts +38 -0
  15. package/generated/openapi/api/logController.serviceInterface.d.ts +25 -0
  16. package/generated/openapi/api/p21Controller.service.d.ts +62 -0
  17. package/generated/openapi/api/p21Controller.serviceInterface.d.ts +30 -0
  18. package/generated/openapi/api/sbController.service.d.ts +60 -0
  19. package/generated/openapi/api/sbController.serviceInterface.d.ts +32 -0
  20. package/generated/openapi/api.module.d.ts +11 -0
  21. package/generated/openapi/configuration.d.ts +104 -0
  22. package/generated/openapi/encoder.d.ts +11 -0
  23. package/generated/openapi/index.d.ts +6 -0
  24. package/generated/openapi/model/actieDto.d.ts +35 -0
  25. package/generated/openapi/model/algemeneRitDto.d.ts +28 -0
  26. package/generated/openapi/model/bewegingDto.d.ts +37 -0
  27. package/generated/openapi/model/frontendKeycloakConfig.d.ts +16 -0
  28. package/generated/openapi/model/frontendProperties.d.ts +15 -0
  29. package/generated/openapi/model/logDto.d.ts +22 -0
  30. package/generated/openapi/model/models.d.ts +9 -0
  31. package/generated/openapi/model/ritRequestDto.d.ts +17 -0
  32. package/generated/openapi/model/signaleringsbeeldDto.d.ts +16 -0
  33. package/generated/openapi/model/signaleringsbeeldRequestDto.d.ts +16 -0
  34. package/generated/openapi/param.d.ts +37 -0
  35. package/generated/openapi/variables.d.ts +8 -0
  36. package/lib/atomic-components/overlay/overlay.component.d.ts +1 -1
  37. package/lib/resources/mstlogging.resource.d.ts +6 -95
  38. package/lib/state/actions/actions.d.ts +4 -4
  39. package/lib/state/mst-editor-state.d.ts +4 -4
  40. package/lib/util/logging-helper.d.ts +4 -6
  41. package/package.json +10 -8
  42. package/src/generated/openapi/README.md +226 -0
  43. package/src/generated/openapi/api/api.d.ts +22 -0
  44. package/src/generated/openapi/api/appConfigController.service.d.ts +38 -0
  45. package/src/generated/openapi/api/appConfigController.serviceInterface.d.ts +24 -0
  46. package/src/generated/openapi/api/bewegingController.service.d.ts +40 -0
  47. package/src/generated/openapi/api/bewegingController.serviceInterface.d.ts +27 -0
  48. package/src/generated/openapi/api/class0BuildProperties.service.d.ts +36 -0
  49. package/src/generated/openapi/api/class0BuildProperties.serviceInterface.d.ts +23 -0
  50. package/src/generated/openapi/api/connectorController.service.d.ts +38 -0
  51. package/src/generated/openapi/api/connectorController.serviceInterface.d.ts +25 -0
  52. package/src/generated/openapi/api/logController.service.d.ts +38 -0
  53. package/src/generated/openapi/api/logController.serviceInterface.d.ts +25 -0
  54. package/src/generated/openapi/api/p21Controller.service.d.ts +62 -0
  55. package/src/generated/openapi/api/p21Controller.serviceInterface.d.ts +30 -0
  56. package/src/generated/openapi/api/sbController.service.d.ts +60 -0
  57. package/src/generated/openapi/api/sbController.serviceInterface.d.ts +32 -0
  58. package/src/generated/openapi/api.module.d.ts +11 -0
  59. package/src/generated/openapi/configuration.d.ts +104 -0
  60. package/src/generated/openapi/encoder.d.ts +11 -0
  61. package/src/generated/openapi/index.d.ts +6 -0
  62. package/src/generated/openapi/model/actieDto.d.ts +35 -0
  63. package/src/generated/openapi/model/algemeneRitDto.d.ts +28 -0
  64. package/src/generated/openapi/model/bewegingDto.d.ts +37 -0
  65. package/src/generated/openapi/model/frontendKeycloakConfig.d.ts +16 -0
  66. package/src/generated/openapi/model/frontendProperties.d.ts +15 -0
  67. package/src/generated/openapi/model/logDto.d.ts +22 -0
  68. package/src/generated/openapi/model/models.d.ts +9 -0
  69. package/src/generated/openapi/model/ritRequestDto.d.ts +17 -0
  70. package/src/generated/openapi/model/signaleringsbeeldDto.d.ts +16 -0
  71. package/src/generated/openapi/model/signaleringsbeeldRequestDto.d.ts +16 -0
  72. package/src/generated/openapi/param.d.ts +37 -0
  73. package/src/generated/openapi/variables.d.ts +8 -0
  74. package/tailwind.scss +1 -1
  75. package/esm2022/generated.version.mjs +0 -2
  76. package/esm2022/lib/atomic-components/message/index.mjs +0 -4
  77. package/esm2022/lib/atomic-components/message/message.component.mjs +0 -34
  78. package/esm2022/lib/atomic-components/message/message.mjs +0 -8
  79. package/esm2022/lib/atomic-components/message/severity.enum.mjs +0 -9
  80. package/esm2022/lib/atomic-components/messages/messages.component.mjs +0 -20
  81. package/esm2022/lib/atomic-components/overlay/overlay.component.mjs +0 -11
  82. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.component.mjs +0 -11
  83. package/esm2022/lib/atomic-components/progress-indicator/progress-indicator.entity.mjs +0 -8
  84. package/esm2022/lib/atomic-components/services/messages.service.mjs +0 -27
  85. package/esm2022/lib/components/carousel-controls/carousel-controls.component.mjs +0 -40
  86. package/esm2022/lib/components/mstviewer/mstviewer.component.mjs +0 -110
  87. package/esm2022/lib/components/ritdelen-lijst/ritdelen-lijst.component.mjs +0 -267
  88. package/esm2022/lib/components/ritdelen-view/ritdelen-view.component.mjs +0 -103
  89. package/esm2022/lib/components/rpe/rpe.component.mjs +0 -33
  90. package/esm2022/lib/components/svg-visualisatie/svg-visualisatie.component.mjs +0 -273
  91. package/esm2022/lib/components/viewer-controls/viewer-controls.component.mjs +0 -52
  92. package/esm2022/lib/model/alternatief-rit-deel.mjs +0 -7
  93. package/esm2022/lib/model/km-range.mjs +0 -39
  94. package/esm2022/lib/model/melding-event.mjs +0 -7
  95. package/esm2022/lib/model/nieuwe-route.mjs +0 -10
  96. package/esm2022/lib/model/ongeplande-actie.mjs +0 -7
  97. package/esm2022/lib/model/rijwegplan-rijweg-dwang-combinatie.mjs +0 -24
  98. package/esm2022/lib/model/ritdeel.mjs +0 -205
  99. package/esm2022/lib/model/sein-op-ritdeel.mjs +0 -7
  100. package/esm2022/lib/model/wissel-kant-code.mjs +0 -7
  101. package/esm2022/lib/mst-viewer.module.mjs +0 -143
  102. package/esm2022/lib/optimo.mjs +0 -9
  103. package/esm2022/lib/resources/mstlogging.resource.mjs +0 -158
  104. package/esm2022/lib/resources/signaleringsbeeldinfo.resource.mjs +0 -62
  105. package/esm2022/lib/services/base-rest.service.mjs +0 -26
  106. package/esm2022/lib/services/beweging-utils.service.mjs +0 -139
  107. package/esm2022/lib/services/beweging-verrijker.service.mjs +0 -30
  108. package/esm2022/lib/services/connector.service.mjs +0 -30
  109. package/esm2022/lib/services/debug.service.mjs +0 -59
  110. package/esm2022/lib/services/editor.service.mjs +0 -48
  111. package/esm2022/lib/services/print-beweging.service.mjs +0 -66
  112. package/esm2022/lib/services/rit-lezer.service.mjs +0 -104
  113. package/esm2022/lib/services/signalerings-beeld-manager.service.mjs +0 -92
  114. package/esm2022/lib/services/viewer-control.service.mjs +0 -105
  115. package/esm2022/lib/state/actions/actions.mjs +0 -130
  116. package/esm2022/lib/state/actions/ritdelen.actions.mjs +0 -45
  117. package/esm2022/lib/state/effect/bepaal-ongeplande-acties.effect.mjs +0 -78
  118. package/esm2022/lib/state/effect/bepaal-sb-infos.effect.mjs +0 -67
  119. package/esm2022/lib/state/effect/beweging-invoegen.effect.mjs +0 -73
  120. package/esm2022/lib/state/effect/delete-ongeplande-actie.effect.mjs +0 -39
  121. package/esm2022/lib/state/effect/focus-effect.mjs +0 -36
  122. package/esm2022/lib/state/effect/laad-route-files.effect.mjs +0 -64
  123. package/esm2022/lib/state/effect/laad-signaleringsbeelden.effect.mjs +0 -363
  124. package/esm2022/lib/state/effect/rit-goedkeuren.effect.mjs +0 -23
  125. package/esm2022/lib/state/effect/ritdelen.effect.mjs +0 -112
  126. package/esm2022/lib/state/effect/svg-view.effect.mjs +0 -48
  127. package/esm2022/lib/state/mst-editor-state.mjs +0 -90
  128. package/esm2022/lib/state/reducer/rit-delen.reducer.mjs +0 -62
  129. package/esm2022/lib/util/actie-helper.mjs +0 -437
  130. package/esm2022/lib/util/actie-popover-bepaler.mjs +0 -90
  131. package/esm2022/lib/util/date.service.mjs +0 -17
  132. package/esm2022/lib/util/logging-helper.mjs +0 -61
  133. package/esm2022/lib/util/melding-builder.mjs +0 -13
  134. package/esm2022/lib/util/message-builder.mjs +0 -32
  135. package/esm2022/lib/util/multi-map.mjs +0 -76
  136. package/esm2022/lib/util/utils.mjs +0 -35
  137. package/esm2022/lib/util/zone-util.mjs +0 -32
  138. package/esm2022/loxia-mst-viewer.mjs +0 -5
  139. package/esm2022/public-api.mjs +0 -9
@@ -1,437 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { JsJavaUtil } from '@loxia/rijwegen';
3
- import { KmRange } from '../model/km-range';
4
- import { WisselKantCode } from '../model/wissel-kant-code';
5
- import { MeldingBuilder } from './melding-builder';
6
- import { MessageBuilder } from './message-builder';
7
- import { ArrayMultimap } from './multi-map';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "../services/signalerings-beeld-manager.service";
10
- import * as i2 from "../resources/mstlogging.resource";
11
- import * as i3 from "../atomic-components/services/messages.service";
12
- import * as i4 from "@ngrx/store";
13
- import * as i5 from "./logging-helper";
14
- /**
15
- * export const RIT_ACTIE_1 = 1;
16
- * export const RIT_ACTIE_SLIJPEN_VIADUCT_KLEIN = 2;
17
- * export const RIT_ACTIE_SLIJPEN_BOOG = 3;
18
- */
19
- export const RIT_ACTIE_SLIJPEN_WISSEL_KLEIN = 4;
20
- export const RIT_ACTIE_SLIJPEN_WISSEL_GROOT = 5;
21
- /**
22
- * export const RIT_ACTIE_SLIJPEN_OVERWEG = 6;
23
- * export const RIT_ACTIE_SLIJPEN_BRUG_GROOT = 7;
24
- * export const RIT_ACTIE_SLIJPEN_BRUG_KLEIN = 8;
25
- * export const RIT_ACTIE_SLIJPEN_SPOORTAK = 9;
26
- */
27
- export const RIT_ACTIE_VST = 10;
28
- /**
29
- * export const RIT_ACTIE_BVLBLD_T = 11;
30
- * export const RIT_ACTIE_SLIJPEN_VIADUCT_GROOT = 12;
31
- * export const RIT_ACTIE_PANTCONT_T = 13;
32
- * export const RIT_ACTIE_RIJDRLIG_T = 14;
33
- * export const RIT_ACTIE_SPSTLAPR_T = 15;
34
- * export const RIT_ACTIE_SPSTOPPDEF_T = 16;
35
- * export const RIT_ACTIE_SPSTOPPBLD_T = 17;
36
- * export const RIT_ACTIE_SPSTDEF_T = 18;
37
- * export const RIT_ACTIE_SPSTDWPR_T = 19;
38
- * export const RIT_ACTIE_BAANBLD_T = 20;
39
- * export const RIT_ACTIE_SPGEOM_T = 21;
40
- * export const RIT_ACTIE_22 = 22;
41
- * export const RIT_ACTIE_23 = 23;
42
- * export const RIT_ACTIE_RIJDRDIK_T = 24;
43
- * export const RIT_ACTIE_SLIJPEN_TUNNEL = 25;
44
- */
45
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_2_KOMMA_5 = 26;
46
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_29 = 27;
47
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_20 = 28;
48
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_18_KOMMA_5 = 29;
49
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_18 = 30;
50
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_15 = 31;
51
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_12 = 32;
52
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_10 = 33;
53
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_34_KOMMA_7 = 34;
54
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_9 = 35;
55
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_7_KOMMA_5 = 36;
56
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_7 = 37;
57
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_6 = 38;
58
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_5 = 39;
59
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_4_KOMMA_5 = 40;
60
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_4 = 41;
61
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_3_KOMMA_5 = 42;
62
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_8 = 43;
63
- export const RIT_ACTIE_SLIJPEN_WISSEL_1_OP_39_KOMMA_1 = 44;
64
- export class MstKilometrering {
65
- constructor(kmLint, kmWaarde) {
66
- this.kmLint = kmLint;
67
- this.kmWaarde = kmWaarde;
68
- }
69
- getKmLint() {
70
- return this.kmLint;
71
- }
72
- getKmWaarde() {
73
- return this.kmWaarde;
74
- }
75
- }
76
- export class ActieHelper {
77
- static { this.HALF_ENGELS_WISSEL = 'HalveEngelseWissel'; }
78
- static { this.ENGELS_WISSEL = 'EngelseWissel'; }
79
- static { this.SLIJPEN_WISSEL_ACTIES = [
80
- RIT_ACTIE_SLIJPEN_WISSEL_KLEIN,
81
- RIT_ACTIE_SLIJPEN_WISSEL_GROOT,
82
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_2_KOMMA_5,
83
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_29,
84
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_20,
85
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_18_KOMMA_5,
86
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_18,
87
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_15,
88
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_12,
89
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_10,
90
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_34_KOMMA_7,
91
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_9,
92
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_7_KOMMA_5,
93
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_7,
94
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_6,
95
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_5,
96
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_4_KOMMA_5,
97
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_4,
98
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_3_KOMMA_5,
99
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_8,
100
- RIT_ACTIE_SLIJPEN_WISSEL_1_OP_39_KOMMA_1
101
- ]; }
102
- constructor(sbmService, mstLogResource, messagesService, store, loggingHelper) {
103
- this.sbmService = sbmService;
104
- this.mstLogResource = mstLogResource;
105
- this.messagesService = messagesService;
106
- this.store = store;
107
- this.loggingHelper = loggingHelper;
108
- this.store.select('debug').subscribe(debug => this.debug = debug);
109
- }
110
- static getActieTopoElements(ritDeel, sbmService) {
111
- const actieTopoElements = ritDeel.getTopologieElementen().slice();
112
- const extraTopoElement = ActieHelper.getVoorSectieVanBeginSein(ritDeel, sbmService);
113
- if (extraTopoElement) {
114
- actieTopoElements.splice(0, 0, extraTopoElement);
115
- }
116
- return actieTopoElements;
117
- }
118
- static isVSTActie(actie) {
119
- return actie.ritActieTypeId === RIT_ACTIE_VST;
120
- }
121
- static isWisselSlijpenActie(actie) {
122
- return this.SLIJPEN_WISSEL_ACTIES.indexOf(actie.ritActieTypeId) >= 0;
123
- }
124
- static bepaalTakId(actie) {
125
- return actie.pplgNaam + '-' + actie.wisselNaam + '-' + actie.wisselKantCode;
126
- }
127
- static isHeelOfHalfEngelsWisselActie(actie) {
128
- return actie.infraObjectType === this.HALF_ENGELS_WISSEL || actie.infraObjectType === this.ENGELS_WISSEL;
129
- }
130
- static getVSTActieOmschrijving(actie) {
131
- if (this.isEngelseWissel(actie)) {
132
- const wisselNamen = this.getWisselDelen(actie.wisselNaam);
133
- const kantCodes = this.getKantCodes(actie.wisselKantCode);
134
- return `VST ${wisselNamen[0]} ${kantCodes[0]} - ${wisselNamen[1]} ${kantCodes[1]}`;
135
- }
136
- else {
137
- return `VST ${actie.wisselNaam} ${ActieHelper.getKantcodeTekst(actie.wisselKantCode)}`;
138
- }
139
- }
140
- static actieComparator(actie1, actie2) {
141
- if (actie1.vanKilometrering !== actie2.vanKilometrering) {
142
- return actie1.vanKilometrering > actie2.vanKilometrering ? 1 : -1;
143
- }
144
- if (actie1.ritActieTypeOmschrijving !== actie2.ritActieTypeOmschrijving) {
145
- return actie1.ritActieTypeOmschrijving > actie2.ritActieTypeOmschrijving ? 1 : -1;
146
- }
147
- if (actie1.wisselNaam !== actie2.wisselNaam) {
148
- return actie1.wisselNaam > actie2.wisselNaam ? 1 : -1;
149
- }
150
- if (actie1.wisselKantCode !== actie2.wisselKantCode) {
151
- return actie1.wisselKantCode > actie2.wisselKantCode ? 1 : -1;
152
- }
153
- return 0;
154
- }
155
- static getWisselKantCodes(actie) {
156
- const wisselKantCodes = [];
157
- const namen = this.getWisselDelen(actie.wisselNaam);
158
- const kantCodes = this.getKantCodes(actie.wisselKantCode);
159
- for (let i = 0; i < namen.length; i++) {
160
- wisselKantCodes.push(new WisselKantCode(namen[i], kantCodes[i]));
161
- }
162
- return wisselKantCodes;
163
- }
164
- static getWisselDelen(wisselNaam) {
165
- return wisselNaam.split('|');
166
- }
167
- static getKantCodes(kantCodes) {
168
- if (kantCodes.length === 2) {
169
- return [kantCodes.charAt(0), kantCodes.charAt(1)];
170
- }
171
- return [kantCodes];
172
- }
173
- static getVoorSectieVanBeginSein(ritDeel, sbmService) {
174
- // RPE toont een rijweg vanaf de sectiescheiding behorend bij het beginsein. MST levert bewegingen waarbij acties gedaan moeten
175
- // worden tussen het beginsein en de genoemde sectiescheiding. Om deze te kunnen tonen voegen we de voorsectie van het beginsein
176
- // toe aan de lijst met route elementen.
177
- const beginRouteSein = ritDeel.getRoute().getBeginSein();
178
- const sbSein = sbmService.getSBSein(beginRouteSein);
179
- return sbSein ? sbSein.getVoorSectie() : null;
180
- }
181
- // make sure the elems are sorted in ascending order
182
- static sorteerTopoElementen(topoElems) {
183
- const topoElementen = topoElems.slice();
184
- let lint = null;
185
- let first = null;
186
- let second = null;
187
- for (const topoElement of topoElementen) {
188
- let kilometreringen = null;
189
- const kms = JsJavaUtil.listToArray(topoElement.getKilometreringen());
190
- if (kms !== null && kms.length > 0) {
191
- kilometreringen = kms;
192
- }
193
- if (kilometreringen && !first) {
194
- first = kilometreringen[0].getKmWaarde();
195
- lint = kilometreringen[0].getKmLint();
196
- }
197
- else if (kilometreringen && first && !second) {
198
- const km = KmRange.getKilometrering(lint, kilometreringen);
199
- if (km) {
200
- second = km.getKmWaarde();
201
- }
202
- }
203
- if (first && second && first > second) {
204
- topoElementen.reverse();
205
- break;
206
- }
207
- }
208
- return topoElementen;
209
- }
210
- static corrigeerTopoElementenZonderKms(topoElementenZonderKms, vanKilometreringen, totKilometreringen, kmRanges) {
211
- topoElementenZonderKms.forEach(e => {
212
- if (!vanKilometreringen && totKilometreringen) {
213
- vanKilometreringen = [new MstKilometrering(totKilometreringen[0].getKmLint(), -100000)];
214
- }
215
- if (!totKilometreringen && vanKilometreringen) {
216
- totKilometreringen = [new MstKilometrering(vanKilometreringen[0].getKmLint(), 100000)];
217
- }
218
- if (vanKilometreringen[0] > totKilometreringen[0]) {
219
- kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen, -1), this.addKm(totKilometreringen, 1)));
220
- }
221
- else {
222
- kmRanges.push(KmRange.rangeVoorStrekObject(e, this.addKm(vanKilometreringen, 1), this.addKm(totKilometreringen, -1)));
223
- }
224
- });
225
- }
226
- static addKm(kms, aantal) {
227
- const retval = [];
228
- for (const km of kms) {
229
- retval.push(new MstKilometrering(km.getKmLint(), km.getKmWaarde() + aantal));
230
- }
231
- return retval;
232
- }
233
- static kanActiesBepalen(ritdeel) {
234
- return ritdeel.isZichtbaar() && ritdeel.acties;
235
- }
236
- static isKilometreringAanwezig(fragmenten) {
237
- let aanwezig = false;
238
- for (const fragment of fragmenten) {
239
- const kms = JsJavaUtil.listToArray(fragment.getKilometreringen());
240
- if (kms !== null && kms.length > 0) {
241
- aanwezig = true;
242
- break;
243
- }
244
- }
245
- return aanwezig;
246
- }
247
- static bepaalSpoortakFragmenten(spoortak) {
248
- return JsJavaUtil.listToArray(spoortak.getTakElementen());
249
- }
250
- static bepaalSpoortakFragmentenPuics(fragmenten) {
251
- const puics = [];
252
- fragmenten.forEach(deel => puics.push(deel.getPuic()));
253
- return puics;
254
- }
255
- static isEngelseWissel(actie) {
256
- return actie.wisselNaam.includes('|') && actie.wisselKantCode.length === 2;
257
- }
258
- static getKantcodeTekst(kantcode) {
259
- let tekst = 'Voor';
260
- if (this.isKantCodeLinks(kantcode)) {
261
- tekst = 'Links';
262
- }
263
- else if (this.isKantCodeRechts(kantcode)) {
264
- tekst = 'Rechts';
265
- }
266
- return tekst;
267
- }
268
- static isKantCodeRechts(kantcode) {
269
- return kantcode === 'R';
270
- }
271
- static isKantCodeLinks(kantcode) {
272
- return kantcode === 'L';
273
- }
274
- bepaalPuicsVoorActie(actie) {
275
- let puics;
276
- if (ActieHelper.isVSTActie(actie)) {
277
- puics = this.bepaalPuicsVoorVSTActie(actie);
278
- }
279
- else if (ActieHelper.isWisselSlijpenActie(actie)) {
280
- puics = this.bepaalPuicVoorWisselSlijpenActie(actie);
281
- }
282
- else {
283
- puics = this.bepaalActiePuicsVoorSpoortak(actie);
284
- }
285
- return puics;
286
- }
287
- bepaalActiePuicsUitRitdeel(ritDeel) {
288
- const map = new ArrayMultimap();
289
- if (ActieHelper.kanActiesBepalen(ritDeel)) {
290
- ritDeel.acties.forEach(a => {
291
- map.putAll(a, this.bepaalPuicsVoorActie(a));
292
- });
293
- }
294
- return map;
295
- }
296
- bepaalActiesPuics(acties, topoElem) {
297
- const topoElementen = ActieHelper.sorteerTopoElementen(topoElem);
298
- const kmRanges = this.verwerkTopoElementen(topoElementen);
299
- return this.verwerkActies(acties, kmRanges);
300
- }
301
- verwerkActies(acties, kmRanges) {
302
- const actieZonderElementen = [];
303
- const logMeldingDTOs = [];
304
- const retval = new ArrayMultimap();
305
- acties.forEach(actie => {
306
- if (ActieHelper.isWisselSlijpenActie(actie)) {
307
- const puicArray = this.bepaalPuicVoorWisselSlijpenActie(actie);
308
- retval.putAll(actie, puicArray);
309
- }
310
- else {
311
- const puics = [];
312
- kmRanges.forEach(kmRange => {
313
- let vanKilometrering = new MstKilometrering(actie.vanKilometerlint, actie.vanKilometrering);
314
- let totKilometrering = new MstKilometrering(actie.totKilometerlint, actie.totKilometrering);
315
- if (actie.vanKilometrering > actie.totKilometrering) {
316
- const temp = { van: vanKilometrering, tot: totKilometrering };
317
- vanKilometrering = temp.tot;
318
- totKilometrering = temp.van;
319
- }
320
- if (kmRange.heeftOverlap(vanKilometrering, totKilometrering)) {
321
- puics.push(kmRange.topologyElement.getPuic());
322
- }
323
- });
324
- if (puics.length === 0) {
325
- actieZonderElementen.push(actie.id);
326
- const melding = MeldingBuilder.actieHighlightError(actieZonderElementen);
327
- logMeldingDTOs.push(this.loggingHelper.maakLogDTO(melding, actie));
328
- }
329
- retval.putAll(actie, puics);
330
- }
331
- });
332
- this.logLegeMeldingDto(logMeldingDTOs);
333
- return retval;
334
- }
335
- logLegeMeldingDto(logMeldingDTOs) {
336
- if (logMeldingDTOs.length > 0) {
337
- this.mstLogResource.logErrorMessages(logMeldingDTOs);
338
- }
339
- }
340
- verwerkTopoElementen(topoElementen) {
341
- const kmRanges = [];
342
- let topoElementenZonderKms = [];
343
- let laatstePuntKms = null;
344
- topoElementen.forEach(elem => {
345
- const kms = JsJavaUtil.listToArray(elem.getKilometreringen());
346
- if (kms.length > 0) {
347
- ActieHelper.corrigeerTopoElementenZonderKms(topoElementenZonderKms, laatstePuntKms, kms, kmRanges);
348
- topoElementenZonderKms = [];
349
- kmRanges.push(KmRange.rangeVoorPuntObject(elem));
350
- laatstePuntKms = kms;
351
- }
352
- else {
353
- topoElementenZonderKms.push(elem);
354
- }
355
- });
356
- if (topoElementenZonderKms.length > 0 && laatstePuntKms) {
357
- ActieHelper.corrigeerTopoElementenZonderKms(topoElementenZonderKms, laatstePuntKms, null, kmRanges);
358
- }
359
- return kmRanges;
360
- }
361
- bepaalActiePuicsVoorSpoortak(actie) {
362
- const spoortak = this.sbmService.getSbSpoortak(ActieHelper.bepaalTakId(actie));
363
- let puics = [];
364
- if (!spoortak) {
365
- return puics;
366
- }
367
- const fragmenten = ActieHelper.bepaalSpoortakFragmenten(spoortak);
368
- if (ActieHelper.isKilometreringAanwezig(fragmenten)) {
369
- const map = this.bepaalActiesPuics([actie], fragmenten);
370
- for (const key of Array.from(map.keys())) {
371
- map.get(key).forEach(x => puics.push(x));
372
- }
373
- }
374
- else {
375
- puics = ActieHelper.bepaalSpoortakFragmentenPuics(fragmenten);
376
- }
377
- return puics;
378
- }
379
- bepaalPuicsVoorVSTActie(actie) {
380
- if (ActieHelper.isHeelOfHalfEngelsWisselActie(actie)) {
381
- const retval = [];
382
- const wisselDelen = ActieHelper.getWisselDelen(actie.wisselNaam);
383
- const puicsEersteWissel = this.bepaalWisselPuics(wisselDelen[0], actie.pplgNaam, actie.wisselKantCode[0]);
384
- const puicsTweedeWissel = this.bepaalWisselPuics(wisselDelen[1], actie.pplgNaam, actie.wisselKantCode[1]);
385
- const puic1 = this.sbmService.getEersteVerbindingPuicVoorSplitEngelseWissel(wisselDelen[0], actie.wisselKantCode[0]);
386
- if (puic1 !== '') {
387
- retval.push(puic1);
388
- }
389
- const puic2 = this.sbmService.getEersteVerbindingPuicVoorSplitEngelseWissel(wisselDelen[1], actie.wisselKantCode[1]);
390
- if (puic2 !== '') {
391
- retval.push(puic2);
392
- }
393
- retval.push(...puicsEersteWissel);
394
- retval.push(...puicsTweedeWissel);
395
- return retval;
396
- }
397
- else {
398
- return this.bepaalWisselPuics(actie.wisselNaam, actie.pplgNaam, actie.wisselKantCode);
399
- }
400
- }
401
- bepaalWisselPuics(wisselNaam, pplgNaam, kantcode) {
402
- const wissel = this.sbmService.getSBWissel(wisselNaam, pplgNaam);
403
- if (!wissel) {
404
- return [];
405
- }
406
- const kantElement = this.bepaalKantElement(kantcode, wissel);
407
- if (!kantElement) {
408
- return [];
409
- }
410
- const storingSymboolPuic = wissel.getStoringSymboolPuic();
411
- return [storingSymboolPuic, kantElement.getPuic()];
412
- }
413
- bepaalKantElement(kantcode, wissel) {
414
- if (ActieHelper.isKantCodeRechts(kantcode)) {
415
- return wissel.getRight();
416
- }
417
- if (ActieHelper.isKantCodeLinks(kantcode)) {
418
- return wissel.getLeft();
419
- }
420
- return null;
421
- }
422
- bepaalPuicVoorWisselSlijpenActie(actie) {
423
- const storingsSymboolPuic = this.sbmService.getSBWissel(actie.wisselNaam, actie.pplgNaam)?.getStoringSymboolPuic();
424
- if (!storingsSymboolPuic && this.debug) {
425
- const melding = MeldingBuilder.actieHighlightError([actie.id]);
426
- this.messagesService.showMessage(MessageBuilder.actieHighlightError([actie.id]));
427
- this.mstLogResource.logErrorMessages([this.loggingHelper.maakLogDTO(melding, actie)]);
428
- }
429
- return storingsSymboolPuic ? [storingsSymboolPuic] : [];
430
- }
431
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActieHelper, deps: [{ token: i1.SignaleringsBeeldManagerService }, { token: i2.MstLoggingResource }, { token: i3.MessagesService }, { token: i4.Store }, { token: i5.LoggingHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
432
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActieHelper }); }
433
- }
434
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActieHelper, decorators: [{
435
- type: Injectable
436
- }], ctorParameters: () => [{ type: i1.SignaleringsBeeldManagerService }, { type: i2.MstLoggingResource }, { type: i3.MessagesService }, { type: i4.Store }, { type: i5.LoggingHelper }] });
437
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aWUtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3V0aWwvYWN0aWUtaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBR3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUc1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFNM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7O0FBSTVDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxDQUFDO0FBQ2hEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUNoQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLEVBQUUsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLEVBQUUsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO0FBQ25E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UUFBUSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksV0FBVyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sZ0NBQWdDLENBQUMsS0FBWTtRQUNqRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLENBQUM7UUFDbkgsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBaUIsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0UsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUQsQ0FBQzs4R0F2WVEsV0FBVztrSEFBWCxXQUFXOzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSnNKYXZhVXRpbCwgc2JibGFkIH0gZnJvbSAnQGxveGlhL3JpandlZ2VuJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgTWVzc2FnZXNTZXJ2aWNlIH0gZnJvbSAnLi4vYXRvbWljLWNvbXBvbmVudHMvc2VydmljZXMvbWVzc2FnZXMuc2VydmljZSc7XG5pbXBvcnQgeyBLbVJhbmdlIH0gZnJvbSAnLi4vbW9kZWwva20tcmFuZ2UnO1xuaW1wb3J0IHsgTWVsZGluZ0V2ZW50IH0gZnJvbSAnLi4vbW9kZWwvbWVsZGluZy1ldmVudCc7XG5pbXBvcnQgeyBSaXRkZWVsIH0gZnJvbSAnLi4vbW9kZWwvcml0ZGVlbCc7XG5pbXBvcnQgeyBXaXNzZWxLYW50Q29kZSB9IGZyb20gJy4uL21vZGVsL3dpc3NlbC1rYW50LWNvZGUnO1xuaW1wb3J0IHsgQWN0aWUgfSBmcm9tICcuLi9vcHRpbW8nO1xuaW1wb3J0IHsgTXN0TG9nZ2luZ0R0bywgTXN0TG9nZ2luZ1Jlc291cmNlIH0gZnJvbSAnLi4vcmVzb3VyY2VzL21zdGxvZ2dpbmcucmVzb3VyY2UnO1xuaW1wb3J0IHsgU2lnbmFsZXJpbmdzQmVlbGRNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NpZ25hbGVyaW5ncy1iZWVsZC1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXN0RWRpdG9yU3RhdGUgfSBmcm9tICcuLi9zdGF0ZS9tc3QtZWRpdG9yLXN0YXRlJztcbmltcG9ydCB7IExvZ2dpbmdIZWxwZXIgfSBmcm9tICcuL2xvZ2dpbmctaGVscGVyJztcbmltcG9ydCB7IE1lbGRpbmdCdWlsZGVyIH0gZnJvbSAnLi9tZWxkaW5nLWJ1aWxkZXInO1xuaW1wb3J0IHsgTWVzc2FnZUJ1aWxkZXIgfSBmcm9tICcuL21lc3NhZ2UtYnVpbGRlcic7XG5pbXBvcnQgeyBBcnJheU11bHRpbWFwIH0gZnJvbSAnLi9tdWx0aS1tYXAnO1xuaW1wb3J0IEtpbG9tZXRyZXJpbmcgPSBzYmJsYWQuS2lsb21ldHJlcmluZztcbmltcG9ydCBUb3BvbG9neUVsZW1lbnQgPSBzYmJsYWQuVG9wb2xvZ3lFbGVtZW50O1xuXG4vKipcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfMSA9IDE7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fVklBRFVDVF9LTEVJTiA9IDI7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fQk9PRyA9IDM7XG4gKi9cbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfS0xFSU4gPSA0O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF9HUk9PVCA9IDU7XG4vKipcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9PVkVSV0VHID0gNjtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9CUlVHX0dST09UID0gNztcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9CUlVHX0tMRUlOID0gODtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9TUE9PUlRBSyA9IDk7XG4gKi9cbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfVlNUID0gMTA7XG4vKipcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfQlZMQkxEX1QgPSAxMTtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9WSUFEVUNUX0dST09UID0gMTI7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1BBTlRDT05UX1QgPSAxMztcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfUklKRFJMSUdfVCA9IDE0O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TUFNUTEFQUl9UID0gMTU7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NQU1RPUFBERUZfVCA9IDE2O1xuICogZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TUFNUT1BQQkxEX1QgPSAxNztcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU1BTVERFRl9UID0gMTg7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NQU1REV1BSX1QgPSAxOTtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfQkFBTkJMRF9UID0gMjA7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1NQR0VPTV9UID0gMjE7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFXzIyID0gMjI7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFXzIzID0gMjM7XG4gKiBleHBvcnQgY29uc3QgUklUX0FDVElFX1JJSkRSRElLX1QgPSAyNDtcbiAqIGV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9UVU5ORUwgPSAyNTtcbiAqL1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzJfS09NTUFfNSA9IDI2O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzI5ID0gMjc7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMjAgPSAyODtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xOF9LT01NQV81ID0gMjk7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMTggPSAzMDtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xNSA9IDMxO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzEyID0gMzI7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMTAgPSAzMztcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8zNF9LT01NQV83ID0gMzQ7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfOSA9IDM1O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzdfS09NTUFfNSA9IDM2O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzcgPSAzNztcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF82ID0gMzg7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfNSA9IDM5O1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzRfS09NTUFfNSA9IDQwO1xuZXhwb3J0IGNvbnN0IFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzQgPSA0MTtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8zX0tPTU1BXzUgPSA0MjtcbmV4cG9ydCBjb25zdCBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF84ID0gNDM7XG5leHBvcnQgY29uc3QgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMzlfS09NTUFfMSA9IDQ0O1xuXG5leHBvcnQgY2xhc3MgTXN0S2lsb21ldHJlcmluZyBpbXBsZW1lbnRzIHNiYmxhZC5LaWxvbWV0cmVyaW5nIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGttTGludDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IGttV2FhcmRlOiBudW1iZXIpIHtcbiAgICB9XG5cbiAgICBnZXRLbUxpbnQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua21MaW50O1xuICAgIH1cblxuICAgIGdldEttV2FhcmRlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmttV2FhcmRlO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFjdGllSGVscGVyIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgSEFMRl9FTkdFTFNfV0lTU0VMID0gJ0hhbHZlRW5nZWxzZVdpc3NlbCc7XG4gICAgc3RhdGljIHJlYWRvbmx5IEVOR0VMU19XSVNTRUwgPSAnRW5nZWxzZVdpc3NlbCc7XG4gICAgc3RhdGljIHJlYWRvbmx5IFNMSUpQRU5fV0lTU0VMX0FDVElFUyA9IFtcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMX0tMRUlOLFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfR1JPT1QsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzJfS09NTUFfNSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMjksXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzIwLFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xOF9LT01NQV81LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xOCxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMTUsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzEyLFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF8xMCxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMzRfS09NTUFfNyxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfOSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfN19LT01NQV81LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF83LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF82LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF81LFxuICAgICAgICBSSVRfQUNUSUVfU0xJSlBFTl9XSVNTRUxfMV9PUF80X0tPTU1BXzUsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzQsXG4gICAgICAgIFJJVF9BQ1RJRV9TTElKUEVOX1dJU1NFTF8xX09QXzNfS09NTUFfNSxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfOCxcbiAgICAgICAgUklUX0FDVElFX1NMSUpQRU5fV0lTU0VMXzFfT1BfMzlfS09NTUFfMV07XG5cbiAgICBwcml2YXRlIGRlYnVnOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzYm1TZXJ2aWNlOiBTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbXN0TG9nUmVzb3VyY2U6IE1zdExvZ2dpbmdSZXNvdXJjZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VzU2VydmljZTogTWVzc2FnZXNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmU6IFN0b3JlPE1zdEVkaXRvclN0YXRlPixcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dpbmdIZWxwZXI6IExvZ2dpbmdIZWxwZXIpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoJ2RlYnVnJykuc3Vic2NyaWJlKGRlYnVnID0+IHRoaXMuZGVidWcgPSBkZWJ1Zyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRBY3RpZVRvcG9FbGVtZW50cyhyaXREZWVsOiBSaXRkZWVsLCBzYm1TZXJ2aWNlOiBTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlKTogVG9wb2xvZ3lFbGVtZW50W10ge1xuICAgICAgICBjb25zdCBhY3RpZVRvcG9FbGVtZW50cyA9IHJpdERlZWwuZ2V0VG9wb2xvZ2llRWxlbWVudGVuKCkuc2xpY2UoKTtcbiAgICAgICAgY29uc3QgZXh0cmFUb3BvRWxlbWVudCA9IEFjdGllSGVscGVyLmdldFZvb3JTZWN0aWVWYW5CZWdpblNlaW4ocml0RGVlbCwgc2JtU2VydmljZSk7XG4gICAgICAgIGlmIChleHRyYVRvcG9FbGVtZW50KSB7XG4gICAgICAgICAgICBhY3RpZVRvcG9FbGVtZW50cy5zcGxpY2UoMCwgMCwgZXh0cmFUb3BvRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGllVG9wb0VsZW1lbnRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc1ZTVEFjdGllKGFjdGllKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhY3RpZS5yaXRBY3RpZVR5cGVJZCA9PT0gUklUX0FDVElFX1ZTVDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNXaXNzZWxTbGlqcGVuQWN0aWUoYWN0aWUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuU0xJSlBFTl9XSVNTRUxfQUNUSUVTLmluZGV4T2YoYWN0aWUucml0QWN0aWVUeXBlSWQpID49IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGJlcGFhbFRha0lkKGFjdGllKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGFjdGllLnBwbGdOYWFtICsgJy0nICsgYWN0aWUud2lzc2VsTmFhbSArICctJyArIGFjdGllLndpc3NlbEthbnRDb2RlO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc0hlZWxPZkhhbGZFbmdlbHNXaXNzZWxBY3RpZShhY3RpZTogQWN0aWUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGFjdGllLmluZnJhT2JqZWN0VHlwZSA9PT0gdGhpcy5IQUxGX0VOR0VMU19XSVNTRUwgfHwgYWN0aWUuaW5mcmFPYmplY3RUeXBlID09PSB0aGlzLkVOR0VMU19XSVNTRUw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFZTVEFjdGllT21zY2hyaWp2aW5nKGFjdGllOiBBY3RpZSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5nZWxzZVdpc3NlbChhY3RpZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHdpc3NlbE5hbWVuID0gdGhpcy5nZXRXaXNzZWxEZWxlbihhY3RpZS53aXNzZWxOYWFtKTtcbiAgICAgICAgICAgIGNvbnN0IGthbnRDb2RlcyA9IHRoaXMuZ2V0S2FudENvZGVzKGFjdGllLndpc3NlbEthbnRDb2RlKTtcbiAgICAgICAgICAgIHJldHVybiBgVlNUICR7IHdpc3NlbE5hbWVuWzBdIH0gJHsga2FudENvZGVzWzBdIH0gLSAkeyB3aXNzZWxOYW1lblsxXSB9ICR7IGthbnRDb2Rlc1sxXSB9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBgVlNUICR7IGFjdGllLndpc3NlbE5hYW0gfSAkeyBBY3RpZUhlbHBlci5nZXRLYW50Y29kZVRla3N0KGFjdGllLndpc3NlbEthbnRDb2RlKSB9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWN0aWVDb21wYXJhdG9yKGFjdGllMTogQWN0aWUsIGFjdGllMjogQWN0aWUpOiBudW1iZXIge1xuICAgICAgICBpZiAoYWN0aWUxLnZhbktpbG9tZXRyZXJpbmcgIT09IGFjdGllMi52YW5LaWxvbWV0cmVyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aWUxLnZhbktpbG9tZXRyZXJpbmcgPiBhY3RpZTIudmFuS2lsb21ldHJlcmluZyA/IDEgOiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aWUxLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZyAhPT0gYWN0aWUyLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZykge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGllMS5yaXRBY3RpZVR5cGVPbXNjaHJpanZpbmcgPiBhY3RpZTIucml0QWN0aWVUeXBlT21zY2hyaWp2aW5nID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3RpZTEud2lzc2VsTmFhbSAhPT0gYWN0aWUyLndpc3NlbE5hYW0pIHtcbiAgICAgICAgICAgIHJldHVybiBhY3RpZTEud2lzc2VsTmFhbSA+IGFjdGllMi53aXNzZWxOYWFtID8gMSA6IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3RpZTEud2lzc2VsS2FudENvZGUgIT09IGFjdGllMi53aXNzZWxLYW50Q29kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGllMS53aXNzZWxLYW50Q29kZSA+IGFjdGllMi53aXNzZWxLYW50Q29kZSA/IDEgOiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0V2lzc2VsS2FudENvZGVzKGFjdGllOiBBY3RpZSk6IFdpc3NlbEthbnRDb2RlW10ge1xuICAgICAgICBjb25zdCB3aXNzZWxLYW50Q29kZXM6IFdpc3NlbEthbnRDb2RlW10gPSBbXTtcblxuICAgICAgICBjb25zdCBuYW1lbiA9IHRoaXMuZ2V0V2lzc2VsRGVsZW4oYWN0aWUud2lzc2VsTmFhbSk7XG4gICAgICAgIGNvbnN0IGthbnRDb2RlcyA9IHRoaXMuZ2V0S2FudENvZGVzKGFjdGllLndpc3NlbEthbnRDb2RlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgd2lzc2VsS2FudENvZGVzLnB1c2gobmV3IFdpc3NlbEthbnRDb2RlKG5hbWVuW2ldLCBrYW50Q29kZXNbaV0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aXNzZWxLYW50Q29kZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFdpc3NlbERlbGVuKHdpc3NlbE5hYW06IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHdpc3NlbE5hYW0uc3BsaXQoJ3wnKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0S2FudENvZGVzKGthbnRDb2Rlczogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoa2FudENvZGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIFtrYW50Q29kZXMuY2hhckF0KDApLCBrYW50Q29kZXMuY2hhckF0KDEpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2thbnRDb2Rlc107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Vm9vclNlY3RpZVZhbkJlZ2luU2VpbihyaXREZWVsOiBSaXRkZWVsLCBzYm1TZXJ2aWNlOiBTaWduYWxlcmluZ3NCZWVsZE1hbmFnZXJTZXJ2aWNlKTogVG9wb2xvZ3lFbGVtZW50IHtcbiAgICAgICAgLy8gUlBFIHRvb250IGVlbiByaWp3ZWcgdmFuYWYgZGUgc2VjdGllc2NoZWlkaW5nIGJlaG9yZW5kIGJpaiBoZXQgYmVnaW5zZWluLiBNU1QgbGV2ZXJ0IGJld2VnaW5nZW4gd2FhcmJpaiBhY3RpZXMgZ2VkYWFuIG1vZXRlblxuICAgICAgICAvLyB3b3JkZW4gdHVzc2VuIGhldCBiZWdpbnNlaW4gZW4gZGUgZ2Vub2VtZGUgc2VjdGllc2NoZWlkaW5nLiBPbSBkZXplIHRlIGt1bm5lbiB0b25lbiB2b2VnZW4gd2UgZGUgdm9vcnNlY3RpZSB2YW4gaGV0IGJlZ2luc2VpblxuICAgICAgICAvLyB0b2UgYWFuIGRlIGxpanN0IG1ldCByb3V0ZSBlbGVtZW50ZW4uXG4gICAgICAgIGNvbnN0IGJlZ2luUm91dGVTZWluID0gcml0RGVlbC5nZXRSb3V0ZSgpLmdldEJlZ2luU2VpbigpO1xuICAgICAgICBjb25zdCBzYlNlaW4gPSBzYm1TZXJ2aWNlLmdldFNCU2VpbihiZWdpblJvdXRlU2Vpbik7XG4gICAgICAgIHJldHVybiBzYlNlaW4gPyBzYlNlaW4uZ2V0Vm9vclNlY3RpZSgpIDogbnVsbDtcbiAgICB9XG5cbi8vIG1ha2Ugc3VyZSB0aGUgZWxlbXMgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgICBwcml2YXRlIHN0YXRpYyBzb3J0ZWVyVG9wb0VsZW1lbnRlbih0b3BvRWxlbXM6IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSk6IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSB7XG4gICAgICAgIGNvbnN0IHRvcG9FbGVtZW50ZW4gPSB0b3BvRWxlbXMuc2xpY2UoKTtcbiAgICAgICAgbGV0IGxpbnQgPSBudWxsO1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsO1xuICAgICAgICBsZXQgc2Vjb25kID0gbnVsbDtcblxuICAgICAgICBmb3IgKGNvbnN0IHRvcG9FbGVtZW50IG9mIHRvcG9FbGVtZW50ZW4pIHtcbiAgICAgICAgICAgIGxldCBraWxvbWV0cmVyaW5nZW4gPSBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBrbXMgPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KHRvcG9FbGVtZW50LmdldEtpbG9tZXRyZXJpbmdlbigpKTtcbiAgICAgICAgICAgIGlmIChrbXMgIT09IG51bGwgJiYga21zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBraWxvbWV0cmVyaW5nZW4gPSBrbXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChraWxvbWV0cmVyaW5nZW4gJiYgIWZpcnN0KSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBraWxvbWV0cmVyaW5nZW5bMF0uZ2V0S21XYWFyZGUoKTtcbiAgICAgICAgICAgICAgICBsaW50ID0ga2lsb21ldHJlcmluZ2VuWzBdLmdldEttTGludCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChraWxvbWV0cmVyaW5nZW4gJiYgZmlyc3QgJiYgIXNlY29uZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGttID0gS21SYW5nZS5nZXRLaWxvbWV0cmVyaW5nKGxpbnQsIGtpbG9tZXRyZXJpbmdlbik7XG4gICAgICAgICAgICAgICAgaWYgKGttKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZCA9IGttLmdldEttV2FhcmRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0ICYmIHNlY29uZCAmJiBmaXJzdCA+IHNlY29uZCkge1xuICAgICAgICAgICAgICAgIHRvcG9FbGVtZW50ZW4ucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b3BvRWxlbWVudGVuO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvcnJpZ2VlclRvcG9FbGVtZW50ZW5ab25kZXJLbXModG9wb0VsZW1lbnRlblpvbmRlckttcywgdmFuS2lsb21ldHJlcmluZ2VuOiBzYmJsYWQuS2lsb21ldHJlcmluZ1tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90S2lsb21ldHJlcmluZ2VuOiBzYmJsYWQuS2lsb21ldHJlcmluZ1tdLCBrbVJhbmdlczogS21SYW5nZVtdKTogdm9pZCB7XG4gICAgICAgIHRvcG9FbGVtZW50ZW5ab25kZXJLbXMuZm9yRWFjaChlID0+IHtcbiAgICAgICAgICAgIGlmICghdmFuS2lsb21ldHJlcmluZ2VuICYmIHRvdEtpbG9tZXRyZXJpbmdlbikge1xuICAgICAgICAgICAgICAgIHZhbktpbG9tZXRyZXJpbmdlbiA9IFtuZXcgTXN0S2lsb21ldHJlcmluZyh0b3RLaWxvbWV0cmVyaW5nZW5bMF0uZ2V0S21MaW50KCksIC0xMDAwMDApXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdG90S2lsb21ldHJlcmluZ2VuICYmIHZhbktpbG9tZXRyZXJpbmdlbikge1xuICAgICAgICAgICAgICAgIHRvdEtpbG9tZXRyZXJpbmdlbiA9IFtuZXcgTXN0S2lsb21ldHJlcmluZyh2YW5LaWxvbWV0cmVyaW5nZW5bMF0uZ2V0S21MaW50KCksIDEwMDAwMCldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFuS2lsb21ldHJlcmluZ2VuWzBdID4gdG90S2lsb21ldHJlcmluZ2VuWzBdKSB7XG4gICAgICAgICAgICAgICAga21SYW5nZXMucHVzaChLbVJhbmdlLnJhbmdlVm9vclN0cmVrT2JqZWN0KGUsIHRoaXMuYWRkS20odmFuS2lsb21ldHJlcmluZ2VuLCAtMSksIHRoaXMuYWRkS20odG90S2lsb21ldHJlcmluZ2VuLCAxKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBrbVJhbmdlcy5wdXNoKEttUmFuZ2UucmFuZ2VWb29yU3RyZWtPYmplY3QoZSwgdGhpcy5hZGRLbSh2YW5LaWxvbWV0cmVyaW5nZW4sIDEpLCB0aGlzLmFkZEttKHRvdEtpbG9tZXRyZXJpbmdlbiwgLTEpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZEttKGttczogS2lsb21ldHJlcmluZ1tdLCBhYW50YWw6IG51bWJlcik6IEtpbG9tZXRyZXJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHJldHZhbCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGttIG9mIGttcykge1xuICAgICAgICAgICAgcmV0dmFsLnB1c2gobmV3IE1zdEtpbG9tZXRyZXJpbmcoa20uZ2V0S21MaW50KCksIGttLmdldEttV2FhcmRlKCkgKyBhYW50YWwpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0dmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGthbkFjdGllc0JlcGFsZW4ocml0ZGVlbDogUml0ZGVlbCk6IEFjdGllW10ge1xuICAgICAgICByZXR1cm4gcml0ZGVlbC5pc1ppY2h0YmFhcigpICYmIHJpdGRlZWwuYWN0aWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGlzS2lsb21ldHJlcmluZ0FhbndlemlnKGZyYWdtZW50ZW46IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgYWFud2V6aWcgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudGVuKSB7XG4gICAgICAgICAgICBjb25zdCBrbXMgPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KGZyYWdtZW50LmdldEtpbG9tZXRyZXJpbmdlbigpKTtcbiAgICAgICAgICAgIGlmIChrbXMgIT09IG51bGwgJiYga21zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhYW53ZXppZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFhbndlemlnO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGJlcGFhbFNwb29ydGFrRnJhZ21lbnRlbihzcG9vcnRhazogc2JibGFkLlNwb29ydGFrKTogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdIHtcbiAgICAgICAgcmV0dXJuIEpzSmF2YVV0aWwubGlzdFRvQXJyYXkoc3Bvb3J0YWsuZ2V0VGFrRWxlbWVudGVuKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGJlcGFhbFNwb29ydGFrRnJhZ21lbnRlblB1aWNzKGZyYWdtZW50ZW46IHNiYmxhZC5Ub3BvbG9neUVsZW1lbnRbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgcHVpY3MgPSBbXTtcbiAgICAgICAgZnJhZ21lbnRlbi5mb3JFYWNoKGRlZWwgPT4gcHVpY3MucHVzaChkZWVsLmdldFB1aWMoKSkpO1xuICAgICAgICByZXR1cm4gcHVpY3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNFbmdlbHNlV2lzc2VsKGFjdGllOiBBY3RpZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gYWN0aWUud2lzc2VsTmFhbS5pbmNsdWRlcygnfCcpICYmIGFjdGllLndpc3NlbEthbnRDb2RlLmxlbmd0aCA9PT0gMjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRLYW50Y29kZVRla3N0KGthbnRjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBsZXQgdGVrc3QgPSAnVm9vcic7XG4gICAgICAgIGlmICh0aGlzLmlzS2FudENvZGVMaW5rcyhrYW50Y29kZSkpIHtcbiAgICAgICAgICAgIHRla3N0ID0gJ0xpbmtzJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzS2FudENvZGVSZWNodHMoa2FudGNvZGUpKSB7XG4gICAgICAgICAgICB0ZWtzdCA9ICdSZWNodHMnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZWtzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBpc0thbnRDb2RlUmVjaHRzKGthbnRjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGthbnRjb2RlID09PSAnUic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgaXNLYW50Q29kZUxpbmtzKGthbnRjb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGthbnRjb2RlID09PSAnTCc7XG4gICAgfVxuXG4gICAgYmVwYWFsUHVpY3NWb29yQWN0aWUoYWN0aWU6IEFjdGllKTogc3RyaW5nW10ge1xuICAgICAgICBsZXQgcHVpY3M7XG4gICAgICAgIGlmIChBY3RpZUhlbHBlci5pc1ZTVEFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgcHVpY3MgPSB0aGlzLmJlcGFhbFB1aWNzVm9vclZTVEFjdGllKGFjdGllKTtcbiAgICAgICAgfSBlbHNlIGlmIChBY3RpZUhlbHBlci5pc1dpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSkpIHtcbiAgICAgICAgICAgIHB1aWNzID0gdGhpcy5iZXBhYWxQdWljVm9vcldpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdWljcyA9IHRoaXMuYmVwYWFsQWN0aWVQdWljc1Zvb3JTcG9vcnRhayhhY3RpZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1aWNzO1xuICAgIH1cblxuICAgIGJlcGFhbEFjdGllUHVpY3NVaXRSaXRkZWVsKHJpdERlZWwpOiBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+IHsvLyB2b29yIGhpZ2hsaWdodHNcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4oKTtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmthbkFjdGllc0JlcGFsZW4ocml0RGVlbCkpIHtcbiAgICAgICAgICAgIHJpdERlZWwuYWN0aWVzLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICAgICAgbWFwLnB1dEFsbChhLCB0aGlzLmJlcGFhbFB1aWNzVm9vckFjdGllKGEpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuXG4gICAgYmVwYWFsQWN0aWVzUHVpY3MoYWN0aWVzOiBBY3RpZVtdLCB0b3BvRWxlbTogVG9wb2xvZ3lFbGVtZW50W10pOiBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgdG9wb0VsZW1lbnRlbiA9IEFjdGllSGVscGVyLnNvcnRlZXJUb3BvRWxlbWVudGVuKHRvcG9FbGVtKTtcblxuICAgICAgICBjb25zdCBrbVJhbmdlcyA9IHRoaXMudmVyd2Vya1RvcG9FbGVtZW50ZW4odG9wb0VsZW1lbnRlbik7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcndlcmtBY3RpZXMoYWN0aWVzLCBrbVJhbmdlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2ZXJ3ZXJrQWN0aWVzKGFjdGllczogQWN0aWVbXSwga21SYW5nZXM6IEttUmFuZ2VbXSk6IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4ge1xuICAgICAgICBjb25zdCBhY3RpZVpvbmRlckVsZW1lbnRlbjogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgY29uc3QgbG9nTWVsZGluZ0RUT3M6IE1zdExvZ2dpbmdEdG9bXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHJldHZhbCA9IG5ldyBBcnJheU11bHRpbWFwPEFjdGllLCBzdHJpbmc+KCk7XG4gICAgICAgIGFjdGllcy5mb3JFYWNoKGFjdGllID0+IHtcbiAgICAgICAgICAgIGlmIChBY3RpZUhlbHBlci5pc1dpc3NlbFNsaWpwZW5BY3RpZShhY3RpZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWljQXJyYXkgPSB0aGlzLmJlcGFhbFB1aWNWb29yV2lzc2VsU2xpanBlbkFjdGllKGFjdGllKTtcbiAgICAgICAgICAgICAgICByZXR2YWwucHV0QWxsKGFjdGllLCBwdWljQXJyYXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWljcyA9IFtdO1xuICAgICAgICAgICAgICAgIGttUmFuZ2VzLmZvckVhY2goa21SYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YW5LaWxvbWV0cmVyaW5nID0gbmV3IE1zdEtpbG9tZXRyZXJpbmcoYWN0aWUudmFuS2lsb21ldGVybGludCwgYWN0aWUudmFuS2lsb21ldHJlcmluZyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0b3RLaWxvbWV0cmVyaW5nID0gbmV3IE1zdEtpbG9tZXRyZXJpbmcoYWN0aWUudG90S2lsb21ldGVybGludCwgYWN0aWUudG90S2lsb21ldHJlcmluZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3RpZS52YW5LaWxvbWV0cmVyaW5nID4gYWN0aWUudG90S2lsb21ldHJlcmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcCA9IHsgdmFuOiB2YW5LaWxvbWV0cmVyaW5nLCB0b3Q6IHRvdEtpbG9tZXRyZXJpbmcgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbktpbG9tZXRyZXJpbmcgPSB0ZW1wLnRvdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdEtpbG9tZXRyZXJpbmcgPSB0ZW1wLnZhbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoa21SYW5nZS5oZWVmdE92ZXJsYXAodmFuS2lsb21ldHJlcmluZywgdG90S2lsb21ldHJlcmluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1aWNzLnB1c2goa21SYW5nZS50b3BvbG9neUVsZW1lbnQuZ2V0UHVpYygpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChwdWljcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aWVab25kZXJFbGVtZW50ZW4ucHVzaChhY3RpZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lbGRpbmc6IE1lbGRpbmdFdmVudCA9IE1lbGRpbmdCdWlsZGVyLmFjdGllSGlnaGxpZ2h0RXJyb3IoYWN0aWVab25kZXJFbGVtZW50ZW4pO1xuICAgICAgICAgICAgICAgICAgICBsb2dNZWxkaW5nRFRPcy5wdXNoKHRoaXMubG9nZ2luZ0hlbHBlci5tYWFrTG9nRFRPKG1lbGRpbmcsIGFjdGllKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHZhbC5wdXRBbGwoYWN0aWUsIHB1aWNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9nTGVnZU1lbGRpbmdEdG8obG9nTWVsZGluZ0RUT3MpO1xuICAgICAgICByZXR1cm4gcmV0dmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9nTGVnZU1lbGRpbmdEdG8obG9nTWVsZGluZ0RUT3M6IE1zdExvZ2dpbmdEdG9bXSk6IHZvaWQge1xuICAgICAgICBpZiAobG9nTWVsZGluZ0RUT3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5tc3RMb2dSZXNvdXJjZS5sb2dFcnJvck1lc3NhZ2VzKGxvZ01lbGRpbmdEVE9zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdmVyd2Vya1RvcG9FbGVtZW50ZW4odG9wb0VsZW1lbnRlbjogc2JibGFkLlRvcG9sb2d5RWxlbWVudFtdKTogS21SYW5nZVtdIHtcbiAgICAgICAgY29uc3Qga21SYW5nZXM6IEttUmFuZ2VbXSA9IFtdO1xuXG4gICAgICAgIGxldCB0b3BvRWxlbWVudGVuWm9uZGVyS21zID0gW107XG4gICAgICAgIGxldCBsYWF0c3RlUHVudEttczogS2lsb21ldHJlcmluZ1tdID0gbnVsbDtcbiAgICAgICAgdG9wb0VsZW1lbnRlbi5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgICAgICAgY29uc3Qga21zOiBLaWxvbWV0cmVyaW5nW10gPSBKc0phdmFVdGlsLmxpc3RUb0FycmF5KGVsZW0uZ2V0S2lsb21ldHJlcmluZ2VuKCkpO1xuICAgICAgICAgICAgaWYgKGttcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgQWN0aWVIZWxwZXIuY29ycmlnZWVyVG9wb0VsZW1lbnRlblpvbmRlckttcyh0b3BvRWxlbWVudGVuWm9uZGVyS21zLCBsYWF0c3RlUHVudEttcywga21zLCBrbVJhbmdlcyk7XG4gICAgICAgICAgICAgICAgdG9wb0VsZW1lbnRlblpvbmRlckttcyA9IFtdO1xuICAgICAgICAgICAgICAgIGttUmFuZ2VzLnB1c2goS21SYW5nZS5yYW5nZVZvb3JQdW50T2JqZWN0KGVsZW0pKTtcbiAgICAgICAgICAgICAgICBsYWF0c3RlUHVudEttcyA9IGttcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9wb0VsZW1lbnRlblpvbmRlckttcy5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRvcG9FbGVtZW50ZW5ab25kZXJLbXMubGVuZ3RoID4gMCAmJiBsYWF0c3RlUHVudEttcykge1xuICAgICAgICAgICAgQWN0aWVIZWxwZXIuY29ycmlnZWVyVG9wb0VsZW1lbnRlblpvbmRlckttcyh0b3BvRWxlbWVudGVuWm9uZGVyS21zLCBsYWF0c3RlUHVudEttcywgbnVsbCwga21SYW5nZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrbVJhbmdlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbEFjdGllUHVpY3NWb29yU3Bvb3J0YWsoYWN0aWU6IEFjdGllKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBzcG9vcnRhayA9IHRoaXMuc2JtU2VydmljZS5nZXRTYlNwb29ydGFrKEFjdGllSGVscGVyLmJlcGFhbFRha0lkKGFjdGllKSk7XG5cbiAgICAgICAgbGV0IHB1aWNzID0gW107XG4gICAgICAgIGlmICghc3Bvb3J0YWspIHtcbiAgICAgICAgICAgIHJldHVybiBwdWljcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcmFnbWVudGVuID0gQWN0aWVIZWxwZXIuYmVwYWFsU3Bvb3J0YWtGcmFnbWVudGVuKHNwb29ydGFrKTtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2lsb21ldHJlcmluZ0FhbndlemlnKGZyYWdtZW50ZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSB0aGlzLmJlcGFhbEFjdGllc1B1aWNzKFthY3RpZV0sIGZyYWdtZW50ZW4pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgQXJyYXkuZnJvbShtYXAua2V5cygpKSkge1xuICAgICAgICAgICAgICAgIG1hcC5nZXQoa2V5KS5mb3JFYWNoKHggPT4gcHVpY3MucHVzaCh4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdWljcyA9IEFjdGllSGVscGVyLmJlcGFhbFNwb29ydGFrRnJhZ21lbnRlblB1aWNzKGZyYWdtZW50ZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwdWljcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbFB1aWNzVm9vclZTVEFjdGllKGFjdGllOiBBY3RpZSk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzSGVlbE9mSGFsZkVuZ2Vsc1dpc3NlbEFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0dmFsID0gW107XG4gICAgICAgICAgICBjb25zdCB3aXNzZWxEZWxlbiA9IEFjdGllSGVscGVyLmdldFdpc3NlbERlbGVuKGFjdGllLndpc3NlbE5hYW0pO1xuICAgICAgICAgICAgY29uc3QgcHVpY3NFZXJzdGVXaXNzZWwgPSB0aGlzLmJlcGFhbFdpc3NlbFB1aWNzKHdpc3NlbERlbGVuWzBdLCBhY3RpZS5wcGxnTmFhbSwgYWN0aWUud2lzc2VsS2FudENvZGVbMF0pO1xuICAgICAgICAgICAgY29uc3QgcHVpY3NUd2VlZGVXaXNzZWwgPSB0aGlzLmJlcGFhbFdpc3NlbFB1aWNzKHdpc3NlbERlbGVuWzFdLCBhY3RpZS5wcGxnTmFhbSwgYWN0aWUud2lzc2VsS2FudENvZGVbMV0pO1xuXG4gICAgICAgICAgICBjb25zdCBwdWljMSA9IHRoaXMuc2JtU2VydmljZS5nZXRFZXJzdGVWZXJiaW5kaW5nUHVpY1Zvb3JTcGxpdEVuZ2Vsc2VXaXNzZWwod2lzc2VsRGVsZW5bMF0sIGFjdGllLndpc3NlbEthbnRDb2RlWzBdKTtcbiAgICAgICAgICAgIGlmIChwdWljMSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR2YWwucHVzaChwdWljMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwdWljMiA9IHRoaXMuc2JtU2VydmljZS5nZXRFZXJzdGVWZXJiaW5kaW5nUHVpY1Zvb3JTcGxpdEVuZ2Vsc2VXaXNzZWwod2lzc2VsRGVsZW5bMV0sIGFjdGllLndpc3NlbEthbnRDb2RlWzFdKTtcbiAgICAgICAgICAgIGlmIChwdWljMiAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICByZXR2YWwucHVzaChwdWljMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR2YWwucHVzaCguLi5wdWljc0VlcnN0ZVdpc3NlbCk7XG4gICAgICAgICAgICByZXR2YWwucHVzaCguLi5wdWljc1R3ZWVkZVdpc3NlbCk7XG4gICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmVwYWFsV2lzc2VsUHVpY3MoYWN0aWUud2lzc2VsTmFhbSwgYWN0aWUucHBsZ05hYW0sIGFjdGllLndpc3NlbEthbnRDb2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsV2lzc2VsUHVpY3Mod2lzc2VsTmFhbTogc3RyaW5nLCBwcGxnTmFhbTogc3RyaW5nLCBrYW50Y29kZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCB3aXNzZWwgPSB0aGlzLnNibVNlcnZpY2UuZ2V0U0JXaXNzZWwod2lzc2VsTmFhbSwgcHBsZ05hYW0pO1xuICAgICAgICBpZiAoIXdpc3NlbCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGthbnRFbGVtZW50ID0gdGhpcy5iZXBhYWxLYW50RWxlbWVudChrYW50Y29kZSwgd2lzc2VsKTtcbiAgICAgICAgaWYgKCFrYW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0b3JpbmdTeW1ib29sUHVpYyA9IHdpc3NlbC5nZXRTdG9yaW5nU3ltYm9vbFB1aWMoKTtcblxuICAgICAgICByZXR1cm4gW3N0b3JpbmdTeW1ib29sUHVpYywga2FudEVsZW1lbnQuZ2V0UHVpYygpXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJlcGFhbEthbnRFbGVtZW50KGthbnRjb2RlOiBzdHJpbmcsIHdpc3NlbDogc2JibGFkLldpc3NlbCk6IHNiYmxhZC5TcG9vcnRha0ZyYWdtZW50IHtcbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2FudENvZGVSZWNodHMoa2FudGNvZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gd2lzc2VsLmdldFJpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFjdGllSGVscGVyLmlzS2FudENvZGVMaW5rcyhrYW50Y29kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXNzZWwuZ2V0TGVmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmVwYWFsUHVpY1Zvb3JXaXNzZWxTbGlqcGVuQWN0aWUoYWN0aWU6IEFjdGllKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBzdG9yaW5nc1N5bWJvb2xQdWljID0gdGhpcy5zYm1TZXJ2aWNlLmdldFNCV2lzc2VsKGFjdGllLndpc3NlbE5hYW0sIGFjdGllLnBwbGdOYWFtKT8uZ2V0U3RvcmluZ1N5bWJvb2xQdWljKCk7XG4gICAgICAgIGlmICghc3RvcmluZ3NTeW1ib29sUHVpYyAmJiB0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zdCBtZWxkaW5nOiBNZWxkaW5nRXZlbnQgPSBNZWxkaW5nQnVpbGRlci5hY3RpZUhpZ2hsaWdodEVycm9yKFthY3RpZS5pZF0pO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlc1NlcnZpY2Uuc2hvd01lc3NhZ2UoTWVzc2FnZUJ1aWxkZXIuYWN0aWVIaWdobGlnaHRFcnJvcihbYWN0aWUuaWRdKSk7XG4gICAgICAgICAgICB0aGlzLm1zdExvZ1Jlc291cmNlLmxvZ0Vycm9yTWVzc2FnZXMoW3RoaXMubG9nZ2luZ0hlbHBlci5tYWFrTG9nRFRPKG1lbGRpbmcsIGFjdGllKV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdG9yaW5nc1N5bWJvb2xQdWljID8gW3N0b3JpbmdzU3ltYm9vbFB1aWNdIDogW107XG4gICAgfVxufVxuXG5cbiJdfQ==
@@ -1,90 +0,0 @@
1
- import { PopoverInfo } from '@loxia/imx-viewer';
2
- import { ActieHelper } from './actie-helper';
3
- import { ArrayMultimap } from './multi-map';
4
- export class ActiePopoverBepaler {
5
- static bepaalPopoverInfos(ritDelen, ritActieTopoPuics, ongeplandeActies) {
6
- const puicNaarActieMap = this.bepaalPuicNaarActieMap(ritDelen, ritActieTopoPuics);
7
- const puicNaarOngeplandeActieMap = this.bepaalPuicNaarOngeplandeActieMap(ongeplandeActies);
8
- const puics = puicNaarActieMap.keys();
9
- puics.push(...puicNaarOngeplandeActieMap.keys().filter(p => !puics.includes(p)));
10
- const infos = [];
11
- puics.forEach(puic => {
12
- let content = '';
13
- const treinNummerActieInfosGepland = puicNaarActieMap.get(puic).sort(this.sortTreinNummerActieInfo());
14
- const treinNummerActieInfosOngepland = puicNaarOngeplandeActieMap.get(puic).sort(this.sortTreinNummerActieInfo());
15
- const showTreinNummer = treinNummerActieInfosGepland.some(i => !!i.treinNummer)
16
- || treinNummerActieInfosOngepland.some(i => !!i.treinNummer);
17
- treinNummerActieInfosGepland.forEach(a => content = this.vulPopoverContent(content, a, 'popovertekst-gepland', showTreinNummer));
18
- treinNummerActieInfosOngepland.forEach(a => content = this.vulPopoverContent(content, a, 'popovertekst-ongepland', showTreinNummer));
19
- const info = this.createPopoverInfo(content, puic, showTreinNummer);
20
- infos.push(info);
21
- });
22
- return infos;
23
- }
24
- static createPopoverInfo(content, puic, showTreinNummer) {
25
- const info = new PopoverInfo([puic], content);
26
- info.popoverTitleContent = showTreinNummer ? '<span class="treinnummer">Trein #</span><span>Acties</span>' : 'Acties';
27
- return info;
28
- }
29
- static sortTreinNummerActieInfo() {
30
- return (a1, a2) => ActieHelper.actieComparator(a1.actie, a2.actie);
31
- }
32
- static bepaalPuicNaarOngeplandeActieMap(ongeplandeActies) {
33
- const puicNaarOngeplandeActieMap = new ArrayMultimap();
34
- if (ongeplandeActies.size() > 0) {
35
- ongeplandeActies.entries.forEach(entry => {
36
- const treinNummerActieInfos = puicNaarOngeplandeActieMap.get(entry.key);
37
- if (!treinNummerActieInfos?.map(({ actie }) => actie).includes(entry.value.actie)) {
38
- puicNaarOngeplandeActieMap.put(entry.key, { treinNummer: undefined, actie: entry.value.actie });
39
- }
40
- });
41
- }
42
- return puicNaarOngeplandeActieMap;
43
- }
44
- static bepaalPuicNaarActieMap(ritDelen, ritActieTopoPuics) {
45
- const puicNaarActieMap = new ArrayMultimap();
46
- ritDelen.forEach(ritDeel => {
47
- if (ritDeel.isZichtbaar() && ritDeel.acties.length !== 0) {
48
- ritDeel.acties.forEach(ritActie => {
49
- const puics = ritActieTopoPuics.get(ritActie);
50
- puics.forEach(puic => {
51
- this.addToPuicNaarActieMapIfNotExists(puicNaarActieMap, puic, ritActie, ritDeel.beweging?.treinNummer);
52
- });
53
- });
54
- }
55
- });
56
- return puicNaarActieMap;
57
- }
58
- static addToPuicNaarActieMapIfNotExists(puicNaarActieMap, puic, ritActie, treinNummer) {
59
- const treinNummerActieInfos = puicNaarActieMap.get(puic);
60
- if (!(treinNummerActieInfos?.find(({ actie }) => actie === ritActie))) {
61
- const actieInfo = { treinNummer, actie: ritActie };
62
- puicNaarActieMap.put(puic, actieInfo);
63
- }
64
- }
65
- static vulPopoverContent(content, { treinNummer, actie }, clazz, showTreinNummer) {
66
- let retval = content;
67
- const treinnummerClass = showTreinNummer ? 'class="treinnummer"' : 'class="no-treinnummer"';
68
- retval += '<div class="nowrap ' + clazz + '">';
69
- retval += `<span ${treinnummerClass}>${treinNummer || '-'}</span>`;
70
- let actieOmschrijving = '';
71
- if (ActieHelper.isVSTActie(actie)) {
72
- actieOmschrijving += ActieHelper.getVSTActieOmschrijving(actie);
73
- }
74
- else if (ActieHelper.isWisselSlijpenActie(actie)) {
75
- actieOmschrijving += `${actie.ritActieTypeOmschrijving} ${actie.wisselNaam}`;
76
- }
77
- else {
78
- actieOmschrijving += `${actie.ritActieTypeOmschrijving} ${actie.vanKilometerlint} ${actie.vanKilometrering}`;
79
- actieOmschrijving += '-';
80
- if (actie.totKilometerlint !== actie.vanKilometerlint) {
81
- actieOmschrijving += actie.totKilometerlint;
82
- actieOmschrijving += ' ';
83
- }
84
- actieOmschrijving += actie.totKilometrering;
85
- }
86
- retval += `<span>${actieOmschrijving}</span></div>`;
87
- return retval;
88
- }
89
- }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aWUtcG9wb3Zlci1iZXBhbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXN0LXZpZXdlci9zcmMvbGliL3V0aWwvYWN0aWUtcG9wb3Zlci1iZXBhbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUloRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQU81QyxNQUFNLE9BQU8sbUJBQW1CO0lBQzVCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFtQixFQUFFLGlCQUErQyxFQUNwRSxnQkFBd0Q7UUFDOUUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbEYsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUzRixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSw0QkFBNEIsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDdEcsTUFBTSw4QkFBOEIsR0FBRywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDbEgsTUFBTSxlQUFlLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7bUJBQ3hFLDhCQUE4QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakUsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDakksOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLHdCQUF3QixFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFFckksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDcEUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBZSxFQUFFLElBQVksRUFBRSxlQUF3QjtRQUNwRixNQUFNLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLDZEQUE2RCxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDdEgsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLE1BQU0sQ0FBQyx3QkFBd0I7UUFDbkMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxnQkFBd0Q7UUFDcEcsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLGFBQWEsRUFBZ0MsQ0FBQztRQUNyRixJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JDLE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ2hGLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsT0FBTywwQkFBMEIsQ0FBQztJQUN0QyxDQUFDO0lBRU8sTUFBTSxDQUFDLHNCQUFzQixDQUFDLFFBQW1CLEVBQUUsaUJBQStDO1FBQ3RHLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxhQUFhLEVBQWdDLENBQUM7UUFDM0UsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QixJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQzlCLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDOUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDakIsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztvQkFDM0csQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFTyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsZ0JBQTZELEVBQUUsSUFBWSxFQUFFLFFBQWUsRUFBRSxXQUFtQjtRQUM3SixNQUFNLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sU0FBUyxHQUF5QixFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDekUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUF3QixFQUFFLEtBQWEsRUFBRSxlQUF3QjtRQUNuSSxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDckIsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztRQUU1RixNQUFNLElBQUkscUJBQXFCLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUMvQyxNQUFNLElBQUksU0FBVSxnQkFBaUIsSUFBSyxXQUFXLElBQUksR0FBSSxTQUFTLENBQUM7UUFFdkUsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsaUJBQWlCLElBQUksV0FBVyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLENBQUM7YUFBTSxJQUFJLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELGlCQUFpQixJQUFJLEdBQUksS0FBSyxDQUFDLHdCQUF5QixJQUFLLEtBQUssQ0FBQyxVQUFXLEVBQUUsQ0FBQztRQUNyRixDQUFDO2FBQU0sQ0FBQztZQUNKLGlCQUFpQixJQUFJLEdBQUksS0FBSyxDQUFDLHdCQUF5QixJQUFLLEtBQUssQ0FBQyxnQkFBaUIsSUFBSyxLQUFLLENBQUMsZ0JBQWlCLEVBQUUsQ0FBQztZQUNuSCxpQkFBaUIsSUFBSSxHQUFHLENBQUM7WUFDekIsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BELGlCQUFpQixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDNUMsaUJBQWlCLElBQUksR0FBRyxDQUFDO1lBQzdCLENBQUM7WUFDRCxpQkFBaUIsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFDaEQsQ0FBQztRQUNELE1BQU0sSUFBSSxTQUFVLGlCQUFrQixlQUFlLENBQUM7UUFDdEQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9wb3ZlckluZm8gfSBmcm9tICdAbG94aWEvaW14LXZpZXdlcic7XG5pbXBvcnQgeyBPbmdlcGxhbmRlQWN0aWUgfSBmcm9tICcuLi9tb2RlbC9vbmdlcGxhbmRlLWFjdGllJztcbmltcG9ydCB7IFJpdGRlZWwgfSBmcm9tICcuLi9tb2RlbC9yaXRkZWVsJztcbmltcG9ydCB7IEFjdGllIH0gZnJvbSAnLi4vb3B0aW1vJztcbmltcG9ydCB7IEFjdGllSGVscGVyIH0gZnJvbSAnLi9hY3RpZS1oZWxwZXInO1xuaW1wb3J0IHsgQXJyYXlNdWx0aW1hcCB9IGZyb20gJy4vbXVsdGktbWFwJztcblxuaW50ZXJmYWNlIFRyZWluTnVtbWVyQWN0aWVJbmZvIHtcbiAgICB0cmVpbk51bW1lcjogbnVtYmVyO1xuICAgIGFjdGllOiBBY3RpZTtcbn1cblxuZXhwb3J0IGNsYXNzIEFjdGllUG9wb3ZlckJlcGFsZXIge1xuICAgIHN0YXRpYyBiZXBhYWxQb3BvdmVySW5mb3Mocml0RGVsZW46IFJpdGRlZWxbXSwgcml0QWN0aWVUb3BvUHVpY3M6IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmdlcGxhbmRlQWN0aWVzOiBBcnJheU11bHRpbWFwPHN0cmluZywgT25nZXBsYW5kZUFjdGllPik6IFBvcG92ZXJJbmZvW10ge1xuICAgICAgICBjb25zdCBwdWljTmFhckFjdGllTWFwID0gdGhpcy5iZXBhYWxQdWljTmFhckFjdGllTWFwKHJpdERlbGVuLCByaXRBY3RpZVRvcG9QdWljcyk7XG4gICAgICAgIGNvbnN0IHB1aWNOYWFyT25nZXBsYW5kZUFjdGllTWFwID0gdGhpcy5iZXBhYWxQdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcChvbmdlcGxhbmRlQWN0aWVzKTtcblxuICAgICAgICBjb25zdCBwdWljcyA9IHB1aWNOYWFyQWN0aWVNYXAua2V5cygpO1xuICAgICAgICBwdWljcy5wdXNoKC4uLnB1aWNOYWFyT25nZXBsYW5kZUFjdGllTWFwLmtleXMoKS5maWx0ZXIocCA9PiAhcHVpY3MuaW5jbHVkZXMocCkpKTtcblxuICAgICAgICBjb25zdCBpbmZvcyA9IFtdO1xuICAgICAgICBwdWljcy5mb3JFYWNoKHB1aWMgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSAnJztcbiAgICAgICAgICAgIGNvbnN0IHRyZWluTnVtbWVyQWN0aWVJbmZvc0dlcGxhbmQgPSBwdWljTmFhckFjdGllTWFwLmdldChwdWljKS5zb3J0KHRoaXMuc29ydFRyZWluTnVtbWVyQWN0aWVJbmZvKCkpO1xuICAgICAgICAgICAgY29uc3QgdHJlaW5OdW1tZXJBY3RpZUluZm9zT25nZXBsYW5kID0gcHVpY05hYXJPbmdlcGxhbmRlQWN0aWVNYXAuZ2V0KHB1aWMpLnNvcnQodGhpcy5zb3J0VHJlaW5OdW1tZXJBY3RpZUluZm8oKSk7XG4gICAgICAgICAgICBjb25zdCBzaG93VHJlaW5OdW1tZXIgPSB0cmVpbk51bW1lckFjdGllSW5mb3NHZXBsYW5kLnNvbWUoaSA9PiAhIWkudHJlaW5OdW1tZXIpXG4gICAgICAgICAgICAgICAgfHwgdHJlaW5OdW1tZXJBY3RpZUluZm9zT25nZXBsYW5kLnNvbWUoaSA9PiAhIWkudHJlaW5OdW1tZXIpO1xuICAgICAgICAgICAgdHJlaW5OdW1tZXJBY3RpZUluZm9zR2VwbGFuZC5mb3JFYWNoKGEgPT4gY29udGVudCA9IHRoaXMudnVsUG9wb3ZlckNvbnRlbnQoY29udGVudCwgYSwgJ3BvcG92ZXJ0ZWtzdC1nZXBsYW5kJywgc2hvd1RyZWluTnVtbWVyKSk7XG4gICAgICAgICAgICB0cmVpbk51bW1lckFjdGllSW5mb3NPbmdlcGxhbmQuZm9yRWFjaChhID0+IGNvbnRlbnQgPSB0aGlzLnZ1bFBvcG92ZXJDb250ZW50KGNvbnRlbnQsIGEsICdwb3BvdmVydGVrc3Qtb25nZXBsYW5kJywgc2hvd1RyZWluTnVtbWVyKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLmNyZWF0ZVBvcG92ZXJJbmZvKGNvbnRlbnQsIHB1aWMsIHNob3dUcmVpbk51bW1lcik7XG4gICAgICAgICAgICBpbmZvcy5wdXNoKGluZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGluZm9zO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZVBvcG92ZXJJbmZvKGNvbnRlbnQ6IHN0cmluZywgcHVpYzogc3RyaW5nLCBzaG93VHJlaW5OdW1tZXI6IGJvb2xlYW4pOiBQb3BvdmVySW5mbyB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBuZXcgUG9wb3ZlckluZm8oW3B1aWNdLCBjb250ZW50KTtcbiAgICAgICAgaW5mby5wb3BvdmVyVGl0bGVDb250ZW50ID0gc2hvd1RyZWluTnVtbWVyID8gJzxzcGFuIGNsYXNzPVwidHJlaW5udW1tZXJcIj5UcmVpbiAjPC9zcGFuPjxzcGFuPkFjdGllczwvc3Bhbj4nIDogJ0FjdGllcyc7XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNvcnRUcmVpbk51bW1lckFjdGllSW5mbygpOiAoYTogVHJlaW5OdW1tZXJBY3RpZUluZm8sIGI6IFRyZWluTnVtbWVyQWN0aWVJbmZvKSA9PiBudW1iZXIge1xuICAgICAgICByZXR1cm4gKGExLCBhMik6IG51bWJlciA9PiBBY3RpZUhlbHBlci5hY3RpZUNvbXBhcmF0b3IoYTEuYWN0aWUsIGEyLmFjdGllKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBiZXBhYWxQdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcChvbmdlcGxhbmRlQWN0aWVzOiBBcnJheU11bHRpbWFwPHN0cmluZywgT25nZXBsYW5kZUFjdGllPik6IEFycmF5TXVsdGltYXA8c3RyaW5nLCBUcmVpbk51bW1lckFjdGllSW5mbz4ge1xuICAgICAgICBjb25zdCBwdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcCA9IG5ldyBBcnJheU11bHRpbWFwPHN0cmluZywgVHJlaW5OdW1tZXJBY3RpZUluZm8+KCk7XG4gICAgICAgIGlmIChvbmdlcGxhbmRlQWN0aWVzLnNpemUoKSA+IDApIHtcbiAgICAgICAgICAgIG9uZ2VwbGFuZGVBY3RpZXMuZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmVpbk51bW1lckFjdGllSW5mb3MgPSBwdWljTmFhck9uZ2VwbGFuZGVBY3RpZU1hcC5nZXQoZW50cnkua2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoIXRyZWluTnVtbWVyQWN0aWVJbmZvcz8ubWFwKCh7IGFjdGllIH0pID0+IGFjdGllKS5pbmNsdWRlcyhlbnRyeS52YWx1ZS5hY3RpZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHVpY05hYXJPbmdlcGxhbmRlQWN0aWVNYXAucHV0KGVudHJ5LmtleSwgeyB0cmVpbk51bW1lcjogdW5kZWZpbmVkLCBhY3RpZTogZW50cnkudmFsdWUuYWN0aWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHB1aWNOYWFyT25nZXBsYW5kZUFjdGllTWFwO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGJlcGFhbFB1aWNOYWFyQWN0aWVNYXAocml0RGVsZW46IFJpdGRlZWxbXSwgcml0QWN0aWVUb3BvUHVpY3M6IEFycmF5TXVsdGltYXA8QWN0aWUsIHN0cmluZz4pOiBBcnJheU11bHRpbWFwPHN0cmluZywgVHJlaW5OdW1tZXJBY3RpZUluZm8+IHtcbiAgICAgICAgY29uc3QgcHVpY05hYXJBY3RpZU1hcCA9IG5ldyBBcnJheU11bHRpbWFwPHN0cmluZywgVHJlaW5OdW1tZXJBY3RpZUluZm8+KCk7XG4gICAgICAgIHJpdERlbGVuLmZvckVhY2gocml0RGVlbCA9PiB7XG4gICAgICAgICAgICBpZiAocml0RGVlbC5pc1ppY2h0YmFhcigpICYmIHJpdERlZWwuYWN0aWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJpdERlZWwuYWN0aWVzLmZvckVhY2gocml0QWN0aWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwdWljcyA9IHJpdEFjdGllVG9wb1B1aWNzLmdldChyaXRBY3RpZSk7XG4gICAgICAgICAgICAgICAgICAgIHB1aWNzLmZvckVhY2gocHVpYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRvUHVpY05hYXJBY3RpZU1hcElmTm90RXhpc3RzKHB1aWNOYWFyQWN0aWVNYXAsIHB1aWMsIHJpdEFjdGllLCByaXREZWVsLmJld2VnaW5nPy50cmVpbk51bW1lcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHB1aWNOYWFyQWN0aWVNYXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYWRkVG9QdWljTmFhckFjdGllTWFwSWZOb3RFeGlzdHMocHVpY05hYXJBY3RpZU1hcDogQXJyYXlNdWx0aW1hcDxzdHJpbmcsIFRyZWluTnVtbWVyQWN0aWVJbmZvPiwgcHVpYzogc3RyaW5nLCByaXRBY3RpZTogQWN0aWUsIHRyZWluTnVtbWVyOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdHJlaW5OdW1tZXJBY3RpZUluZm9zID0gcHVpY05hYXJBY3RpZU1hcC5nZXQocHVpYyk7XG4gICAgICAgIGlmICghKHRyZWluTnVtbWVyQWN0aWVJbmZvcz8uZmluZCgoeyBhY3RpZSB9KSA9PiBhY3RpZSA9PT0gcml0QWN0aWUpKSkge1xuICAgICAgICAgICAgY29uc3QgYWN0aWVJbmZvOiBUcmVpbk51bW1lckFjdGllSW5mbyA9IHsgdHJlaW5OdW1tZXIsIGFjdGllOiByaXRBY3RpZSB9O1xuICAgICAgICAgICAgcHVpY05hYXJBY3RpZU1hcC5wdXQocHVpYywgYWN0aWVJbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHZ1bFBvcG92ZXJDb250ZW50KGNvbnRlbnQ6IHN0cmluZywgeyB0cmVpbk51bW1lciwgYWN0aWUgfTogVHJlaW5OdW1tZXJBY3RpZUluZm8sIGNsYXp6OiBzdHJpbmcsIHNob3dUcmVpbk51bW1lcjogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXR2YWwgPSBjb250ZW50O1xuICAgICAgICBjb25zdCB0cmVpbm51bW1lckNsYXNzID0gc2hvd1RyZWluTnVtbWVyID8gJ2NsYXNzPVwidHJlaW5udW1tZXJcIicgOiAnY2xhc3M9XCJuby10cmVpbm51bW1lclwiJztcblxuICAgICAgICByZXR2YWwgKz0gJzxkaXYgY2xhc3M9XCJub3dyYXAgJyArIGNsYXp6ICsgJ1wiPic7XG4gICAgICAgIHJldHZhbCArPSBgPHNwYW4gJHsgdHJlaW5udW1tZXJDbGFzcyB9PiR7IHRyZWluTnVtbWVyIHx8ICctJyB9PC9zcGFuPmA7XG5cbiAgICAgICAgbGV0IGFjdGllT21zY2hyaWp2aW5nID0gJyc7XG4gICAgICAgIGlmIChBY3RpZUhlbHBlci5pc1ZTVEFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgYWN0aWVPbXNjaHJpanZpbmcgKz0gQWN0aWVIZWxwZXIuZ2V0VlNUQWN0aWVPbXNjaHJpanZpbmcoYWN0aWUpO1xuICAgICAgICB9IGVsc2UgaWYgKEFjdGllSGVscGVyLmlzV2lzc2VsU2xpanBlbkFjdGllKGFjdGllKSkge1xuICAgICAgICAgICAgYWN0aWVPbXNjaHJpanZpbmcgKz0gYCR7IGFjdGllLnJpdEFjdGllVHlwZU9tc2NocmlqdmluZyB9ICR7IGFjdGllLndpc3NlbE5hYW0gfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY3RpZU9tc2NocmlqdmluZyArPSBgJHsgYWN0aWUucml0QWN0aWVUeXBlT21zY2hyaWp2aW5nIH0gJHsgYWN0aWUudmFuS2lsb21ldGVybGludCB9ICR7IGFjdGllLnZhbktpbG9tZXRyZXJpbmcgfWA7XG4gICAgICAgICAgICBhY3RpZU9tc2NocmlqdmluZyArPSAnLSc7XG4gICAgICAgICAgICBpZiAoYWN0aWUudG90S2lsb21ldGVybGludCAhPT0gYWN0aWUudmFuS2lsb21ldGVybGludCkge1xuICAgICAgICAgICAgICAgIGFjdGllT21zY2hyaWp2aW5nICs9IGFjdGllLnRvdEtpbG9tZXRlcmxpbnQ7XG4gICAgICAgICAgICAgICAgYWN0aWVPbXNjaHJpanZpbmcgKz0gJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aWVPbXNjaHJpanZpbmcgKz0gYWN0aWUudG90S2lsb21ldHJlcmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR2YWwgKz0gYDxzcGFuPiR7IGFjdGllT21zY2hyaWp2aW5nIH08L3NwYW4+PC9kaXY+YDtcbiAgICAgICAgcmV0dXJuIHJldHZhbDtcbiAgICB9XG59XG4iXX0=