@kepler.gl/utils 3.0.0 → 3.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/package.json +14 -10
  2. package/dist/aggregate-utils.d.ts +0 -3
  3. package/dist/aggregate-utils.js +0 -75
  4. package/dist/arrow-data-container.d.ts +0 -54
  5. package/dist/arrow-data-container.js +0 -360
  6. package/dist/color-utils.d.ts +0 -51
  7. package/dist/color-utils.js +0 -161
  8. package/dist/data-container-interface.d.ts +0 -133
  9. package/dist/data-container-interface.js +0 -6
  10. package/dist/data-container-utils.d.ts +0 -30
  11. package/dist/data-container-utils.js +0 -88
  12. package/dist/data-row.d.ts +0 -59
  13. package/dist/data-row.js +0 -126
  14. package/dist/data-scale-utils.d.ts +0 -23
  15. package/dist/data-scale-utils.js +0 -62
  16. package/dist/data-utils.d.ts +0 -103
  17. package/dist/data-utils.js +0 -502
  18. package/dist/dataset-utils.d.ts +0 -116
  19. package/dist/dataset-utils.js +0 -614
  20. package/dist/dom-to-image.d.ts +0 -73
  21. package/dist/dom-to-image.js +0 -489
  22. package/dist/dom-utils.d.ts +0 -23
  23. package/dist/dom-utils.js +0 -434
  24. package/dist/effect-utils.d.ts +0 -23
  25. package/dist/effect-utils.js +0 -196
  26. package/dist/export-map-html.d.ts +0 -9
  27. package/dist/export-map-html.js +0 -28
  28. package/dist/export-utils.d.ts +0 -53
  29. package/dist/export-utils.js +0 -262
  30. package/dist/filter-utils.d.ts +0 -326
  31. package/dist/filter-utils.js +0 -1333
  32. package/dist/format.d.ts +0 -1
  33. package/dist/format.js +0 -17
  34. package/dist/gl-utils.d.ts +0 -1
  35. package/dist/gl-utils.js +0 -35
  36. package/dist/h3-utils.d.ts +0 -21
  37. package/dist/h3-utils.js +0 -81
  38. package/dist/index.d.ts +0 -36
  39. package/dist/index.js +0 -772
  40. package/dist/indexed-data-container.d.ts +0 -34
  41. package/dist/indexed-data-container.js +0 -254
  42. package/dist/locale-utils.d.ts +0 -2
  43. package/dist/locale-utils.js +0 -54
  44. package/dist/map-info-utils.d.ts +0 -1
  45. package/dist/map-info-utils.js +0 -15
  46. package/dist/map-style-utils/mapbox-gl-style-editor.d.ts +0 -65
  47. package/dist/map-style-utils/mapbox-gl-style-editor.js +0 -218
  48. package/dist/map-style-utils/mapbox-utils.d.ts +0 -9
  49. package/dist/map-style-utils/mapbox-utils.js +0 -48
  50. package/dist/map-utils.d.ts +0 -9
  51. package/dist/map-utils.js +0 -65
  52. package/dist/mapbox-utils.d.ts +0 -7
  53. package/dist/mapbox-utils.js +0 -22
  54. package/dist/noop.d.ts +0 -1
  55. package/dist/noop.js +0 -11
  56. package/dist/notifications-utils.d.ts +0 -42
  57. package/dist/notifications-utils.js +0 -85
  58. package/dist/observe-dimensions.d.ts +0 -15
  59. package/dist/observe-dimensions.js +0 -151
  60. package/dist/plot.d.ts +0 -6
  61. package/dist/plot.js +0 -31
  62. package/dist/projection-utils.d.ts +0 -21
  63. package/dist/projection-utils.js +0 -100
  64. package/dist/row-data-container.d.ts +0 -31
  65. package/dist/row-data-container.js +0 -252
  66. package/dist/searcher-utils.d.ts +0 -1
  67. package/dist/searcher-utils.js +0 -28
  68. package/dist/split-map-utils.d.ts +0 -32
  69. package/dist/split-map-utils.js +0 -114
  70. package/dist/time.d.ts +0 -16
  71. package/dist/time.js +0 -89
  72. package/dist/utils.d.ts +0 -116
  73. package/dist/utils.js +0 -305
package/dist/dom-utils.js DELETED
@@ -1,434 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.processClone = processClone;
9
- exports.asArray = asArray;
10
- exports.fourRandomChars = fourRandomChars;
11
- exports.uid = uid;
12
- exports.makeImage = makeImage;
13
- exports.isDataUrl = isDataUrl;
14
- exports.mimeType = mimeType;
15
- exports.dataAsUrl = dataAsUrl;
16
- exports.escape = escape;
17
- exports.delay = delay;
18
- exports.isSrcAsDataUrl = isSrcAsDataUrl;
19
- exports.canvasToBlob = canvasToBlob;
20
- exports.escapeXhtml = escapeXhtml;
21
- exports.getWidth = getWidth;
22
- exports.getHeight = getHeight;
23
- exports.resolveUrl = resolveUrl;
24
- exports.getAndEncode = getAndEncode;
25
- exports.concatAndResolveUrl = concatAndResolveUrl;
26
- exports.setStyleSheetBaseHref = setStyleSheetBaseHref;
27
- exports.toStyleSheet = toStyleSheet;
28
-
29
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
30
-
31
- var _console = _interopRequireDefault(require("global/console"));
32
-
33
- var _window = _interopRequireDefault(require("global/window"));
34
-
35
- var _document = _interopRequireDefault(require("global/document"));
36
-
37
- var _constants = require("@kepler.gl/constants");
38
-
39
- // SPDX-License-Identifier: MIT
40
- // Copyright contributors to the kepler.gl project
41
- function processClone(original, clone) {
42
- if (!(clone instanceof _window["default"].Element)) {
43
- return clone;
44
- }
45
-
46
- function copyProperties(sourceStyle, targetStyle) {
47
- var propertyKeys = asArray(sourceStyle);
48
- propertyKeys.forEach(function (name) {
49
- targetStyle.setProperty(name, sourceStyle.getPropertyValue(name), sourceStyle.getPropertyPriority(name));
50
- });
51
- }
52
-
53
- function copyStyle(source, target) {
54
- if (source.cssText) {
55
- target.cssText = source.cssText; // add additional copy of composite styles
56
-
57
- if (source.font) {
58
- target.font = source.font;
59
- }
60
- } else {
61
- copyProperties(source, target);
62
- }
63
- }
64
-
65
- function cloneStyle(og, cln) {
66
- var originalStyle = _window["default"].getComputedStyle(og);
67
-
68
- copyStyle(originalStyle, cln.style);
69
- }
70
-
71
- function formatPseudoElementStyle(cln, elm, stl) {
72
- var formatCssText = function formatCssText(stl1) {
73
- var cnt = stl1.getPropertyValue('content');
74
- return "".concat(stl.cssText, " content: ").concat(cnt, ";");
75
- };
76
-
77
- var formatProperty = function formatProperty(name) {
78
- return "".concat(name, ":").concat(stl.getPropertyValue(name)).concat(stl.getPropertyPriority(name) ? ' !important' : '');
79
- };
80
-
81
- var formatCssProperties = function formatCssProperties(stl2) {
82
- return "".concat(asArray(stl2).map(formatProperty).join('; '), ";");
83
- };
84
-
85
- var selector = ".".concat(cln, ":").concat(elm);
86
- var cssText = stl.cssText ? formatCssText(stl) : formatCssProperties(stl);
87
- return _document["default"].createTextNode("".concat(selector, "{").concat(cssText, "}"));
88
- }
89
-
90
- function clonePseudoElement(org, cln, element) {
91
- var style = _window["default"].getComputedStyle(org, element);
92
-
93
- var content = style.getPropertyValue('content');
94
-
95
- if (content === '' || content === 'none') {
96
- return;
97
- }
98
-
99
- var className = uid();
100
- cln.className = "".concat(cln.className, " ").concat(className);
101
-
102
- var styleElement = _document["default"].createElement('style');
103
-
104
- styleElement.appendChild(formatPseudoElementStyle(className, element, style));
105
- cln.appendChild(styleElement);
106
- }
107
-
108
- function clonePseudoElements(_ref) {
109
- var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
110
- og = _ref2[0],
111
- cln = _ref2[1];
112
-
113
- [':before', ':after'].forEach(function (element) {
114
- return clonePseudoElement(og, cln, element);
115
- });
116
- }
117
-
118
- function copyUserInput(_ref3) {
119
- var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
120
- og = _ref4[0],
121
- cln = _ref4[1];
122
-
123
- if (og instanceof _window["default"].HTMLTextAreaElement) cln.innerHTML = og.value;
124
- if (og instanceof _window["default"].HTMLInputElement) cln.setAttribute('value', og.value);
125
- }
126
-
127
- function fixSvg(cln) {
128
- if (!(cln instanceof _window["default"].SVGElement)) return;
129
- cln.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
130
- if (!(cln instanceof _window["default"].SVGRectElement)) return;
131
- ['width', 'height'].forEach(function (attribute) {
132
- var value = cln.getAttribute(attribute);
133
- if (!value) return;
134
- cln.style.setProperty(attribute, value);
135
- });
136
- }
137
-
138
- return Promise.resolve([original, clone]).then(function (_ref5) {
139
- var _ref6 = (0, _slicedToArray2["default"])(_ref5, 2),
140
- og = _ref6[0],
141
- cln = _ref6[1];
142
-
143
- cloneStyle(og, cln);
144
- return [og, cln];
145
- }).then(function (_ref7) {
146
- var _ref8 = (0, _slicedToArray2["default"])(_ref7, 2),
147
- og = _ref8[0],
148
- cln = _ref8[1];
149
-
150
- clonePseudoElements([og, cln]);
151
- return [og, cln];
152
- }).then(function (_ref9) {
153
- var _ref10 = (0, _slicedToArray2["default"])(_ref9, 2),
154
- og = _ref10[0],
155
- cln = _ref10[1];
156
-
157
- copyUserInput([og, cln]);
158
- return [og, cln];
159
- }).then(function (_ref11) {
160
- var _ref12 = (0, _slicedToArray2["default"])(_ref11, 2),
161
- og = _ref12[0],
162
- cln = _ref12[1];
163
-
164
- fixSvg(cln);
165
- return [og, cln];
166
- }).then(function (_ref13) {
167
- var _ref14 = (0, _slicedToArray2["default"])(_ref13, 2),
168
- og = _ref14[0],
169
- cln = _ref14[1];
170
-
171
- return cln;
172
- });
173
- }
174
- /****
175
- * UTILS
176
- ****/
177
-
178
-
179
- function asArray(arrayLike) {
180
- var array = [];
181
- var length = arrayLike.length;
182
-
183
- for (var i = 0; i < length; i++) {
184
- array.push(arrayLike[i]);
185
- }
186
-
187
- return array;
188
- }
189
-
190
- function fourRandomChars() {
191
- return "0000".concat((Math.random() * Math.pow(36, 4) << 0).toString(36)).slice(-4);
192
- }
193
-
194
- function uid() {
195
- var index = 0;
196
- return "u".concat(fourRandomChars()).concat(index++);
197
- }
198
-
199
- function makeImage(uri) {
200
- return new Promise(function (resolve, reject) {
201
- var image = new _window["default"].Image();
202
-
203
- image.onload = function () {
204
- resolve(image);
205
- };
206
-
207
- image.onerror = function (err) {
208
- var message = _constants.IMAGE_EXPORT_ERRORS.dataUri;
209
-
210
- _console["default"].log(uri); // error is an Event Object
211
- // https://www.w3schools.com/jsref/obj_event.asp
212
-
213
-
214
- reject({
215
- event: err,
216
- message: message
217
- });
218
- };
219
-
220
- image.src = uri;
221
- });
222
- }
223
-
224
- function isDataUrl(url) {
225
- return url.search(/^(data:)/) !== -1;
226
- }
227
-
228
- function parseExtension(url) {
229
- var match = /\.([^\.\/]*?)$/g.exec(url);
230
-
231
- if (match) {
232
- return match[1];
233
- }
234
-
235
- return '';
236
- }
237
-
238
- function mimes() {
239
- /*
240
- * Only WOFF and EOT mime types for fonts are 'real'
241
- * see http://www.iana.org/assignments/media-types/media-types.xhtml
242
- */
243
- var WOFF = 'application/font-woff';
244
- var JPEG = 'image/jpeg';
245
- return {
246
- woff: WOFF,
247
- woff2: WOFF,
248
- ttf: 'application/font-truetype',
249
- eot: 'application/vnd.ms-fontobject',
250
- png: 'image/png',
251
- jpg: JPEG,
252
- jpeg: JPEG,
253
- gif: 'image/gif',
254
- tiff: 'image/tiff',
255
- svg: 'image/svg+xml'
256
- };
257
- }
258
-
259
- function mimeType(url) {
260
- var extension = parseExtension(url).toLowerCase();
261
- return mimes()[extension] || '';
262
- }
263
-
264
- function dataAsUrl(content, type) {
265
- return "data:".concat(type, ";base64,").concat(content);
266
- }
267
-
268
- function escape(string) {
269
- return string.replace(/([.*+?^${}()|\[\]\/\\])/g, '\\$1');
270
- }
271
-
272
- function delay(ms) {
273
- return function (arg) {
274
- return new Promise(function (resolve) {
275
- _window["default"].setTimeout(function () {
276
- resolve(arg);
277
- }, ms);
278
- });
279
- };
280
- }
281
-
282
- function isSrcAsDataUrl(text) {
283
- var DATA_URL_REGEX = /url\(['"]?(data:)([^'"]+?)['"]?\)/;
284
- return text.search(DATA_URL_REGEX) !== -1;
285
- }
286
-
287
- function cvToBlob(canvas) {
288
- return new Promise(function (resolve) {
289
- var binaryString = _window["default"].atob(canvas.toDataURL().split(',')[1]);
290
-
291
- var length = binaryString.length;
292
- var binaryArray = new Uint8Array(length);
293
-
294
- for (var i = 0; i < length; i++) {
295
- binaryArray[i] = binaryString.charCodeAt(i);
296
- }
297
-
298
- resolve(new _window["default"].Blob([binaryArray], {
299
- type: 'image/png'
300
- }));
301
- });
302
- }
303
-
304
- function canvasToBlob(canvas) {
305
- if (canvas.toBlob) return new Promise(function (resolve) {
306
- canvas.toBlob(resolve);
307
- });
308
- return cvToBlob(canvas);
309
- }
310
-
311
- function escapeXhtml(string) {
312
- return string.replace(/#/g, '%23').replace(/\n/g, '%0A');
313
- }
314
-
315
- function getWidth(node) {
316
- var leftBorder = px(node, 'border-left-width');
317
- var rightBorder = px(node, 'border-right-width');
318
- return node.scrollWidth + leftBorder + rightBorder;
319
- }
320
-
321
- function getHeight(node) {
322
- var topBorder = px(node, 'border-top-width');
323
- var bottomBorder = px(node, 'border-bottom-width');
324
- return node.scrollHeight + topBorder + bottomBorder;
325
- }
326
-
327
- function px(node, styleProperty) {
328
- var value = _window["default"].getComputedStyle(node).getPropertyValue(styleProperty);
329
-
330
- return parseFloat(value.replace('px', ''));
331
- }
332
-
333
- function resolveUrl(url, baseUrl) {
334
- var doc = _document["default"].implementation.createHTMLDocument();
335
-
336
- var base = doc.createElement('base');
337
- doc.head.appendChild(base);
338
- var a = doc.createElement('a');
339
- doc.body.appendChild(a);
340
- base.href = baseUrl;
341
- a.href = url;
342
- return a.href;
343
- }
344
-
345
- function getAndEncode(url, options) {
346
- var TIMEOUT = 30000;
347
-
348
- if (options.cacheBust) {
349
- // Cache bypass so we dont have CORS issues with cached images
350
- // Source: https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Bypassing_the_cache
351
- url += (/\?/.test(url) ? '&' : '?') + new Date().getTime();
352
- }
353
-
354
- return new Promise(function (resolve) {
355
- var request = new _window["default"].XMLHttpRequest();
356
- request.onreadystatechange = done;
357
- request.ontimeout = timeout;
358
- request.responseType = 'blob';
359
- request.timeout = TIMEOUT;
360
- request.open('GET', url, true);
361
- request.send();
362
- var placeholder;
363
-
364
- if (options.imagePlaceholder) {
365
- var split = options.imagePlaceholder.split(/,/);
366
-
367
- if (split && split[1]) {
368
- placeholder = split[1];
369
- }
370
- }
371
-
372
- function done() {
373
- if (request.readyState !== 4) return;
374
-
375
- if (request.status !== 200) {
376
- if (placeholder) {
377
- resolve(placeholder);
378
- } else {
379
- fail("cannot fetch resource: ".concat(url, ", status: ").concat(request.status));
380
- }
381
-
382
- return;
383
- }
384
-
385
- var encoder = new _window["default"].FileReader();
386
-
387
- encoder.onloadend = function () {
388
- var content = encoder.result.split(/,/)[1];
389
- resolve(content);
390
- };
391
-
392
- encoder.readAsDataURL(request.response);
393
- }
394
-
395
- function timeout() {
396
- if (placeholder) {
397
- resolve(placeholder);
398
- } else {
399
- fail("timeout of ".concat(TIMEOUT, "ms occurred while fetching resource: ").concat(url));
400
- }
401
- }
402
-
403
- function fail(message) {
404
- _console["default"].error(message);
405
-
406
- resolve('');
407
- }
408
- });
409
- }
410
-
411
- function concatAndResolveUrl(base, url) {
412
- return new URL(url, base).href;
413
- } // Set relative URL in stylesheet to absolute url
414
-
415
-
416
- function setStyleSheetBaseHref(text, base) {
417
- function addBaseHrefToUrl(match, p1) {
418
- var url = /^http/i.test(p1) ? p1 : concatAndResolveUrl(base, p1);
419
- return "url('".concat(url, "')");
420
- }
421
-
422
- return isSrcAsDataUrl(text) ? text : text.replace(/url\(['"]?([^'"]+?)['"]?\)/g, addBaseHrefToUrl);
423
- }
424
-
425
- function toStyleSheet(text) {
426
- var doc = _document["default"].implementation.createHTMLDocument('');
427
-
428
- var styleElement = _document["default"].createElement('style');
429
-
430
- styleElement.textContent = text;
431
- doc.body.appendChild(styleElement);
432
- return styleElement.sheet;
433
- }
434
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kb20tdXRpbHMudHMiXSwibmFtZXMiOlsicHJvY2Vzc0Nsb25lIiwib3JpZ2luYWwiLCJjbG9uZSIsIndpbmRvdyIsIkVsZW1lbnQiLCJjb3B5UHJvcGVydGllcyIsInNvdXJjZVN0eWxlIiwidGFyZ2V0U3R5bGUiLCJwcm9wZXJ0eUtleXMiLCJhc0FycmF5IiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRQcm9wZXJ0eVByaW9yaXR5IiwiY29weVN0eWxlIiwic291cmNlIiwidGFyZ2V0IiwiY3NzVGV4dCIsImZvbnQiLCJjbG9uZVN0eWxlIiwib2ciLCJjbG4iLCJvcmlnaW5hbFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInN0eWxlIiwiZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlIiwiZWxtIiwic3RsIiwiZm9ybWF0Q3NzVGV4dCIsInN0bDEiLCJjbnQiLCJmb3JtYXRQcm9wZXJ0eSIsImZvcm1hdENzc1Byb3BlcnRpZXMiLCJzdGwyIiwibWFwIiwiam9pbiIsInNlbGVjdG9yIiwiZG9jdW1lbnQiLCJjcmVhdGVUZXh0Tm9kZSIsImNsb25lUHNldWRvRWxlbWVudCIsIm9yZyIsImVsZW1lbnQiLCJjb250ZW50IiwiY2xhc3NOYW1lIiwidWlkIiwic3R5bGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiY2xvbmVQc2V1ZG9FbGVtZW50cyIsImNvcHlVc2VySW5wdXQiLCJIVE1MVGV4dEFyZWFFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJIVE1MSW5wdXRFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwiZml4U3ZnIiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiYXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZW5ndGgiLCJpIiwicHVzaCIsImZvdXJSYW5kb21DaGFycyIsIk1hdGgiLCJyYW5kb20iLCJwb3ciLCJ0b1N0cmluZyIsInNsaWNlIiwiaW5kZXgiLCJtYWtlSW1hZ2UiLCJ1cmkiLCJyZWplY3QiLCJpbWFnZSIsIkltYWdlIiwib25sb2FkIiwib25lcnJvciIsImVyciIsIm1lc3NhZ2UiLCJJTUFHRV9FWFBPUlRfRVJST1JTIiwiZGF0YVVyaSIsIkNvbnNvbGUiLCJsb2ciLCJldmVudCIsInNyYyIsImlzRGF0YVVybCIsInVybCIsInNlYXJjaCIsInBhcnNlRXh0ZW5zaW9uIiwibWF0Y2giLCJleGVjIiwibWltZXMiLCJXT0ZGIiwiSlBFRyIsIndvZmYiLCJ3b2ZmMiIsInR0ZiIsImVvdCIsInBuZyIsImpwZyIsImpwZWciLCJnaWYiLCJ0aWZmIiwic3ZnIiwibWltZVR5cGUiLCJleHRlbnNpb24iLCJ0b0xvd2VyQ2FzZSIsImRhdGFBc1VybCIsInR5cGUiLCJlc2NhcGUiLCJzdHJpbmciLCJyZXBsYWNlIiwiZGVsYXkiLCJtcyIsImFyZyIsInNldFRpbWVvdXQiLCJpc1NyY0FzRGF0YVVybCIsInRleHQiLCJEQVRBX1VSTF9SRUdFWCIsImN2VG9CbG9iIiwiY2FudmFzIiwiYmluYXJ5U3RyaW5nIiwiYXRvYiIsInRvRGF0YVVSTCIsInNwbGl0IiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjYW52YXNUb0Jsb2IiLCJ0b0Jsb2IiLCJlc2NhcGVYaHRtbCIsImdldFdpZHRoIiwibm9kZSIsImxlZnRCb3JkZXIiLCJweCIsInJpZ2h0Qm9yZGVyIiwic2Nyb2xsV2lkdGgiLCJnZXRIZWlnaHQiLCJ0b3BCb3JkZXIiLCJib3R0b21Cb3JkZXIiLCJzY3JvbGxIZWlnaHQiLCJzdHlsZVByb3BlcnR5IiwicGFyc2VGbG9hdCIsInJlc29sdmVVcmwiLCJiYXNlVXJsIiwiZG9jIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJiYXNlIiwiaGVhZCIsImEiLCJib2R5IiwiaHJlZiIsImdldEFuZEVuY29kZSIsIm9wdGlvbnMiLCJUSU1FT1VUIiwiY2FjaGVCdXN0IiwidGVzdCIsIkRhdGUiLCJnZXRUaW1lIiwicmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwiZG9uZSIsIm9udGltZW91dCIsInRpbWVvdXQiLCJyZXNwb25zZVR5cGUiLCJvcGVuIiwic2VuZCIsInBsYWNlaG9sZGVyIiwiaW1hZ2VQbGFjZWhvbGRlciIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJmYWlsIiwiZW5jb2RlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWRlbmQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwicmVzcG9uc2UiLCJlcnJvciIsImNvbmNhdEFuZFJlc29sdmVVcmwiLCJVUkwiLCJzZXRTdHlsZVNoZWV0QmFzZUhyZWYiLCJhZGRCYXNlSHJlZlRvVXJsIiwicDEiLCJ0b1N0eWxlU2hlZXQiLCJ0ZXh0Q29udGVudCIsInNoZWV0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFOQTtBQUNBO0FBT08sU0FBU0EsWUFBVCxDQUFzQkMsUUFBdEIsRUFBZ0NDLEtBQWhDLEVBQXVDO0FBQzVDLE1BQUksRUFBRUEsS0FBSyxZQUFZQyxtQkFBT0MsT0FBMUIsQ0FBSixFQUF3QztBQUN0QyxXQUFPRixLQUFQO0FBQ0Q7O0FBRUQsV0FBU0csY0FBVCxDQUF3QkMsV0FBeEIsRUFBcUNDLFdBQXJDLEVBQWtEO0FBQ2hELFFBQU1DLFlBQVksR0FBR0MsT0FBTyxDQUFDSCxXQUFELENBQTVCO0FBQ0FFLElBQUFBLFlBQVksQ0FBQ0UsT0FBYixDQUFxQixVQUFBQyxJQUFJLEVBQUk7QUFDM0JKLE1BQUFBLFdBQVcsQ0FBQ0ssV0FBWixDQUNFRCxJQURGLEVBRUVMLFdBQVcsQ0FBQ08sZ0JBQVosQ0FBNkJGLElBQTdCLENBRkYsRUFHRUwsV0FBVyxDQUFDUSxtQkFBWixDQUFnQ0gsSUFBaEMsQ0FIRjtBQUtELEtBTkQ7QUFPRDs7QUFFRCxXQUFTSSxTQUFULENBQW1CQyxNQUFuQixFQUEyQkMsTUFBM0IsRUFBbUM7QUFDakMsUUFBSUQsTUFBTSxDQUFDRSxPQUFYLEVBQW9CO0FBQ2xCRCxNQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUJGLE1BQU0sQ0FBQ0UsT0FBeEIsQ0FEa0IsQ0FFbEI7O0FBQ0EsVUFBSUYsTUFBTSxDQUFDRyxJQUFYLEVBQWlCO0FBQ2ZGLFFBQUFBLE1BQU0sQ0FBQ0UsSUFBUCxHQUFjSCxNQUFNLENBQUNHLElBQXJCO0FBQ0Q7QUFDRixLQU5ELE1BTU87QUFDTGQsTUFBQUEsY0FBYyxDQUFDVyxNQUFELEVBQVNDLE1BQVQsQ0FBZDtBQUNEO0FBQ0Y7O0FBRUQsV0FBU0csVUFBVCxDQUFvQkMsRUFBcEIsRUFBd0JDLEdBQXhCLEVBQTZCO0FBQzNCLFFBQU1DLGFBQWEsR0FBR3BCLG1CQUFPcUIsZ0JBQVAsQ0FBd0JILEVBQXhCLENBQXRCOztBQUNBTixJQUFBQSxTQUFTLENBQUNRLGFBQUQsRUFBZ0JELEdBQUcsQ0FBQ0csS0FBcEIsQ0FBVDtBQUNEOztBQUVELFdBQVNDLHdCQUFULENBQWtDSixHQUFsQyxFQUF1Q0ssR0FBdkMsRUFBNENDLEdBQTVDLEVBQWlEO0FBQy9DLFFBQU1DLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBQUMsSUFBSSxFQUFJO0FBQzVCLFVBQU1DLEdBQUcsR0FBR0QsSUFBSSxDQUFDakIsZ0JBQUwsQ0FBc0IsU0FBdEIsQ0FBWjtBQUNBLHVCQUFVZSxHQUFHLENBQUNWLE9BQWQsdUJBQWtDYSxHQUFsQztBQUNELEtBSEQ7O0FBS0EsUUFBTUMsY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixDQUFBckIsSUFBSSxFQUFJO0FBQzdCLHVCQUFVQSxJQUFWLGNBQWtCaUIsR0FBRyxDQUFDZixnQkFBSixDQUFxQkYsSUFBckIsQ0FBbEIsU0FDRWlCLEdBQUcsQ0FBQ2QsbUJBQUosQ0FBd0JILElBQXhCLElBQWdDLGFBQWhDLEdBQWdELEVBRGxEO0FBR0QsS0FKRDs7QUFNQSxRQUFNc0IsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFzQixDQUFBQyxJQUFJLEVBQUk7QUFDbEMsdUJBQVV6QixPQUFPLENBQUN5QixJQUFELENBQVAsQ0FDUEMsR0FETyxDQUNISCxjQURHLEVBRVBJLElBRk8sQ0FFRixJQUZFLENBQVY7QUFHRCxLQUpEOztBQU1BLFFBQU1DLFFBQVEsY0FBT2YsR0FBUCxjQUFjSyxHQUFkLENBQWQ7QUFDQSxRQUFNVCxPQUFPLEdBQUdVLEdBQUcsQ0FBQ1YsT0FBSixHQUFjVyxhQUFhLENBQUNELEdBQUQsQ0FBM0IsR0FBbUNLLG1CQUFtQixDQUFDTCxHQUFELENBQXRFO0FBRUEsV0FBT1UscUJBQVNDLGNBQVQsV0FBMkJGLFFBQTNCLGNBQXVDbkIsT0FBdkMsT0FBUDtBQUNEOztBQUVELFdBQVNzQixrQkFBVCxDQUE0QkMsR0FBNUIsRUFBaUNuQixHQUFqQyxFQUFzQ29CLE9BQXRDLEVBQStDO0FBQzdDLFFBQU1qQixLQUFLLEdBQUd0QixtQkFBT3FCLGdCQUFQLENBQXdCaUIsR0FBeEIsRUFBNkJDLE9BQTdCLENBQWQ7O0FBQ0EsUUFBTUMsT0FBTyxHQUFHbEIsS0FBSyxDQUFDWixnQkFBTixDQUF1QixTQUF2QixDQUFoQjs7QUFFQSxRQUFJOEIsT0FBTyxLQUFLLEVBQVosSUFBa0JBLE9BQU8sS0FBSyxNQUFsQyxFQUEwQztBQUN4QztBQUNEOztBQUVELFFBQU1DLFNBQVMsR0FBR0MsR0FBRyxFQUFyQjtBQUNBdkIsSUFBQUEsR0FBRyxDQUFDc0IsU0FBSixhQUFtQnRCLEdBQUcsQ0FBQ3NCLFNBQXZCLGNBQW9DQSxTQUFwQzs7QUFDQSxRQUFNRSxZQUFZLEdBQUdSLHFCQUFTUyxhQUFULENBQXVCLE9BQXZCLENBQXJCOztBQUNBRCxJQUFBQSxZQUFZLENBQUNFLFdBQWIsQ0FBeUJ0Qix3QkFBd0IsQ0FBQ2tCLFNBQUQsRUFBWUYsT0FBWixFQUFxQmpCLEtBQXJCLENBQWpEO0FBQ0FILElBQUFBLEdBQUcsQ0FBQzBCLFdBQUosQ0FBZ0JGLFlBQWhCO0FBQ0Q7O0FBRUQsV0FBU0csbUJBQVQsT0FBd0M7QUFBQTtBQUFBLFFBQVY1QixFQUFVO0FBQUEsUUFBTkMsR0FBTTs7QUFDdEMsS0FBQyxTQUFELEVBQVksUUFBWixFQUFzQlosT0FBdEIsQ0FBOEIsVUFBQWdDLE9BQU87QUFBQSxhQUFJRixrQkFBa0IsQ0FBQ25CLEVBQUQsRUFBS0MsR0FBTCxFQUFVb0IsT0FBVixDQUF0QjtBQUFBLEtBQXJDO0FBQ0Q7O0FBRUQsV0FBU1EsYUFBVCxRQUFrQztBQUFBO0FBQUEsUUFBVjdCLEVBQVU7QUFBQSxRQUFOQyxHQUFNOztBQUNoQyxRQUFJRCxFQUFFLFlBQVlsQixtQkFBT2dELG1CQUF6QixFQUE4QzdCLEdBQUcsQ0FBQzhCLFNBQUosR0FBZ0IvQixFQUFFLENBQUNnQyxLQUFuQjtBQUM5QyxRQUFJaEMsRUFBRSxZQUFZbEIsbUJBQU9tRCxnQkFBekIsRUFBMkNoQyxHQUFHLENBQUNpQyxZQUFKLENBQWlCLE9BQWpCLEVBQTBCbEMsRUFBRSxDQUFDZ0MsS0FBN0I7QUFDNUM7O0FBRUQsV0FBU0csTUFBVCxDQUFnQmxDLEdBQWhCLEVBQXFCO0FBQ25CLFFBQUksRUFBRUEsR0FBRyxZQUFZbkIsbUJBQU9zRCxVQUF4QixDQUFKLEVBQXlDO0FBQ3pDbkMsSUFBQUEsR0FBRyxDQUFDaUMsWUFBSixDQUFpQixPQUFqQixFQUEwQiw0QkFBMUI7QUFFQSxRQUFJLEVBQUVqQyxHQUFHLFlBQVluQixtQkFBT3VELGNBQXhCLENBQUosRUFBNkM7QUFDN0MsS0FBQyxPQUFELEVBQVUsUUFBVixFQUFvQmhELE9BQXBCLENBQTRCLFVBQUFpRCxTQUFTLEVBQUk7QUFDdkMsVUFBTU4sS0FBSyxHQUFHL0IsR0FBRyxDQUFDc0MsWUFBSixDQUFpQkQsU0FBakIsQ0FBZDtBQUNBLFVBQUksQ0FBQ04sS0FBTCxFQUFZO0FBRVovQixNQUFBQSxHQUFHLENBQUNHLEtBQUosQ0FBVWIsV0FBVixDQUFzQitDLFNBQXRCLEVBQWlDTixLQUFqQztBQUNELEtBTEQ7QUFNRDs7QUFFRCxTQUFPUSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsQ0FBQzdELFFBQUQsRUFBV0MsS0FBWCxDQUFoQixFQUNKNkQsSUFESSxDQUNDLGlCQUFlO0FBQUE7QUFBQSxRQUFiMUMsRUFBYTtBQUFBLFFBQVRDLEdBQVM7O0FBQ25CRixJQUFBQSxVQUFVLENBQUNDLEVBQUQsRUFBS0MsR0FBTCxDQUFWO0FBQ0EsV0FBTyxDQUFDRCxFQUFELEVBQUtDLEdBQUwsQ0FBUDtBQUNELEdBSkksRUFLSnlDLElBTEksQ0FLQyxpQkFBZTtBQUFBO0FBQUEsUUFBYjFDLEVBQWE7QUFBQSxRQUFUQyxHQUFTOztBQUNuQjJCLElBQUFBLG1CQUFtQixDQUFDLENBQUM1QixFQUFELEVBQUtDLEdBQUwsQ0FBRCxDQUFuQjtBQUNBLFdBQU8sQ0FBQ0QsRUFBRCxFQUFLQyxHQUFMLENBQVA7QUFDRCxHQVJJLEVBU0p5QyxJQVRJLENBU0MsaUJBQWU7QUFBQTtBQUFBLFFBQWIxQyxFQUFhO0FBQUEsUUFBVEMsR0FBUzs7QUFDbkI0QixJQUFBQSxhQUFhLENBQUMsQ0FBQzdCLEVBQUQsRUFBS0MsR0FBTCxDQUFELENBQWI7QUFDQSxXQUFPLENBQUNELEVBQUQsRUFBS0MsR0FBTCxDQUFQO0FBQ0QsR0FaSSxFQWFKeUMsSUFiSSxDQWFDLGtCQUFlO0FBQUE7QUFBQSxRQUFiMUMsRUFBYTtBQUFBLFFBQVRDLEdBQVM7O0FBQ25Ca0MsSUFBQUEsTUFBTSxDQUFDbEMsR0FBRCxDQUFOO0FBQ0EsV0FBTyxDQUFDRCxFQUFELEVBQUtDLEdBQUwsQ0FBUDtBQUNELEdBaEJJLEVBaUJKeUMsSUFqQkksQ0FpQkM7QUFBQTtBQUFBLFFBQUUxQyxFQUFGO0FBQUEsUUFBTUMsR0FBTjs7QUFBQSxXQUFlQSxHQUFmO0FBQUEsR0FqQkQsQ0FBUDtBQWtCRDtBQUVEO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU2IsT0FBVCxDQUFpQnVELFNBQWpCLEVBQTRCO0FBQ2pDLE1BQU1DLEtBQVksR0FBRyxFQUFyQjtBQUNBLE1BQU1DLE1BQU0sR0FBR0YsU0FBUyxDQUFDRSxNQUF6Qjs7QUFDQSxPQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELE1BQXBCLEVBQTRCQyxDQUFDLEVBQTdCO0FBQWlDRixJQUFBQSxLQUFLLENBQUNHLElBQU4sQ0FBV0osU0FBUyxDQUFDRyxDQUFELENBQXBCO0FBQWpDOztBQUNBLFNBQU9GLEtBQVA7QUFDRDs7QUFFTSxTQUFTSSxlQUFULEdBQTJCO0FBQ2hDLFNBQU8sY0FBTyxDQUFFQyxJQUFJLENBQUNDLE1BQUwsS0FBZ0JELElBQUksQ0FBQ0UsR0FBTCxDQUFTLEVBQVQsRUFBYSxDQUFiLENBQWpCLElBQXFDLENBQXRDLEVBQXlDQyxRQUF6QyxDQUFrRCxFQUFsRCxDQUFQLEVBQStEQyxLQUEvRCxDQUFxRSxDQUFDLENBQXRFLENBQVA7QUFDRDs7QUFFTSxTQUFTN0IsR0FBVCxHQUFlO0FBQ3BCLE1BQUk4QixLQUFLLEdBQUcsQ0FBWjtBQUVBLG9CQUFXTixlQUFlLEVBQTFCLFNBQStCTSxLQUFLLEVBQXBDO0FBQ0Q7O0FBRU0sU0FBU0MsU0FBVCxDQUFtQkMsR0FBbkIsRUFBd0I7QUFDN0IsU0FBTyxJQUFJaEIsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVWdCLE1BQVYsRUFBcUI7QUFDdEMsUUFBTUMsS0FBSyxHQUFHLElBQUk1RSxtQkFBTzZFLEtBQVgsRUFBZDs7QUFDQUQsSUFBQUEsS0FBSyxDQUFDRSxNQUFOLEdBQWUsWUFBTTtBQUNuQm5CLE1BQUFBLE9BQU8sQ0FBQ2lCLEtBQUQsQ0FBUDtBQUNELEtBRkQ7O0FBR0FBLElBQUFBLEtBQUssQ0FBQ0csT0FBTixHQUFnQixVQUFBQyxHQUFHLEVBQUk7QUFDckIsVUFBTUMsT0FBTyxHQUFHQywrQkFBb0JDLE9BQXBDOztBQUNBQywwQkFBUUMsR0FBUixDQUFZWCxHQUFaLEVBRnFCLENBR3JCO0FBQ0E7OztBQUNBQyxNQUFBQSxNQUFNLENBQUM7QUFBQ1csUUFBQUEsS0FBSyxFQUFFTixHQUFSO0FBQWFDLFFBQUFBLE9BQU8sRUFBUEE7QUFBYixPQUFELENBQU47QUFDRCxLQU5EOztBQU9BTCxJQUFBQSxLQUFLLENBQUNXLEdBQU4sR0FBWWIsR0FBWjtBQUNELEdBYk0sQ0FBUDtBQWNEOztBQUVNLFNBQVNjLFNBQVQsQ0FBbUJDLEdBQW5CLEVBQXdCO0FBQzdCLFNBQU9BLEdBQUcsQ0FBQ0MsTUFBSixDQUFXLFVBQVgsTUFBMkIsQ0FBQyxDQUFuQztBQUNEOztBQUVELFNBQVNDLGNBQVQsQ0FBd0JGLEdBQXhCLEVBQTZCO0FBQzNCLE1BQU1HLEtBQUssR0FBRyxrQkFBa0JDLElBQWxCLENBQXVCSixHQUF2QixDQUFkOztBQUNBLE1BQUlHLEtBQUosRUFBVztBQUNULFdBQU9BLEtBQUssQ0FBQyxDQUFELENBQVo7QUFDRDs7QUFDRCxTQUFPLEVBQVA7QUFDRDs7QUFFRCxTQUFTRSxLQUFULEdBQWlCO0FBQ2Y7QUFDRjtBQUNBO0FBQ0E7QUFDRSxNQUFNQyxJQUFJLEdBQUcsdUJBQWI7QUFDQSxNQUFNQyxJQUFJLEdBQUcsWUFBYjtBQUVBLFNBQU87QUFDTEMsSUFBQUEsSUFBSSxFQUFFRixJQUREO0FBRUxHLElBQUFBLEtBQUssRUFBRUgsSUFGRjtBQUdMSSxJQUFBQSxHQUFHLEVBQUUsMkJBSEE7QUFJTEMsSUFBQUEsR0FBRyxFQUFFLCtCQUpBO0FBS0xDLElBQUFBLEdBQUcsRUFBRSxXQUxBO0FBTUxDLElBQUFBLEdBQUcsRUFBRU4sSUFOQTtBQU9MTyxJQUFBQSxJQUFJLEVBQUVQLElBUEQ7QUFRTFEsSUFBQUEsR0FBRyxFQUFFLFdBUkE7QUFTTEMsSUFBQUEsSUFBSSxFQUFFLFlBVEQ7QUFVTEMsSUFBQUEsR0FBRyxFQUFFO0FBVkEsR0FBUDtBQVlEOztBQUVNLFNBQVNDLFFBQVQsQ0FBa0JsQixHQUFsQixFQUF1QjtBQUM1QixNQUFNbUIsU0FBUyxHQUFHakIsY0FBYyxDQUFDRixHQUFELENBQWQsQ0FBb0JvQixXQUFwQixFQUFsQjtBQUNBLFNBQU9mLEtBQUssR0FBR2MsU0FBSCxDQUFMLElBQXNCLEVBQTdCO0FBQ0Q7O0FBRU0sU0FBU0UsU0FBVCxDQUFtQnRFLE9BQW5CLEVBQTRCdUUsSUFBNUIsRUFBa0M7QUFDdkMsd0JBQWVBLElBQWYscUJBQThCdkUsT0FBOUI7QUFDRDs7QUFFTSxTQUFTd0UsTUFBVCxDQUFnQkMsTUFBaEIsRUFBd0I7QUFDN0IsU0FBT0EsTUFBTSxDQUFDQyxPQUFQLENBQWUsMEJBQWYsRUFBMkMsTUFBM0MsQ0FBUDtBQUNEOztBQUVNLFNBQVNDLEtBQVQsQ0FBZUMsRUFBZixFQUFtQjtBQUN4QixTQUFPLFVBQUFDLEdBQUcsRUFBSTtBQUNaLFdBQU8sSUFBSTNELE9BQUosQ0FBWSxVQUFBQyxPQUFPLEVBQUk7QUFDNUIzRCx5QkFBT3NILFVBQVAsQ0FBa0IsWUFBTTtBQUN0QjNELFFBQUFBLE9BQU8sQ0FBQzBELEdBQUQsQ0FBUDtBQUNELE9BRkQsRUFFR0QsRUFGSDtBQUdELEtBSk0sQ0FBUDtBQUtELEdBTkQ7QUFPRDs7QUFFTSxTQUFTRyxjQUFULENBQXdCQyxJQUF4QixFQUE4QjtBQUNuQyxNQUFNQyxjQUFjLEdBQUcsbUNBQXZCO0FBQ0EsU0FBT0QsSUFBSSxDQUFDOUIsTUFBTCxDQUFZK0IsY0FBWixNQUFnQyxDQUFDLENBQXhDO0FBQ0Q7O0FBRUQsU0FBU0MsUUFBVCxDQUFrQkMsTUFBbEIsRUFBMEI7QUFDeEIsU0FBTyxJQUFJakUsT0FBSixDQUFZLFVBQUFDLE9BQU8sRUFBSTtBQUM1QixRQUFNaUUsWUFBWSxHQUFHNUgsbUJBQU82SCxJQUFQLENBQVlGLE1BQU0sQ0FBQ0csU0FBUCxHQUFtQkMsS0FBbkIsQ0FBeUIsR0FBekIsRUFBOEIsQ0FBOUIsQ0FBWixDQUFyQjs7QUFDQSxRQUFNaEUsTUFBTSxHQUFHNkQsWUFBWSxDQUFDN0QsTUFBNUI7QUFDQSxRQUFNaUUsV0FBVyxHQUFHLElBQUlDLFVBQUosQ0FBZWxFLE1BQWYsQ0FBcEI7O0FBRUEsU0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxNQUFwQixFQUE0QkMsQ0FBQyxFQUE3QjtBQUFpQ2dFLE1BQUFBLFdBQVcsQ0FBQ2hFLENBQUQsQ0FBWCxHQUFpQjRELFlBQVksQ0FBQ00sVUFBYixDQUF3QmxFLENBQXhCLENBQWpCO0FBQWpDOztBQUVBTCxJQUFBQSxPQUFPLENBQUMsSUFBSTNELG1CQUFPbUksSUFBWCxDQUFnQixDQUFDSCxXQUFELENBQWhCLEVBQStCO0FBQUNqQixNQUFBQSxJQUFJLEVBQUU7QUFBUCxLQUEvQixDQUFELENBQVA7QUFDRCxHQVJNLENBQVA7QUFTRDs7QUFFTSxTQUFTcUIsWUFBVCxDQUFzQlQsTUFBdEIsRUFBOEI7QUFDbkMsTUFBSUEsTUFBTSxDQUFDVSxNQUFYLEVBQ0UsT0FBTyxJQUFJM0UsT0FBSixDQUFZLFVBQUFDLE9BQU8sRUFBSTtBQUM1QmdFLElBQUFBLE1BQU0sQ0FBQ1UsTUFBUCxDQUFjMUUsT0FBZDtBQUNELEdBRk0sQ0FBUDtBQUlGLFNBQU8rRCxRQUFRLENBQUNDLE1BQUQsQ0FBZjtBQUNEOztBQUVNLFNBQVNXLFdBQVQsQ0FBcUJyQixNQUFyQixFQUE2QjtBQUNsQyxTQUFPQSxNQUFNLENBQUNDLE9BQVAsQ0FBZSxJQUFmLEVBQXFCLEtBQXJCLEVBQTRCQSxPQUE1QixDQUFvQyxLQUFwQyxFQUEyQyxLQUEzQyxDQUFQO0FBQ0Q7O0FBRU0sU0FBU3FCLFFBQVQsQ0FBa0JDLElBQWxCLEVBQXdCO0FBQzdCLE1BQU1DLFVBQVUsR0FBR0MsRUFBRSxDQUFDRixJQUFELEVBQU8sbUJBQVAsQ0FBckI7QUFDQSxNQUFNRyxXQUFXLEdBQUdELEVBQUUsQ0FBQ0YsSUFBRCxFQUFPLG9CQUFQLENBQXRCO0FBQ0EsU0FBT0EsSUFBSSxDQUFDSSxXQUFMLEdBQW1CSCxVQUFuQixHQUFnQ0UsV0FBdkM7QUFDRDs7QUFFTSxTQUFTRSxTQUFULENBQW1CTCxJQUFuQixFQUF5QjtBQUM5QixNQUFNTSxTQUFTLEdBQUdKLEVBQUUsQ0FBQ0YsSUFBRCxFQUFPLGtCQUFQLENBQXBCO0FBQ0EsTUFBTU8sWUFBWSxHQUFHTCxFQUFFLENBQUNGLElBQUQsRUFBTyxxQkFBUCxDQUF2QjtBQUNBLFNBQU9BLElBQUksQ0FBQ1EsWUFBTCxHQUFvQkYsU0FBcEIsR0FBZ0NDLFlBQXZDO0FBQ0Q7O0FBRUQsU0FBU0wsRUFBVCxDQUFZRixJQUFaLEVBQWtCUyxhQUFsQixFQUFpQztBQUMvQixNQUFNL0YsS0FBSyxHQUFHbEQsbUJBQU9xQixnQkFBUCxDQUF3Qm1ILElBQXhCLEVBQThCOUgsZ0JBQTlCLENBQStDdUksYUFBL0MsQ0FBZDs7QUFDQSxTQUFPQyxVQUFVLENBQUNoRyxLQUFLLENBQUNnRSxPQUFOLENBQWMsSUFBZCxFQUFvQixFQUFwQixDQUFELENBQWpCO0FBQ0Q7O0FBRU0sU0FBU2lDLFVBQVQsQ0FBb0IxRCxHQUFwQixFQUF5QjJELE9BQXpCLEVBQWtDO0FBQ3ZDLE1BQU1DLEdBQUcsR0FBR2xILHFCQUFTbUgsY0FBVCxDQUF3QkMsa0JBQXhCLEVBQVo7O0FBQ0EsTUFBTUMsSUFBSSxHQUFHSCxHQUFHLENBQUN6RyxhQUFKLENBQWtCLE1BQWxCLENBQWI7QUFDQXlHLEVBQUFBLEdBQUcsQ0FBQ0ksSUFBSixDQUFTNUcsV0FBVCxDQUFxQjJHLElBQXJCO0FBQ0EsTUFBTUUsQ0FBQyxHQUFHTCxHQUFHLENBQUN6RyxhQUFKLENBQWtCLEdBQWxCLENBQVY7QUFDQXlHLEVBQUFBLEdBQUcsQ0FBQ00sSUFBSixDQUFTOUcsV0FBVCxDQUFxQjZHLENBQXJCO0FBQ0FGLEVBQUFBLElBQUksQ0FBQ0ksSUFBTCxHQUFZUixPQUFaO0FBQ0FNLEVBQUFBLENBQUMsQ0FBQ0UsSUFBRixHQUFTbkUsR0FBVDtBQUNBLFNBQU9pRSxDQUFDLENBQUNFLElBQVQ7QUFDRDs7QUFFTSxTQUFTQyxZQUFULENBQXNCcEUsR0FBdEIsRUFBMkJxRSxPQUEzQixFQUFvQztBQUN6QyxNQUFNQyxPQUFPLEdBQUcsS0FBaEI7O0FBQ0EsTUFBSUQsT0FBTyxDQUFDRSxTQUFaLEVBQXVCO0FBQ3JCO0FBQ0E7QUFDQXZFLElBQUFBLEdBQUcsSUFBSSxDQUFDLEtBQUt3RSxJQUFMLENBQVV4RSxHQUFWLElBQWlCLEdBQWpCLEdBQXVCLEdBQXhCLElBQStCLElBQUl5RSxJQUFKLEdBQVdDLE9BQVgsRUFBdEM7QUFDRDs7QUFFRCxTQUFPLElBQUl6RyxPQUFKLENBQVksVUFBQUMsT0FBTyxFQUFJO0FBQzVCLFFBQU15RyxPQUFPLEdBQUcsSUFBSXBLLG1CQUFPcUssY0FBWCxFQUFoQjtBQUVBRCxJQUFBQSxPQUFPLENBQUNFLGtCQUFSLEdBQTZCQyxJQUE3QjtBQUNBSCxJQUFBQSxPQUFPLENBQUNJLFNBQVIsR0FBb0JDLE9BQXBCO0FBQ0FMLElBQUFBLE9BQU8sQ0FBQ00sWUFBUixHQUF1QixNQUF2QjtBQUNBTixJQUFBQSxPQUFPLENBQUNLLE9BQVIsR0FBa0JWLE9BQWxCO0FBQ0FLLElBQUFBLE9BQU8sQ0FBQ08sSUFBUixDQUFhLEtBQWIsRUFBb0JsRixHQUFwQixFQUF5QixJQUF6QjtBQUNBMkUsSUFBQUEsT0FBTyxDQUFDUSxJQUFSO0FBRUEsUUFBSUMsV0FBSjs7QUFDQSxRQUFJZixPQUFPLENBQUNnQixnQkFBWixFQUE4QjtBQUM1QixVQUFNL0MsS0FBSyxHQUFHK0IsT0FBTyxDQUFDZ0IsZ0JBQVIsQ0FBeUIvQyxLQUF6QixDQUErQixHQUEvQixDQUFkOztBQUNBLFVBQUlBLEtBQUssSUFBSUEsS0FBSyxDQUFDLENBQUQsQ0FBbEIsRUFBdUI7QUFDckI4QyxRQUFBQSxXQUFXLEdBQUc5QyxLQUFLLENBQUMsQ0FBRCxDQUFuQjtBQUNEO0FBQ0Y7O0FBRUQsYUFBU3dDLElBQVQsR0FBZ0I7QUFDZCxVQUFJSCxPQUFPLENBQUNXLFVBQVIsS0FBdUIsQ0FBM0IsRUFBOEI7O0FBRTlCLFVBQUlYLE9BQU8sQ0FBQ1ksTUFBUixLQUFtQixHQUF2QixFQUE0QjtBQUMxQixZQUFJSCxXQUFKLEVBQWlCO0FBQ2ZsSCxVQUFBQSxPQUFPLENBQUNrSCxXQUFELENBQVA7QUFDRCxTQUZELE1BRU87QUFDTEksVUFBQUEsSUFBSSxrQ0FBMkJ4RixHQUEzQix1QkFBMkMyRSxPQUFPLENBQUNZLE1BQW5ELEVBQUo7QUFDRDs7QUFFRDtBQUNEOztBQUVELFVBQU1FLE9BQU8sR0FBRyxJQUFJbEwsbUJBQU9tTCxVQUFYLEVBQWhCOztBQUNBRCxNQUFBQSxPQUFPLENBQUNFLFNBQVIsR0FBb0IsWUFBTTtBQUN4QixZQUFNNUksT0FBTyxHQUFHMEksT0FBTyxDQUFDRyxNQUFSLENBQWV0RCxLQUFmLENBQXFCLEdBQXJCLEVBQTBCLENBQTFCLENBQWhCO0FBQ0FwRSxRQUFBQSxPQUFPLENBQUNuQixPQUFELENBQVA7QUFDRCxPQUhEOztBQUlBMEksTUFBQUEsT0FBTyxDQUFDSSxhQUFSLENBQXNCbEIsT0FBTyxDQUFDbUIsUUFBOUI7QUFDRDs7QUFFRCxhQUFTZCxPQUFULEdBQW1CO0FBQ2pCLFVBQUlJLFdBQUosRUFBaUI7QUFDZmxILFFBQUFBLE9BQU8sQ0FBQ2tILFdBQUQsQ0FBUDtBQUNELE9BRkQsTUFFTztBQUNMSSxRQUFBQSxJQUFJLHNCQUFlbEIsT0FBZixrREFBOER0RSxHQUE5RCxFQUFKO0FBQ0Q7QUFDRjs7QUFFRCxhQUFTd0YsSUFBVCxDQUFjaEcsT0FBZCxFQUF1QjtBQUNyQkcsMEJBQVFvRyxLQUFSLENBQWN2RyxPQUFkOztBQUNBdEIsTUFBQUEsT0FBTyxDQUFDLEVBQUQsQ0FBUDtBQUNEO0FBQ0YsR0FuRE0sQ0FBUDtBQW9ERDs7QUFFTSxTQUFTOEgsbUJBQVQsQ0FBNkJqQyxJQUE3QixFQUFtQy9ELEdBQW5DLEVBQXdDO0FBQzdDLFNBQU8sSUFBSWlHLEdBQUosQ0FBUWpHLEdBQVIsRUFBYStELElBQWIsRUFBbUJJLElBQTFCO0FBQ0QsQyxDQUVEOzs7QUFDTyxTQUFTK0IscUJBQVQsQ0FBK0JuRSxJQUEvQixFQUFxQ2dDLElBQXJDLEVBQTJDO0FBQ2hELFdBQVNvQyxnQkFBVCxDQUEwQmhHLEtBQTFCLEVBQWlDaUcsRUFBakMsRUFBcUM7QUFDbkMsUUFBTXBHLEdBQUcsR0FBRyxTQUFTd0UsSUFBVCxDQUFjNEIsRUFBZCxJQUFvQkEsRUFBcEIsR0FBeUJKLG1CQUFtQixDQUFDakMsSUFBRCxFQUFPcUMsRUFBUCxDQUF4RDtBQUNBLDBCQUFlcEcsR0FBZjtBQUNEOztBQUNELFNBQU84QixjQUFjLENBQUNDLElBQUQsQ0FBZCxHQUNIQSxJQURHLEdBRUhBLElBQUksQ0FBQ04sT0FBTCxDQUFhLDZCQUFiLEVBQTRDMEUsZ0JBQTVDLENBRko7QUFHRDs7QUFFTSxTQUFTRSxZQUFULENBQXNCdEUsSUFBdEIsRUFBNEI7QUFDakMsTUFBTTZCLEdBQUcsR0FBR2xILHFCQUFTbUgsY0FBVCxDQUF3QkMsa0JBQXhCLENBQTJDLEVBQTNDLENBQVo7O0FBQ0EsTUFBTTVHLFlBQVksR0FBR1IscUJBQVNTLGFBQVQsQ0FBdUIsT0FBdkIsQ0FBckI7O0FBRUFELEVBQUFBLFlBQVksQ0FBQ29KLFdBQWIsR0FBMkJ2RSxJQUEzQjtBQUNBNkIsRUFBQUEsR0FBRyxDQUFDTSxJQUFKLENBQVM5RyxXQUFULENBQXFCRixZQUFyQjtBQUVBLFNBQU9BLFlBQVksQ0FBQ3FKLEtBQXBCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgQ29uc29sZSBmcm9tICdnbG9iYWwvY29uc29sZSc7XG5pbXBvcnQgd2luZG93IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuaW1wb3J0IGRvY3VtZW50IGZyb20gJ2dsb2JhbC9kb2N1bWVudCc7XG5pbXBvcnQge0lNQUdFX0VYUE9SVF9FUlJPUlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDbG9uZShvcmlnaW5hbCwgY2xvbmUpIHtcbiAgaWYgKCEoY2xvbmUgaW5zdGFuY2VvZiB3aW5kb3cuRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2VTdHlsZSwgdGFyZ2V0U3R5bGUpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUtleXMgPSBhc0FycmF5KHNvdXJjZVN0eWxlKTtcbiAgICBwcm9wZXJ0eUtleXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIHRhcmdldFN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICBuYW1lLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpLFxuICAgICAgICBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY29weVN0eWxlKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgaWYgKHNvdXJjZS5jc3NUZXh0KSB7XG4gICAgICB0YXJnZXQuY3NzVGV4dCA9IHNvdXJjZS5jc3NUZXh0O1xuICAgICAgLy8gYWRkIGFkZGl0aW9uYWwgY29weSBvZiBjb21wb3NpdGUgc3R5bGVzXG4gICAgICBpZiAoc291cmNlLmZvbnQpIHtcbiAgICAgICAgdGFyZ2V0LmZvbnQgPSBzb3VyY2UuZm9udDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29weVByb3BlcnRpZXMoc291cmNlLCB0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lU3R5bGUob2csIGNsbikge1xuICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvZyk7XG4gICAgY29weVN0eWxlKG9yaWdpbmFsU3R5bGUsIGNsbi5zdHlsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xuLCBlbG0sIHN0bCkge1xuICAgIGNvbnN0IGZvcm1hdENzc1RleHQgPSBzdGwxID0+IHtcbiAgICAgIGNvbnN0IGNudCA9IHN0bDEuZ2V0UHJvcGVydHlWYWx1ZSgnY29udGVudCcpO1xuICAgICAgcmV0dXJuIGAke3N0bC5jc3NUZXh0fSBjb250ZW50OiAke2NudH07YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0UHJvcGVydHkgPSBuYW1lID0+IHtcbiAgICAgIHJldHVybiBgJHtuYW1lfToke3N0bC5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpfSR7XG4gICAgICAgIHN0bC5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpID8gJyAhaW1wb3J0YW50JyA6ICcnXG4gICAgICB9YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0Q3NzUHJvcGVydGllcyA9IHN0bDIgPT4ge1xuICAgICAgcmV0dXJuIGAke2FzQXJyYXkoc3RsMilcbiAgICAgICAgLm1hcChmb3JtYXRQcm9wZXJ0eSlcbiAgICAgICAgLmpvaW4oJzsgJyl9O2A7XG4gICAgfTtcblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC4ke2Nsbn06JHtlbG19YDtcbiAgICBjb25zdCBjc3NUZXh0ID0gc3RsLmNzc1RleHQgPyBmb3JtYXRDc3NUZXh0KHN0bCkgOiBmb3JtYXRDc3NQcm9wZXJ0aWVzKHN0bCk7XG5cbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCR7c2VsZWN0b3J9eyR7Y3NzVGV4dH19YCk7XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnQob3JnLCBjbG4sIGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9yZywgZWxlbWVudCk7XG4gICAgY29uc3QgY29udGVudCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcblxuICAgIGlmIChjb250ZW50ID09PSAnJyB8fCBjb250ZW50ID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSB1aWQoKTtcbiAgICBjbG4uY2xhc3NOYW1lID0gYCR7Y2xuLmNsYXNzTmFtZX0gJHtjbGFzc05hbWV9YDtcbiAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xhc3NOYW1lLCBlbGVtZW50LCBzdHlsZSkpO1xuICAgIGNsbi5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVQc2V1ZG9FbGVtZW50cyhbb2csIGNsbl0pIHtcbiAgICBbJzpiZWZvcmUnLCAnOmFmdGVyJ10uZm9yRWFjaChlbGVtZW50ID0+IGNsb25lUHNldWRvRWxlbWVudChvZywgY2xuLCBlbGVtZW50KSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5VXNlcklucHV0KFtvZywgY2xuXSkge1xuICAgIGlmIChvZyBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MVGV4dEFyZWFFbGVtZW50KSBjbG4uaW5uZXJIVE1MID0gb2cudmFsdWU7XG4gICAgaWYgKG9nIGluc3RhbmNlb2Ygd2luZG93LkhUTUxJbnB1dEVsZW1lbnQpIGNsbi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgb2cudmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZml4U3ZnKGNsbikge1xuICAgIGlmICghKGNsbiBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50KSkgcmV0dXJuO1xuICAgIGNsbi5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyk7XG5cbiAgICBpZiAoIShjbG4gaW5zdGFuY2VvZiB3aW5kb3cuU1ZHUmVjdEVsZW1lbnQpKSByZXR1cm47XG4gICAgWyd3aWR0aCcsICdoZWlnaHQnXS5mb3JFYWNoKGF0dHJpYnV0ZSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNsbi5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgY2xuLnN0eWxlLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbb3JpZ2luYWwsIGNsb25lXSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjbG9uZVN0eWxlKG9nLCBjbG4pO1xuICAgICAgcmV0dXJuIFtvZywgY2xuXTtcbiAgICB9KVxuICAgIC50aGVuKChbb2csIGNsbl0pID0+IHtcbiAgICAgIGNsb25lUHNldWRvRWxlbWVudHMoW29nLCBjbG5dKTtcbiAgICAgIHJldHVybiBbb2csIGNsbl07XG4gICAgfSlcbiAgICAudGhlbigoW29nLCBjbG5dKSA9PiB7XG4gICAgICBjb3B5VXNlcklucHV0KFtvZywgY2xuXSk7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4ge1xuICAgICAgZml4U3ZnKGNsbik7XG4gICAgICByZXR1cm4gW29nLCBjbG5dO1xuICAgIH0pXG4gICAgLnRoZW4oKFtvZywgY2xuXSkgPT4gY2xuKTtcbn1cblxuLyoqKipcbiAqIFVUSUxTXG4gKioqKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5KGFycmF5TGlrZSkge1xuICBjb25zdCBhcnJheTogYW55W10gPSBbXTtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXlMaWtlLmxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaChhcnJheUxpa2VbaV0pO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VyUmFuZG9tQ2hhcnMoKSB7XG4gIHJldHVybiBgMDAwMCR7KChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMzYsIDQpKSA8PCAwKS50b1N0cmluZygzNil9YC5zbGljZSgtNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1aWQoKSB7XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIGB1JHtmb3VyUmFuZG9tQ2hhcnMoKX0ke2luZGV4Kyt9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VJbWFnZSh1cmkpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBpbWFnZSA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKGltYWdlKTtcbiAgICB9O1xuICAgIGltYWdlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IElNQUdFX0VYUE9SVF9FUlJPUlMuZGF0YVVyaTtcbiAgICAgIENvbnNvbGUubG9nKHVyaSk7XG4gICAgICAvLyBlcnJvciBpcyBhbiBFdmVudCBPYmplY3RcbiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvb2JqX2V2ZW50LmFzcFxuICAgICAgcmVqZWN0KHtldmVudDogZXJyLCBtZXNzYWdlfSk7XG4gICAgfTtcbiAgICBpbWFnZS5zcmMgPSB1cmk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhVXJsKHVybCkge1xuICByZXR1cm4gdXJsLnNlYXJjaCgvXihkYXRhOikvKSAhPT0gLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9uKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9cXC4oW15cXC5cXC9dKj8pJC9nLmV4ZWModXJsKTtcbiAgaWYgKG1hdGNoKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbWltZXMoKSB7XG4gIC8qXG4gICAqIE9ubHkgV09GRiBhbmQgRU9UIG1pbWUgdHlwZXMgZm9yIGZvbnRzIGFyZSAncmVhbCdcbiAgICogc2VlIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWxcbiAgICovXG4gIGNvbnN0IFdPRkYgPSAnYXBwbGljYXRpb24vZm9udC13b2ZmJztcbiAgY29uc3QgSlBFRyA9ICdpbWFnZS9qcGVnJztcblxuICByZXR1cm4ge1xuICAgIHdvZmY6IFdPRkYsXG4gICAgd29mZjI6IFdPRkYsXG4gICAgdHRmOiAnYXBwbGljYXRpb24vZm9udC10cnVldHlwZScsXG4gICAgZW90OiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLFxuICAgIHBuZzogJ2ltYWdlL3BuZycsXG4gICAganBnOiBKUEVHLFxuICAgIGpwZWc6IEpQRUcsXG4gICAgZ2lmOiAnaW1hZ2UvZ2lmJyxcbiAgICB0aWZmOiAnaW1hZ2UvdGlmZicsXG4gICAgc3ZnOiAnaW1hZ2Uvc3ZnK3htbCdcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbWVUeXBlKHVybCkge1xuICBjb25zdCBleHRlbnNpb24gPSBwYXJzZUV4dGVuc2lvbih1cmwpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBtaW1lcygpW2V4dGVuc2lvbl0gfHwgJyc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRhQXNVcmwoY29udGVudCwgdHlwZSkge1xuICByZXR1cm4gYGRhdGE6JHt0eXBlfTtiYXNlNjQsJHtjb250ZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/XiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheShtcykge1xuICByZXR1cm4gYXJnID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoYXJnKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3JjQXNEYXRhVXJsKHRleHQpIHtcbiAgY29uc3QgREFUQV9VUkxfUkVHRVggPSAvdXJsXFwoWydcIl0/KGRhdGE6KShbXidcIl0rPylbJ1wiXT9cXCkvO1xuICByZXR1cm4gdGV4dC5zZWFyY2goREFUQV9VUkxfUkVHRVgpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gY3ZUb0Jsb2IoY2FudmFzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSB3aW5kb3cuYXRvYihjYW52YXMudG9EYXRhVVJMKCkuc3BsaXQoJywnKVsxXSk7XG4gICAgY29uc3QgbGVuZ3RoID0gYmluYXJ5U3RyaW5nLmxlbmd0aDtcbiAgICBjb25zdCBiaW5hcnlBcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBiaW5hcnlBcnJheVtpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoW2JpbmFyeUFycmF5XSwge3R5cGU6ICdpbWFnZS9wbmcnfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMpIHtcbiAgaWYgKGNhbnZhcy50b0Jsb2IpXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY2FudmFzLnRvQmxvYihyZXNvbHZlKTtcbiAgICB9KTtcblxuICByZXR1cm4gY3ZUb0Jsb2IoY2FudmFzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhodG1sKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyMvZywgJyUyMycpLnJlcGxhY2UoL1xcbi9nLCAnJTBBJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaWR0aChub2RlKSB7XG4gIGNvbnN0IGxlZnRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbiAgY29uc3QgcmlnaHRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJyk7XG4gIHJldHVybiBub2RlLnNjcm9sbFdpZHRoICsgbGVmdEJvcmRlciArIHJpZ2h0Qm9yZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVpZ2h0KG5vZGUpIHtcbiAgY29uc3QgdG9wQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbiAgY29uc3QgYm90dG9tQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci1ib3R0b20td2lkdGgnKTtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsSGVpZ2h0ICsgdG9wQm9yZGVyICsgYm90dG9tQm9yZGVyO1xufVxuXG5mdW5jdGlvbiBweChub2RlLCBzdHlsZVByb3BlcnR5KSB7XG4gIGNvbnN0IHZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncHgnLCAnJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgY29uc3QgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCk7XG4gIGNvbnN0IGJhc2UgPSBkb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICBkb2MuaGVhZC5hcHBlbmRDaGlsZChiYXNlKTtcbiAgY29uc3QgYSA9IGRvYy5jcmVhdGVFbGVtZW50KCdhJyk7XG4gIGRvYy5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICBiYXNlLmhyZWYgPSBiYXNlVXJsO1xuICBhLmhyZWYgPSB1cmw7XG4gIHJldHVybiBhLmhyZWY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmRFbmNvZGUodXJsLCBvcHRpb25zKSB7XG4gIGNvbnN0IFRJTUVPVVQgPSAzMDAwMDtcbiAgaWYgKG9wdGlvbnMuY2FjaGVCdXN0KSB7XG4gICAgLy8gQ2FjaGUgYnlwYXNzIHNvIHdlIGRvbnQgaGF2ZSBDT1JTIGlzc3VlcyB3aXRoIGNhY2hlZCBpbWFnZXNcbiAgICAvLyBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9Vc2luZ19YTUxIdHRwUmVxdWVzdCNCeXBhc3NpbmdfdGhlX2NhY2hlXG4gICAgdXJsICs9ICgvXFw/Ly50ZXN0KHVybCkgPyAnJicgOiAnPycpICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZG9uZTtcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IHRpbWVvdXQ7XG4gICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgcmVxdWVzdC50aW1lb3V0ID0gVElNRU9VVDtcbiAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gICAgcmVxdWVzdC5zZW5kKCk7XG5cbiAgICBsZXQgcGxhY2Vob2xkZXI7XG4gICAgaWYgKG9wdGlvbnMuaW1hZ2VQbGFjZWhvbGRlcikge1xuICAgICAgY29uc3Qgc3BsaXQgPSBvcHRpb25zLmltYWdlUGxhY2Vob2xkZXIuc3BsaXQoLywvKTtcbiAgICAgIGlmIChzcGxpdCAmJiBzcGxpdFsxXSkge1xuICAgICAgICBwbGFjZWhvbGRlciA9IHNwbGl0WzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG5cbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICAgIHJlc29sdmUocGxhY2Vob2xkZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZhaWwoYGNhbm5vdCBmZXRjaCByZXNvdXJjZTogJHt1cmx9LCBzdGF0dXM6ICR7cmVxdWVzdC5zdGF0dXN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcbiAgICAgIGVuY29kZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZW5jb2Rlci5yZXN1bHQuc3BsaXQoLywvKVsxXTtcbiAgICAgICAgcmVzb2x2ZShjb250ZW50KTtcbiAgICAgIH07XG4gICAgICBlbmNvZGVyLnJlYWRBc0RhdGFVUkwocmVxdWVzdC5yZXNwb25zZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGltZW91dCgpIHtcbiAgICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgICByZXNvbHZlKHBsYWNlaG9sZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWwoYHRpbWVvdXQgb2YgJHtUSU1FT1VUfW1zIG9jY3VycmVkIHdoaWxlIGZldGNoaW5nIHJlc291cmNlOiAke3VybH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgIENvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICByZXNvbHZlKCcnKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCB1cmwpIHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsLCBiYXNlKS5ocmVmO1xufVxuXG4vLyBTZXQgcmVsYXRpdmUgVVJMIGluIHN0eWxlc2hlZXQgdG8gYWJzb2x1dGUgdXJsXG5leHBvcnQgZnVuY3Rpb24gc2V0U3R5bGVTaGVldEJhc2VIcmVmKHRleHQsIGJhc2UpIHtcbiAgZnVuY3Rpb24gYWRkQmFzZUhyZWZUb1VybChtYXRjaCwgcDEpIHtcbiAgICBjb25zdCB1cmwgPSAvXmh0dHAvaS50ZXN0KHAxKSA/IHAxIDogY29uY2F0QW5kUmVzb2x2ZVVybChiYXNlLCBwMSk7XG4gICAgcmV0dXJuIGB1cmwoJyR7dXJsfScpYDtcbiAgfVxuICByZXR1cm4gaXNTcmNBc0RhdGFVcmwodGV4dClcbiAgICA/IHRleHRcbiAgICA6IHRleHQucmVwbGFjZSgvdXJsXFwoWydcIl0/KFteJ1wiXSs/KVsnXCJdP1xcKS9nLCBhZGRCYXNlSHJlZlRvVXJsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3R5bGVTaGVldCh0ZXh0KSB7XG4gIGNvbnN0IGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgnJyk7XG4gIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcblxuICByZXR1cm4gc3R5bGVFbGVtZW50LnNoZWV0O1xufVxuIl19
@@ -1,23 +0,0 @@
1
- import { PostProcessEffect } from '@deck.gl/core/typed';
2
- import { VisState } from '@kepler.gl/schemas';
3
- import { MapState, Effect, EffectProps, EffectDescription } from '@kepler.gl/types';
4
- export declare function computeDeckEffects({ visState, mapState }: {
5
- visState: VisState;
6
- mapState: MapState;
7
- }): PostProcessEffect[];
8
- /**
9
- * Always keep light & shadow effect at the top
10
- */
11
- export declare const fixEffectOrder: (effects: Effect[], effectOrder: string[]) => string[];
12
- export declare function reorderEffectOrder(effectOrder: string[], originEffectId: string, destinationEffectId: string): string[];
13
- /**
14
- * Validates parameters for an effect, clamps numbers to allowed ranges
15
- * or applies default values in case of wrong non-numeric values.
16
- * All unknown properties aren't modified.
17
- * @param parameters Parameters candidate for an effect.
18
- * @param effectDescription Description of an effect.
19
- * @returns
20
- */
21
- export declare function validateEffectParameters(parameters: {
22
- [key: string]: any;
23
- } | undefined, effectDescription: EffectDescription['parameters']): EffectProps['parameters'];