@ks89/angular-modal-gallery 10.0.1 → 11.0.0

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 (123) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/CONTRIBUTING.md +3 -3
  3. package/LICENSE +1 -1
  4. package/README.md +12 -14
  5. package/esm2022/lib/components/accessible.component.mjs +131 -0
  6. package/esm2022/lib/components/carousel/carousel-previews/carousel-previews.component.mjs +457 -0
  7. package/esm2022/lib/components/carousel/carousel.component.mjs +739 -0
  8. package/{esm2020 → esm2022}/lib/components/components.mjs +2 -2
  9. package/esm2022/lib/components/current-image/current-image.component.mjs +608 -0
  10. package/esm2022/lib/components/current-image/loading-spinner/loading-spinner.component.mjs +81 -0
  11. package/esm2022/lib/components/dots/dots.component.mjs +125 -0
  12. package/{esm2020 → esm2022}/lib/components/modal-gallery/modal-gallery-ref.mjs +2 -2
  13. package/esm2022/lib/components/modal-gallery/modal-gallery.component.mjs +500 -0
  14. package/esm2022/lib/components/modal-gallery/modal-gallery.service.mjs +188 -0
  15. package/{esm2020 → esm2022}/lib/components/modal-gallery/modal-gallery.tokens.mjs +2 -2
  16. package/esm2022/lib/components/plain-gallery/plain-gallery.component.mjs +250 -0
  17. package/esm2022/lib/components/previews/previews.component.mjs +264 -0
  18. package/esm2022/lib/components/upper-buttons/upper-buttons.component.mjs +244 -0
  19. package/esm2022/lib/directives/a-tag-bg-image.directive.mjs +79 -0
  20. package/esm2022/lib/directives/click-outside.directive.mjs +92 -0
  21. package/esm2022/lib/directives/description.directive.mjs +99 -0
  22. package/esm2022/lib/directives/direction.directive.mjs +74 -0
  23. package/esm2022/lib/directives/directives.mjs +51 -0
  24. package/esm2022/lib/directives/fallback-image.directive.mjs +60 -0
  25. package/esm2022/lib/directives/keyboard-navigation.directive.mjs +59 -0
  26. package/esm2022/lib/directives/margin.directive.mjs +85 -0
  27. package/esm2022/lib/directives/max-size.directive.mjs +76 -0
  28. package/esm2022/lib/directives/size.directive.mjs +77 -0
  29. package/esm2022/lib/directives/swipe.directive.mjs +115 -0
  30. package/esm2022/lib/directives/wrap.directive.mjs +75 -0
  31. package/esm2022/lib/modal-gallery.module.mjs +69 -0
  32. package/{esm2020 → esm2022}/lib/model/accessibility.interface.mjs +2 -2
  33. package/{esm2020 → esm2022}/lib/model/action.enum.mjs +2 -2
  34. package/{esm2020 → esm2022}/lib/model/buttons-config.interface.mjs +2 -2
  35. package/{esm2020 → esm2022}/lib/model/carousel-config.interface.mjs +2 -2
  36. package/{esm2020 → esm2022}/lib/model/carousel-image-config.interface.mjs +2 -2
  37. package/{esm2020 → esm2022}/lib/model/carousel-preview-config.interface.mjs +2 -2
  38. package/{esm2020 → esm2022}/lib/model/current-image-config.interface.mjs +2 -2
  39. package/{esm2020 → esm2022}/lib/model/description.interface.mjs +2 -2
  40. package/{esm2020 → esm2022}/lib/model/dots-config.interface.mjs +2 -2
  41. package/{esm2020 → esm2022}/lib/model/image-internal.class.mjs +2 -2
  42. package/{esm2020 → esm2022}/lib/model/image.class.mjs +2 -2
  43. package/{esm2020 → esm2022}/lib/model/keyboard-config.interface.mjs +2 -2
  44. package/{esm2020 → esm2022}/lib/model/keyboard.enum.mjs +2 -2
  45. package/{esm2020 → esm2022}/lib/model/lib-config.interface.mjs +2 -2
  46. package/{esm2020 → esm2022}/lib/model/loading-config.interface.mjs +2 -2
  47. package/{esm2020 → esm2022}/lib/model/max-size.interface.mjs +2 -2
  48. package/{esm2020 → esm2022}/lib/model/modal-gallery-config.interface.mjs +2 -2
  49. package/{esm2020 → esm2022}/lib/model/plain-gallery-config.interface.mjs +2 -2
  50. package/{esm2020 → esm2022}/lib/model/play-config.interface.mjs +2 -2
  51. package/{esm2020 → esm2022}/lib/model/preview-config.interface.mjs +2 -2
  52. package/{esm2020 → esm2022}/lib/model/size.interface.mjs +2 -2
  53. package/{esm2020 → esm2022}/lib/model/slide-config.interface.mjs +2 -2
  54. package/esm2022/lib/services/config.service.mjs +389 -0
  55. package/esm2022/lib/services/id-validator.service.mjs +72 -0
  56. package/{esm2020 → esm2022}/lib/utils/image.util.mjs +4 -4
  57. package/{esm2020 → esm2022}/lib/utils/user-input.util.mjs +2 -2
  58. package/{esm2020 → esm2022}/public-api.mjs +2 -2
  59. package/{fesm2020 → fesm2022}/ks89-angular-modal-gallery.mjs +382 -471
  60. package/fesm2022/ks89-angular-modal-gallery.mjs.map +1 -0
  61. package/lib/components/carousel/carousel-previews/carousel-previews.component.d.ts +4 -4
  62. package/lib/components/carousel/carousel.component.d.ts +5 -8
  63. package/lib/components/current-image/current-image.component.d.ts +6 -10
  64. package/lib/components/current-image/loading-spinner/loading-spinner.component.d.ts +3 -3
  65. package/lib/components/dots/dots.component.d.ts +5 -5
  66. package/lib/components/modal-gallery/modal-gallery.component.d.ts +11 -17
  67. package/lib/components/plain-gallery/plain-gallery.component.d.ts +3 -3
  68. package/lib/components/previews/previews.component.d.ts +6 -6
  69. package/lib/components/upper-buttons/upper-buttons.component.d.ts +4 -4
  70. package/lib/directives/a-tag-bg-image.directive.d.ts +3 -3
  71. package/lib/directives/click-outside.directive.d.ts +2 -2
  72. package/lib/directives/description.directive.d.ts +3 -3
  73. package/lib/directives/direction.directive.d.ts +3 -3
  74. package/lib/directives/directives.d.ts +2 -1
  75. package/lib/directives/fallback-image.directive.d.ts +1 -1
  76. package/lib/directives/keyboard-navigation.directive.d.ts +1 -1
  77. package/lib/directives/margin.directive.d.ts +3 -3
  78. package/lib/directives/max-size.directive.d.ts +3 -3
  79. package/lib/directives/size.directive.d.ts +1 -1
  80. package/lib/directives/swipe.directive.d.ts +33 -0
  81. package/lib/directives/wrap.directive.d.ts +3 -3
  82. package/lib/modal-gallery.module.d.ts +4 -10
  83. package/lib/model/keyboard.enum.d.ts +1 -1
  84. package/lib/model/lib-config.interface.d.ts +2 -6
  85. package/lib/services/config.service.d.ts +0 -2
  86. package/lib/utils/image.util.d.ts +2 -2
  87. package/package.json +10 -18
  88. package/esm2020/lib/components/accessible.component.mjs +0 -130
  89. package/esm2020/lib/components/carousel/carousel-previews/carousel-previews.component.mjs +0 -462
  90. package/esm2020/lib/components/carousel/carousel.component.mjs +0 -747
  91. package/esm2020/lib/components/current-image/current-image.component.mjs +0 -616
  92. package/esm2020/lib/components/current-image/loading-spinner/loading-spinner.component.mjs +0 -80
  93. package/esm2020/lib/components/dots/dots.component.mjs +0 -127
  94. package/esm2020/lib/components/modal-gallery/modal-gallery.component.mjs +0 -524
  95. package/esm2020/lib/components/modal-gallery/modal-gallery.service.mjs +0 -187
  96. package/esm2020/lib/components/plain-gallery/plain-gallery.component.mjs +0 -249
  97. package/esm2020/lib/components/previews/previews.component.mjs +0 -272
  98. package/esm2020/lib/components/upper-buttons/upper-buttons.component.mjs +0 -249
  99. package/esm2020/lib/directives/a-tag-bg-image.directive.mjs +0 -78
  100. package/esm2020/lib/directives/click-outside.directive.mjs +0 -91
  101. package/esm2020/lib/directives/description.directive.mjs +0 -98
  102. package/esm2020/lib/directives/direction.directive.mjs +0 -73
  103. package/esm2020/lib/directives/directives.mjs +0 -49
  104. package/esm2020/lib/directives/fallback-image.directive.mjs +0 -59
  105. package/esm2020/lib/directives/keyboard-navigation.directive.mjs +0 -58
  106. package/esm2020/lib/directives/margin.directive.mjs +0 -84
  107. package/esm2020/lib/directives/max-size.directive.mjs +0 -75
  108. package/esm2020/lib/directives/size.directive.mjs +0 -76
  109. package/esm2020/lib/directives/wrap.directive.mjs +0 -74
  110. package/esm2020/lib/modal-gallery.module.mjs +0 -94
  111. package/esm2020/lib/model/keyboard-service-config.interface.mjs +0 -25
  112. package/esm2020/lib/services/config.service.mjs +0 -396
  113. package/esm2020/lib/services/id-validator.service.mjs +0 -71
  114. package/esm2020/lib/services/keyboard.service.mjs +0 -111
  115. package/fesm2015/ks89-angular-modal-gallery.mjs +0 -5728
  116. package/fesm2015/ks89-angular-modal-gallery.mjs.map +0 -1
  117. package/fesm2020/ks89-angular-modal-gallery.mjs.map +0 -1
  118. package/lib/model/keyboard-service-config.interface.d.ts +0 -8
  119. package/lib/services/keyboard.service.d.ts +0 -26
  120. /package/{esm2020 → esm2022}/ks89-angular-modal-gallery.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/components/accessibility-default.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/components/upper-buttons/upper-buttons-default.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/model/interaction-event.interface.mjs +0 -0
@@ -0,0 +1,389 @@
1
+ /*
2
+ The MIT License (MIT)
3
+
4
+ Copyright (C) 2017-2023 Stefano Cappa (Ks89)
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
23
+ */
24
+ import { Injectable } from '@angular/core';
25
+ import { KS_DEFAULT_ACCESSIBILITY_CONFIG } from '../components/accessibility-default';
26
+ import { ButtonsStrategy } from '../model/buttons-config.interface';
27
+ import { GridLayout, LineLayout, PlainGalleryStrategy } from '../model/plain-gallery-config.interface';
28
+ import { LoadingType } from '../model/loading-config.interface';
29
+ import { DescriptionStrategy } from '../model/description.interface';
30
+ import * as i0 from "@angular/core";
31
+ export const DEFAULT_PREVIEW_SIZE = { height: '50px', width: 'auto' };
32
+ export const DEFAULT_LAYOUT = new LineLayout(DEFAULT_PREVIEW_SIZE, { length: -1, wrap: false }, 'flex-start');
33
+ export const DEFAULT_PLAIN_CONFIG = {
34
+ strategy: PlainGalleryStrategy.ROW,
35
+ layout: DEFAULT_LAYOUT,
36
+ advanced: { aTags: false, additionalBackground: '50% 50%/cover' }
37
+ };
38
+ export const DEFAULT_LOADING = { enable: true, type: LoadingType.STANDARD };
39
+ export const DEFAULT_DESCRIPTION_STYLE = {
40
+ bgColor: 'rgba(0, 0, 0, .5)',
41
+ textColor: 'white',
42
+ marginTop: '0px',
43
+ marginBottom: '0px',
44
+ marginLeft: '0px',
45
+ marginRight: '0px'
46
+ };
47
+ export const DEFAULT_DESCRIPTION = {
48
+ strategy: DescriptionStrategy.ALWAYS_VISIBLE,
49
+ imageText: 'Image ',
50
+ numberSeparator: '/',
51
+ beforeTextDescription: ' - ',
52
+ style: DEFAULT_DESCRIPTION_STYLE
53
+ };
54
+ export const DEFAULT_CAROUSEL_DESCRIPTION = {
55
+ strategy: DescriptionStrategy.ALWAYS_HIDDEN,
56
+ imageText: 'Image ',
57
+ numberSeparator: '/',
58
+ beforeTextDescription: ' - ',
59
+ style: DEFAULT_DESCRIPTION_STYLE
60
+ };
61
+ export const DEFAULT_CURRENT_IMAGE_CONFIG = {
62
+ navigateOnClick: true,
63
+ loadingConfig: DEFAULT_LOADING,
64
+ description: DEFAULT_DESCRIPTION,
65
+ downloadable: false,
66
+ invertSwipe: false
67
+ };
68
+ export const DEFAULT_CAROUSEL_IMAGE_CONFIG = {
69
+ description: DEFAULT_CAROUSEL_DESCRIPTION,
70
+ invertSwipe: false
71
+ };
72
+ export const DEFAULT_CURRENT_CAROUSEL_CONFIG = {
73
+ maxWidth: '100%',
74
+ maxHeight: '400px',
75
+ showArrows: true,
76
+ objectFit: 'cover',
77
+ keyboardEnable: true,
78
+ modalGalleryEnable: false
79
+ };
80
+ export const DEFAULT_CURRENT_CAROUSEL_PLAY = {
81
+ autoPlay: true,
82
+ interval: 5000,
83
+ pauseOnHover: true
84
+ };
85
+ export const DEFAULT_CAROUSEL_BREAKPOINTS = { xSmall: 100, small: 100, medium: 150, large: 200, xLarge: 200 };
86
+ export const DEFAULT_CAROUSEL_PREVIEWS_CONFIG = {
87
+ visible: true,
88
+ number: 4,
89
+ arrows: true,
90
+ clickable: true,
91
+ width: 100 / 4 + '%',
92
+ maxHeight: '200px',
93
+ breakpoints: DEFAULT_CAROUSEL_BREAKPOINTS
94
+ };
95
+ export const DEFAULT_SLIDE_CONFIG = {
96
+ infinite: false,
97
+ playConfig: { autoPlay: false, interval: 5000, pauseOnHover: true },
98
+ sidePreviews: { show: true, size: { width: '100px', height: 'auto' } }
99
+ };
100
+ export const DEFAULT_PREVIEW_CONFIG = {
101
+ visible: true,
102
+ number: 3,
103
+ arrows: true,
104
+ clickable: true,
105
+ size: DEFAULT_PREVIEW_SIZE
106
+ };
107
+ const DEFAULT_CONFIG = Object.freeze({
108
+ slideConfig: DEFAULT_SLIDE_CONFIG,
109
+ accessibilityConfig: KS_DEFAULT_ACCESSIBILITY_CONFIG,
110
+ previewConfig: DEFAULT_PREVIEW_CONFIG,
111
+ buttonsConfig: { visible: true, strategy: ButtonsStrategy.DEFAULT },
112
+ dotsConfig: { visible: true },
113
+ plainGalleryConfig: DEFAULT_PLAIN_CONFIG,
114
+ currentImageConfig: DEFAULT_CURRENT_IMAGE_CONFIG,
115
+ keyboardConfig: undefined,
116
+ carouselConfig: DEFAULT_CURRENT_CAROUSEL_CONFIG,
117
+ carouselImageConfig: DEFAULT_CAROUSEL_IMAGE_CONFIG,
118
+ carouselPreviewsConfig: DEFAULT_CAROUSEL_PREVIEWS_CONFIG,
119
+ carouselPlayConfig: DEFAULT_CURRENT_CAROUSEL_PLAY,
120
+ carouselDotsConfig: { visible: true },
121
+ carouselSlideInfinite: true,
122
+ enableCloseOutside: true
123
+ });
124
+ /**
125
+ * Service to handle library configuration in a unique place
126
+ */
127
+ class ConfigService {
128
+ constructor() {
129
+ this.configMap = new Map();
130
+ }
131
+ getConfig(id) {
132
+ this.initIfNotExists(id);
133
+ return this.configMap.get(id);
134
+ }
135
+ setConfig(id, obj) {
136
+ this.initIfNotExists(id);
137
+ if (!obj) {
138
+ return;
139
+ }
140
+ if (!DEFAULT_CONFIG ||
141
+ !DEFAULT_CONFIG.slideConfig ||
142
+ !DEFAULT_CONFIG.slideConfig.sidePreviews ||
143
+ !DEFAULT_CONFIG.previewConfig ||
144
+ !DEFAULT_CONFIG.previewConfig.size ||
145
+ !DEFAULT_CONFIG.previewConfig.number ||
146
+ !DEFAULT_CONFIG.plainGalleryConfig ||
147
+ !DEFAULT_CONFIG.currentImageConfig ||
148
+ !DEFAULT_CONFIG.currentImageConfig ||
149
+ !DEFAULT_CONFIG.currentImageConfig.description ||
150
+ !DEFAULT_CONFIG.carouselImageConfig ||
151
+ !DEFAULT_CONFIG.carouselImageConfig.description ||
152
+ !DEFAULT_CONFIG.carouselPreviewsConfig ||
153
+ !DEFAULT_CONFIG.carouselPreviewsConfig.breakpoints ||
154
+ !DEFAULT_CAROUSEL_PREVIEWS_CONFIG.number) {
155
+ throw new Error('Internal library error - DEFAULT_CONFIG must be fully initialized!!!');
156
+ }
157
+ const newConfig = Object.assign({}, this.configMap.get(id));
158
+ if (obj.slideConfig) {
159
+ let playConfig;
160
+ let sidePreviews;
161
+ let size;
162
+ if (obj.slideConfig.playConfig) {
163
+ playConfig = Object.assign({}, DEFAULT_CONFIG.slideConfig.playConfig, obj.slideConfig.playConfig);
164
+ }
165
+ else {
166
+ playConfig = DEFAULT_CONFIG.slideConfig.playConfig;
167
+ }
168
+ if (obj.slideConfig.sidePreviews) {
169
+ if (obj.slideConfig.sidePreviews.size) {
170
+ size = Object.assign({}, DEFAULT_CONFIG.slideConfig.sidePreviews.size, obj.slideConfig.sidePreviews.size);
171
+ }
172
+ else {
173
+ size = DEFAULT_CONFIG.slideConfig.sidePreviews.size;
174
+ }
175
+ sidePreviews = Object.assign({}, DEFAULT_CONFIG.slideConfig.sidePreviews, obj.slideConfig.sidePreviews);
176
+ }
177
+ else {
178
+ sidePreviews = DEFAULT_CONFIG.slideConfig.sidePreviews;
179
+ size = DEFAULT_CONFIG.slideConfig.sidePreviews.size;
180
+ }
181
+ const newSlideConfig = Object.assign({}, DEFAULT_CONFIG.slideConfig, obj.slideConfig);
182
+ newSlideConfig.playConfig = playConfig;
183
+ newSlideConfig.sidePreviews = sidePreviews;
184
+ newSlideConfig.sidePreviews.size = size;
185
+ newConfig.slideConfig = newSlideConfig;
186
+ }
187
+ if (obj.accessibilityConfig) {
188
+ newConfig.accessibilityConfig = Object.assign({}, DEFAULT_CONFIG.accessibilityConfig, obj.accessibilityConfig);
189
+ }
190
+ if (obj.previewConfig) {
191
+ let size;
192
+ let num;
193
+ if (obj.previewConfig.size) {
194
+ size = Object.assign({}, DEFAULT_CONFIG.previewConfig.size, obj.previewConfig.size);
195
+ }
196
+ else {
197
+ size = DEFAULT_CONFIG.previewConfig.size;
198
+ }
199
+ if (obj.previewConfig.number) {
200
+ if (obj.previewConfig.number <= 0) {
201
+ // if number is <= 0 reset to default
202
+ num = DEFAULT_CONFIG.previewConfig.number;
203
+ }
204
+ else {
205
+ num = obj.previewConfig.number;
206
+ }
207
+ }
208
+ else {
209
+ num = DEFAULT_CONFIG.previewConfig.number;
210
+ }
211
+ const newPreviewConfig = Object.assign({}, DEFAULT_CONFIG.previewConfig, obj.previewConfig);
212
+ newPreviewConfig.size = size;
213
+ newPreviewConfig.number = num;
214
+ newConfig.previewConfig = newPreviewConfig;
215
+ }
216
+ if (obj.buttonsConfig) {
217
+ newConfig.buttonsConfig = Object.assign({}, DEFAULT_CONFIG.buttonsConfig, obj.buttonsConfig);
218
+ }
219
+ if (obj.dotsConfig) {
220
+ newConfig.dotsConfig = Object.assign({}, DEFAULT_CONFIG.dotsConfig, obj.dotsConfig);
221
+ }
222
+ if (obj.plainGalleryConfig) {
223
+ let advanced;
224
+ let layout;
225
+ if (obj.plainGalleryConfig.advanced) {
226
+ advanced = Object.assign({}, DEFAULT_CONFIG.plainGalleryConfig.advanced, obj.plainGalleryConfig.advanced);
227
+ }
228
+ else {
229
+ advanced = DEFAULT_CONFIG.plainGalleryConfig.advanced;
230
+ }
231
+ if (obj.plainGalleryConfig.layout) {
232
+ // it isn't mandatory to use assign, because obj.plainGalleryConfig.layout is an instance of class (LineaLayout, GridLayout)
233
+ layout = obj.plainGalleryConfig.layout;
234
+ }
235
+ else {
236
+ layout = DEFAULT_CONFIG.plainGalleryConfig.layout;
237
+ }
238
+ const newPlainGalleryConfig = Object.assign({}, DEFAULT_CONFIG.plainGalleryConfig, obj.plainGalleryConfig);
239
+ newPlainGalleryConfig.layout = layout;
240
+ newPlainGalleryConfig.advanced = advanced;
241
+ newConfig.plainGalleryConfig = initPlainGalleryConfig(newPlainGalleryConfig);
242
+ }
243
+ if (obj.currentImageConfig) {
244
+ let loading;
245
+ let description;
246
+ let descriptionStyle;
247
+ if (obj.currentImageConfig.loadingConfig) {
248
+ loading = Object.assign({}, DEFAULT_CONFIG.currentImageConfig.loadingConfig, obj.currentImageConfig.loadingConfig);
249
+ }
250
+ else {
251
+ loading = DEFAULT_CONFIG.currentImageConfig.loadingConfig;
252
+ }
253
+ if (obj.currentImageConfig.description) {
254
+ description = Object.assign({}, DEFAULT_CONFIG.currentImageConfig.description, obj.currentImageConfig.description);
255
+ if (obj.currentImageConfig.description.style) {
256
+ descriptionStyle = Object.assign({}, DEFAULT_CONFIG.currentImageConfig.description.style, obj.currentImageConfig.description.style);
257
+ }
258
+ else {
259
+ descriptionStyle = DEFAULT_CONFIG.currentImageConfig.description.style;
260
+ }
261
+ }
262
+ else {
263
+ description = DEFAULT_CONFIG.currentImageConfig.description;
264
+ descriptionStyle = DEFAULT_CONFIG.currentImageConfig.description.style;
265
+ }
266
+ const newCurrentImageConfig = Object.assign({}, DEFAULT_CONFIG.currentImageConfig, obj.currentImageConfig);
267
+ newCurrentImageConfig.loadingConfig = loading;
268
+ newCurrentImageConfig.description = description;
269
+ newCurrentImageConfig.description.style = descriptionStyle;
270
+ newConfig.currentImageConfig = newCurrentImageConfig;
271
+ }
272
+ if (obj.keyboardConfig) {
273
+ newConfig.keyboardConfig = Object.assign({}, DEFAULT_CONFIG.keyboardConfig, obj.keyboardConfig);
274
+ }
275
+ // carousel
276
+ if (obj.carouselConfig) {
277
+ newConfig.carouselConfig = Object.assign({}, DEFAULT_CONFIG.carouselConfig, obj.carouselConfig);
278
+ }
279
+ if (obj.carouselImageConfig) {
280
+ let description;
281
+ let descriptionStyle;
282
+ if (obj.carouselImageConfig.description) {
283
+ description = Object.assign({}, DEFAULT_CONFIG.carouselImageConfig.description, obj.carouselImageConfig.description);
284
+ if (obj.carouselImageConfig.description.style) {
285
+ descriptionStyle = Object.assign({}, DEFAULT_CONFIG.carouselImageConfig.description.style, obj.carouselImageConfig.description.style);
286
+ }
287
+ else {
288
+ descriptionStyle = DEFAULT_CONFIG.carouselImageConfig.description.style;
289
+ }
290
+ }
291
+ else {
292
+ description = DEFAULT_CONFIG.carouselImageConfig.description;
293
+ descriptionStyle = DEFAULT_CONFIG.carouselImageConfig.description.style;
294
+ }
295
+ const newCarouselImageConfig = Object.assign({}, DEFAULT_CONFIG.carouselImageConfig, obj.carouselImageConfig);
296
+ newCarouselImageConfig.description = description;
297
+ newCarouselImageConfig.description.style = descriptionStyle;
298
+ newConfig.carouselImageConfig = newCarouselImageConfig;
299
+ }
300
+ if (obj.carouselPlayConfig) {
301
+ // check values
302
+ if (obj.carouselPlayConfig.interval <= 0) {
303
+ throw new Error(`Carousel's interval must be a number >= 0`);
304
+ }
305
+ newConfig.carouselPlayConfig = Object.assign({}, DEFAULT_CONFIG.carouselPlayConfig, obj.carouselPlayConfig);
306
+ }
307
+ if (obj.carouselPreviewsConfig) {
308
+ // check values
309
+ let num;
310
+ let breakpoints;
311
+ if (!obj.carouselPreviewsConfig.number || obj.carouselPreviewsConfig.number <= 0) {
312
+ num = DEFAULT_CAROUSEL_PREVIEWS_CONFIG.number;
313
+ }
314
+ else {
315
+ num = obj.carouselPreviewsConfig.number;
316
+ }
317
+ if (obj.carouselPreviewsConfig.breakpoints) {
318
+ breakpoints = Object.assign({}, DEFAULT_CONFIG.carouselPreviewsConfig.breakpoints, obj.carouselPreviewsConfig.breakpoints);
319
+ }
320
+ else {
321
+ breakpoints = DEFAULT_CONFIG.carouselPreviewsConfig.breakpoints;
322
+ }
323
+ newConfig.carouselPreviewsConfig = Object.assign({}, DEFAULT_CONFIG.carouselPreviewsConfig, obj.carouselPreviewsConfig);
324
+ newConfig.carouselPreviewsConfig.number = num;
325
+ newConfig.carouselPreviewsConfig.breakpoints = breakpoints;
326
+ // Init preview image width based on the number of previews in PreviewConfig
327
+ // Don't move this line above, because I need to be sure that both configPreview.number
328
+ // and configPreview.size are initialized
329
+ newConfig.carouselPreviewsConfig.width = 100 / newConfig.carouselPreviewsConfig.number + '%';
330
+ }
331
+ if (obj.carouselDotsConfig) {
332
+ newConfig.carouselDotsConfig = Object.assign({}, DEFAULT_CONFIG.carouselDotsConfig, obj.carouselDotsConfig);
333
+ }
334
+ if (obj.carouselSlideInfinite === undefined) {
335
+ newConfig.carouselSlideInfinite = DEFAULT_CONFIG.carouselSlideInfinite;
336
+ }
337
+ else {
338
+ newConfig.carouselSlideInfinite = obj.carouselSlideInfinite;
339
+ }
340
+ if (obj.enableCloseOutside === undefined) {
341
+ newConfig.enableCloseOutside = DEFAULT_CONFIG.enableCloseOutside;
342
+ }
343
+ else {
344
+ newConfig.enableCloseOutside = obj.enableCloseOutside;
345
+ }
346
+ this.configMap.set(id, newConfig);
347
+ }
348
+ initIfNotExists(id) {
349
+ if (!this.configMap.has(id)) {
350
+ this.configMap.set(id, DEFAULT_CONFIG);
351
+ }
352
+ }
353
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
354
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ConfigService, providedIn: 'root' }); }
355
+ }
356
+ export { ConfigService };
357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: ConfigService, decorators: [{
358
+ type: Injectable,
359
+ args: [{ providedIn: 'root' }]
360
+ }] });
361
+ /**
362
+ * Function to build and return a `PlainGalleryConfig` object, proving also default values and validating the input object.
363
+ * @param plainGalleryConfig object with the config requested by user
364
+ * @returns PlainGalleryConfig the plain gallery configuration
365
+ * @throws an Error if layout and strategy aren't compatible
366
+ */
367
+ function initPlainGalleryConfig(plainGalleryConfig) {
368
+ const newPlayGalleryConfig = Object.assign({}, DEFAULT_CONFIG.plainGalleryConfig, plainGalleryConfig);
369
+ if (newPlayGalleryConfig.layout instanceof LineLayout) {
370
+ if (newPlayGalleryConfig.strategy !== PlainGalleryStrategy.ROW && newPlayGalleryConfig.strategy !== PlainGalleryStrategy.COLUMN) {
371
+ throw new Error('LineLayout requires either ROW or COLUMN strategy');
372
+ }
373
+ if (!newPlayGalleryConfig.layout || !newPlayGalleryConfig.layout.breakConfig) {
374
+ throw new Error('Both layout and breakConfig must be valid');
375
+ }
376
+ }
377
+ if (newPlayGalleryConfig.layout instanceof GridLayout) {
378
+ if (newPlayGalleryConfig.strategy !== PlainGalleryStrategy.GRID) {
379
+ throw new Error('GridLayout requires GRID strategy');
380
+ }
381
+ if (!newPlayGalleryConfig.layout || !newPlayGalleryConfig.layout.breakConfig) {
382
+ throw new Error('Both layout and breakConfig must be valid');
383
+ }
384
+ // force wrap for grid layout
385
+ newPlayGalleryConfig.layout.breakConfig.wrap = true;
386
+ }
387
+ return newPlayGalleryConfig;
388
+ }
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rczg5L2FuZ3VsYXItbW9kYWwtZ2FsbGVyeS9zcmMvbGliL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUd0RixPQUFPLEVBQWlCLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFzQixvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTNILE9BQU8sRUFBaUIsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0UsT0FBTyxFQUFlLG1CQUFtQixFQUFvQixNQUFNLGdDQUFnQyxDQUFDOztBQU1wRyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBZSxJQUFJLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDMUgsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQXVCO0lBQ3RELFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHO0lBQ2xDLE1BQU0sRUFBRSxjQUFjO0lBQ3RCLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFO0NBQ2xFLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxlQUFlLEdB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RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUM1RSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7U0FDOUQ7S0FDRjtJQUVELElBQUksb0JBQW9CLENBQUMsTUFBTSxZQUFZLFVBQVUsRUFBRTtRQUNyRCxJQUFJLG9CQUFvQixDQUFDLFFBQVEsS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7WUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDNUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsNkJBQTZCO1FBQzdCLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztLQUNyRDtJQUNELE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMyBTdGVmYW5vIENhcHBhIChLczg5KVxuXG4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04gSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNpZGVQcmV2aWV3c0NvbmZpZywgU2xpZGVDb25maWcgfSBmcm9tICcuLi9tb2RlbC9zbGlkZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBsYXlDb25maWcgfSBmcm9tICcuLi9tb2RlbC9wbGF5LWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS1NfREVGQVVMVF9BQ0NFU1NJQklMSVRZX0NPTkZJRyB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWNjZXNzaWJpbGl0eS1kZWZhdWx0JztcbmltcG9ydCB7IFByZXZpZXdDb25maWcgfSBmcm9tICcuLi9tb2RlbC9wcmV2aWV3LWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gJy4uL21vZGVsL3NpemUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJ1dHRvbnNDb25maWcsIEJ1dHRvbnNTdHJhdGVneSB9IGZyb20gJy4uL21vZGVsL2J1dHRvbnMtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEb3RzQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvZG90cy1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRMYXlvdXQsIExpbmVMYXlvdXQsIFBsYWluR2FsbGVyeUNvbmZpZywgUGxhaW5HYWxsZXJ5U3RyYXRlZ3kgfSBmcm9tICcuLi9tb2RlbC9wbGFpbi1nYWxsZXJ5LWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ3VycmVudEltYWdlQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvY3VycmVudC1pbWFnZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IExvYWRpbmdDb25maWcsIExvYWRpbmdUeXBlIH0gZnJvbSAnLi4vbW9kZWwvbG9hZGluZy1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IERlc2NyaXB0aW9uLCBEZXNjcmlwdGlvblN0cmF0ZWd5LCBEZXNjcmlwdGlvblN0eWxlIH0gZnJvbSAnLi4vbW9kZWwvZGVzY3JpcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IENhcm91c2VsQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvY2Fyb3VzZWwtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDYXJvdXNlbEltYWdlQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvY2Fyb3VzZWwtaW1hZ2UtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCcmVha3BvaW50c0NvbmZpZywgQ2Fyb3VzZWxQcmV2aWV3Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWwvY2Fyb3VzZWwtcHJldmlldy1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYkNvbmZpZyB9IGZyb20gJy4uL21vZGVsL2xpYi1jb25maWcuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUFJFVklFV19TSVpFOiBTaXplID0geyBoZWlnaHQ6ICc1MHB4Jywgd2lkdGg6ICdhdXRvJyB9O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZT1VUOiBMaW5lTGF5b3V0ID0gbmV3IExpbmVMYXlvdXQoREVGQVVMVF9QUkVWSUVXX1NJWkUsIHsgbGVuZ3RoOiAtMSwgd3JhcDogZmFsc2UgfSwgJ2ZsZXgtc3RhcnQnKTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BMQUlOX0NPTkZJRzogUGxhaW5HYWxsZXJ5Q29uZmlnID0ge1xuICBzdHJhdGVneTogUGxhaW5HYWxsZXJ5U3RyYXRlZ3kuUk9XLFxuICBsYXlvdXQ6IERFRkFVTFRfTEFZT1VULFxuICBhZHZhbmNlZDogeyBhVGFnczogZmFsc2UsIGFkZGl0aW9uYWxCYWNrZ3JvdW5kOiAnNTAlIDUwJS9jb3ZlcicgfVxufTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0xPQURJTkc6IExvYWRpbmdDb25maWcgPSB7IGVuYWJsZTogdHJ1ZSwgdHlwZTogTG9hZGluZ1R5cGUuU1RBTkRBUkQgfTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0RFU0NSSVBUSU9OX1NUWUxFOiBEZXNjcmlwdGlvblN0eWxlID0ge1xuICBiZ0NvbG9yOiAncmdiYSgwLCAwLCAwLCAuNSknLFxuICB0ZXh0Q29sb3I6ICd3aGl0ZScsXG4gIG1hcmdpblRvcDogJzBweCcsXG4gIG1hcmdpbkJvdHRvbTogJzBweCcsXG4gIG1hcmdpbkxlZnQ6ICcwcHgnLFxuICBtYXJnaW5SaWdodDogJzBweCdcbn07XG5leHBvcnQgY29uc3QgREVGQVVMVF9ERVNDUklQVElPTjogRGVzY3JpcHRpb24gPSB7XG4gIHN0cmF0ZWd5OiBEZXNjcmlwdGlvblN0cmF0ZWd5LkFMV0FZU19WSVNJQkxFLFxuICBpbWFnZVRleHQ6ICdJbWFnZSAnLFxuICBudW1iZXJTZXBhcmF0b3I6ICcvJyxcbiAgYmVmb3JlVGV4dERlc2NyaXB0aW9uOiAnIC0gJyxcbiAgc3R5bGU6IERFRkFVTFRfREVTQ1JJUFRJT05fU1RZTEVcbn07XG5leHBvcnQgY29uc3QgREVGQVVMVF9DQVJPVVNFTF9ERVNDUklQVElPTjogRGVzY3JpcHRpb24gPSB7XG4gIHN0cmF0ZWd5OiBEZXNjcmlwdGlvblN0cmF0ZWd5LkFMV0FZU19ISURERU4sXG4gIGltYWdlVGV4dDogJ0ltYWdlICcsXG4gIG51bWJlclNlcGFyYXRvcjogJy8nLFxuICBiZWZvcmVUZXh0RGVzY3JpcHRpb246ICcgLSAnLFxuICBzdHlsZTogREVGQVVMVF9ERVNDUklQVElPTl9TVFlMRVxufTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0NVUlJFTlRfSU1BR0VfQ09ORklHOiBDdXJyZW50SW1hZ2VDb25maWcgPSB7XG4gIG5hdmlnYXRlT25DbGljazogdHJ1ZSxcbiAgbG9hZGluZ0NvbmZpZzogREVGQVVMVF9MT0FESU5HLFxuICBkZXNjcmlwdGlvbjogREVGQVVMVF9ERVNDUklQVElPTixcbiAgZG93bmxvYWRhYmxlOiBmYWxzZSxcbiAgaW52ZXJ0U3dpcGU6IGZhbHNlXG59O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ0FST1VTRUxfSU1BR0VfQ09ORklHOiBDYXJvdXNlbEltYWdlQ29uZmlnID0ge1xuICBkZXNjcmlwdGlvbjogREVGQVVMVF9DQVJPVVNFTF9ERVNDUklQVElPTixcbiAgaW52ZXJ0U3dpcGU6IGZhbHNlXG59O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ1VSUkVOVF9DQVJPVVNFTF9DT05GSUc6IENhcm91c2VsQ29uZmlnID0ge1xuICBtYXhXaWR0aDogJzEwMCUnLFxuICBtYXhIZWlnaHQ6ICc0MDBweCcsXG4gIHNob3dBcnJvd3M6IHRydWUsXG4gIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAga2V5Ym9hcmRFbmFibGU6IHRydWUsXG4gIG1vZGFsR2FsbGVyeUVuYWJsZTogZmFsc2Vcbn07XG5leHBvcnQgY29uc3QgREVGQVVMVF9DVVJSRU5UX0NBUk9VU0VMX1BMQVk6IFBsYXlDb25maWcgPSB7XG4gIGF1dG9QbGF5OiB0cnVlLFxuICBpbnRlcnZhbDogNTAwMCxcbiAgcGF1c2VPbkhvdmVyOiB0cnVlXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DQVJPVVNFTF9CUkVBS1BPSU5UUzogQnJlYWtwb2ludHNDb25maWcgPSB7IHhTbWFsbDogMTAwLCBzbWFsbDogMTAwLCBtZWRpdW06IDE1MCwgbGFyZ2U6IDIwMCwgeExhcmdlOiAyMDAgfTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0NBUk9VU0VMX1BSRVZJRVdTX0NPTkZJRzogQ2Fyb3VzZWxQcmV2aWV3Q29uZmlnID0ge1xuICB2aXNpYmxlOiB0cnVlLFxuICBudW1iZXI6IDQsXG4gIGFycm93czogdHJ1ZSxcbiAgY2xpY2thYmxlOiB0cnVlLFxuICB3aWR0aDogMTAwIC8gNCArICclJyxcbiAgbWF4SGVpZ2h0OiAnMjAwcHgnLFxuICBicmVha3BvaW50czogREVGQVVMVF9DQVJPVVNFTF9CUkVBS1BPSU5UU1xufTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1NMSURFX0NPTkZJRzogU2xpZGVDb25maWcgPSB7XG4gIGluZmluaXRlOiBmYWxzZSxcbiAgcGxheUNvbmZpZzogeyBhdXRvUGxheTogZmFsc2UsIGludGVydmFsOiA1MDAwLCBwYXVzZU9uSG92ZXI6IHRydWUgfSBhcyBQbGF5Q29uZmlnLFxuICBzaWRlUHJldmlld3M6IHsgc2hvdzogdHJ1ZSwgc2l6ZTogeyB3aWR0aDogJzEwMHB4JywgaGVpZ2h0OiAnYXV0bycgfSB9IGFzIFNpZGVQcmV2aWV3c0NvbmZpZ1xufTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BSRVZJRVdfQ09ORklHOiBQcmV2aWV3Q29uZmlnID0ge1xuICB2aXNpYmxlOiB0cnVlLFxuICBudW1iZXI6IDMsXG4gIGFycm93czogdHJ1ZSxcbiAgY2xpY2thYmxlOiB0cnVlLFxuICBzaXplOiBERUZBVUxUX1BSRVZJRVdfU0laRVxufTtcblxuY29uc3QgREVGQVVMVF9DT05GSUc6IExpYkNvbmZpZyA9IE9iamVjdC5mcmVlemUoe1xuICBzbGlkZUNvbmZpZzogREVGQVVMVF9TTElERV9DT05GSUcsXG4gIGFjY2Vzc2liaWxpdHlDb25maWc6IEtTX0RFRkFVTFRfQUNDRVNTSUJJTElUWV9DT05GSUcsXG4gIHByZXZpZXdDb25maWc6IERFRkFVTFRfUFJFVklFV19DT05GSUcsXG4gIGJ1dHRvbnNDb25maWc6IHsgdmlzaWJsZTogdHJ1ZSwgc3RyYXRlZ3k6IEJ1dHRvbnNTdHJhdGVneS5ERUZBVUxUIH0gYXMgQnV0dG9uc0NvbmZpZyxcbiAgZG90c0NvbmZpZzogeyB2aXNpYmxlOiB0cnVlIH0gYXMgRG90c0NvbmZpZyxcbiAgcGxhaW5HYWxsZXJ5Q29uZmlnOiBERUZBVUxUX1BMQUlOX0NPTkZJRyxcbiAgY3VycmVudEltYWdlQ29uZmlnOiBERUZBVUxUX0NVUlJFTlRfSU1BR0VfQ09ORklHLFxuICBrZXlib2FyZENvbmZpZzogdW5kZWZpbmVkLCAvLyBieSBkZWZhdWx0IG5vdGhpbmcsIGJlY2F1c2UgdGhlIGxpYnJhcnkgdXNlcyBkZWZhdWx0IGJ1dHRvbnMgYXV0b21hdGljYWxseVxuICBjYXJvdXNlbENvbmZpZzogREVGQVVMVF9DVVJSRU5UX0NBUk9VU0VMX0NPTkZJRyxcbiAgY2Fyb3VzZWxJbWFnZUNvbmZpZzogREVGQVVMVF9DQVJPVVNFTF9JTUFHRV9DT05GSUcsXG4gIGNhcm91c2VsUHJldmlld3NDb25maWc6IERFRkFVTFRfQ0FST1VTRUxfUFJFVklFV1NfQ09ORklHLFxuICBjYXJvdXNlbFBsYXlDb25maWc6IERFRkFVTFRfQ1VSUkVOVF9DQVJPVVNFTF9QTEFZLFxuICBjYXJvdXNlbERvdHNDb25maWc6IHsgdmlzaWJsZTogdHJ1ZSB9IGFzIERvdHNDb25maWcsXG4gIGNhcm91c2VsU2xpZGVJbmZpbml0ZTogdHJ1ZSxcbiAgZW5hYmxlQ2xvc2VPdXRzaWRlOiB0cnVlXG59KTtcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIGhhbmRsZSBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24gaW4gYSB1bmlxdWUgcGxhY2VcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDb25maWdTZXJ2aWNlIHtcbiAgY29uZmlnTWFwOiBNYXA8bnVtYmVyLCBMaWJDb25maWc+ID0gbmV3IE1hcDxudW1iZXIsIExpYkNvbmZpZz4oKTtcblxuICBnZXRDb25maWcoaWQ6IG51bWJlcik6IExpYkNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgdGhpcy5pbml0SWZOb3RFeGlzdHMoaWQpO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ01hcC5nZXQoaWQpO1xuICB9XG5cbiAgc2V0Q29uZmlnKGlkOiBudW1iZXIsIG9iajogTGliQ29uZmlnIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5pbml0SWZOb3RFeGlzdHMoaWQpO1xuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIURFRkFVTFRfQ09ORklHIHx8XG4gICAgICAhREVGQVVMVF9DT05GSUcuc2xpZGVDb25maWcgfHxcbiAgICAgICFERUZBVUxUX0NPTkZJRy5zbGlkZUNvbmZpZy5zaWRlUHJldmlld3MgfHxcbiAgICAgICFERUZBVUxUX0NPTkZJRy5wcmV2aWV3Q29uZmlnIHx8XG4gICAgICAhREVGQVVMVF9DT05GSUcucHJldmlld0NvbmZpZy5zaXplIHx8XG4gICAgICAhREVGQVVMVF9DT05GSUcucHJldmlld0NvbmZpZy5udW1iZXIgfHxcbiAgICAgICFERUZBVUxUX0NPTkZJRy5wbGFpbkdhbGxlcnlDb25maWcgfHxcbiAgICAgICFERUZBVUxUX0NPTkZJRy5jdXJyZW50SW1hZ2VDb25maWcgfHxcbiAgICAgICFERUZBVUxUX0NPTkZJRy5jdXJyZW50SW1hZ2VDb25maWcgfHxcbiAgICAgICFERUZBVUxUX0NPTkZJRy5jdXJyZW50SW1hZ2VDb25maWcuZGVzY3JpcHRpb24gfHxcbiAgICAgICFERUZBVUxUX0NPTkZJRy5jYXJvdXNlbEltYWdlQ29uZmlnIHx8XG4gICAgICAhREVGQVVMVF9DT05GSUcuY2Fyb3VzZWxJbWFnZUNvbmZpZy5kZXNjcmlwdGlvbiB8fFxuICAgICAgIURFRkFVTFRfQ09ORklHLmNhcm91c2VsUHJldmlld3NDb25maWcgfHxcbiAgICAgICFERUZBVUxUX0NPTkZJRy5jYXJvdXNlbFByZXZpZXdzQ29uZmlnLmJyZWFrcG9pbnRzIHx8XG4gICAgICAhREVGQVVMVF9DQVJPVVNFTF9QUkVWSUVXU19DT05GSUcubnVtYmVyXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGxpYnJhcnkgZXJyb3IgLSBERUZBVUxUX0NPTkZJRyBtdXN0IGJlIGZ1bGx5IGluaXRpYWxpemVkISEhJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3Q29uZmlnOiBMaWJDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZ01hcC5nZXQoaWQpKTtcbiAgICBpZiAob2JqLnNsaWRlQ29uZmlnKSB7XG4gICAgICBsZXQgcGxheUNvbmZpZztcbiAgICAgIGxldCBzaWRlUHJldmlld3M7XG4gICAgICBsZXQgc2l6ZTtcbiAgICAgIGlmIChvYmouc2xpZGVDb25maWcucGxheUNvbmZpZykge1xuICAgICAgICBwbGF5Q29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcuc2xpZGVDb25maWcucGxheUNvbmZpZywgb2JqLnNsaWRlQ29uZmlnLnBsYXlDb25maWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGxheUNvbmZpZyA9IERFRkFVTFRfQ09ORklHLnNsaWRlQ29uZmlnLnBsYXlDb25maWc7XG4gICAgICB9XG4gICAgICBpZiAob2JqLnNsaWRlQ29uZmlnLnNpZGVQcmV2aWV3cykge1xuICAgICAgICBpZiAob2JqLnNsaWRlQ29uZmlnLnNpZGVQcmV2aWV3cy5zaXplKSB7XG4gICAgICAgICAgc2l6ZSA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLnNsaWRlQ29uZmlnLnNpZGVQcmV2aWV3cy5zaXplLCBvYmouc2xpZGVDb25maWcuc2lkZVByZXZpZXdzLnNpemUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNpemUgPSBERUZBVUxUX0NPTkZJRy5zbGlkZUNvbmZpZy5zaWRlUHJldmlld3Muc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBzaWRlUHJldmlld3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRy5zbGlkZUNvbmZpZy5zaWRlUHJldmlld3MsIG9iai5zbGlkZUNvbmZpZy5zaWRlUHJldmlld3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lkZVByZXZpZXdzID0gREVGQVVMVF9DT05GSUcuc2xpZGVDb25maWcuc2lkZVByZXZpZXdzO1xuICAgICAgICBzaXplID0gREVGQVVMVF9DT05GSUcuc2xpZGVDb25maWcuc2lkZVByZXZpZXdzLnNpemU7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdTbGlkZUNvbmZpZzogU2xpZGVDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRy5zbGlkZUNvbmZpZywgb2JqLnNsaWRlQ29uZmlnKTtcbiAgICAgIG5ld1NsaWRlQ29uZmlnLnBsYXlDb25maWcgPSBwbGF5Q29uZmlnO1xuICAgICAgbmV3U2xpZGVDb25maWcuc2lkZVByZXZpZXdzID0gc2lkZVByZXZpZXdzO1xuICAgICAgbmV3U2xpZGVDb25maWcuc2lkZVByZXZpZXdzLnNpemUgPSBzaXplO1xuICAgICAgbmV3Q29uZmlnLnNsaWRlQ29uZmlnID0gbmV3U2xpZGVDb25maWc7XG4gICAgfVxuICAgIGlmIChvYmouYWNjZXNzaWJpbGl0eUNvbmZpZykge1xuICAgICAgbmV3Q29uZmlnLmFjY2Vzc2liaWxpdHlDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRy5hY2Nlc3NpYmlsaXR5Q29uZmlnLCBvYmouYWNjZXNzaWJpbGl0eUNvbmZpZyk7XG4gICAgfVxuICAgIGlmIChvYmoucHJldmlld0NvbmZpZykge1xuICAgICAgbGV0IHNpemU6IFNpemU7XG4gICAgICBsZXQgbnVtOiBudW1iZXI7XG4gICAgICBpZiAob2JqLnByZXZpZXdDb25maWcuc2l6ZSkge1xuICAgICAgICBzaXplID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcucHJldmlld0NvbmZpZy5zaXplLCBvYmoucHJldmlld0NvbmZpZy5zaXplKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpemUgPSBERUZBVUxUX0NPTkZJRy5wcmV2aWV3Q29uZmlnLnNpemU7XG4gICAgICB9XG4gICAgICBpZiAob2JqLnByZXZpZXdDb25maWcubnVtYmVyKSB7XG4gICAgICAgIGlmIChvYmoucHJldmlld0NvbmZpZy5udW1iZXIgPD0gMCkge1xuICAgICAgICAgIC8vIGlmIG51bWJlciBpcyA8PSAwIHJlc2V0IHRvIGRlZmF1bHRcbiAgICAgICAgICBudW0gPSBERUZBVUxUX0NPTkZJRy5wcmV2aWV3Q29uZmlnLm51bWJlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBudW0gPSBvYmoucHJldmlld0NvbmZpZy5udW1iZXI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG51bSA9IERFRkFVTFRfQ09ORklHLnByZXZpZXdDb25maWcubnVtYmVyO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3UHJldmlld0NvbmZpZzogUHJldmlld0NvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLnByZXZpZXdDb25maWcsIG9iai5wcmV2aWV3Q29uZmlnKTtcbiAgICAgIG5ld1ByZXZpZXdDb25maWcuc2l6ZSA9IHNpemU7XG4gICAgICBuZXdQcmV2aWV3Q29uZmlnLm51bWJlciA9IG51bTtcbiAgICAgIG5ld0NvbmZpZy5wcmV2aWV3Q29uZmlnID0gbmV3UHJldmlld0NvbmZpZztcbiAgICB9XG4gICAgaWYgKG9iai5idXR0b25zQ29uZmlnKSB7XG4gICAgICBuZXdDb25maWcuYnV0dG9uc0NvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLmJ1dHRvbnNDb25maWcsIG9iai5idXR0b25zQ29uZmlnKTtcbiAgICB9XG4gICAgaWYgKG9iai5kb3RzQ29uZmlnKSB7XG4gICAgICBuZXdDb25maWcuZG90c0NvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLmRvdHNDb25maWcsIG9iai5kb3RzQ29uZmlnKTtcbiAgICB9XG4gICAgaWYgKG9iai5wbGFpbkdhbGxlcnlDb25maWcpIHtcbiAgICAgIGxldCBhZHZhbmNlZDtcbiAgICAgIGxldCBsYXlvdXQ7XG4gICAgICBpZiAob2JqLnBsYWluR2FsbGVyeUNvbmZpZy5hZHZhbmNlZCkge1xuICAgICAgICBhZHZhbmNlZCA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLnBsYWluR2FsbGVyeUNvbmZpZy5hZHZhbmNlZCwgb2JqLnBsYWluR2FsbGVyeUNvbmZpZy5hZHZhbmNlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZHZhbmNlZCA9IERFRkFVTFRfQ09ORklHLnBsYWluR2FsbGVyeUNvbmZpZy5hZHZhbmNlZDtcbiAgICAgIH1cbiAgICAgIGlmIChvYmoucGxhaW5HYWxsZXJ5Q29uZmlnLmxheW91dCkge1xuICAgICAgICAvLyBpdCBpc24ndCBtYW5kYXRvcnkgdG8gdXNlIGFzc2lnbiwgYmVjYXVzZSBvYmoucGxhaW5HYWxsZXJ5Q29uZmlnLmxheW91dCBpcyBhbiBpbnN0YW5jZSBvZiBjbGFzcyAoTGluZWFMYXlvdXQsIEdyaWRMYXlvdXQpXG4gICAgICAgIGxheW91dCA9IG9iai5wbGFpbkdhbGxlcnlDb25maWcubGF5b3V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGF5b3V0ID0gREVGQVVMVF9DT05GSUcucGxhaW5HYWxsZXJ5Q29uZmlnLmxheW91dDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld1BsYWluR2FsbGVyeUNvbmZpZzogUGxhaW5HYWxsZXJ5Q29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcucGxhaW5HYWxsZXJ5Q29uZmlnLCBvYmoucGxhaW5HYWxsZXJ5Q29uZmlnKTtcbiAgICAgIG5ld1BsYWluR2FsbGVyeUNvbmZpZy5sYXlvdXQgPSBsYXlvdXQ7XG4gICAgICBuZXdQbGFpbkdhbGxlcnlDb25maWcuYWR2YW5jZWQgPSBhZHZhbmNlZDtcbiAgICAgIG5ld0NvbmZpZy5wbGFpbkdhbGxlcnlDb25maWcgPSBpbml0UGxhaW5HYWxsZXJ5Q29uZmlnKG5ld1BsYWluR2FsbGVyeUNvbmZpZyk7XG4gICAgfVxuICAgIGlmIChvYmouY3VycmVudEltYWdlQ29uZmlnKSB7XG4gICAgICBsZXQgbG9hZGluZztcbiAgICAgIGxldCBkZXNjcmlwdGlvbjtcbiAgICAgIGxldCBkZXNjcmlwdGlvblN0eWxlO1xuICAgICAgaWYgKG9iai5jdXJyZW50SW1hZ2VDb25maWcubG9hZGluZ0NvbmZpZykge1xuICAgICAgICBsb2FkaW5nID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcuY3VycmVudEltYWdlQ29uZmlnLmxvYWRpbmdDb25maWcsIG9iai5jdXJyZW50SW1hZ2VDb25maWcubG9hZGluZ0NvbmZpZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2FkaW5nID0gREVGQVVMVF9DT05GSUcuY3VycmVudEltYWdlQ29uZmlnLmxvYWRpbmdDb25maWc7XG4gICAgICB9XG4gICAgICBpZiAob2JqLmN1cnJlbnRJbWFnZUNvbmZpZy5kZXNjcmlwdGlvbikge1xuICAgICAgICBkZXNjcmlwdGlvbiA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLmN1cnJlbnRJbWFnZUNvbmZpZy5kZXNjcmlwdGlvbiwgb2JqLmN1cnJlbnRJbWFnZUNvbmZpZy5kZXNjcmlwdGlvbik7XG4gICAgICAgIGlmIChvYmouY3VycmVudEltYWdlQ29uZmlnLmRlc2NyaXB0aW9uLnN0eWxlKSB7XG4gICAgICAgICAgZGVzY3JpcHRpb25TdHlsZSA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLmN1cnJlbnRJbWFnZUNvbmZpZy5kZXNjcmlwdGlvbi5zdHlsZSwgb2JqLmN1cnJlbnRJbWFnZUNvbmZpZy5kZXNjcmlwdGlvbi5zdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVzY3JpcHRpb25TdHlsZSA9IERFRkFVTFRfQ09ORklHLmN1cnJlbnRJbWFnZUNvbmZpZy5kZXNjcmlwdGlvbi5zdHlsZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVzY3JpcHRpb24gPSBERUZBVUxUX0NPTkZJRy5jdXJyZW50SW1hZ2VDb25maWcuZGVzY3JpcHRpb247XG4gICAgICAgIGRlc2NyaXB0aW9uU3R5bGUgPSBERUZBVUxUX0NPTkZJRy5jdXJyZW50SW1hZ2VDb25maWcuZGVzY3JpcHRpb24uc3R5bGU7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdDdXJyZW50SW1hZ2VDb25maWc6IEN1cnJlbnRJbWFnZUNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLmN1cnJlbnRJbWFnZUNvbmZpZywgb2JqLmN1cnJlbnRJbWFnZUNvbmZpZyk7XG4gICAgICBuZXdDdXJyZW50SW1hZ2VDb25maWcubG9hZGluZ0NvbmZpZyA9IGxvYWRpbmc7XG4gICAgICBuZXdDdXJyZW50SW1hZ2VDb25maWcuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgIG5ld0N1cnJlbnRJbWFnZUNvbmZpZy5kZXNjcmlwdGlvbi5zdHlsZSA9IGRlc2NyaXB0aW9uU3R5bGU7XG4gICAgICBuZXdDb25maWcuY3VycmVudEltYWdlQ29uZmlnID0gbmV3Q3VycmVudEltYWdlQ29uZmlnO1xuICAgIH1cbiAgICBpZiAob2JqLmtleWJvYXJkQ29uZmlnKSB7XG4gICAgICBuZXdDb25maWcua2V5Ym9hcmRDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRy5rZXlib2FyZENvbmZpZywgb2JqLmtleWJvYXJkQ29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyBjYXJvdXNlbFxuICAgIGlmIChvYmouY2Fyb3VzZWxDb25maWcpIHtcbiAgICAgIG5ld0NvbmZpZy5jYXJvdXNlbENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLmNhcm91c2VsQ29uZmlnLCBvYmouY2Fyb3VzZWxDb25maWcpO1xuICAgIH1cbiAgICBpZiAob2JqLmNhcm91c2VsSW1hZ2VDb25maWcpIHtcbiAgICAgIGxldCBkZXNjcmlwdGlvbjtcbiAgICAgIGxldCBkZXNjcmlwdGlvblN0eWxlO1xuICAgICAgaWYgKG9iai5jYXJvdXNlbEltYWdlQ29uZmlnLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcuY2Fyb3VzZWxJbWFnZUNvbmZpZy5kZXNjcmlwdGlvbiwgb2JqLmNhcm91c2VsSW1hZ2VDb25maWcuZGVzY3JpcHRpb24pO1xuICAgICAgICBpZiAob2JqLmNhcm91c2VsSW1hZ2VDb25maWcuZGVzY3JpcHRpb24uc3R5bGUpIHtcbiAgICAgICAgICBkZXNjcmlwdGlvblN0eWxlID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcuY2Fyb3VzZWxJbWFnZUNvbmZpZy5kZXNjcmlwdGlvbi5zdHlsZSwgb2JqLmNhcm91c2VsSW1hZ2VDb25maWcuZGVzY3JpcHRpb24uc3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlc2NyaXB0aW9uU3R5bGUgPSBERUZBVUxUX0NPTkZJRy5jYXJvdXNlbEltYWdlQ29uZmlnLmRlc2NyaXB0aW9uLnN0eWxlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXNjcmlwdGlvbiA9IERFRkFVTFRfQ09ORklHLmNhcm91c2VsSW1hZ2VDb25maWcuZGVzY3JpcHRpb247XG4gICAgICAgIGRlc2NyaXB0aW9uU3R5bGUgPSBERUZBVUxUX0NPTkZJRy5jYXJvdXNlbEltYWdlQ29uZmlnLmRlc2NyaXB0aW9uLnN0eWxlO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3Q2Fyb3VzZWxJbWFnZUNvbmZpZzogQ2Fyb3VzZWxJbWFnZUNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLmNhcm91c2VsSW1hZ2VDb25maWcsIG9iai5jYXJvdXNlbEltYWdlQ29uZmlnKTtcbiAgICAgIG5ld0Nhcm91c2VsSW1hZ2VDb25maWcuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgIG5ld0Nhcm91c2VsSW1hZ2VDb25maWcuZGVzY3JpcHRpb24uc3R5bGUgPSBkZXNjcmlwdGlvblN0eWxlO1xuICAgICAgbmV3Q29uZmlnLmNhcm91c2VsSW1hZ2VDb25maWcgPSBuZXdDYXJvdXNlbEltYWdlQ29uZmlnO1xuICAgIH1cbiAgICBpZiAob2JqLmNhcm91c2VsUGxheUNvbmZpZykge1xuICAgICAgLy8gY2hlY2sgdmFsdWVzXG4gICAgICBpZiAob2JqLmNhcm91c2VsUGxheUNvbmZpZy5pbnRlcnZhbCA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fyb3VzZWwncyBpbnRlcnZhbCBtdXN0IGJlIGEgbnVtYmVyID49IDBgKTtcbiAgICAgIH1cbiAgICAgIG5ld0NvbmZpZy5jYXJvdXNlbFBsYXlDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRy5jYXJvdXNlbFBsYXlDb25maWcsIG9iai5jYXJvdXNlbFBsYXlDb25maWcpO1xuICAgIH1cbiAgICBpZiAob2JqLmNhcm91c2VsUHJldmlld3NDb25maWcpIHtcbiAgICAgIC8vIGNoZWNrIHZhbHVlc1xuICAgICAgbGV0IG51bTogbnVtYmVyO1xuICAgICAgbGV0IGJyZWFrcG9pbnRzOiBCcmVha3BvaW50c0NvbmZpZztcbiAgICAgIGlmICghb2JqLmNhcm91c2VsUHJldmlld3NDb25maWcubnVtYmVyIHx8IG9iai5jYXJvdXNlbFByZXZpZXdzQ29uZmlnLm51bWJlciA8PSAwKSB7XG4gICAgICAgIG51bSA9IERFRkFVTFRfQ0FST1VTRUxfUFJFVklFV1NfQ09ORklHLm51bWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG51bSA9IG9iai5jYXJvdXNlbFByZXZpZXdzQ29uZmlnLm51bWJlcjtcbiAgICAgIH1cbiAgICAgIGlmIChvYmouY2Fyb3VzZWxQcmV2aWV3c0NvbmZpZy5icmVha3BvaW50cykge1xuICAgICAgICBicmVha3BvaW50cyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLmNhcm91c2VsUHJldmlld3NDb25maWcuYnJlYWtwb2ludHMsIG9iai5jYXJvdXNlbFByZXZpZXdzQ29uZmlnLmJyZWFrcG9pbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrcG9pbnRzID0gREVGQVVMVF9DT05GSUcuY2Fyb3VzZWxQcmV2aWV3c0NvbmZpZy5icmVha3BvaW50cztcbiAgICAgIH1cbiAgICAgIG5ld0NvbmZpZy5jYXJvdXNlbFByZXZpZXdzQ29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9DT05GSUcuY2Fyb3VzZWxQcmV2aWV3c0NvbmZpZywgb2JqLmNhcm91c2VsUHJldmlld3NDb25maWcpO1xuICAgICAgbmV3Q29uZmlnLmNhcm91c2VsUHJldmlld3NDb25maWcubnVtYmVyID0gbnVtO1xuICAgICAgbmV3Q29uZmlnLmNhcm91c2VsUHJldmlld3NDb25maWcuYnJlYWtwb2ludHMgPSBicmVha3BvaW50cztcbiAgICAgIC8vIEluaXQgcHJldmlldyBpbWFnZSB3aWR0aCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHByZXZpZXdzIGluIFByZXZpZXdDb25maWdcbiAgICAgIC8vIERvbid0IG1vdmUgdGhpcyBsaW5lIGFib3ZlLCBiZWNhdXNlIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgYm90aCBjb25maWdQcmV2aWV3Lm51bWJlclxuICAgICAgLy8gYW5kIGNvbmZpZ1ByZXZpZXcuc2l6ZSBhcmUgaW5pdGlhbGl6ZWRcbiAgICAgIG5ld0NvbmZpZy5jYXJvdXNlbFByZXZpZXdzQ29uZmlnLndpZHRoID0gMTAwIC8gbmV3Q29uZmlnLmNhcm91c2VsUHJldmlld3NDb25maWcubnVtYmVyICsgJyUnO1xuICAgIH1cbiAgICBpZiAob2JqLmNhcm91c2VsRG90c0NvbmZpZykge1xuICAgICAgbmV3Q29uZmlnLmNhcm91c2VsRG90c0NvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLmNhcm91c2VsRG90c0NvbmZpZywgb2JqLmNhcm91c2VsRG90c0NvbmZpZyk7XG4gICAgfVxuICAgIGlmIChvYmouY2Fyb3VzZWxTbGlkZUluZmluaXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG5ld0NvbmZpZy5jYXJvdXNlbFNsaWRlSW5maW5pdGUgPSBERUZBVUxUX0NPTkZJRy5jYXJvdXNlbFNsaWRlSW5maW5pdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0NvbmZpZy5jYXJvdXNlbFNsaWRlSW5maW5pdGUgPSBvYmouY2Fyb3VzZWxTbGlkZUluZmluaXRlO1xuICAgIH1cbiAgICBpZiAob2JqLmVuYWJsZUNsb3NlT3V0c2lkZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdDb25maWcuZW5hYmxlQ2xvc2VPdXRzaWRlID0gREVGQVVMVF9DT05GSUcuZW5hYmxlQ2xvc2VPdXRzaWRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdDb25maWcuZW5hYmxlQ2xvc2VPdXRzaWRlID0gb2JqLmVuYWJsZUNsb3NlT3V0c2lkZTtcbiAgICB9XG4gICAgdGhpcy5jb25maWdNYXAuc2V0KGlkLCBuZXdDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0SWZOb3RFeGlzdHMoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWdNYXAuaGFzKGlkKSkge1xuICAgICAgdGhpcy5jb25maWdNYXAuc2V0KGlkLCBERUZBVUxUX0NPTkZJRyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gYnVpbGQgYW5kIHJldHVybiBhIGBQbGFpbkdhbGxlcnlDb25maWdgIG9iamVjdCwgcHJvdmluZyBhbHNvIGRlZmF1bHQgdmFsdWVzIGFuZCB2YWxpZGF0aW5nIHRoZSBpbnB1dCBvYmplY3QuXG4gKiBAcGFyYW0gcGxhaW5HYWxsZXJ5Q29uZmlnIG9iamVjdCB3aXRoIHRoZSBjb25maWcgcmVxdWVzdGVkIGJ5IHVzZXJcbiAqIEByZXR1cm5zIFBsYWluR2FsbGVyeUNvbmZpZyB0aGUgcGxhaW4gZ2FsbGVyeSBjb25maWd1cmF0aW9uXG4gKiBAdGhyb3dzIGFuIEVycm9yIGlmIGxheW91dCBhbmQgc3RyYXRlZ3kgYXJlbid0IGNvbXBhdGlibGVcbiAqL1xuZnVuY3Rpb24gaW5pdFBsYWluR2FsbGVyeUNvbmZpZyhwbGFpbkdhbGxlcnlDb25maWc6IFBsYWluR2FsbGVyeUNvbmZpZyk6IFBsYWluR2FsbGVyeUNvbmZpZyB7XG4gIGNvbnN0IG5ld1BsYXlHYWxsZXJ5Q29uZmlnOiBQbGFpbkdhbGxlcnlDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRy5wbGFpbkdhbGxlcnlDb25maWcsIHBsYWluR2FsbGVyeUNvbmZpZyk7XG5cbiAgaWYgKG5ld1BsYXlHYWxsZXJ5Q29uZmlnLmxheW91dCBpbnN0YW5jZW9mIExpbmVMYXlvdXQpIHtcbiAgICBpZiAobmV3UGxheUdhbGxlcnlDb25maWcuc3RyYXRlZ3kgIT09IFBsYWluR2FsbGVyeVN0cmF0ZWd5LlJPVyAmJiBuZXdQbGF5R2FsbGVyeUNvbmZpZy5zdHJhdGVneSAhPT0gUGxhaW5HYWxsZXJ5U3RyYXRlZ3kuQ09MVU1OKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xpbmVMYXlvdXQgcmVxdWlyZXMgZWl0aGVyIFJPVyBvciBDT0xVTU4gc3RyYXRlZ3knKTtcbiAgICB9XG4gICAgaWYgKCFuZXdQbGF5R2FsbGVyeUNvbmZpZy5sYXlvdXQgfHwgIW5ld1BsYXlHYWxsZXJ5Q29uZmlnLmxheW91dC5icmVha0NvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCb3RoIGxheW91dCBhbmQgYnJlYWtDb25maWcgbXVzdCBiZSB2YWxpZCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChuZXdQbGF5R2FsbGVyeUNvbmZpZy5sYXlvdXQgaW5zdGFuY2VvZiBHcmlkTGF5b3V0KSB7XG4gICAgaWYgKG5ld1BsYXlHYWxsZXJ5Q29uZmlnLnN0cmF0ZWd5ICE9PSBQbGFpbkdhbGxlcnlTdHJhdGVneS5HUklEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyaWRMYXlvdXQgcmVxdWlyZXMgR1JJRCBzdHJhdGVneScpO1xuICAgIH1cbiAgICBpZiAoIW5ld1BsYXlHYWxsZXJ5Q29uZmlnLmxheW91dCB8fCAhbmV3UGxheUdhbGxlcnlDb25maWcubGF5b3V0LmJyZWFrQ29uZmlnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggbGF5b3V0IGFuZCBicmVha0NvbmZpZyBtdXN0IGJlIHZhbGlkJyk7XG4gICAgfVxuICAgIC8vIGZvcmNlIHdyYXAgZm9yIGdyaWQgbGF5b3V0XG4gICAgbmV3UGxheUdhbGxlcnlDb25maWcubGF5b3V0LmJyZWFrQ29uZmlnLndyYXAgPSB0cnVlO1xuICB9XG4gIHJldHVybiBuZXdQbGF5R2FsbGVyeUNvbmZpZztcbn1cbiJdfQ==
@@ -0,0 +1,72 @@
1
+ /*
2
+ The MIT License (MIT)
3
+
4
+ Copyright (C) 2017-2023 Stefano Cappa (Ks89)
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NON INFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
23
+ */
24
+ import { Injectable } from '@angular/core';
25
+ import * as i0 from "@angular/core";
26
+ /**
27
+ * Service to check if the provided id is unique
28
+ */
29
+ class IdValidatorService {
30
+ constructor() {
31
+ this.ids = new Map();
32
+ }
33
+ /**
34
+ * Method to check and reserve an id for the current instance of the library.
35
+ * In this way, no other instances can use the same id.
36
+ * @param galleryId number or undefined that represents the unique id of the gallery.
37
+ * @return boolean true if success. false is never returned, instead an exception is thrown
38
+ * @throws a error with a message if galleryId is neither unique, < 0 or an integer
39
+ */
40
+ checkAndAdd(galleryId) {
41
+ if (galleryId === undefined || !Number.isInteger(galleryId) || galleryId < 0) {
42
+ throw new Error('You must provide a valid [id]="unique integer > 0 here" to the gallery/carousel in your template');
43
+ }
44
+ if (this.ids.get(galleryId)) {
45
+ throw new Error(`Cannot create gallery with id=${galleryId} because already used in your application. This must be a unique integer >= 0`);
46
+ }
47
+ this.ids.set(galleryId, galleryId);
48
+ return true;
49
+ }
50
+ /**
51
+ * Method to remove a reserved id. In this way you are able to use the id again for another instance of the library.
52
+ * @param galleryId number or undefined that represents the unique id of the gallery.
53
+ * @return boolean true if success. false is never returned, instead an exception is thrown*
54
+ * @throws a error with a message if galleryId is neither integer or < 0
55
+ * * this should be improved without return true, because it doesn't make sense! :(
56
+ */
57
+ remove(galleryId) {
58
+ if (galleryId === undefined || !Number.isInteger(galleryId) || galleryId < 0) {
59
+ throw new Error('You must provide a valid [id]="unique integer > 0 here" to the gallery/carousel in your template');
60
+ }
61
+ this.ids.delete(galleryId);
62
+ return true;
63
+ }
64
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IdValidatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
65
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IdValidatorService, providedIn: 'root' }); }
66
+ }
67
+ export { IdValidatorService };
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: IdValidatorService, decorators: [{
69
+ type: Injectable,
70
+ args: [{ providedIn: 'root' }]
71
+ }] });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtdmFsaWRhdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rczg5L2FuZ3VsYXItbW9kYWwtZ2FsbGVyeS9zcmMvbGliL3NlcnZpY2VzL2lkLXZhbGlkYXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0M7O0dBRUc7QUFDSCxNQUNhLGtCQUFrQjtJQUQvQjtRQUVFLFFBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBa0NqQjtJQWhDQzs7Ozs7O09BTUc7SUFDSCxXQUFXLENBQUMsU0FBNkI7UUFDdkMsSUFBSSxTQUFTLEtBQUssU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1lBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0dBQWtHLENBQUMsQ0FBQztTQUNySDtRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsU0FBUywrRUFBK0UsQ0FBQyxDQUFDO1NBQzVJO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxTQUE2QjtRQUNsQyxJQUFJLFNBQVMsS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7WUFDNUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrR0FBa0csQ0FBQyxDQUFDO1NBQ3JIO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzhHQWxDVSxrQkFBa0I7a0hBQWxCLGtCQUFrQixjQURMLE1BQU07O1NBQ25CLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gVGhlIE1JVCBMaWNlbnNlIChNSVQpXG5cbiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMyBTdGVmYW5vIENhcHBhIChLczg5KVxuXG4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04gSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIGNoZWNrIGlmIHRoZSBwcm92aWRlZCBpZCBpcyB1bmlxdWVcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJZFZhbGlkYXRvclNlcnZpY2Uge1xuICBpZHMgPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBjaGVjayBhbmQgcmVzZXJ2ZSBhbiBpZCBmb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGxpYnJhcnkuXG4gICAqIEluIHRoaXMgd2F5LCBubyBvdGhlciBpbnN0YW5jZXMgY2FuIHVzZSB0aGUgc2FtZSBpZC5cbiAgICogQHBhcmFtIGdhbGxlcnlJZCBudW1iZXIgb3IgdW5kZWZpbmVkIHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pcXVlIGlkIG9mIHRoZSBnYWxsZXJ5LlxuICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBzdWNjZXNzLiBmYWxzZSBpcyBuZXZlciByZXR1cm5lZCwgaW5zdGVhZCBhbiBleGNlcHRpb24gaXMgdGhyb3duXG4gICAqIEB0aHJvd3MgYSBlcnJvciB3aXRoIGEgbWVzc2FnZSBpZiBnYWxsZXJ5SWQgaXMgbmVpdGhlciB1bmlxdWUsIDwgMCBvciBhbiBpbnRlZ2VyXG4gICAqL1xuICBjaGVja0FuZEFkZChnYWxsZXJ5SWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmIChnYWxsZXJ5SWQgPT09IHVuZGVmaW5lZCB8fCAhTnVtYmVyLmlzSW50ZWdlcihnYWxsZXJ5SWQpIHx8IGdhbGxlcnlJZCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgcHJvdmlkZSBhIHZhbGlkIFtpZF09XCJ1bmlxdWUgaW50ZWdlciA+IDAgaGVyZVwiIHRvIHRoZSBnYWxsZXJ5L2Nhcm91c2VsIGluIHlvdXIgdGVtcGxhdGUnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaWRzLmdldChnYWxsZXJ5SWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjcmVhdGUgZ2FsbGVyeSB3aXRoIGlkPSR7Z2FsbGVyeUlkfSBiZWNhdXNlIGFscmVhZHkgdXNlZCBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUaGlzIG11c3QgYmUgYSB1bmlxdWUgaW50ZWdlciA+PSAwYCk7XG4gICAgfVxuICAgIHRoaXMuaWRzLnNldChnYWxsZXJ5SWQsIGdhbGxlcnlJZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHJlbW92ZSBhIHJlc2VydmVkIGlkLiBJbiB0aGlzIHdheSB5b3UgYXJlIGFibGUgdG8gdXNlIHRoZSBpZCBhZ2FpbiBmb3IgYW5vdGhlciBpbnN0YW5jZSBvZiB0aGUgbGlicmFyeS5cbiAgICogQHBhcmFtIGdhbGxlcnlJZCBudW1iZXIgb3IgdW5kZWZpbmVkIHRoYXQgcmVwcmVzZW50cyB0aGUgdW5pcXVlIGlkIG9mIHRoZSBnYWxsZXJ5LlxuICAgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBzdWNjZXNzLiBmYWxzZSBpcyBuZXZlciByZXR1cm5lZCwgaW5zdGVhZCBhbiBleGNlcHRpb24gaXMgdGhyb3duKlxuICAgKiBAdGhyb3dzIGEgZXJyb3Igd2l0aCBhIG1lc3NhZ2UgaWYgZ2FsbGVyeUlkIGlzIG5laXRoZXIgaW50ZWdlciBvciA8IDBcbiAgICogKiB0aGlzIHNob3VsZCBiZSBpbXByb3ZlZCB3aXRob3V0IHJldHVybiB0cnVlLCBiZWNhdXNlIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSEgOihcbiAgICovXG4gIHJlbW92ZShnYWxsZXJ5SWQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgIGlmIChnYWxsZXJ5SWQgPT09IHVuZGVmaW5lZCB8fCAhTnVtYmVyLmlzSW50ZWdlcihnYWxsZXJ5SWQpIHx8IGdhbGxlcnlJZCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgcHJvdmlkZSBhIHZhbGlkIFtpZF09XCJ1bmlxdWUgaW50ZWdlciA+IDAgaGVyZVwiIHRvIHRoZSBnYWxsZXJ5L2Nhcm91c2VsIGluIHlvdXIgdGVtcGxhdGUnKTtcbiAgICB9XG4gICAgdGhpcy5pZHMuZGVsZXRlKGdhbGxlcnlJZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  The MIT License (MIT)
3
3
 
4
- Copyright (C) 2017-2022 Stefano Cappa (Ks89)
4
+ Copyright (C) 2017-2023 Stefano Cappa (Ks89)
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  of this software and associated documentation files (the "Software"), to deal
@@ -23,8 +23,8 @@
23
23
  */
24
24
  /**
25
25
  * Utility function to get the index of the input `image` from `arrayOfImages`
26
- * @param Image image to get the index. The image 'id' must be a number >= 0
27
- * @param Image[] arrayOfImages to search the image within it
26
+ * @param image Image to get the index. The image 'id' must be a number >= 0
27
+ * @param arrayOfImages Image[] to search the image within it
28
28
  * @returns number the index of the image. -1 if not found.
29
29
  * @throws an Error if either image or arrayOfImages are not valid,
30
30
  * or if the input image doesn't contain an 'id', or the 'id' is < 0
@@ -45,4 +45,4 @@ export function getIndex(image, arrayOfImages) {
45
45
  }
46
46
  return arrayOfImages.findIndex((val) => val.id === image.id);
47
47
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tzODkvYW5ndWxhci1tb2RhbC1nYWxsZXJ5L3NyYy9saWIvdXRpbHMvaW1hZ2UudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUlIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQVksRUFBRSxhQUFzQjtJQUMzRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7S0FDMUQ7SUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUMvQixxQkFBcUI7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0tBQ3REO0lBRUQsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7S0FDNUM7SUFFRCxPQUFPLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgU3RlZmFubyBDYXBwYSAoS3M4OSlcblxuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OIElORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJy4uL21vZGVsL2ltYWdlLmNsYXNzJztcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGlucHV0IGBpbWFnZWAgZnJvbSBgYXJyYXlPZkltYWdlc2BcbiAqIEBwYXJhbSBJbWFnZSBpbWFnZSB0byBnZXQgdGhlIGluZGV4LiBUaGUgaW1hZ2UgJ2lkJyBtdXN0IGJlIGEgbnVtYmVyID49IDBcbiAqIEBwYXJhbSBJbWFnZVtdIGFycmF5T2ZJbWFnZXMgdG8gc2VhcmNoIHRoZSBpbWFnZSB3aXRoaW4gaXRcbiAqIEByZXR1cm5zIG51bWJlciB0aGUgaW5kZXggb2YgdGhlIGltYWdlLiAtMSBpZiBub3QgZm91bmQuXG4gKiBAdGhyb3dzIGFuIEVycm9yIGlmIGVpdGhlciBpbWFnZSBvciBhcnJheU9mSW1hZ2VzIGFyZSBub3QgdmFsaWQsXG4gKiAgb3IgaWYgdGhlIGlucHV0IGltYWdlIGRvZXNuJ3QgY29udGFpbiBhbiAnaWQnLCBvciB0aGUgJ2lkJyBpcyA8IDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluZGV4KGltYWdlOiBJbWFnZSwgYXJyYXlPZkltYWdlczogSW1hZ2VbXSk6IG51bWJlciB7XG4gIGlmICghaW1hZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIG11c3QgYmUgYSB2YWxpZCBJbWFnZSBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghYXJyYXlPZkltYWdlcykge1xuICAgIHRocm93IG5ldyBFcnJvcignYXJyYXlPZkltYWdlcyBtdXN0IGJlIGEgdmFsaWQgSW1hZ2VbXScpO1xuICB9XG5cbiAgaWYgKCFpbWFnZS5pZCAmJiBpbWFnZS5pZCAhPT0gMCkge1xuICAgIC8vIGlkID0gMCBpcyBhZG1pdHRlZFxuICAgIHRocm93IG5ldyBFcnJvcihgQSBudW1lcmljIEltYWdlICdpZCcgaXMgbWFuZGF0b3J5YCk7XG4gIH1cblxuICBpZiAoaW1hZ2UuaWQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbWFnZSAnaWQnIG11c3QgYmUgPj0gMGApO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5T2ZJbWFnZXMuZmluZEluZGV4KCh2YWw6IEltYWdlKSA9PiB2YWwuaWQgPT09IGltYWdlLmlkKTtcbn1cbiJdfQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tzODkvYW5ndWxhci1tb2RhbC1nYWxsZXJ5L3NyYy9saWIvdXRpbHMvaW1hZ2UudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUlIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQVksRUFBRSxhQUFzQjtJQUMzRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7S0FDMUQ7SUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUMvQixxQkFBcUI7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0tBQ3REO0lBRUQsSUFBSSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7S0FDNUM7SUFFRCxPQUFPLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXG4gQ29weXJpZ2h0IChDKSAyMDE3LTIwMjMgU3RlZmFubyBDYXBwYSAoS3M4OSlcblxuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OIElORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBJbWFnZSB9IGZyb20gJy4uL21vZGVsL2ltYWdlLmNsYXNzJztcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGlucHV0IGBpbWFnZWAgZnJvbSBgYXJyYXlPZkltYWdlc2BcbiAqIEBwYXJhbSBpbWFnZSBJbWFnZSB0byBnZXQgdGhlIGluZGV4LiBUaGUgaW1hZ2UgJ2lkJyBtdXN0IGJlIGEgbnVtYmVyID49IDBcbiAqIEBwYXJhbSBhcnJheU9mSW1hZ2VzIEltYWdlW10gdG8gc2VhcmNoIHRoZSBpbWFnZSB3aXRoaW4gaXRcbiAqIEByZXR1cm5zIG51bWJlciB0aGUgaW5kZXggb2YgdGhlIGltYWdlLiAtMSBpZiBub3QgZm91bmQuXG4gKiBAdGhyb3dzIGFuIEVycm9yIGlmIGVpdGhlciBpbWFnZSBvciBhcnJheU9mSW1hZ2VzIGFyZSBub3QgdmFsaWQsXG4gKiAgb3IgaWYgdGhlIGlucHV0IGltYWdlIGRvZXNuJ3QgY29udGFpbiBhbiAnaWQnLCBvciB0aGUgJ2lkJyBpcyA8IDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluZGV4KGltYWdlOiBJbWFnZSwgYXJyYXlPZkltYWdlczogSW1hZ2VbXSk6IG51bWJlciB7XG4gIGlmICghaW1hZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIG11c3QgYmUgYSB2YWxpZCBJbWFnZSBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghYXJyYXlPZkltYWdlcykge1xuICAgIHRocm93IG5ldyBFcnJvcignYXJyYXlPZkltYWdlcyBtdXN0IGJlIGEgdmFsaWQgSW1hZ2VbXScpO1xuICB9XG5cbiAgaWYgKCFpbWFnZS5pZCAmJiBpbWFnZS5pZCAhPT0gMCkge1xuICAgIC8vIGlkID0gMCBpcyBhZG1pdHRlZFxuICAgIHRocm93IG5ldyBFcnJvcihgQSBudW1lcmljIEltYWdlICdpZCcgaXMgbWFuZGF0b3J5YCk7XG4gIH1cblxuICBpZiAoaW1hZ2UuaWQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbWFnZSAnaWQnIG11c3QgYmUgPj0gMGApO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5T2ZJbWFnZXMuZmluZEluZGV4KCh2YWw6IEltYWdlKSA9PiB2YWwuaWQgPT09IGltYWdlLmlkKTtcbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  The MIT License (MIT)
3
3
 
4
- Copyright (C) 2017-2022 Stefano Cappa (Ks89)
4
+ Copyright (C) 2017-2023 Stefano Cappa (Ks89)
5
5
 
6
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  of this software and associated documentation files (the "Software"), to deal
@@ -101,4 +101,4 @@ export const PREV = -1;
101
101
  * Const NOTHING to represents a situation when it isn't both NEXT and PREV
102
102
  */
103
103
  export const NOTHING = 0;
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pbnB1dC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3M4OS9hbmd1bGFyLW1vZGFsLWdhbGxlcnkvc3JjL2xpYi91dGlscy91c2VyLWlucHV0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBVyxPQUFPLENBQUM7QUFDekM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQVcsT0FBTyxDQUFDO0FBRTFDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFXLFFBQVEsQ0FBQztBQUN4Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBVyxRQUFRLENBQUM7QUFDekM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQVcsWUFBWSxDQUFDO0FBQ3BEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQVcsWUFBWSxDQUFDO0FBQ3JEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFXLFdBQVcsQ0FBQztBQUNsRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBVyxXQUFXLENBQUM7QUFDbkQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQVcsU0FBUyxDQUFDO0FBQzlDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFXLFNBQVMsQ0FBQztBQUMvQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBVyxXQUFXLENBQUM7QUFDbEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQVcsV0FBVyxDQUFDO0FBQ25EOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFXLEVBQUUsQ0FBQztBQUNwQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBVyxPQUFPLENBQUM7QUFFMUM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQVcsT0FBTyxDQUFDO0FBQy9DOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFXLE1BQU0sQ0FBQztBQUc3Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUV6Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdEI7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkI7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIFN0ZWZhbm8gQ2FwcGEgKEtzODkpXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTiBJTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cblxuLyoqXG4gKiBLZXkgb2YgdGhlIGtleWJvYXJkJ3Mga2V5IGBlbnRlcmBcbiAqL1xuZXhwb3J0IGNvbnN0IEVOVEVSX0tFWTogc3RyaW5nID0gJ0VudGVyJztcbi8qKlxuICogQ29kZSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgYGVudGVyYFxuICovXG5leHBvcnQgY29uc3QgRU5URVJfQ09ERTogc3RyaW5nID0gJ0VudGVyJztcblxuLyoqXG4gKiBLZXkgb2YgdGhlIGtleWJvYXJkJ3Mga2V5IGBlc2NgXG4gKi9cbmV4cG9ydCBjb25zdCBFU0NfS0VZOiBzdHJpbmcgPSAnRXNjYXBlJztcbi8qKlxuICogQ29kZSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgYGVzY2BcbiAqL1xuZXhwb3J0IGNvbnN0IEVTQ19DT0RFOiBzdHJpbmcgPSAnRXNjYXBlJztcbi8qKlxuICogS2V5IG9mIHRoZSBrZXlib2FyZCdzIGtleSAncmlnaHQgYXJyb3cnXG4gKi9cbmV4cG9ydCBjb25zdCBSSUdIVF9BUlJPV19LRVk6IHN0cmluZyA9ICdBcnJvd1JpZ2h0Jztcbi8qKlxuICogQ29kZSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgJ3JpZ2h0IGFycm93J1xuICovXG5leHBvcnQgY29uc3QgUklHSFRfQVJST1dfQ09ERTogc3RyaW5nID0gJ0Fycm93UmlnaHQnO1xuLyoqXG4gKiBLZXkgb2YgdGhlIGtleWJvYXJkJ3Mga2V5ICdsZWZ0IGFycm93J1xuICovXG5leHBvcnQgY29uc3QgTEVGVF9BUlJPV19LRVk6IHN0cmluZyA9ICdBcnJvd0xlZnQnO1xuLyoqXG4gKiBDb2RlIG9mIHRoZSBrZXlib2FyZCdzIGtleSAnbGVmdCBhcnJvdydcbiAqL1xuZXhwb3J0IGNvbnN0IExFRlRfQVJST1dfQ09ERTogc3RyaW5nID0gJ0Fycm93TGVmdCc7XG4vKipcbiAqIEtleSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgJ2xlZnQgYXJyb3cnXG4gKi9cbmV4cG9ydCBjb25zdCBVUF9BUlJPV19LRVk6IHN0cmluZyA9ICdBcnJvd1VwJztcbi8qKlxuICogQ29kZSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgJ2xlZnQgYXJyb3cnXG4gKi9cbmV4cG9ydCBjb25zdCBVUF9BUlJPV19DT0RFOiBzdHJpbmcgPSAnQXJyb3dVcCc7XG4vKipcbiAqIEtleSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgJ2xlZnQgYXJyb3cnXG4gKi9cbmV4cG9ydCBjb25zdCBET1dOX0FSUk9XX0tFWTogc3RyaW5nID0gJ0Fycm93RG93bic7XG4vKipcbiAqIENvZGUgb2YgdGhlIGtleWJvYXJkJ3Mga2V5ICdsZWZ0IGFycm93J1xuICovXG5leHBvcnQgY29uc3QgRE9XTl9BUlJPV19DT0RFOiBzdHJpbmcgPSAnQXJyb3dEb3duJztcbi8qKlxuICogS2V5IG9mIHRoZSBrZXlib2FyZCdzIGtleSBgc3BhY2VgXG4gKi9cbmV4cG9ydCBjb25zdCBTUEFDRV9LRVkgOiBzdHJpbmc9ICcnO1xuLyoqXG4gKiBDb2RlIG9mIHRoZSBrZXlib2FyZCdzIGtleSBgc3BhY2VgXG4gKi9cbmV4cG9ydCBjb25zdCBTUEFDRV9DT0RFOiBzdHJpbmcgPSAnU3BhY2UnO1xuXG4vKipcbiAqIENvbnN0IHRvIHJlcHJlc2VudCB0aGUgcmlnaHQgZGlyZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBESVJFQ1RJT05fUklHSFQ6IHN0cmluZyA9ICdyaWdodCc7XG4vKipcbiAqIENvbnN0IHRvIHJlcHJlc2VudCB0aGUgbGVmdCBkaXJlY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IERJUkVDVElPTl9MRUZUOiBzdHJpbmcgPSAnbGVmdCc7XG5cblxuLyoqXG4gKiBLZXljb2RlIG9mIHRoZSBtYWluIG1vdXNlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgTU9VU0VfTUFJTl9CVVRUT05fQ0xJQ0sgPSAwO1xuXG4vKipcbiAqIENvbnN0IE5FWFRcbiAqL1xuZXhwb3J0IGNvbnN0IE5FWFQgPSAxO1xuLyoqXG4gKiBDb25zdCBQUkVWXG4gKi9cbmV4cG9ydCBjb25zdCBQUkVWID0gLTE7XG4vKipcbiAqIENvbnN0IE5PVEhJTkcgdG8gcmVwcmVzZW50cyBhIHNpdHVhdGlvbiB3aGVuIGl0IGlzbid0IGJvdGggTkVYVCBhbmQgUFJFVlxuICovXG5leHBvcnQgY29uc3QgTk9USElORyA9IDA7XG4iXX0=
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1pbnB1dC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3M4OS9hbmd1bGFyLW1vZGFsLWdhbGxlcnkvc3JjL2xpYi91dGlscy91c2VyLWlucHV0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBVyxPQUFPLENBQUM7QUFDekM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQVcsT0FBTyxDQUFDO0FBRTFDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFXLFFBQVEsQ0FBQztBQUN4Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBVyxRQUFRLENBQUM7QUFDekM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQVcsWUFBWSxDQUFDO0FBQ3BEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQVcsWUFBWSxDQUFDO0FBQ3JEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFXLFdBQVcsQ0FBQztBQUNsRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBVyxXQUFXLENBQUM7QUFDbkQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQVcsU0FBUyxDQUFDO0FBQzlDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFXLFNBQVMsQ0FBQztBQUMvQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBVyxXQUFXLENBQUM7QUFDbEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQVcsV0FBVyxDQUFDO0FBQ25EOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFXLEVBQUUsQ0FBQztBQUNwQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBVyxPQUFPLENBQUM7QUFFMUM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQVcsT0FBTyxDQUFDO0FBQy9DOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFXLE1BQU0sQ0FBQztBQUc3Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQztBQUV6Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdEI7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkI7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcblxuIENvcHlyaWdodCAoQykgMjAxNy0yMDIzIFN0ZWZhbm8gQ2FwcGEgKEtzODkpXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTiBJTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cblxuLyoqXG4gKiBLZXkgb2YgdGhlIGtleWJvYXJkJ3Mga2V5IGBlbnRlcmBcbiAqL1xuZXhwb3J0IGNvbnN0IEVOVEVSX0tFWTogc3RyaW5nID0gJ0VudGVyJztcbi8qKlxuICogQ29kZSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgYGVudGVyYFxuICovXG5leHBvcnQgY29uc3QgRU5URVJfQ09ERTogc3RyaW5nID0gJ0VudGVyJztcblxuLyoqXG4gKiBLZXkgb2YgdGhlIGtleWJvYXJkJ3Mga2V5IGBlc2NgXG4gKi9cbmV4cG9ydCBjb25zdCBFU0NfS0VZOiBzdHJpbmcgPSAnRXNjYXBlJztcbi8qKlxuICogQ29kZSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgYGVzY2BcbiAqL1xuZXhwb3J0IGNvbnN0IEVTQ19DT0RFOiBzdHJpbmcgPSAnRXNjYXBlJztcbi8qKlxuICogS2V5IG9mIHRoZSBrZXlib2FyZCdzIGtleSAncmlnaHQgYXJyb3cnXG4gKi9cbmV4cG9ydCBjb25zdCBSSUdIVF9BUlJPV19LRVk6IHN0cmluZyA9ICdBcnJvd1JpZ2h0Jztcbi8qKlxuICogQ29kZSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgJ3JpZ2h0IGFycm93J1xuICovXG5leHBvcnQgY29uc3QgUklHSFRfQVJST1dfQ09ERTogc3RyaW5nID0gJ0Fycm93UmlnaHQnO1xuLyoqXG4gKiBLZXkgb2YgdGhlIGtleWJvYXJkJ3Mga2V5ICdsZWZ0IGFycm93J1xuICovXG5leHBvcnQgY29uc3QgTEVGVF9BUlJPV19LRVk6IHN0cmluZyA9ICdBcnJvd0xlZnQnO1xuLyoqXG4gKiBDb2RlIG9mIHRoZSBrZXlib2FyZCdzIGtleSAnbGVmdCBhcnJvdydcbiAqL1xuZXhwb3J0IGNvbnN0IExFRlRfQVJST1dfQ09ERTogc3RyaW5nID0gJ0Fycm93TGVmdCc7XG4vKipcbiAqIEtleSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgJ2xlZnQgYXJyb3cnXG4gKi9cbmV4cG9ydCBjb25zdCBVUF9BUlJPV19LRVk6IHN0cmluZyA9ICdBcnJvd1VwJztcbi8qKlxuICogQ29kZSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgJ2xlZnQgYXJyb3cnXG4gKi9cbmV4cG9ydCBjb25zdCBVUF9BUlJPV19DT0RFOiBzdHJpbmcgPSAnQXJyb3dVcCc7XG4vKipcbiAqIEtleSBvZiB0aGUga2V5Ym9hcmQncyBrZXkgJ2xlZnQgYXJyb3cnXG4gKi9cbmV4cG9ydCBjb25zdCBET1dOX0FSUk9XX0tFWTogc3RyaW5nID0gJ0Fycm93RG93bic7XG4vKipcbiAqIENvZGUgb2YgdGhlIGtleWJvYXJkJ3Mga2V5ICdsZWZ0IGFycm93J1xuICovXG5leHBvcnQgY29uc3QgRE9XTl9BUlJPV19DT0RFOiBzdHJpbmcgPSAnQXJyb3dEb3duJztcbi8qKlxuICogS2V5IG9mIHRoZSBrZXlib2FyZCdzIGtleSBgc3BhY2VgXG4gKi9cbmV4cG9ydCBjb25zdCBTUEFDRV9LRVkgOiBzdHJpbmc9ICcnO1xuLyoqXG4gKiBDb2RlIG9mIHRoZSBrZXlib2FyZCdzIGtleSBgc3BhY2VgXG4gKi9cbmV4cG9ydCBjb25zdCBTUEFDRV9DT0RFOiBzdHJpbmcgPSAnU3BhY2UnO1xuXG4vKipcbiAqIENvbnN0IHRvIHJlcHJlc2VudCB0aGUgcmlnaHQgZGlyZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBESVJFQ1RJT05fUklHSFQ6IHN0cmluZyA9ICdyaWdodCc7XG4vKipcbiAqIENvbnN0IHRvIHJlcHJlc2VudCB0aGUgbGVmdCBkaXJlY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IERJUkVDVElPTl9MRUZUOiBzdHJpbmcgPSAnbGVmdCc7XG5cblxuLyoqXG4gKiBLZXljb2RlIG9mIHRoZSBtYWluIG1vdXNlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgTU9VU0VfTUFJTl9CVVRUT05fQ0xJQ0sgPSAwO1xuXG4vKipcbiAqIENvbnN0IE5FWFRcbiAqL1xuZXhwb3J0IGNvbnN0IE5FWFQgPSAxO1xuLyoqXG4gKiBDb25zdCBQUkVWXG4gKi9cbmV4cG9ydCBjb25zdCBQUkVWID0gLTE7XG4vKipcbiAqIENvbnN0IE5PVEhJTkcgdG8gcmVwcmVzZW50cyBhIHNpdHVhdGlvbiB3aGVuIGl0IGlzbid0IGJvdGggTkVYVCBhbmQgUFJFVlxuICovXG5leHBvcnQgY29uc3QgTk9USElORyA9IDA7XG4iXX0=