@kepler.gl/deckgl-layers 3.2.5 → 3.3.0-alpha.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 (55) hide show
  1. package/dist/3d-building-layer/3d-building-layer.d.ts +3 -3
  2. package/dist/3d-building-layer/3d-building-layer.js +9 -12
  3. package/dist/3d-building-layer/types.d.ts +8 -8
  4. package/dist/cluster-layer/cluster-layer.d.ts +16 -26
  5. package/dist/cluster-layer/cluster-layer.js +19 -30
  6. package/dist/column-layer/enhanced-column-layer.d.ts +4 -4
  7. package/dist/column-layer/enhanced-column-layer.js +39 -35
  8. package/dist/deckgl-extensions/filter-arrow-layer.d.ts +33 -6
  9. package/dist/deckgl-extensions/filter-arrow-layer.js +4 -12
  10. package/dist/deckgl-extensions/filter-shader-module.d.ts +32 -4
  11. package/dist/deckgl-extensions/filter-shader-module.js +3 -4
  12. package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +4906 -6
  13. package/dist/grid-layer/enhanced-cpu-grid-layer.js +46 -44
  14. package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +4903 -4
  15. package/dist/hexagon-layer/enhanced-hexagon-layer.js +61 -41
  16. package/dist/layer-utils/cpu-aggregator.d.ts +74 -27
  17. package/dist/layer-utils/cpu-aggregator.js +224 -19
  18. package/dist/line-layer/line-layer.d.ts +4 -4
  19. package/dist/line-layer/line-layer.js +29 -21
  20. package/dist/raster/images.d.ts +10 -3
  21. package/dist/raster/images.js +154 -60
  22. package/dist/raster/pipeline-validation-patch.d.ts +1 -0
  23. package/dist/raster/pipeline-validation-patch.js +60 -0
  24. package/dist/raster/raster-layer/raster-layer-shaders.d.ts +56 -0
  25. package/dist/raster/raster-layer/raster-layer-shaders.js +129 -0
  26. package/dist/raster/raster-layer/raster-layer.d.ts +6 -6
  27. package/dist/raster/raster-layer/raster-layer.js +100 -79
  28. package/dist/raster/raster-mesh-layer/matrix.d.ts +3 -1
  29. package/dist/raster/raster-mesh-layer/matrix.js +3 -3
  30. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.d.ts +19 -0
  31. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  32. package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +7 -6
  33. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +106 -81
  34. package/dist/raster/types.d.ts +8 -8
  35. package/dist/raster/types.js +1 -1
  36. package/dist/raster/webgl/color/colormap.js +13 -7
  37. package/dist/raster/webgl/color/filter.js +22 -12
  38. package/dist/raster/webgl/color/gamma-contrast.js +9 -3
  39. package/dist/raster/webgl/color/linear-rescale.js +9 -5
  40. package/dist/raster/webgl/color/saturation.js +7 -4
  41. package/dist/raster/webgl/color/sigmoidal-contrast.js +9 -5
  42. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +7 -4
  43. package/dist/raster/webgl/texture/combine-bands.js +1 -1
  44. package/dist/raster/webgl/texture/mask.js +27 -35
  45. package/dist/raster/webgl/texture/reorder-bands.js +8 -5
  46. package/dist/raster/webgl/texture/rgba-image.js +1 -1
  47. package/dist/raster/webgl/types.d.ts +11 -6
  48. package/dist/raster/webgl/types.js +1 -1
  49. package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +2 -4
  50. package/dist/svg-icon-layer/scatterplot-icon-layer.js +19 -25
  51. package/dist/svg-icon-layer/svg-icon-layer.d.ts +4 -6
  52. package/dist/svg-icon-layer/svg-icon-layer.js +5 -3
  53. package/dist/wms/wms-layer.d.ts +3 -3
  54. package/dist/wms/wms-layer.js +7 -7
  55. package/package.json +14 -13
@@ -13,17 +13,14 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
13
13
  var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
14
14
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
- var _typed = require("@deck.gl/core/typed");
17
- var _typed2 = require("@deck.gl/mesh-layers/typed");
18
- var _constants = _interopRequireDefault(require("@luma.gl/constants"));
19
- var _core = require("@luma.gl/core");
16
+ var _meshLayers = require("@deck.gl/mesh-layers");
20
17
  var _engine = require("@luma.gl/engine");
21
- var _rasterMeshLayerWebgl = _interopRequireDefault(require("./raster-mesh-layer-webgl1.fs"));
22
- var _rasterMeshLayerWebgl2 = _interopRequireDefault(require("./raster-mesh-layer-webgl1.vs"));
23
- var _rasterMeshLayerWebgl3 = _interopRequireDefault(require("./raster-mesh-layer-webgl2.fs"));
24
- var _rasterMeshLayerWebgl4 = _interopRequireDefault(require("./raster-mesh-layer-webgl2.vs"));
18
+ var _rasterMeshLayerShaders = require("./raster-mesh-layer-shaders");
19
+ var _rasterLayerShaders = require("../raster-layer/raster-layer-shaders");
25
20
  var _images = require("../images");
26
21
  var _util = require("../util");
22
+ var _pipelineValidationPatch = require("../pipeline-validation-patch");
23
+ var _constants = require("@kepler.gl/constants");
27
24
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
28
25
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
29
26
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -34,7 +31,9 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
34
31
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
35
32
  // Copyright contributors to the kepler.gl project
36
33
  function validateGeometryAttributes(attributes) {
37
- _typed.log.assert(attributes.positions || attributes.POSITION, 'RasterMeshLayer requires "postions" or "POSITION" attribute in mesh property.');
34
+ if (!(attributes.positions || attributes.POSITION)) {
35
+ throw new Error('RasterMeshLayer requires "positions" or "POSITION" attribute in mesh property.');
36
+ }
38
37
  }
39
38
 
40
39
  /*
@@ -42,21 +41,21 @@ function validateGeometryAttributes(attributes) {
42
41
  * @returns geometry
43
42
  */
44
43
  function getGeometry(data) {
45
- if (data.attributes) {
44
+ if ('attributes' in data && data.attributes) {
46
45
  validateGeometryAttributes(data.attributes);
47
- if (data instanceof _core.Geometry) {
46
+ if (data instanceof _engine.Geometry) {
48
47
  return data;
49
48
  }
50
- return new _core.Geometry(data);
51
- } else if (data.positions || data.POSITION) {
49
+ return new _engine.Geometry(data);
50
+ } else if ('positions' in data || 'POSITION' in data) {
52
51
  validateGeometryAttributes(data);
53
- return new _core.Geometry({
52
+ return new _engine.Geometry({
54
53
  attributes: data
55
54
  });
56
55
  }
57
56
  throw Error('Invalid mesh');
58
57
  }
59
- var defaultProps = _objectSpread(_objectSpread({}, _typed2.SimpleMeshLayer.defaultProps), {}, {
58
+ var defaultProps = _objectSpread(_objectSpread({}, _meshLayers.SimpleMeshLayer.defaultProps), {}, {
60
59
  modules: {
61
60
  type: 'array',
62
61
  value: [],
@@ -71,35 +70,30 @@ var defaultProps = _objectSpread(_objectSpread({}, _typed2.SimpleMeshLayer.defau
71
70
  type: 'object',
72
71
  value: {},
73
72
  compare: true
73
+ },
74
+ onRedrawNeeded: {
75
+ type: 'function',
76
+ value: null,
77
+ compare: false
74
78
  }
75
79
  });
76
80
  var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLayer) {
77
81
  function RasterMeshLayer() {
82
+ var _this;
78
83
  (0, _classCallCheck2["default"])(this, RasterMeshLayer);
79
- return _callSuper(this, RasterMeshLayer, arguments);
84
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
85
+ args[_key] = arguments[_key];
86
+ }
87
+ _this = _callSuper(this, RasterMeshLayer, [].concat(args));
88
+ (0, _defineProperty2["default"])(_this, "_redrawScheduled", false);
89
+ return _this;
80
90
  }
81
91
  (0, _inherits2["default"])(RasterMeshLayer, _SimpleMeshLayer);
82
92
  return (0, _createClass2["default"])(RasterMeshLayer, [{
83
93
  key: "initializeState",
84
94
  value: function initializeState() {
85
- var gl = this.context.gl;
86
- var programManager = _engine.ProgramManager.getDefaultProgramManager(gl);
87
- var fsStr1 = 'fs:DECKGL_MUTATE_COLOR(inout vec4 image, in vec2 coord)';
88
- var fsStr2 = 'fs:DECKGL_CREATE_COLOR(inout vec4 image, in vec2 coord)';
89
-
90
- // Only initialize shader hook functions _once globally_
91
- // Since the program manager is shared across all layers, but many layers
92
- // might be created, this solves the performance issue of always adding new
93
- // hook functions.
94
- if (!programManager._hookFunctions.includes(fsStr1)) {
95
- programManager.addShaderHook(fsStr1);
96
- }
97
- if (!programManager._hookFunctions.includes(fsStr2)) {
98
- programManager.addShaderHook(fsStr2);
99
- }
100
-
101
- // images is a mapping from keys to Texture2D objects. The keys should match
102
- // names of uniforms in shader modules
95
+ (0, _pipelineValidationPatch.patchPipelineValidation)();
96
+ (0, _rasterLayerShaders.ensureRasterHooksRegistered)();
103
97
  this.setState({
104
98
  images: {}
105
99
  });
@@ -108,35 +102,14 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
108
102
  }, {
109
103
  key: "getShaders",
110
104
  value: function getShaders() {
111
- var gl = this.context.gl;
112
105
  var _this$props$modules = this.props.modules,
113
106
  modules = _this$props$modules === void 0 ? [] : _this$props$modules;
114
- var webgl2 = (0, _core.isWebGL2)(gl);
115
-
116
- // Choose webgl version for module
117
- // If fs2 or fs1 keys exist, prefer them, but fall back to fs, so that
118
- // version-independent modules don't need to care
119
- var _iterator = _createForOfIteratorHelper(modules),
120
- _step;
121
- try {
122
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
123
- var module = _step.value;
124
- module.fs = webgl2 ? module.fs2 || module.fs : module.fs1 || module.fs;
125
-
126
- // Sampler type is always float for WebGL1
127
- if (!webgl2 && module.defines) {
128
- module.defines.SAMPLER_TYPE = 'sampler2D';
129
- }
130
- }
131
- } catch (err) {
132
- _iterator.e(err);
133
- } finally {
134
- _iterator.f();
135
- }
136
- return _objectSpread(_objectSpread({}, _superPropGet(RasterMeshLayer, "getShaders", this, 3)([])), {}, {
137
- vs: webgl2 ? _rasterMeshLayerWebgl4["default"] : _rasterMeshLayerWebgl2["default"],
138
- fs: webgl2 ? _rasterMeshLayerWebgl3["default"] : _rasterMeshLayerWebgl["default"],
139
- modules: [_typed.project32, _typed.phongLighting].concat((0, _toConsumableArray2["default"])(modules))
107
+ var lumaModules = (0, _rasterLayerShaders.prepareLumaModules)(modules);
108
+ var parentShaders = _superPropGet(RasterMeshLayer, "getShaders", this, 3)([]);
109
+ return _objectSpread(_objectSpread({}, parentShaders), {}, {
110
+ vs: (0, _rasterMeshLayerShaders.buildRasterMeshVertexShader)(),
111
+ fs: (0, _rasterMeshLayerShaders.buildRasterMeshFragmentShader)(),
112
+ modules: [].concat((0, _toConsumableArray2["default"])(parentShaders.modules || []), [_rasterMeshLayerShaders.rasterMeshUniforms], (0, _toConsumableArray2["default"])(lumaModules))
140
113
  });
141
114
  }
142
115
 
@@ -156,12 +129,11 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
156
129
  }]);
157
130
  var modules = props && props.modules;
158
131
  var oldModules = oldProps && oldProps.modules;
159
-
160
- // If the list of modules changed, need to recompile the shaders
161
132
  if (props.mesh !== oldProps.mesh || changeFlags.extensionsChanged || !(0, _util.modulesEqual)(modules, oldModules)) {
162
133
  var _this$getAttributeMan;
163
134
  if (this.state.model) {
164
- this.state.model["delete"]();
135
+ var _this$state$model$des, _this$state$model;
136
+ (_this$state$model$des = (_this$state$model = this.state.model).destroy) === null || _this$state$model$des === void 0 || _this$state$model$des.call(_this$state$model);
165
137
  }
166
138
  if (props.mesh) {
167
139
  this.state.model = this.getModel(props.mesh);
@@ -179,7 +151,8 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
179
151
  });
180
152
  }
181
153
  if (this.state.model) {
182
- this.state.model.setDrawMode(this.props.wireframe ? _constants["default"].LINE_STRIP : _constants["default"].TRIANGLES);
154
+ var _this$state$model$set, _this$state$model2;
155
+ (_this$state$model$set = (_this$state$model2 = this.state.model).setTopology) === null || _this$state$model$set === void 0 || _this$state$model$set.call(_this$state$model2, this.props.wireframe ? _constants.TOPOLOGY.LINE_STRIP : _constants.TOPOLOGY.TRIANGLE_LIST);
183
156
  }
184
157
  }
185
158
  }, {
@@ -188,9 +161,11 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
188
161
  var props = _ref.props,
189
162
  oldProps = _ref.oldProps;
190
163
  var images = this.state.images;
191
- var gl = this.context.gl;
164
+ var device = this.context.device;
165
+ var gl = (device === null || device === void 0 ? void 0 : device.gl) || this.context.gl;
192
166
  var newImages = (0, _images.loadImages)({
193
167
  gl: gl,
168
+ device: device,
194
169
  images: images,
195
170
  imagesData: props.images,
196
171
  oldImagesData: oldProps.images
@@ -203,24 +178,72 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
203
178
  }
204
179
  }, {
205
180
  key: "draw",
206
- value: function draw(_ref2) {
207
- var uniforms = _ref2.uniforms;
181
+ value: function draw(_opts) {
182
+ var _this$props$opacity;
208
183
  var _this$state = this.state,
209
184
  model = _this$state.model,
210
185
  images = _this$state.images;
211
186
  var moduleProps = this.props.moduleProps;
212
-
213
- // Render the image
214
187
  if (!model || !images || Object.keys(images).length === 0 || !Object.values(images).every(function (item) {
215
188
  return item;
216
189
  })) {
217
190
  return;
218
191
  }
219
- var sizeScale = this.props.sizeScale;
220
- model.setUniforms(Object.assign({}, uniforms, {
221
- sizeScale: sizeScale,
222
- flatShading: !this.state.hasNormals
223
- })).updateModuleSettings(_objectSpread(_objectSpread({}, moduleProps), images)).draw();
192
+
193
+ // Set mesh-specific UBO uniforms
194
+ model.shaderInputs.setProps({
195
+ rasterMesh: {
196
+ meshOpacity: (_this$props$opacity = this.props.opacity) !== null && _this$props$opacity !== void 0 ? _this$props$opacity : 1,
197
+ meshFlatShading: !this.state.hasNormals ? 1.0 : 0.0
198
+ }
199
+ });
200
+
201
+ // Set props for each custom module through shaderInputs.
202
+ // Call getUniforms ourselves to skip inactive modules (null return),
203
+ // avoiding the ShaderInputs null-fallback that would dump all textures
204
+ // into bindings every frame.
205
+ var allModuleProps = _objectSpread(_objectSpread({}, moduleProps), images);
206
+ var modules = this.props.modules || [];
207
+ var _iterator = _createForOfIteratorHelper(modules),
208
+ _step;
209
+ try {
210
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
211
+ var mod = _step.value;
212
+ if (mod.getUniforms) {
213
+ var result = mod.getUniforms(allModuleProps);
214
+ if (result) {
215
+ model.shaderInputs.setProps((0, _defineProperty2["default"])({}, mod.name, result));
216
+ }
217
+ }
218
+ }
219
+ } catch (err) {
220
+ _iterator.e(err);
221
+ } finally {
222
+ _iterator.f();
223
+ }
224
+ var drawSuccess = model.draw(this.context.renderPass);
225
+ if (!drawSuccess) {
226
+ this._scheduleRedraw();
227
+ }
228
+ }
229
+ }, {
230
+ key: "_scheduleRedraw",
231
+ value: function _scheduleRedraw() {
232
+ var _this2 = this;
233
+ if (this._redrawScheduled) return;
234
+ this._redrawScheduled = true;
235
+ requestAnimationFrame(function () {
236
+ var _this2$context$layerM;
237
+ _this2._redrawScheduled = false;
238
+ if (_this2.context.deck) {
239
+ // @ts-expect-error accessing private deck.gl property
240
+ _this2.context.deck._needsRedraw = 'RasterMeshLayer pipeline pending';
241
+ }
242
+ (_this2$context$layerM = _this2.context.layerManager) === null || _this2$context$layerM === void 0 || _this2$context$layerM.setNeedsRedraw('RasterMeshLayer pipeline pending');
243
+ if (typeof _this2.props.onRedrawNeeded === 'function') {
244
+ _this2.props.onRedrawNeeded();
245
+ }
246
+ });
224
247
  }
225
248
  }, {
226
249
  key: "finalizeState",
@@ -231,10 +254,12 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
231
254
  var image = _Object$values[_i];
232
255
  if (Array.isArray(image)) {
233
256
  image.map(function (x) {
234
- return x && x["delete"]();
257
+ var _x$delete;
258
+ return x && (x.destroy ? x.destroy() : (_x$delete = x["delete"]) === null || _x$delete === void 0 ? void 0 : _x$delete.call(x));
235
259
  });
236
260
  } else if (image) {
237
- image["delete"]();
261
+ var _image$delete;
262
+ image.destroy ? image.destroy() : (_image$delete = image["delete"]) === null || _image$delete === void 0 ? void 0 : _image$delete.call(image);
238
263
  }
239
264
  }
240
265
  }
@@ -242,8 +267,8 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
242
267
  }, {
243
268
  key: "getModel",
244
269
  value: function getModel(mesh) {
245
- var gl = this.context.gl;
246
- var model = new _core.Model(gl, Object.assign({}, this.getShaders(), {
270
+ var device = this.context.device || this.context.gl;
271
+ var model = new _engine.Model(device, Object.assign({}, this.getShaders(), {
247
272
  id: this.props.id,
248
273
  geometry: getGeometry(mesh),
249
274
  isInstanced: false
@@ -251,7 +276,7 @@ var RasterMeshLayer = exports["default"] = /*#__PURE__*/function (_SimpleMeshLay
251
276
  return model;
252
277
  }
253
278
  }]);
254
- }(_typed2.SimpleMeshLayer);
279
+ }(_meshLayers.SimpleMeshLayer);
255
280
  RasterMeshLayer.layerName = 'RasterMeshLayer';
256
281
  RasterMeshLayer.defaultProps = defaultProps;
257
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZWQiLCJyZXF1aXJlIiwiX3R5cGVkMiIsIl9jb25zdGFudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NvcmUiLCJfZW5naW5lIiwiX3Jhc3Rlck1lc2hMYXllcldlYmdsIiwiX3Jhc3Rlck1lc2hMYXllcldlYmdsMiIsIl9yYXN0ZXJNZXNoTGF5ZXJXZWJnbDMiLCJfcmFzdGVyTWVzaExheWVyV2ViZ2w0IiwiX2ltYWdlcyIsIl91dGlsIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzIiwiYXR0cmlidXRlcyIsImxvZyIsImFzc2VydCIsInBvc2l0aW9ucyIsIlBPU0lUSU9OIiwiZ2V0R2VvbWV0cnkiLCJkYXRhIiwiR2VvbWV0cnkiLCJFcnJvciIsImRlZmF1bHRQcm9wcyIsIlNpbXBsZU1lc2hMYXllciIsIm1vZHVsZXMiLCJ0eXBlIiwiY29tcGFyZSIsImltYWdlcyIsIm1vZHVsZVByb3BzIiwiUmFzdGVyTWVzaExheWVyIiwiZXhwb3J0cyIsIl9TaW1wbGVNZXNoTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJpbml0aWFsaXplU3RhdGUiLCJnbCIsImNvbnRleHQiLCJwcm9ncmFtTWFuYWdlciIsIlByb2dyYW1NYW5hZ2VyIiwiZ2V0RGVmYXVsdFByb2dyYW1NYW5hZ2VyIiwiZnNTdHIxIiwiZnNTdHIyIiwiX2hvb2tGdW5jdGlvbnMiLCJpbmNsdWRlcyIsImFkZFNoYWRlckhvb2siLCJzZXRTdGF0ZSIsImdldFNoYWRlcnMiLCJfdGhpcyRwcm9wcyRtb2R1bGVzIiwicHJvcHMiLCJ3ZWJnbDIiLCJpc1dlYkdMMiIsIl9pdGVyYXRvciIsIl9zdGVwIiwibW9kdWxlIiwiZnMiLCJmczIiLCJmczEiLCJkZWZpbmVzIiwiU0FNUExFUl9UWVBFIiwiZXJyIiwidnMiLCJ2c1dlYkdMMiIsInZzV2ViR0wxIiwiZnNXZWJHTDIiLCJmc1dlYkdMMSIsInByb2plY3QzMiIsInBob25nTGlnaHRpbmciLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwidXBkYXRlU3RhdGUiLCJwYXJhbXMiLCJvbGRQcm9wcyIsImNoYW5nZUZsYWdzIiwib2xkTW9kdWxlcyIsIm1lc2giLCJleHRlbnNpb25zQ2hhbmdlZCIsIm1vZHVsZXNFcXVhbCIsIl90aGlzJGdldEF0dHJpYnV0ZU1hbiIsInN0YXRlIiwibW9kZWwiLCJnZXRNb2RlbCIsImhhc05vcm1hbHMiLCJOT1JNQUwiLCJub3JtYWxzIiwiZ2V0QXR0cmlidXRlTWFuYWdlciIsImludmFsaWRhdGVBbGwiLCJ1cGRhdGVJbWFnZXMiLCJzZXREcmF3TW9kZSIsIndpcmVmcmFtZSIsIkdMIiwiTElORV9TVFJJUCIsIlRSSUFOR0xFUyIsIl9yZWYiLCJuZXdJbWFnZXMiLCJsb2FkSW1hZ2VzIiwiaW1hZ2VzRGF0YSIsIm9sZEltYWdlc0RhdGEiLCJkcmF3IiwiX3JlZjIiLCJ1bmlmb3JtcyIsIl90aGlzJHN0YXRlIiwidmFsdWVzIiwiZXZlcnkiLCJpdGVtIiwic2l6ZVNjYWxlIiwic2V0VW5pZm9ybXMiLCJhc3NpZ24iLCJmbGF0U2hhZGluZyIsInVwZGF0ZU1vZHVsZVNldHRpbmdzIiwiZmluYWxpemVTdGF0ZSIsIl9pIiwiX09iamVjdCR2YWx1ZXMiLCJpbWFnZSIsIm1hcCIsIngiLCJNb2RlbCIsImlkIiwiZ2VvbWV0cnkiLCJpc0luc3RhbmNlZCIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yYXN0ZXIvcmFzdGVyLW1lc2gtbGF5ZXIvcmFzdGVyLW1lc2gtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtwcm9qZWN0MzIsIHBob25nTGlnaHRpbmcsIGxvZywgVXBkYXRlUGFyYW1ldGVyc30gZnJvbSAnQGRlY2suZ2wvY29yZS90eXBlZCc7XG5pbXBvcnQge1NpbXBsZU1lc2hMYXllciwgU2ltcGxlTWVzaExheWVyUHJvcHN9IGZyb20gJ0BkZWNrLmdsL21lc2gtbGF5ZXJzL3R5cGVkJztcbmltcG9ydCBHTCBmcm9tICdAbHVtYS5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtNb2RlbCwgR2VvbWV0cnksIGlzV2ViR0wyfSBmcm9tICdAbHVtYS5nbC9jb3JlJztcbmltcG9ydCB7UHJvZ3JhbU1hbmFnZXJ9IGZyb20gJ0BsdW1hLmdsL2VuZ2luZSc7XG5pbXBvcnQge1VuaWZvcm1zT3B0aW9uc30gZnJvbSAnQGx1bWEuZ2wvd2ViZ2wvc3JjL2NsYXNzZXMvdW5pZm9ybXMnO1xuXG5pbXBvcnQgZnNXZWJHTDEgZnJvbSAnLi9yYXN0ZXItbWVzaC1sYXllci13ZWJnbDEuZnMnO1xuaW1wb3J0IHZzV2ViR0wxIGZyb20gJy4vcmFzdGVyLW1lc2gtbGF5ZXItd2ViZ2wxLnZzJztcbmltcG9ydCBmc1dlYkdMMiBmcm9tICcuL3Jhc3Rlci1tZXNoLWxheWVyLXdlYmdsMi5mcyc7XG5pbXBvcnQgdnNXZWJHTDIgZnJvbSAnLi9yYXN0ZXItbWVzaC1sYXllci13ZWJnbDIudnMnO1xuaW1wb3J0IHtsb2FkSW1hZ2VzfSBmcm9tICcuLi9pbWFnZXMnO1xuaW1wb3J0IHR5cGUge1Jhc3RlckxheWVyQWRkZWRQcm9wcywgSW1hZ2VTdGF0ZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHttb2R1bGVzRXF1YWx9IGZyb20gJy4uL3V0aWwnO1xuXG50eXBlIE1lc2ggPSBTaW1wbGVNZXNoTGF5ZXJQcm9wc1snbWVzaCddO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyhhdHRyaWJ1dGVzKSB7XG4gIGxvZy5hc3NlcnQoXG4gICAgYXR0cmlidXRlcy5wb3NpdGlvbnMgfHwgYXR0cmlidXRlcy5QT1NJVElPTixcbiAgICAnUmFzdGVyTWVzaExheWVyIHJlcXVpcmVzIFwicG9zdGlvbnNcIiBvciBcIlBPU0lUSU9OXCIgYXR0cmlidXRlIGluIG1lc2ggcHJvcGVydHkuJ1xuICApO1xufVxuXG4vKlxuICogQ29udmVydCBtZXNoIGRhdGEgaW50byBnZW9tZXRyeVxuICogQHJldHVybnMgZ2VvbWV0cnlcbiAqL1xuZnVuY3Rpb24gZ2V0R2VvbWV0cnkoZGF0YSk6IEdlb21ldHJ5IHtcbiAgaWYgKGRhdGEuYXR0cmlidXRlcykge1xuICAgIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcyk7XG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBHZW9tZXRyeSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBuZXcgR2VvbWV0cnkoZGF0YSk7XG4gIH0gZWxzZSBpZiAoZGF0YS5wb3NpdGlvbnMgfHwgZGF0YS5QT1NJVElPTikge1xuICAgIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGRhdGEpO1xuICAgIHJldHVybiBuZXcgR2VvbWV0cnkoe1xuICAgICAgYXR0cmlidXRlczogZGF0YVxuICAgIH0pO1xuICB9XG4gIHRocm93IEVycm9yKCdJbnZhbGlkIG1lc2gnKTtcbn1cblxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAuLi5TaW1wbGVNZXNoTGF5ZXIuZGVmYXVsdFByb3BzLFxuICBtb2R1bGVzOiB7dHlwZTogJ2FycmF5JywgdmFsdWU6IFtdLCBjb21wYXJlOiB0cnVlfSxcbiAgaW1hZ2VzOiB7dHlwZTogJ29iamVjdCcsIHZhbHVlOiB7fSwgY29tcGFyZTogdHJ1ZX0sXG4gIG1vZHVsZVByb3BzOiB7dHlwZTogJ29iamVjdCcsIHZhbHVlOiB7fSwgY29tcGFyZTogdHJ1ZX1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhc3Rlck1lc2hMYXllciBleHRlbmRzIFNpbXBsZU1lc2hMYXllcjxhbnksIFJhc3RlckxheWVyQWRkZWRQcm9wcz4ge1xuICBkZWNsYXJlIHN0YXRlOiBTaW1wbGVNZXNoTGF5ZXI8UmFzdGVyTGF5ZXJBZGRlZFByb3BzPlsnc3RhdGUnXSAmIHtcbiAgICBpbWFnZXM6IEltYWdlU3RhdGU7XG4gIH07XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHtnbH0gPSB0aGlzLmNvbnRleHQ7XG4gICAgY29uc3QgcHJvZ3JhbU1hbmFnZXIgPSBQcm9ncmFtTWFuYWdlci5nZXREZWZhdWx0UHJvZ3JhbU1hbmFnZXIoZ2wpO1xuXG4gICAgY29uc3QgZnNTdHIxID0gJ2ZzOkRFQ0tHTF9NVVRBVEVfQ09MT1IoaW5vdXQgdmVjNCBpbWFnZSwgaW4gdmVjMiBjb29yZCknO1xuICAgIGNvbnN0IGZzU3RyMiA9ICdmczpERUNLR0xfQ1JFQVRFX0NPTE9SKGlub3V0IHZlYzQgaW1hZ2UsIGluIHZlYzIgY29vcmQpJztcblxuICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSBzaGFkZXIgaG9vayBmdW5jdGlvbnMgX29uY2UgZ2xvYmFsbHlfXG4gICAgLy8gU2luY2UgdGhlIHByb2dyYW0gbWFuYWdlciBpcyBzaGFyZWQgYWNyb3NzIGFsbCBsYXllcnMsIGJ1dCBtYW55IGxheWVyc1xuICAgIC8vIG1pZ2h0IGJlIGNyZWF0ZWQsIHRoaXMgc29sdmVzIHRoZSBwZXJmb3JtYW5jZSBpc3N1ZSBvZiBhbHdheXMgYWRkaW5nIG5ld1xuICAgIC8vIGhvb2sgZnVuY3Rpb25zLlxuICAgIGlmICghcHJvZ3JhbU1hbmFnZXIuX2hvb2tGdW5jdGlvbnMuaW5jbHVkZXMoZnNTdHIxKSkge1xuICAgICAgcHJvZ3JhbU1hbmFnZXIuYWRkU2hhZGVySG9vayhmc1N0cjEpO1xuICAgIH1cbiAgICBpZiAoIXByb2dyYW1NYW5hZ2VyLl9ob29rRnVuY3Rpb25zLmluY2x1ZGVzKGZzU3RyMikpIHtcbiAgICAgIHByb2dyYW1NYW5hZ2VyLmFkZFNoYWRlckhvb2soZnNTdHIyKTtcbiAgICB9XG5cbiAgICAvLyBpbWFnZXMgaXMgYSBtYXBwaW5nIGZyb20ga2V5cyB0byBUZXh0dXJlMkQgb2JqZWN0cy4gVGhlIGtleXMgc2hvdWxkIG1hdGNoXG4gICAgLy8gbmFtZXMgb2YgdW5pZm9ybXMgaW4gc2hhZGVyIG1vZHVsZXNcbiAgICB0aGlzLnNldFN0YXRlKHtpbWFnZXM6IHt9fSk7XG5cbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKTogYW55IHtcbiAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IHttb2R1bGVzID0gW119ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB3ZWJnbDIgPSBpc1dlYkdMMihnbCk7XG5cbiAgICAvLyBDaG9vc2Ugd2ViZ2wgdmVyc2lvbiBmb3IgbW9kdWxlXG4gICAgLy8gSWYgZnMyIG9yIGZzMSBrZXlzIGV4aXN0LCBwcmVmZXIgdGhlbSwgYnV0IGZhbGwgYmFjayB0byBmcywgc28gdGhhdFxuICAgIC8vIHZlcnNpb24taW5kZXBlbmRlbnQgbW9kdWxlcyBkb24ndCBuZWVkIHRvIGNhcmVcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG4gICAgICBtb2R1bGUuZnMgPSB3ZWJnbDIgPyBtb2R1bGUuZnMyIHx8IG1vZHVsZS5mcyA6IG1vZHVsZS5mczEgfHwgbW9kdWxlLmZzO1xuXG4gICAgICAvLyBTYW1wbGVyIHR5cGUgaXMgYWx3YXlzIGZsb2F0IGZvciBXZWJHTDFcbiAgICAgIGlmICghd2ViZ2wyICYmIG1vZHVsZS5kZWZpbmVzKSB7XG4gICAgICAgIG1vZHVsZS5kZWZpbmVzLlNBTVBMRVJfVFlQRSA9ICdzYW1wbGVyMkQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdXBlci5nZXRTaGFkZXJzKCksXG4gICAgICB2czogd2ViZ2wyID8gdnNXZWJHTDIgOiB2c1dlYkdMMSxcbiAgICAgIGZzOiB3ZWJnbDIgPyBmc1dlYkdMMiA6IGZzV2ViR0wxLFxuICAgICAgbW9kdWxlczogW3Byb2plY3QzMiwgcGhvbmdMaWdodGluZywgLi4ubW9kdWxlc11cbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgdXBkYXRlU3RhdGUocGFyYW1zOiBVcGRhdGVQYXJhbWV0ZXJzPFNpbXBsZU1lc2hMYXllcjxhbnksIFJhc3RlckxheWVyQWRkZWRQcm9wcz4+KTogdm9pZCB7XG4gICAgY29uc3Qge3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3MsIGNvbnRleHR9ID0gcGFyYW1zO1xuICAgIHN1cGVyLnVwZGF0ZVN0YXRlKHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzLCBjb250ZXh0fSk7XG5cbiAgICBjb25zdCBtb2R1bGVzID0gcHJvcHMgJiYgcHJvcHMubW9kdWxlcztcbiAgICBjb25zdCBvbGRNb2R1bGVzID0gb2xkUHJvcHMgJiYgb2xkUHJvcHMubW9kdWxlcztcblxuICAgIC8vIElmIHRoZSBsaXN0IG9mIG1vZHVsZXMgY2hhbmdlZCwgbmVlZCB0byByZWNvbXBpbGUgdGhlIHNoYWRlcnNcbiAgICBpZiAoXG4gICAgICBwcm9wcy5tZXNoICE9PSBvbGRQcm9wcy5tZXNoIHx8XG4gICAgICBjaGFuZ2VGbGFncy5leHRlbnNpb25zQ2hhbmdlZCB8fFxuICAgICAgIW1vZHVsZXNFcXVhbChtb2R1bGVzLCBvbGRNb2R1bGVzKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5tb2RlbC5kZWxldGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5tZXNoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUubW9kZWwgPSB0aGlzLmdldE1vZGVsKHByb3BzLm1lc2ggYXMgTWVzaCk7XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IChwcm9wcy5tZXNoIGFzIGFueSkuYXR0cmlidXRlcyB8fCBwcm9wcy5tZXNoO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNOb3JtYWxzOiBCb29sZWFuKGF0dHJpYnV0ZXMuTk9STUFMIHx8IGF0dHJpYnV0ZXMubm9ybWFscylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdldEF0dHJpYnV0ZU1hbmFnZXIoKT8uaW52YWxpZGF0ZUFsbCgpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcyAmJiBwcm9wcy5pbWFnZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlSW1hZ2VzKHtwcm9wcywgb2xkUHJvcHN9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5tb2RlbCkge1xuICAgICAgdGhpcy5zdGF0ZS5tb2RlbC5zZXREcmF3TW9kZSh0aGlzLnByb3BzLndpcmVmcmFtZSA/IEdMLkxJTkVfU1RSSVAgOiBHTC5UUklBTkdMRVMpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUltYWdlcyh7XG4gICAgcHJvcHMsXG4gICAgb2xkUHJvcHNcbiAgfToge1xuICAgIHByb3BzOiBSYXN0ZXJMYXllckFkZGVkUHJvcHM7XG4gICAgb2xkUHJvcHM6IFJhc3RlckxheWVyQWRkZWRQcm9wcztcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IHtpbWFnZXN9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgY29uc3QgbmV3SW1hZ2VzID0gbG9hZEltYWdlcyh7XG4gICAgICBnbCxcbiAgICAgIGltYWdlcyxcbiAgICAgIGltYWdlc0RhdGE6IHByb3BzLmltYWdlcyxcbiAgICAgIG9sZEltYWdlc0RhdGE6IG9sZFByb3BzLmltYWdlc1xuICAgIH0pO1xuXG4gICAgaWYgKG5ld0ltYWdlcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7aW1hZ2VzOiBuZXdJbWFnZXN9KTtcbiAgICB9XG4gIH1cblxuICBkcmF3KHt1bmlmb3Jtc306IFVuaWZvcm1zT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHttb2RlbCwgaW1hZ2VzfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qge21vZHVsZVByb3BzfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBSZW5kZXIgdGhlIGltYWdlXG4gICAgaWYgKFxuICAgICAgIW1vZGVsIHx8XG4gICAgICAhaW1hZ2VzIHx8XG4gICAgICBPYmplY3Qua2V5cyhpbWFnZXMpLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgIU9iamVjdC52YWx1ZXMoaW1hZ2VzKS5ldmVyeShpdGVtID0+IGl0ZW0pXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge3NpemVTY2FsZX0gPSB0aGlzLnByb3BzO1xuXG4gICAgbW9kZWxcbiAgICAgIC5zZXRVbmlmb3JtcyhcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgdW5pZm9ybXMsIHtcbiAgICAgICAgICBzaXplU2NhbGUsXG4gICAgICAgICAgZmxhdFNoYWRpbmc6ICF0aGlzLnN0YXRlLmhhc05vcm1hbHNcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC51cGRhdGVNb2R1bGVTZXR0aW5ncyh7XG4gICAgICAgIC4uLm1vZHVsZVByb3BzLFxuICAgICAgICAuLi5pbWFnZXNcbiAgICAgIH0pXG4gICAgICAuZHJhdygpO1xuICB9XG5cbiAgZmluYWxpemVTdGF0ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5maW5hbGl6ZVN0YXRlKHRoaXMuY29udGV4dCk7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5pbWFnZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnN0YXRlLmltYWdlcykpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW1hZ2UpKSB7XG4gICAgICAgICAgaW1hZ2UubWFwKHggPT4geCAmJiB4LmRlbGV0ZSgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbWFnZSkge1xuICAgICAgICAgIGltYWdlLmRlbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1vZGVsKG1lc2g6IE1lc2gpOiBNb2RlbCB7XG4gICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcblxuICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsKFxuICAgICAgZ2wsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmdldFNoYWRlcnMoKSwge1xuICAgICAgICBpZDogdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgZ2VvbWV0cnk6IGdldEdlb21ldHJ5KG1lc2gpLFxuICAgICAgICBpc0luc3RhbmNlZDogZmFsc2VcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxufVxuXG5SYXN0ZXJNZXNoTGF5ZXIubGF5ZXJOYW1lID0gJ1Jhc3Rlck1lc2hMYXllcic7XG5SYXN0ZXJNZXNoTGF5ZXIuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFHQSxJQUFBTSxxQkFBQSxHQUFBSCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU8sc0JBQUEsR0FBQUosc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFRLHNCQUFBLEdBQUFMLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBUyxzQkFBQSxHQUFBTixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVUsT0FBQSxHQUFBVixPQUFBO0FBRUEsSUFBQVcsS0FBQSxHQUFBWCxPQUFBO0FBQXFDLFNBQUFZLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxNQUFBQyxDQUFBLElBQUFELENBQUEsdUJBQUFBLENBQUEsQ0FBQVEsTUFBQSxJQUFBTixDQUFBLEtBQUFGLENBQUEsR0FBQUUsQ0FBQSxPQUFBTyxFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQSxFQUFBLFdBQUFILEVBQUEsSUFBQVQsQ0FBQSxDQUFBUSxNQUFBLEtBQUFLLElBQUEsV0FBQUEsSUFBQSxNQUFBQyxLQUFBLEVBQUFkLENBQUEsQ0FBQVMsRUFBQSxVQUFBUixDQUFBLFdBQUFBLEVBQUFELENB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
282
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWVzaExheWVycyIsInJlcXVpcmUiLCJfZW5naW5lIiwiX3Jhc3Rlck1lc2hMYXllclNoYWRlcnMiLCJfcmFzdGVyTGF5ZXJTaGFkZXJzIiwiX2ltYWdlcyIsIl91dGlsIiwiX3BpcGVsaW5lVmFsaWRhdGlvblBhdGNoIiwiX2NvbnN0YW50cyIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJwb3NpdGlvbnMiLCJQT1NJVElPTiIsIkVycm9yIiwiZ2V0R2VvbWV0cnkiLCJkYXRhIiwiR2VvbWV0cnkiLCJkZWZhdWx0UHJvcHMiLCJTaW1wbGVNZXNoTGF5ZXIiLCJtb2R1bGVzIiwidHlwZSIsImNvbXBhcmUiLCJpbWFnZXMiLCJtb2R1bGVQcm9wcyIsIm9uUmVkcmF3TmVlZGVkIiwiUmFzdGVyTWVzaExheWVyIiwiZXhwb3J0cyIsIl9TaW1wbGVNZXNoTGF5ZXIiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIl9rZXkiLCJjb25jYXQiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImluaXRpYWxpemVTdGF0ZSIsInBhdGNoUGlwZWxpbmVWYWxpZGF0aW9uIiwiZW5zdXJlUmFzdGVySG9va3NSZWdpc3RlcmVkIiwic2V0U3RhdGUiLCJnZXRTaGFkZXJzIiwiX3RoaXMkcHJvcHMkbW9kdWxlcyIsInByb3BzIiwibHVtYU1vZHVsZXMiLCJwcmVwYXJlTHVtYU1vZHVsZXMiLCJwYXJlbnRTaGFkZXJzIiwidnMiLCJidWlsZFJhc3Rlck1lc2hWZXJ0ZXhTaGFkZXIiLCJmcyIsImJ1aWxkUmFzdGVyTWVzaEZyYWdtZW50U2hhZGVyIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJhc3Rlck1lc2hVbmlmb3JtcyIsInVwZGF0ZVN0YXRlIiwicGFyYW1zIiwib2xkUHJvcHMiLCJjaGFuZ2VGbGFncyIsImNvbnRleHQiLCJvbGRNb2R1bGVzIiwibWVzaCIsImV4dGVuc2lvbnNDaGFuZ2VkIiwibW9kdWxlc0VxdWFsIiwiX3RoaXMkZ2V0QXR0cmlidXRlTWFuIiwic3RhdGUiLCJtb2RlbCIsIl90aGlzJHN0YXRlJG1vZGVsJGRlcyIsIl90aGlzJHN0YXRlJG1vZGVsIiwiZGVzdHJveSIsImdldE1vZGVsIiwiaGFzTm9ybWFscyIsIk5PUk1BTCIsIm5vcm1hbHMiLCJnZXRBdHRyaWJ1dGVNYW5hZ2VyIiwiaW52YWxpZGF0ZUFsbCIsInVwZGF0ZUltYWdlcyIsIl90aGlzJHN0YXRlJG1vZGVsJHNldCIsIl90aGlzJHN0YXRlJG1vZGVsMiIsInNldFRvcG9sb2d5Iiwid2lyZWZyYW1lIiwiVE9QT0xPR1kiLCJMSU5FX1NUUklQIiwiVFJJQU5HTEVfTElTVCIsIl9yZWYiLCJkZXZpY2UiLCJnbCIsIm5ld0ltYWdlcyIsImxvYWRJbWFnZXMiLCJpbWFnZXNEYXRhIiwib2xkSW1hZ2VzRGF0YSIsImRyYXciLCJfb3B0cyIsIl90aGlzJHByb3BzJG9wYWNpdHkiLCJfdGhpcyRzdGF0ZSIsInZhbHVlcyIsImV2ZXJ5IiwiaXRlbSIsInNoYWRlcklucHV0cyIsInNldFByb3BzIiwicmFzdGVyTWVzaCIsIm1lc2hPcGFjaXR5Iiwib3BhY2l0eSIsIm1lc2hGbGF0U2hhZGluZyIsImFsbE1vZHVsZVByb3BzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJtb2QiLCJnZXRVbmlmb3JtcyIsInJlc3VsdCIsImVyciIsImRyYXdTdWNjZXNzIiwicmVuZGVyUGFzcyIsIl9zY2hlZHVsZVJlZHJhdyIsIl90aGlzMiIsIl9yZWRyYXdTY2hlZHVsZWQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJfdGhpczIkY29udGV4dCRsYXllck0iLCJkZWNrIiwiX25lZWRzUmVkcmF3IiwibGF5ZXJNYW5hZ2VyIiwic2V0TmVlZHNSZWRyYXciLCJmaW5hbGl6ZVN0YXRlIiwiX2kiLCJfT2JqZWN0JHZhbHVlcyIsImltYWdlIiwibWFwIiwieCIsIl94JGRlbGV0ZSIsIl9pbWFnZSRkZWxldGUiLCJNb2RlbCIsImFzc2lnbiIsImlkIiwiZ2VvbWV0cnkiLCJpc0luc3RhbmNlZCIsImxheWVyTmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yYXN0ZXIvcmFzdGVyLW1lc2gtbGF5ZXIvcmFzdGVyLW1lc2gtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtVcGRhdGVQYXJhbWV0ZXJzfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7U2ltcGxlTWVzaExheWVyLCBTaW1wbGVNZXNoTGF5ZXJQcm9wc30gZnJvbSAnQGRlY2suZ2wvbWVzaC1sYXllcnMnO1xuaW1wb3J0IHtHZW9tZXRyeX0gZnJvbSAnQGx1bWEuZ2wvZW5naW5lJztcbmltcG9ydCB7TW9kZWx9IGZyb20gJ0BsdW1hLmdsL2VuZ2luZSc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkUmFzdGVyTWVzaEZyYWdtZW50U2hhZGVyLFxuICBidWlsZFJhc3Rlck1lc2hWZXJ0ZXhTaGFkZXIsXG4gIHJhc3Rlck1lc2hVbmlmb3Jtc1xufSBmcm9tICcuL3Jhc3Rlci1tZXNoLWxheWVyLXNoYWRlcnMnO1xuaW1wb3J0IHtcbiAgZW5zdXJlUmFzdGVySG9va3NSZWdpc3RlcmVkLFxuICBwcmVwYXJlTHVtYU1vZHVsZXNcbn0gZnJvbSAnLi4vcmFzdGVyLWxheWVyL3Jhc3Rlci1sYXllci1zaGFkZXJzJztcbmltcG9ydCB7bG9hZEltYWdlc30gZnJvbSAnLi4vaW1hZ2VzJztcbmltcG9ydCB0eXBlIHtSYXN0ZXJMYXllckFkZGVkUHJvcHMsIEltYWdlU3RhdGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7bW9kdWxlc0VxdWFsfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7cGF0Y2hQaXBlbGluZVZhbGlkYXRpb259IGZyb20gJy4uL3BpcGVsaW5lLXZhbGlkYXRpb24tcGF0Y2gnO1xuaW1wb3J0IHtUT1BPTE9HWX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG50eXBlIE1lc2ggPSBTaW1wbGVNZXNoTGF5ZXJQcm9wc1snbWVzaCddO1xuXG5pbnRlcmZhY2UgTWVzaERhdGEge1xuICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHBvc2l0aW9ucz86IHVua25vd247XG4gIFBPU0lUSU9OPzogdW5rbm93bjtcbiAgTk9STUFMPzogdW5rbm93bjtcbiAgbm9ybWFscz86IHVua25vd247XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gIGlmICghKGF0dHJpYnV0ZXMucG9zaXRpb25zIHx8IGF0dHJpYnV0ZXMuUE9TSVRJT04pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1Jhc3Rlck1lc2hMYXllciByZXF1aXJlcyBcInBvc2l0aW9uc1wiIG9yIFwiUE9TSVRJT05cIiBhdHRyaWJ1dGUgaW4gbWVzaCBwcm9wZXJ0eS4nXG4gICAgKTtcbiAgfVxufVxuXG4vKlxuICogQ29udmVydCBtZXNoIGRhdGEgaW50byBnZW9tZXRyeVxuICogQHJldHVybnMgZ2VvbWV0cnlcbiAqL1xuZnVuY3Rpb24gZ2V0R2VvbWV0cnkoZGF0YTogTWVzaERhdGEgfCBHZW9tZXRyeSk6IEdlb21ldHJ5IHtcbiAgaWYgKCdhdHRyaWJ1dGVzJyBpbiBkYXRhICYmIGRhdGEuYXR0cmlidXRlcykge1xuICAgIHZhbGlkYXRlR2VvbWV0cnlBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcyk7XG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBHZW9tZXRyeSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBuZXcgR2VvbWV0cnkoZGF0YSBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIEdlb21ldHJ5PlswXSk7XG4gIH0gZWxzZSBpZiAoJ3Bvc2l0aW9ucycgaW4gZGF0YSB8fCAnUE9TSVRJT04nIGluIGRhdGEpIHtcbiAgICB2YWxpZGF0ZUdlb21ldHJ5QXR0cmlidXRlcyhkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICByZXR1cm4gbmV3IEdlb21ldHJ5KHtcbiAgICAgIGF0dHJpYnV0ZXM6IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB9IGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgR2VvbWV0cnk+WzBdKTtcbiAgfVxuICB0aHJvdyBFcnJvcignSW52YWxpZCBtZXNoJyk7XG59XG5cbmNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgLi4uU2ltcGxlTWVzaExheWVyLmRlZmF1bHRQcm9wcyxcbiAgbW9kdWxlczoge3R5cGU6ICdhcnJheScsIHZhbHVlOiBbXSwgY29tcGFyZTogdHJ1ZX0sXG4gIGltYWdlczoge3R5cGU6ICdvYmplY3QnLCB2YWx1ZToge30sIGNvbXBhcmU6IHRydWV9LFxuICBtb2R1bGVQcm9wczoge3R5cGU6ICdvYmplY3QnLCB2YWx1ZToge30sIGNvbXBhcmU6IHRydWV9LFxuICBvblJlZHJhd05lZWRlZDoge3R5cGU6ICdmdW5jdGlvbicsIHZhbHVlOiBudWxsLCBjb21wYXJlOiBmYWxzZX1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJhc3Rlck1lc2hMYXllciBleHRlbmRzIFNpbXBsZU1lc2hMYXllcjxhbnksIFJhc3RlckxheWVyQWRkZWRQcm9wcz4ge1xuICBkZWNsYXJlIHN0YXRlOiBTaW1wbGVNZXNoTGF5ZXI8UmFzdGVyTGF5ZXJBZGRlZFByb3BzPlsnc3RhdGUnXSAmIHtcbiAgICBpbWFnZXM6IEltYWdlU3RhdGU7XG4gIH07XG5cbiAgX3JlZHJhd1NjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIGluaXRpYWxpemVTdGF0ZSgpOiB2b2lkIHtcbiAgICBwYXRjaFBpcGVsaW5lVmFsaWRhdGlvbigpO1xuICAgIGVuc3VyZVJhc3Rlckhvb2tzUmVnaXN0ZXJlZCgpO1xuICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlczoge319KTtcbiAgICBzdXBlci5pbml0aWFsaXplU3RhdGUoKTtcbiAgfVxuXG4gIGdldFNoYWRlcnMoKTogYW55IHtcbiAgICBjb25zdCB7bW9kdWxlcyA9IFtdfSA9IHRoaXMucHJvcHM7XG5cbiAgICBjb25zdCBsdW1hTW9kdWxlcyA9IHByZXBhcmVMdW1hTW9kdWxlcyhtb2R1bGVzKTtcbiAgICBjb25zdCBwYXJlbnRTaGFkZXJzID0gc3VwZXIuZ2V0U2hhZGVycygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnBhcmVudFNoYWRlcnMsXG4gICAgICB2czogYnVpbGRSYXN0ZXJNZXNoVmVydGV4U2hhZGVyKCksXG4gICAgICBmczogYnVpbGRSYXN0ZXJNZXNoRnJhZ21lbnRTaGFkZXIoKSxcbiAgICAgIG1vZHVsZXM6IFsuLi4ocGFyZW50U2hhZGVycy5tb2R1bGVzIHx8IFtdKSwgcmFzdGVyTWVzaFVuaWZvcm1zLCAuLi5sdW1hTW9kdWxlc11cbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgdXBkYXRlU3RhdGUocGFyYW1zOiBVcGRhdGVQYXJhbWV0ZXJzPFNpbXBsZU1lc2hMYXllcjxhbnksIFJhc3RlckxheWVyQWRkZWRQcm9wcz4+KTogdm9pZCB7XG4gICAgY29uc3Qge3Byb3BzLCBvbGRQcm9wcywgY2hhbmdlRmxhZ3MsIGNvbnRleHR9ID0gcGFyYW1zO1xuICAgIHN1cGVyLnVwZGF0ZVN0YXRlKHtwcm9wcywgb2xkUHJvcHMsIGNoYW5nZUZsYWdzLCBjb250ZXh0fSk7XG5cbiAgICBjb25zdCBtb2R1bGVzID0gcHJvcHMgJiYgcHJvcHMubW9kdWxlcztcbiAgICBjb25zdCBvbGRNb2R1bGVzID0gb2xkUHJvcHMgJiYgb2xkUHJvcHMubW9kdWxlcztcblxuICAgIGlmIChcbiAgICAgIHByb3BzLm1lc2ggIT09IG9sZFByb3BzLm1lc2ggfHxcbiAgICAgIGNoYW5nZUZsYWdzLmV4dGVuc2lvbnNDaGFuZ2VkIHx8XG4gICAgICAhbW9kdWxlc0VxdWFsKG1vZHVsZXMsIG9sZE1vZHVsZXMpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5tb2RlbCkge1xuICAgICAgICB0aGlzLnN0YXRlLm1vZGVsLmRlc3Ryb3k/LigpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLm1lc2gpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5tb2RlbCA9IHRoaXMuZ2V0TW9kZWwocHJvcHMubWVzaCBhcyBNZXNoKTtcblxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gKChwcm9wcy5tZXNoIGFzIE1lc2hEYXRhKS5hdHRyaWJ1dGVzIHx8IHByb3BzLm1lc2gpIGFzIE1lc2hEYXRhO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBoYXNOb3JtYWxzOiBCb29sZWFuKGF0dHJpYnV0ZXMuTk9STUFMIHx8IGF0dHJpYnV0ZXMubm9ybWFscylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdldEF0dHJpYnV0ZU1hbmFnZXIoKT8uaW52YWxpZGF0ZUFsbCgpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcyAmJiBwcm9wcy5pbWFnZXMpIHtcbiAgICAgIHRoaXMudXBkYXRlSW1hZ2VzKHtwcm9wcywgb2xkUHJvcHN9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5tb2RlbCkge1xuICAgICAgdGhpcy5zdGF0ZS5tb2RlbC5zZXRUb3BvbG9neT8uKFxuICAgICAgICB0aGlzLnByb3BzLndpcmVmcmFtZSA/IFRPUE9MT0dZLkxJTkVfU1RSSVAgOiBUT1BPTE9HWS5UUklBTkdMRV9MSVNUXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUltYWdlcyh7XG4gICAgcHJvcHMsXG4gICAgb2xkUHJvcHNcbiAgfToge1xuICAgIHByb3BzOiBSYXN0ZXJMYXllckFkZGVkUHJvcHM7XG4gICAgb2xkUHJvcHM6IFJhc3RlckxheWVyQWRkZWRQcm9wcztcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IHtpbWFnZXN9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBkZXZpY2UgPSB0aGlzLmNvbnRleHQuZGV2aWNlO1xuICAgIGNvbnN0IGdsID0gZGV2aWNlPy5nbCB8fCB0aGlzLmNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBuZXdJbWFnZXMgPSBsb2FkSW1hZ2VzKHtcbiAgICAgIGdsLFxuICAgICAgZGV2aWNlLFxuICAgICAgaW1hZ2VzLFxuICAgICAgaW1hZ2VzRGF0YTogcHJvcHMuaW1hZ2VzLFxuICAgICAgb2xkSW1hZ2VzRGF0YTogb2xkUHJvcHMuaW1hZ2VzXG4gICAgfSk7XG5cbiAgICBpZiAobmV3SW1hZ2VzKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtpbWFnZXM6IG5ld0ltYWdlc30pO1xuICAgIH1cbiAgfVxuXG4gIGRyYXcoX29wdHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgY29uc3Qge21vZGVsLCBpbWFnZXN9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7bW9kdWxlUHJvcHN9ID0gdGhpcy5wcm9wcztcblxuICAgIGlmIChcbiAgICAgICFtb2RlbCB8fFxuICAgICAgIWltYWdlcyB8fFxuICAgICAgT2JqZWN0LmtleXMoaW1hZ2VzKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICFPYmplY3QudmFsdWVzKGltYWdlcykuZXZlcnkoaXRlbSA9PiBpdGVtKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNldCBtZXNoLXNwZWNpZmljIFVCTyB1bmlmb3Jtc1xuICAgIG1vZGVsLnNoYWRlcklucHV0cy5zZXRQcm9wcyh7XG4gICAgICByYXN0ZXJNZXNoOiB7XG4gICAgICAgIG1lc2hPcGFjaXR5OiB0aGlzLnByb3BzLm9wYWNpdHkgPz8gMSxcbiAgICAgICAgbWVzaEZsYXRTaGFkaW5nOiAhdGhpcy5zdGF0ZS5oYXNOb3JtYWxzID8gMS4wIDogMC4wXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTZXQgcHJvcHMgZm9yIGVhY2ggY3VzdG9tIG1vZHVsZSB0aHJvdWdoIHNoYWRlcklucHV0cy5cbiAgICAvLyBDYWxsIGdldFVuaWZvcm1zIG91cnNlbHZlcyB0byBza2lwIGluYWN0aXZlIG1vZHVsZXMgKG51bGwgcmV0dXJuKSxcbiAgICAvLyBhdm9pZGluZyB0aGUgU2hhZGVySW5wdXRzIG51bGwtZmFsbGJhY2sgdGhhdCB3b3VsZCBkdW1wIGFsbCB0ZXh0dXJlc1xuICAgIC8vIGludG8gYmluZGluZ3MgZXZlcnkgZnJhbWUuXG4gICAgY29uc3QgYWxsTW9kdWxlUHJvcHMgPSB7Li4ubW9kdWxlUHJvcHMsIC4uLmltYWdlc307XG4gICAgY29uc3QgbW9kdWxlcyA9IHRoaXMucHJvcHMubW9kdWxlcyB8fCBbXTtcbiAgICBmb3IgKGNvbnN0IG1vZCBvZiBtb2R1bGVzKSB7XG4gICAgICBpZiAobW9kLmdldFVuaWZvcm1zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG1vZC5nZXRVbmlmb3JtcyhhbGxNb2R1bGVQcm9wcyk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBtb2RlbC5zaGFkZXJJbnB1dHMuc2V0UHJvcHMoe1ttb2QubmFtZV06IHJlc3VsdH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZHJhd1N1Y2Nlc3MgPSBtb2RlbC5kcmF3KHRoaXMuY29udGV4dC5yZW5kZXJQYXNzKTtcbiAgICBpZiAoIWRyYXdTdWNjZXNzKSB7XG4gICAgICB0aGlzLl9zY2hlZHVsZVJlZHJhdygpO1xuICAgIH1cbiAgfVxuXG4gIF9zY2hlZHVsZVJlZHJhdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVkcmF3U2NoZWR1bGVkKSByZXR1cm47XG4gICAgdGhpcy5fcmVkcmF3U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdGhpcy5fcmVkcmF3U2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5jb250ZXh0LmRlY2spIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBhY2Nlc3NpbmcgcHJpdmF0ZSBkZWNrLmdsIHByb3BlcnR5XG4gICAgICAgIHRoaXMuY29udGV4dC5kZWNrLl9uZWVkc1JlZHJhdyA9ICdSYXN0ZXJNZXNoTGF5ZXIgcGlwZWxpbmUgcGVuZGluZyc7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbnRleHQubGF5ZXJNYW5hZ2VyPy5zZXROZWVkc1JlZHJhdygnUmFzdGVyTWVzaExheWVyIHBpcGVsaW5lIHBlbmRpbmcnKTtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblJlZHJhd05lZWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uUmVkcmF3TmVlZGVkKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmaW5hbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIHN1cGVyLmZpbmFsaXplU3RhdGUodGhpcy5jb250ZXh0KTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmltYWdlcykge1xuICAgICAgZm9yIChjb25zdCBpbWFnZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc3RhdGUuaW1hZ2VzKSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbWFnZSkpIHtcbiAgICAgICAgICBpbWFnZS5tYXAoeCA9PiB4ICYmICh4LmRlc3Ryb3kgPyB4LmRlc3Ryb3koKSA6IHguZGVsZXRlPy4oKSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UuZGVzdHJveSA/IGltYWdlLmRlc3Ryb3koKSA6IGltYWdlLmRlbGV0ZT8uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwobWVzaDogTWVzaCk6IE1vZGVsIHtcbiAgICBjb25zdCBkZXZpY2UgPSB0aGlzLmNvbnRleHQuZGV2aWNlIHx8IHRoaXMuY29udGV4dC5nbDtcblxuICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsKFxuICAgICAgZGV2aWNlLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5nZXRTaGFkZXJzKCksIHtcbiAgICAgICAgaWQ6IHRoaXMucHJvcHMuaWQsXG4gICAgICAgIGdlb21ldHJ5OiBnZXRHZW9tZXRyeShtZXNoIGFzIE1lc2hEYXRhIHwgR2VvbWV0cnkpLFxuICAgICAgICBpc0luc3RhbmNlZDogZmFsc2VcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxufVxuXG5SYXN0ZXJNZXNoTGF5ZXIubGF5ZXJOYW1lID0gJ1Jhc3Rlck1lc2hMYXllcic7XG5SYXN0ZXJNZXNoTGF5ZXIuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFHQSxJQUFBRSx1QkFBQSxHQUFBRixPQUFBO0FBS0EsSUFBQUcsbUJBQUEsR0FBQUgsT0FBQTtBQUlBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLEtBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLHdCQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxVQUFBLEdBQUFQLE9BQUE7QUFBOEMsU0FBQVEsMkJBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLHlCQUFBQyxNQUFBLElBQUFILENBQUEsQ0FBQUcsTUFBQSxDQUFBQyxRQUFBLEtBQUFKLENBQUEscUJBQUFFLENBQUEsUUFBQUcsS0FBQSxDQUFBQyxPQUFBLENBQUFOLENBQUEsTUFBQUUsQ0FBQSxHQUFBSywyQkFBQSxDQUFBUCxDQUFBLE1BQUFDLENBQUEsSUFBQUQsQ0FBQSx1QkFBQUEsQ0FBQSxDQUFBUSxNQUFBLElBQUFOLENBQUEsS0FBQUYsQ0FBQSxHQUFBRSxDQUFBLE9BQUFPLEVBQUEsTUFBQUMsQ0FBQSxZQUFBQSxFQUFBLGVBQUFDLENBQUEsRUFBQUQsQ0FBQSxFQUFBRSxDQUFBLFdBQUFBLEVBQUEsV0FBQUgsRUFBQSxJQUFBVCxDQUFBLENBQUFRLE1BQUEsS0FBQUssSUFBQSxXQUFBQSxJQUFBLE1BQUFDLEtBQUEsRUFBQWQsQ0FBQSxDQUFBUyxFQUFBLFVBQUFSLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxVQUFBQSxDQUFBLEtBQUFlLENBQUEsRUFBQUwsQ0FBQSxnQkFBQU0sU0FBQSxpSkFBQUMsQ0FB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
@@ -1,17 +1,17 @@
1
- /// <reference types="luma.gl__webgl" />
2
- import type { Texture2DProps, Texture2D } from '@luma.gl/webgl';
1
+ import type { Texture } from '@luma.gl/core';
3
2
  import type { ShaderModule } from './webgl';
4
- /** Allowed input for images prop
5
- * Texture2D is already on the GPU, while Texture2DProps can be data on the CPU that is not yet copied to the GPU.
3
+ /** Allowed input for images prop — either GPU-resident Texture objects or
4
+ * legacy raster texture descriptors with CPU data that will be uploaded.
6
5
  */
7
- export declare type ImageInput = Record<string, Texture2DProps | Texture2D | (Texture2DProps | Texture2D)[]>;
6
+ export type ImageInput = Record<string, Texture | Texture[] | Record<string, unknown> | Record<string, unknown>[]>;
8
7
  /** Internal storage of images
9
- * The Texture2D object references data on the GPU
8
+ * The Texture object references data on the GPU
10
9
  */
11
- export declare type ImageState = Record<string, Texture2D | Texture2D[]>;
10
+ export type ImageState = Record<string, Texture | Texture[]>;
12
11
  /** Properties added by RasterLayer. */
13
- export declare type RasterLayerAddedProps = {
12
+ export type RasterLayerAddedProps = {
14
13
  modules: ShaderModule[];
15
14
  images: ImageInput;
16
15
  moduleProps: Record<string, number>;
16
+ onRedrawNeeded?: (() => void) | null;
17
17
  };
@@ -3,4 +3,4 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdHlwZSB7VGV4dHVyZTJEUHJvcHMsIFRleHR1cmUyRH0gZnJvbSAnQGx1bWEuZ2wvd2ViZ2wnO1xuXG5pbXBvcnQgdHlwZSB7U2hhZGVyTW9kdWxlfSBmcm9tICcuL3dlYmdsJztcblxuLyoqIEFsbG93ZWQgaW5wdXQgZm9yIGltYWdlcyBwcm9wXG4gKiBUZXh0dXJlMkQgaXMgYWxyZWFkeSBvbiB0aGUgR1BVLCB3aGlsZSBUZXh0dXJlMkRQcm9wcyBjYW4gYmUgZGF0YSBvbiB0aGUgQ1BVIHRoYXQgaXMgbm90IHlldCBjb3BpZWQgdG8gdGhlIEdQVS5cbiAqL1xuZXhwb3J0IHR5cGUgSW1hZ2VJbnB1dCA9IFJlY29yZDxcbiAgc3RyaW5nLFxuICBUZXh0dXJlMkRQcm9wcyB8IFRleHR1cmUyRCB8IChUZXh0dXJlMkRQcm9wcyB8IFRleHR1cmUyRClbXVxuPjtcblxuLyoqIEludGVybmFsIHN0b3JhZ2Ugb2YgaW1hZ2VzXG4gKiBUaGUgVGV4dHVyZTJEIG9iamVjdCByZWZlcmVuY2VzIGRhdGEgb24gdGhlIEdQVVxuICovXG5leHBvcnQgdHlwZSBJbWFnZVN0YXRlID0gUmVjb3JkPHN0cmluZywgVGV4dHVyZTJEIHwgVGV4dHVyZTJEW10+O1xuXG4vKiogUHJvcGVydGllcyBhZGRlZCBieSBSYXN0ZXJMYXllci4gKi9cbmV4cG9ydCB0eXBlIFJhc3RlckxheWVyQWRkZWRQcm9wcyA9IHtcbiAgbW9kdWxlczogU2hhZGVyTW9kdWxlW107XG4gIGltYWdlczogSW1hZ2VJbnB1dDtcbiAgbW9kdWxlUHJvcHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG59O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdHlwZSB7VGV4dHVyZX0gZnJvbSAnQGx1bWEuZ2wvY29yZSc7XG5pbXBvcnQgdHlwZSB7U2hhZGVyTW9kdWxlfSBmcm9tICcuL3dlYmdsJztcblxuLyoqIEFsbG93ZWQgaW5wdXQgZm9yIGltYWdlcyBwcm9wIOKAlCBlaXRoZXIgR1BVLXJlc2lkZW50IFRleHR1cmUgb2JqZWN0cyBvclxuICogbGVnYWN5IHJhc3RlciB0ZXh0dXJlIGRlc2NyaXB0b3JzIHdpdGggQ1BVIGRhdGEgdGhhdCB3aWxsIGJlIHVwbG9hZGVkLlxuICovXG5leHBvcnQgdHlwZSBJbWFnZUlucHV0ID0gUmVjb3JkPFxuICBzdHJpbmcsXG4gIFRleHR1cmUgfCBUZXh0dXJlW10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+W11cbj47XG5cbi8qKiBJbnRlcm5hbCBzdG9yYWdlIG9mIGltYWdlc1xuICogVGhlIFRleHR1cmUgb2JqZWN0IHJlZmVyZW5jZXMgZGF0YSBvbiB0aGUgR1BVXG4gKi9cbmV4cG9ydCB0eXBlIEltYWdlU3RhdGUgPSBSZWNvcmQ8c3RyaW5nLCBUZXh0dXJlIHwgVGV4dHVyZVtdPjtcblxuLyoqIFByb3BlcnRpZXMgYWRkZWQgYnkgUmFzdGVyTGF5ZXIuICovXG5leHBvcnQgdHlwZSBSYXN0ZXJMYXllckFkZGVkUHJvcHMgPSB7XG4gIG1vZHVsZXM6IFNoYWRlck1vZHVsZVtdO1xuICBpbWFnZXM6IEltYWdlSW5wdXQ7XG4gIG1vZHVsZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuICBvblJlZHJhd05lZWRlZD86ICgoKSA9PiB2b2lkKSB8IG51bGw7XG59O1xuIl0sIm1hcHBpbmdzIjoiIiwiaWdub3JlTGlzdCI6W119
@@ -7,7 +7,7 @@ exports.colormap = void 0;
7
7
  // SPDX-License-Identifier: MIT
8
8
  // Copyright contributors to the kepler.gl project
9
9
 
10
- var fs = "uniform sampler2D uColormapTexture;\nuniform int uHasCategoricalColors;\nuniform int uCategoricalMinValue;\nuniform int uCategoricalMaxValue;\nuniform int uMaxPixelValue;\n\n// Apply colormap texture given value\n// Since the texture only varies in the x direction, setting v to 0.5 as a\n// constant is fine\n// Assumes the input range of value is -1 to 1\nvec4 colormap(sampler2D cmap, vec4 image) {\n vec2 uv;\n if (uHasCategoricalColors == 1) {\n float step = float(uMaxPixelValue) / float(uCategoricalMaxValue - uCategoricalMinValue);\n uv = vec2(image.r * step, 0.5);\n } else {\n uv = vec2(0.5 * image.r + 0.5, 0.5);\n }\n vec4 color = texture2D(cmap, uv);\n if(color.a <= 0.0) discard;\n return color;\n}\n";
10
+ var fs = "uniform sampler2D uColormapTexture;\n\nuniform colormapUniforms {\n int hasCategoricalColors;\n int categoricalMinValue;\n int categoricalMaxValue;\n int maxPixelValue;\n} colormap;\n\n// Apply colormap texture given value\n// Since the texture only varies in the x direction, setting v to 0.5 as a\n// constant is fine\n// Assumes the input range of value is -1 to 1\nvec4 colormapApply(sampler2D cmap, vec4 image) {\n vec2 uv;\n if (colormap.hasCategoricalColors == 1) {\n float step = float(colormap.maxPixelValue) / float(colormap.categoricalMaxValue - colormap.categoricalMinValue);\n uv = vec2(image.r * step, 0.5);\n } else {\n uv = vec2(0.5 * image.r + 0.5, 0.5);\n }\n vec4 color = texture(cmap, uv);\n if(color.a <= 0.0) discard;\n return color;\n}\n";
11
11
  function getUniforms() {
12
12
  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13
13
  var imageColormap = opts.imageColormap,
@@ -22,18 +22,24 @@ function getUniforms() {
22
22
  var isCategorical = isSupportedDataType && Number.isFinite(maxPixelValue) && Number.isFinite(minCategoricalBandValue) && Number.isFinite(maxCategoricalBandValue);
23
23
  return {
24
24
  uColormapTexture: imageColormap,
25
- uHasCategoricalColors: isCategorical ? 1 : 0,
26
- uCategoricalMinValue: Number.isFinite(minCategoricalBandValue) ? minCategoricalBandValue : 0,
27
- uCategoricalMaxValue: Number.isFinite(maxCategoricalBandValue) ? maxCategoricalBandValue : 0,
28
- uMaxPixelValue: Number.isFinite(maxPixelValue) ? maxPixelValue : 0
25
+ hasCategoricalColors: isCategorical ? 1 : 0,
26
+ categoricalMinValue: Number.isFinite(minCategoricalBandValue) ? minCategoricalBandValue : 0,
27
+ categoricalMaxValue: Number.isFinite(maxCategoricalBandValue) ? maxCategoricalBandValue : 0,
28
+ maxPixelValue: Number.isFinite(maxPixelValue) ? maxPixelValue : 0
29
29
  };
30
30
  }
31
31
  var colormap = exports.colormap = {
32
32
  name: 'colormap',
33
33
  fs: fs,
34
+ uniformTypes: {
35
+ hasCategoricalColors: 'i32',
36
+ categoricalMinValue: 'i32',
37
+ categoricalMaxValue: 'i32',
38
+ maxPixelValue: 'i32'
39
+ },
34
40
  getUniforms: getUniforms,
35
41
  inject: {
36
- 'fs:DECKGL_MUTATE_COLOR': "\n image = colormap(uColormapTexture, image);\n "
42
+ 'fs:DECKGL_MUTATE_COLOR': "\n image = colormapApply(uColormapTexture, image);\n "
37
43
  }
38
44
  };
39
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImltYWdlQ29sb3JtYXAiLCJtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSIsIm1heENhdGVnb3JpY2FsQmFuZFZhbHVlIiwiZGF0YVR5cGVNYXhWYWx1ZSIsIm1heFBpeGVsVmFsdWUiLCJpc1N1cHBvcnRlZERhdGFUeXBlIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJpc0NhdGVnb3JpY2FsIiwidUNvbG9ybWFwVGV4dHVyZSIsInVIYXNDYXRlZ29yaWNhbENvbG9ycyIsInVDYXRlZ29yaWNhbE1pblZhbHVlIiwidUNhdGVnb3JpY2FsTWF4VmFsdWUiLCJ1TWF4UGl4ZWxWYWx1ZSIsImNvbG9ybWFwIiwiZXhwb3J0cyIsIm5hbWUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2NvbG9ybWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7VGV4dHVyZTJEfSBmcm9tICdAbHVtYS5nbC93ZWJnbCc7XG5cbmltcG9ydCB7R2V0VW5pZm9ybXNPdXRwdXQsIFNoYWRlck1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBmcyA9IGBcXFxudW5pZm9ybSBzYW1wbGVyMkQgdUNvbG9ybWFwVGV4dHVyZTtcbnVuaWZvcm0gaW50IHVIYXNDYXRlZ29yaWNhbENvbG9ycztcbnVuaWZvcm0gaW50IHVDYXRlZ29yaWNhbE1pblZhbHVlO1xudW5pZm9ybSBpbnQgdUNhdGVnb3JpY2FsTWF4VmFsdWU7XG51bmlmb3JtIGludCB1TWF4UGl4ZWxWYWx1ZTtcblxuLy8gQXBwbHkgY29sb3JtYXAgdGV4dHVyZSBnaXZlbiB2YWx1ZVxuLy8gU2luY2UgdGhlIHRleHR1cmUgb25seSB2YXJpZXMgaW4gdGhlIHggZGlyZWN0aW9uLCBzZXR0aW5nIHYgdG8gMC41IGFzIGFcbi8vIGNvbnN0YW50IGlzIGZpbmVcbi8vIEFzc3VtZXMgdGhlIGlucHV0IHJhbmdlIG9mIHZhbHVlIGlzIC0xIHRvIDFcbnZlYzQgY29sb3JtYXAoc2FtcGxlcjJEIGNtYXAsIHZlYzQgaW1hZ2UpIHtcbiAgdmVjMiB1djtcbiAgaWYgKHVIYXNDYXRlZ29yaWNhbENvbG9ycyA9PSAxKSB7XG4gICAgZmxvYXQgc3RlcCA9IGZsb2F0KHVNYXhQaXhlbFZhbHVlKSAvIGZsb2F0KHVDYXRlZ29yaWNhbE1heFZhbHVlIC0gdUNhdGVnb3JpY2FsTWluVmFsdWUpO1xuICAgIHV2ID0gdmVjMihpbWFnZS5yICogc3RlcCwgMC41KTtcbiAgfSBlbHNlIHtcbiAgICB1diA9IHZlYzIoMC41ICogaW1hZ2UuciArIDAuNSwgMC41KTtcbiAgfVxuICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKGNtYXAsIHV2KTtcbiAgaWYoY29sb3IuYSA8PSAwLjApIGRpc2NhcmQ7XG4gIHJldHVybiBjb2xvcjtcbn1cbmA7XG5cbmZ1bmN0aW9uIGdldFVuaWZvcm1zKFxuICBvcHRzOiB7XG4gICAgaW1hZ2VDb2xvcm1hcD86IFRleHR1cmUyRDtcbiAgICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgICBkYXRhVHlwZU1heFZhbHVlPzogbnVtYmVyO1xuICAgIG1heFBpeGVsVmFsdWU/OiBudW1iZXI7XG4gIH0gPSB7fVxuKTogR2V0VW5pZm9ybXNPdXRwdXQge1xuICBjb25zdCB7XG4gICAgaW1hZ2VDb2xvcm1hcCxcbiAgICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSxcbiAgICBkYXRhVHlwZU1heFZhbHVlLFxuICAgIG1heFBpeGVsVmFsdWVcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKCFpbWFnZUNvbG9ybWFwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBpc1N1cHBvcnRlZERhdGFUeXBlID0gTnVtYmVyLmlzRmluaXRlKGRhdGFUeXBlTWF4VmFsdWUpO1xuICBjb25zdCBpc0NhdGVnb3JpY2FsID1cbiAgICBpc1N1cHBvcnRlZERhdGFUeXBlICYmXG4gICAgTnVtYmVyLmlzRmluaXRlKG1heFBpeGVsVmFsdWUpICYmXG4gICAgTnVtYmVyLmlzRmluaXRlKG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlKSAmJlxuICAgIE51bWJlci5pc0Zpbml0ZShtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSk7XG4gIHJldHVybiB7XG4gICAgdUNvbG9ybWFwVGV4dHVyZTogaW1hZ2VDb2xvcm1hcCxcbiAgICB1SGFzQ2F0ZWdvcmljYWxDb2xvcnM6IGlzQ2F0ZWdvcmljYWwgPyAxIDogMCxcbiAgICB1Q2F0ZWdvcmljYWxNaW5WYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlKSA/IG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlIDogMCxcbiAgICB1Q2F0ZWdvcmljYWxNYXhWYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1heENhdGVnb3JpY2FsQmFuZFZhbHVlKSA/IG1heENhdGVnb3JpY2FsQmFuZFZhbHVlIDogMCxcbiAgICB1TWF4UGl4ZWxWYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1heFBpeGVsVmFsdWUpID8gbWF4UGl4ZWxWYWx1ZSA6IDBcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbG9ybWFwOiBTaGFkZXJNb2R1bGUgPSB7XG4gIG5hbWU6ICdjb2xvcm1hcCcsXG4gIGZzLFxuICBnZXRVbmlmb3JtcyxcbiAgaW5qZWN0OiB7XG4gICAgJ2ZzOkRFQ0tHTF9NVVRBVEVfQ09MT1InOiBgXG4gICAgaW1hZ2UgPSBjb2xvcm1hcCh1Q29sb3JtYXBUZXh0dXJlLCBpbWFnZSk7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQU1BLElBQU1BLEVBQUUsK3RCQXVCUDtBQUVELFNBQVNDLFdBQVdBLENBQUEsRUFRQztFQUFBLElBUG5CQyxJQU1DLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUVOLElBQ0VHLGFBQWEsR0FLWEosSUFBSSxDQUxOSSxhQUFhO0lBQ2JDLHVCQUF1QixHQUlyQkwsSUFBSSxDQUpOSyx1QkFBdUI7SUFDdkJDLHVCQUF1QixHQUdyQk4sSUFBSSxDQUhOTSx1QkFBdUI7SUFDdkJDLGdCQUFnQixHQUVkUCxJQUFJLENBRk5PLGdCQUFnQjtJQUNoQkMsYUFBYSxHQUNYUixJQUFJLENBRE5RLGFBQWE7RUFHZixJQUFJLENBQUNKLGFBQWEsRUFBRTtJQUNsQixPQUFPLElBQUk7RUFDYjtFQUVBLElBQU1LLG1CQUFtQixHQUFHQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0osZ0JBQWdCLENBQUM7RUFDN0QsSUFBTUssYUFBYSxHQUNqQkgsbUJBQW1CLElBQ25CQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsYUFBYSxDQUFDLElBQzlCRSxNQUFNLENBQUNDLFFBQVEsQ0FBQ04sdUJBQXVCLENBQUMsSUFDeENLLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDTCx1QkFBdUIsQ0FBQztFQUMxQyxPQUFPO0lBQ0xPLGdCQUFnQixFQUFFVCxhQUFhO0lBQy9CVSxxQkFBcUIsRUFBRUYsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQzVDRyxvQkFBb0IsRUFBRUwsTUFBTSxDQUFDQyxRQUFRLENBQUNOLHVCQUF1QixDQUFDLEdBQUdBLHVCQUF1QixHQUFHLENBQUM7SUFDNUZXLG9CQUFvQixFQUFFTixNQUFNLENBQUNDLFFBQVEsQ0FBQ0wsdUJBQXVCLENBQUMsR0FBR0EsdUJBQXVCLEdBQUcsQ0FBQztJQUM1RlcsY0FBYyxFQUFFUCxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsYUFBYSxDQUFDLEdBQUdBLGFBQWEsR0FBRztFQUNuRSxDQUFDO0FBQ0g7QUFFTyxJQUFNVSxRQUFzQixHQUFBQyxPQUFBLENBQUFELFFBQUEsR0FBRztFQUNwQ0UsSUFBSSxFQUFFLFVBQVU7RUFDaEJ0QixFQUFFLEVBQUZBLEVBQUU7RUFDRkMsV0FBVyxFQUFYQSxXQUFXO0VBQ1hzQixNQUFNLEVBQUU7SUFDTix3QkFBd0I7RUFHMUI7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
45
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImdldFVuaWZvcm1zIiwib3B0cyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImltYWdlQ29sb3JtYXAiLCJtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSIsIm1heENhdGVnb3JpY2FsQmFuZFZhbHVlIiwiZGF0YVR5cGVNYXhWYWx1ZSIsIm1heFBpeGVsVmFsdWUiLCJpc1N1cHBvcnRlZERhdGFUeXBlIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJpc0NhdGVnb3JpY2FsIiwidUNvbG9ybWFwVGV4dHVyZSIsImhhc0NhdGVnb3JpY2FsQ29sb3JzIiwiY2F0ZWdvcmljYWxNaW5WYWx1ZSIsImNhdGVnb3JpY2FsTWF4VmFsdWUiLCJjb2xvcm1hcCIsImV4cG9ydHMiLCJuYW1lIiwidW5pZm9ybVR5cGVzIiwiaW5qZWN0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Jhc3Rlci93ZWJnbC9jb2xvci9jb2xvcm1hcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdHlwZSB7VGV4dHVyZX0gZnJvbSAnQGx1bWEuZ2wvY29yZSc7XG5pbXBvcnQge0dldFVuaWZvcm1zT3V0cHV0LCBTaGFkZXJNb2R1bGV9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgZnMgPSBgXFxcbnVuaWZvcm0gc2FtcGxlcjJEIHVDb2xvcm1hcFRleHR1cmU7XG5cbnVuaWZvcm0gY29sb3JtYXBVbmlmb3JtcyB7XG4gIGludCBoYXNDYXRlZ29yaWNhbENvbG9ycztcbiAgaW50IGNhdGVnb3JpY2FsTWluVmFsdWU7XG4gIGludCBjYXRlZ29yaWNhbE1heFZhbHVlO1xuICBpbnQgbWF4UGl4ZWxWYWx1ZTtcbn0gY29sb3JtYXA7XG5cbi8vIEFwcGx5IGNvbG9ybWFwIHRleHR1cmUgZ2l2ZW4gdmFsdWVcbi8vIFNpbmNlIHRoZSB0ZXh0dXJlIG9ubHkgdmFyaWVzIGluIHRoZSB4IGRpcmVjdGlvbiwgc2V0dGluZyB2IHRvIDAuNSBhcyBhXG4vLyBjb25zdGFudCBpcyBmaW5lXG4vLyBBc3N1bWVzIHRoZSBpbnB1dCByYW5nZSBvZiB2YWx1ZSBpcyAtMSB0byAxXG52ZWM0IGNvbG9ybWFwQXBwbHkoc2FtcGxlcjJEIGNtYXAsIHZlYzQgaW1hZ2UpIHtcbiAgdmVjMiB1djtcbiAgaWYgKGNvbG9ybWFwLmhhc0NhdGVnb3JpY2FsQ29sb3JzID09IDEpIHtcbiAgICBmbG9hdCBzdGVwID0gZmxvYXQoY29sb3JtYXAubWF4UGl4ZWxWYWx1ZSkgLyBmbG9hdChjb2xvcm1hcC5jYXRlZ29yaWNhbE1heFZhbHVlIC0gY29sb3JtYXAuY2F0ZWdvcmljYWxNaW5WYWx1ZSk7XG4gICAgdXYgPSB2ZWMyKGltYWdlLnIgKiBzdGVwLCAwLjUpO1xuICB9IGVsc2Uge1xuICAgIHV2ID0gdmVjMigwLjUgKiBpbWFnZS5yICsgMC41LCAwLjUpO1xuICB9XG4gIHZlYzQgY29sb3IgPSB0ZXh0dXJlKGNtYXAsIHV2KTtcbiAgaWYoY29sb3IuYSA8PSAwLjApIGRpc2NhcmQ7XG4gIHJldHVybiBjb2xvcjtcbn1cbmA7XG5cbmZ1bmN0aW9uIGdldFVuaWZvcm1zKFxuICBvcHRzOiB7XG4gICAgaW1hZ2VDb2xvcm1hcD86IFRleHR1cmU7XG4gICAgbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWU/OiBudW1iZXI7XG4gICAgbWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWU/OiBudW1iZXI7XG4gICAgZGF0YVR5cGVNYXhWYWx1ZT86IG51bWJlcjtcbiAgICBtYXhQaXhlbFZhbHVlPzogbnVtYmVyO1xuICB9ID0ge31cbik6IEdldFVuaWZvcm1zT3V0cHV0IHtcbiAgY29uc3Qge1xuICAgIGltYWdlQ29sb3JtYXAsXG4gICAgbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUsXG4gICAgbWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWUsXG4gICAgZGF0YVR5cGVNYXhWYWx1ZSxcbiAgICBtYXhQaXhlbFZhbHVlXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghaW1hZ2VDb2xvcm1hcCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaXNTdXBwb3J0ZWREYXRhVHlwZSA9IE51bWJlci5pc0Zpbml0ZShkYXRhVHlwZU1heFZhbHVlKTtcbiAgY29uc3QgaXNDYXRlZ29yaWNhbCA9XG4gICAgaXNTdXBwb3J0ZWREYXRhVHlwZSAmJlxuICAgIE51bWJlci5pc0Zpbml0ZShtYXhQaXhlbFZhbHVlKSAmJlxuICAgIE51bWJlci5pc0Zpbml0ZShtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZSkgJiZcbiAgICBOdW1iZXIuaXNGaW5pdGUobWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWUpO1xuICByZXR1cm4ge1xuICAgIHVDb2xvcm1hcFRleHR1cmU6IGltYWdlQ29sb3JtYXAsXG4gICAgaGFzQ2F0ZWdvcmljYWxDb2xvcnM6IGlzQ2F0ZWdvcmljYWwgPyAxIDogMCxcbiAgICBjYXRlZ29yaWNhbE1pblZhbHVlOiBOdW1iZXIuaXNGaW5pdGUobWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUpID8gbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWUgOiAwLFxuICAgIGNhdGVnb3JpY2FsTWF4VmFsdWU6IE51bWJlci5pc0Zpbml0ZShtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSkgPyBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZSA6IDAsXG4gICAgbWF4UGl4ZWxWYWx1ZTogTnVtYmVyLmlzRmluaXRlKG1heFBpeGVsVmFsdWUpID8gbWF4UGl4ZWxWYWx1ZSA6IDBcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbG9ybWFwOiBTaGFkZXJNb2R1bGUgPSB7XG4gIG5hbWU6ICdjb2xvcm1hcCcsXG4gIGZzLFxuICB1bmlmb3JtVHlwZXM6IHtcbiAgICBoYXNDYXRlZ29yaWNhbENvbG9yczogJ2kzMicsXG4gICAgY2F0ZWdvcmljYWxNaW5WYWx1ZTogJ2kzMicsXG4gICAgY2F0ZWdvcmljYWxNYXhWYWx1ZTogJ2kzMicsXG4gICAgbWF4UGl4ZWxWYWx1ZTogJ2kzMidcbiAgfSxcbiAgZ2V0VW5pZm9ybXMsXG4gIGluamVjdDoge1xuICAgICdmczpERUNLR0xfTVVUQVRFX0NPTE9SJzogYFxuICAgIGltYWdlID0gY29sb3JtYXBBcHBseSh1Q29sb3JtYXBUZXh0dXJlLCBpbWFnZSk7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUtBLElBQU1BLEVBQUUsaXhCQTBCUDtBQUVELFNBQVNDLFdBQVdBLENBQUEsRUFRQztFQUFBLElBUG5CQyxJQU1DLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUVOLElBQ0VHLGFBQWEsR0FLWEosSUFBSSxDQUxOSSxhQUFhO0lBQ2JDLHVCQUF1QixHQUlyQkwsSUFBSSxDQUpOSyx1QkFBdUI7SUFDdkJDLHVCQUF1QixHQUdyQk4sSUFBSSxDQUhOTSx1QkFBdUI7SUFDdkJDLGdCQUFnQixHQUVkUCxJQUFJLENBRk5PLGdCQUFnQjtJQUNoQkMsYUFBYSxHQUNYUixJQUFJLENBRE5RLGFBQWE7RUFHZixJQUFJLENBQUNKLGFBQWEsRUFBRTtJQUNsQixPQUFPLElBQUk7RUFDYjtFQUVBLElBQU1LLG1CQUFtQixHQUFHQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0osZ0JBQWdCLENBQUM7RUFDN0QsSUFBTUssYUFBYSxHQUNqQkgsbUJBQW1CLElBQ25CQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsYUFBYSxDQUFDLElBQzlCRSxNQUFNLENBQUNDLFFBQVEsQ0FBQ04sdUJBQXVCLENBQUMsSUFDeENLLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDTCx1QkFBdUIsQ0FBQztFQUMxQyxPQUFPO0lBQ0xPLGdCQUFnQixFQUFFVCxhQUFhO0lBQy9CVSxvQkFBb0IsRUFBRUYsYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQzNDRyxtQkFBbUIsRUFBRUwsTUFBTSxDQUFDQyxRQUFRLENBQUNOLHVCQUF1QixDQUFDLEdBQUdBLHVCQUF1QixHQUFHLENBQUM7SUFDM0ZXLG1CQUFtQixFQUFFTixNQUFNLENBQUNDLFFBQVEsQ0FBQ0wsdUJBQXVCLENBQUMsR0FBR0EsdUJBQXVCLEdBQUcsQ0FBQztJQUMzRkUsYUFBYSxFQUFFRSxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsYUFBYSxDQUFDLEdBQUdBLGFBQWEsR0FBRztFQUNsRSxDQUFDO0FBQ0g7QUFFTyxJQUFNUyxRQUFzQixHQUFBQyxPQUFBLENBQUFELFFBQUEsR0FBRztFQUNwQ0UsSUFBSSxFQUFFLFVBQVU7RUFDaEJyQixFQUFFLEVBQUZBLEVBQUU7RUFDRnNCLFlBQVksRUFBRTtJQUNaTixvQkFBb0IsRUFBRSxLQUFLO0lBQzNCQyxtQkFBbUIsRUFBRSxLQUFLO0lBQzFCQyxtQkFBbUIsRUFBRSxLQUFLO0lBQzFCUixhQUFhLEVBQUU7RUFDakIsQ0FBQztFQUNEVCxXQUFXLEVBQVhBLFdBQVc7RUFDWHNCLE1BQU0sRUFBRTtJQUNOLHdCQUF3QjtFQUcxQjtBQUNGLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -7,7 +7,7 @@ exports.filter = void 0;
7
7
  // SPDX-License-Identifier: MIT
8
8
  // Copyright contributors to the kepler.gl project
9
9
 
10
- var fs = "uniform float filterMin1;\nuniform float filterMax1;\nuniform float filterMin2;\nuniform float filterMax2;\nuniform float filterMin3;\nuniform float filterMax3;\nuniform float filterMin4;\nuniform float filterMax4;\n";
10
+ var fs = "uniform bandFilterUniforms {\n float min1;\n float max1;\n float min2;\n float max2;\n float min3;\n float max3;\n float min4;\n float max4;\n} bandFilter;\n";
11
11
 
12
12
  // You can't pass JS' -Infinity or Infinity to a shader as a uniform
13
13
  var inf = Math.pow(2, 62);
@@ -25,24 +25,34 @@ function getUniforms() {
25
25
  filterMax4 = opts.filterMax4;
26
26
  if (Number.isFinite(filterMin1) || Number.isFinite(filterMin2) || Number.isFinite(filterMin3) || Number.isFinite(filterMin4) || Number.isFinite(filterMax1) || Number.isFinite(filterMax2) || Number.isFinite(filterMax3) || Number.isFinite(filterMax4)) {
27
27
  return {
28
- filterMin1: Number.isFinite(filterMin1) ? filterMin1 : -inf,
29
- filterMin2: Number.isFinite(filterMin2) ? filterMin2 : -inf,
30
- filterMin3: Number.isFinite(filterMin3) ? filterMin3 : -inf,
31
- filterMin4: Number.isFinite(filterMin4) ? filterMin4 : -inf,
32
- filterMax1: Number.isFinite(filterMax1) ? filterMax1 : inf,
33
- filterMax2: Number.isFinite(filterMax2) ? filterMax2 : inf,
34
- filterMax3: Number.isFinite(filterMax3) ? filterMax3 : inf,
35
- filterMax4: Number.isFinite(filterMax4) ? filterMax4 : inf
28
+ min1: Number.isFinite(filterMin1) ? filterMin1 : -inf,
29
+ min2: Number.isFinite(filterMin2) ? filterMin2 : -inf,
30
+ min3: Number.isFinite(filterMin3) ? filterMin3 : -inf,
31
+ min4: Number.isFinite(filterMin4) ? filterMin4 : -inf,
32
+ max1: Number.isFinite(filterMax1) ? filterMax1 : inf,
33
+ max2: Number.isFinite(filterMax2) ? filterMax2 : inf,
34
+ max3: Number.isFinite(filterMax3) ? filterMax3 : inf,
35
+ max4: Number.isFinite(filterMax4) ? filterMax4 : inf
36
36
  };
37
37
  }
38
38
  return null;
39
39
  }
40
40
  var filter = exports.filter = {
41
- name: 'filter',
41
+ name: 'bandFilter',
42
42
  fs: fs,
43
+ uniformTypes: {
44
+ min1: 'f32',
45
+ max1: 'f32',
46
+ min2: 'f32',
47
+ max2: 'f32',
48
+ min3: 'f32',
49
+ max3: 'f32',
50
+ min4: 'f32',
51
+ max4: 'f32'
52
+ },
43
53
  getUniforms: getUniforms,
44
54
  inject: {
45
- 'fs:DECKGL_MUTATE_COLOR': "\n if (image.r < filterMin1) discard;\n if (image.g < filterMin2) discard;\n if (image.b < filterMin3) discard;\n if (image.a < filterMin4) discard;\n if (image.r > filterMax1) discard;\n if (image.g > filterMax2) discard;\n if (image.b > filterMax3) discard;\n if (image.a > filterMax4) discard;\n "
55
+ 'fs:DECKGL_MUTATE_COLOR': "\n if (image.r < bandFilter.min1) discard;\n if (image.g < bandFilter.min2) discard;\n if (image.b < bandFilter.min3) discard;\n if (image.a < bandFilter.min4) discard;\n if (image.r > bandFilter.max1) discard;\n if (image.g > bandFilter.max2) discard;\n if (image.b > bandFilter.max3) discard;\n if (image.a > bandFilter.max4) discard;\n "
46
56
  }
47
57
  };
48
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImluZiIsIk1hdGgiLCJwb3ciLCJnZXRVbmlmb3JtcyIsIm9wdHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmaWx0ZXJNaW4xIiwiZmlsdGVyTWluMiIsImZpbHRlck1pbjMiLCJmaWx0ZXJNaW40IiwiZmlsdGVyTWF4MSIsImZpbHRlck1heDIiLCJmaWx0ZXJNYXgzIiwiZmlsdGVyTWF4NCIsIk51bWJlciIsImlzRmluaXRlIiwiZmlsdGVyIiwiZXhwb3J0cyIsIm5hbWUiLCJpbmplY3QiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFzdGVyL3dlYmdsL2NvbG9yL2ZpbHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge0dldFVuaWZvcm1zT3V0cHV0LCBTaGFkZXJNb2R1bGV9IGZyb20gJy4uL3R5cGVzJztcblxuY29uc3QgZnMgPSBgXFxcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluMTtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4MTtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluMjtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4MjtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluMztcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4MztcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWluNDtcbnVuaWZvcm0gZmxvYXQgZmlsdGVyTWF4NDtcbmA7XG5cbi8vIFlvdSBjYW4ndCBwYXNzIEpTJyAtSW5maW5pdHkgb3IgSW5maW5pdHkgdG8gYSBzaGFkZXIgYXMgYSB1bmlmb3JtXG5jb25zdCBpbmYgPSBNYXRoLnBvdygyLCA2Mik7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiBnZXRVbmlmb3JtcyhcbiAgb3B0czoge1xuICAgIGZpbHRlck1pbjE/OiBudW1iZXI7XG4gICAgZmlsdGVyTWluMj86IG51bWJlcjtcbiAgICBmaWx0ZXJNaW4zPzogbnVtYmVyO1xuICAgIGZpbHRlck1pbjQ/OiBudW1iZXI7XG4gICAgZmlsdGVyTWF4MT86IG51bWJlcjtcbiAgICBmaWx0ZXJNYXgyPzogbnVtYmVyO1xuICAgIGZpbHRlck1heDM/OiBudW1iZXI7XG4gICAgZmlsdGVyTWF4ND86IG51bWJlcjtcbiAgfSA9IHt9XG4pOiBHZXRVbmlmb3Jtc091dHB1dCB7XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXJNaW4xLFxuICAgIGZpbHRlck1pbjIsXG4gICAgZmlsdGVyTWluMyxcbiAgICBmaWx0ZXJNaW40LFxuICAgIGZpbHRlck1heDEsXG4gICAgZmlsdGVyTWF4MixcbiAgICBmaWx0ZXJNYXgzLFxuICAgIGZpbHRlck1heDRcbiAgfSA9IG9wdHM7XG5cbiAgaWYgKFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4xKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4yKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4zKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW40KSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgxKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgyKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgzKSB8fFxuICAgIE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXg0KVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyTWluMTogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjEpID8gZmlsdGVyTWluMSA6IC1pbmYsXG4gICAgICBmaWx0ZXJNaW4yOiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWluMikgPyBmaWx0ZXJNaW4yIDogLWluZixcbiAgICAgIGZpbHRlck1pbjM6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4zKSA/IGZpbHRlck1pbjMgOiAtaW5mLFxuICAgICAgZmlsdGVyTWluNDogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjQpID8gZmlsdGVyTWluNCA6IC1pbmYsXG4gICAgICBmaWx0ZXJNYXgxOiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4MSkgPyBmaWx0ZXJNYXgxIDogaW5mLFxuICAgICAgZmlsdGVyTWF4MjogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1heDIpID8gZmlsdGVyTWF4MiA6IGluZixcbiAgICAgIGZpbHRlck1heDM6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgzKSA/IGZpbHRlck1heDMgOiBpbmYsXG4gICAgICBmaWx0ZXJNYXg0OiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4NCkgPyBmaWx0ZXJNYXg0IDogaW5mXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyOiBTaGFkZXJNb2R1bGUgPSB7XG4gIG5hbWU6ICdmaWx0ZXInLFxuICBmcyxcbiAgZ2V0VW5pZm9ybXMsXG4gIGluamVjdDoge1xuICAgICdmczpERUNLR0xfTVVUQVRFX0NPTE9SJzogYFxuICAgIGlmIChpbWFnZS5yIDwgZmlsdGVyTWluMSkgZGlzY2FyZDtcbiAgICBpZiAoaW1hZ2UuZyA8IGZpbHRlck1pbjIpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmIgPCBmaWx0ZXJNaW4zKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5hIDwgZmlsdGVyTWluNCkgZGlzY2FyZDtcbiAgICBpZiAoaW1hZ2UuciA+IGZpbHRlck1heDEpIGRpc2NhcmQ7XG4gICAgaWYgKGltYWdlLmcgPiBmaWx0ZXJNYXgyKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5iID4gZmlsdGVyTWF4MykgZGlzY2FyZDtcbiAgICBpZiAoaW1hZ2UuYSA+IGZpbHRlck1heDQpIGRpc2NhcmQ7XG4gICAgYFxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBOztBQUlBLElBQU1BLEVB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
58
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmcyIsImluZiIsIk1hdGgiLCJwb3ciLCJnZXRVbmlmb3JtcyIsIm9wdHMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJmaWx0ZXJNaW4xIiwiZmlsdGVyTWluMiIsImZpbHRlck1pbjMiLCJmaWx0ZXJNaW40IiwiZmlsdGVyTWF4MSIsImZpbHRlck1heDIiLCJmaWx0ZXJNYXgzIiwiZmlsdGVyTWF4NCIsIk51bWJlciIsImlzRmluaXRlIiwibWluMSIsIm1pbjIiLCJtaW4zIiwibWluNCIsIm1heDEiLCJtYXgyIiwibWF4MyIsIm1heDQiLCJmaWx0ZXIiLCJleHBvcnRzIiwibmFtZSIsInVuaWZvcm1UeXBlcyIsImluamVjdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9yYXN0ZXIvd2ViZ2wvY29sb3IvZmlsdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7R2V0VW5pZm9ybXNPdXRwdXQsIFNoYWRlck1vZHVsZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBmcyA9IGBcXFxudW5pZm9ybSBiYW5kRmlsdGVyVW5pZm9ybXMge1xuICBmbG9hdCBtaW4xO1xuICBmbG9hdCBtYXgxO1xuICBmbG9hdCBtaW4yO1xuICBmbG9hdCBtYXgyO1xuICBmbG9hdCBtaW4zO1xuICBmbG9hdCBtYXgzO1xuICBmbG9hdCBtaW40O1xuICBmbG9hdCBtYXg0O1xufSBiYW5kRmlsdGVyO1xuYDtcblxuLy8gWW91IGNhbid0IHBhc3MgSlMnIC1JbmZpbml0eSBvciBJbmZpbml0eSB0byBhIHNoYWRlciBhcyBhIHVuaWZvcm1cbmNvbnN0IGluZiA9IE1hdGgucG93KDIsIDYyKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIGdldFVuaWZvcm1zKFxuICBvcHRzOiB7XG4gICAgZmlsdGVyTWluMT86IG51bWJlcjtcbiAgICBmaWx0ZXJNaW4yPzogbnVtYmVyO1xuICAgIGZpbHRlck1pbjM/OiBudW1iZXI7XG4gICAgZmlsdGVyTWluND86IG51bWJlcjtcbiAgICBmaWx0ZXJNYXgxPzogbnVtYmVyO1xuICAgIGZpbHRlck1heDI/OiBudW1iZXI7XG4gICAgZmlsdGVyTWF4Mz86IG51bWJlcjtcbiAgICBmaWx0ZXJNYXg0PzogbnVtYmVyO1xuICB9ID0ge31cbik6IEdldFVuaWZvcm1zT3V0cHV0IHtcbiAgY29uc3Qge1xuICAgIGZpbHRlck1pbjEsXG4gICAgZmlsdGVyTWluMixcbiAgICBmaWx0ZXJNaW4zLFxuICAgIGZpbHRlck1pbjQsXG4gICAgZmlsdGVyTWF4MSxcbiAgICBmaWx0ZXJNYXgyLFxuICAgIGZpbHRlck1heDMsXG4gICAgZmlsdGVyTWF4NFxuICB9ID0gb3B0cztcblxuICBpZiAoXG4gICAgTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjEpIHx8XG4gICAgTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjIpIHx8XG4gICAgTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjMpIHx8XG4gICAgTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjQpIHx8XG4gICAgTnVtYmVyLmlzRmluaXRlKGZpbHRlck1heDEpIHx8XG4gICAgTnVtYmVyLmlzRmluaXRlKGZpbHRlck1heDIpIHx8XG4gICAgTnVtYmVyLmlzRmluaXRlKGZpbHRlck1heDMpIHx8XG4gICAgTnVtYmVyLmlzRmluaXRlKGZpbHRlck1heDQpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBtaW4xOiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWluMSkgPyBmaWx0ZXJNaW4xIDogLWluZixcbiAgICAgIG1pbjI6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNaW4yKSA/IGZpbHRlck1pbjIgOiAtaW5mLFxuICAgICAgbWluMzogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1pbjMpID8gZmlsdGVyTWluMyA6IC1pbmYsXG4gICAgICBtaW40OiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWluNCkgPyBmaWx0ZXJNaW40IDogLWluZixcbiAgICAgIG1heDE6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXgxKSA/IGZpbHRlck1heDEgOiBpbmYsXG4gICAgICBtYXgyOiBOdW1iZXIuaXNGaW5pdGUoZmlsdGVyTWF4MikgPyBmaWx0ZXJNYXgyIDogaW5mLFxuICAgICAgbWF4MzogTnVtYmVyLmlzRmluaXRlKGZpbHRlck1heDMpID8gZmlsdGVyTWF4MyA6IGluZixcbiAgICAgIG1heDQ6IE51bWJlci5pc0Zpbml0ZShmaWx0ZXJNYXg0KSA/IGZpbHRlck1heDQgOiBpbmZcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXI6IFNoYWRlck1vZHVsZSA9IHtcbiAgbmFtZTogJ2JhbmRGaWx0ZXInLFxuICBmcyxcbiAgdW5pZm9ybVR5cGVzOiB7XG4gICAgbWluMTogJ2YzMicsXG4gICAgbWF4MTogJ2YzMicsXG4gICAgbWluMjogJ2YzMicsXG4gICAgbWF4MjogJ2YzMicsXG4gICAgbWluMzogJ2YzMicsXG4gICAgbWF4MzogJ2YzMicsXG4gICAgbWluNDogJ2YzMicsXG4gICAgbWF4NDogJ2YzMidcbiAgfSxcbiAgZ2V0VW5pZm9ybXMsXG4gIGluamVjdDoge1xuICAgICdmczpERUNLR0xfTVVUQVRFX0NPTE9SJzogYFxuICAgIGlmIChpbWFnZS5yIDwgYmFuZEZpbHRlci5taW4xKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5nIDwgYmFuZEZpbHRlci5taW4yKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5iIDwgYmFuZEZpbHRlci5taW4zKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5hIDwgYmFuZEZpbHRlci5taW40KSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5yID4gYmFuZEZpbHRlci5tYXgxKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5nID4gYmFuZEZpbHRlci5tYXgyKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5iID4gYmFuZEZpbHRlci5tYXgzKSBkaXNjYXJkO1xuICAgIGlmIChpbWFnZS5hID4gYmFuZEZpbHRlci5tYXg0KSBkaXNjYXJkO1xuICAgIGBcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTs7QUFJQSxJQUFNQSxFQUFFLDBLQVdQOztBQUVEO0FBQ0EsSUFBTUMsR0FBRyxHQUFHQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDOztBQUUzQjtBQUNBLFNBQVNDLFdBQVdBLENBQUEsRUFXQztFQUFBLElBVm5CQyxJQVNDLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztFQUVOLElBQ0VHLFVBQVUsR0FRUkosSUFBSSxDQVJOSSxVQUFVO0lBQ1ZDLFVBQVUsR0FPUkwsSUFBSSxDQVBOSyxVQUFVO0lBQ1ZDLFVBQVUsR0FNUk4sSUFBSSxDQU5OTSxVQUFVO0lBQ1ZDLFVBQVUsR0FLUlAsSUFBSSxDQUxOTyxVQUFVO0lBQ1ZDLFVBQVUsR0FJUlIsSUFBSSxDQUpOUSxVQUFVO0lBQ1ZDLFVBQVUsR0FHUlQsSUFBSSxDQUhOUyxVQUFVO0lBQ1ZDLFVBQVUsR0FFUlYsSUFBSSxDQUZOVSxVQUFVO0lBQ1ZDLFVBQVUsR0FDUlgsSUFBSSxDQUROVyxVQUFVO0VBR1osSUFDRUMsTUFBTSxDQUFDQyxRQUFRLENBQUNULFVBQVUsQ0FBQyxJQUMzQlEsTUFBTSxDQUFDQyxRQUFRLENBQUNSLFVBQVUsQ0FBQyxJQUMzQk8sTUFBTSxDQUFDQyxRQUFRLENBQUNQLFVBQVUsQ0FBQyxJQUMzQk0sTUFBTSxDQUFDQyxRQUFRLENBQUNOLFVBQVUsQ0FBQyxJQUMzQkssTUFBTSxDQUFDQyxRQUFRLENBQUNMLFVBQVUsQ0FBQyxJQUMzQkksTUFBTSxDQUFDQyxRQUFRLENBQUNKLFVBQVUsQ0FBQyxJQUMzQkcsTUFBTSxDQUFDQyxRQUFRLENBQUNILFVBQVUsQ0FBQyxJQUMzQkUsTUFBTSxDQUFDQyxRQUFRLENBQUNGLFVBQVUsQ0FBQyxFQUMzQjtJQUNBLE9BQU87TUFDTEcsSUFBSSxFQUFFRixNQUFNLENBQUNDLFFBQVEsQ0FBQ1QsVUFBVSxDQUFDLEdBQUdBLFVBQVUsR0FBRyxDQUFDUixHQUFHO01BQ3JEbUIsSUFBSSxFQUFFSCxNQUFNLENBQUNDLFFBQVEsQ0FBQ1IsVUFBVSxDQUFDLEdBQUdBLFVBQVUsR0FBRyxDQUFDVCxHQUFHO01BQ3JEb0IsSUFBSSxFQUFFSixNQUFNLENBQUNDLFFBQVEsQ0FBQ1AsVUFBVSxDQUFDLEdBQUdBLFVBQVUsR0FBRyxDQUFDVixHQUFHO01BQ3JEcUIsSUFBSSxFQUFFTCxNQUFNLENBQUNDLFFBQVEsQ0FBQ04sVUFBVSxDQUFDLEdBQUdBLFVBQVUsR0FBRyxDQUFDWCxHQUFHO01BQ3JEc0IsSUFBSSxFQUFFTixNQUFNLENBQUNDLFFBQVEsQ0FBQ0wsVUFBVSxDQUFDLEdBQUdBLFVBQVUsR0FBR1osR0FBRztNQUNwRHVCLElBQUksRUFBRVAsTUFBTSxDQUFDQyxRQUFRLENBQUNKLFVBQVUsQ0FBQyxHQUFHQSxVQUFVLEdBQUdiLEdBQUc7TUFDcER3QixJQUFJLEVBQUVSLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSCxVQUFVLENBQUMsR0FBR0EsVUFBVSxHQUFHZCxHQUFHO01BQ3BEeUIsSUFBSSxFQUFFVCxNQUFNLENBQUNDLFFBQVEsQ0FBQ0YsVUFBVSxDQUFDLEdBQUdBLFVBQVUsR0FBR2Y7SUFDbkQsQ0FBQztFQUNIO0VBRUEsT0FBTyxJQUFJO0FBQ2I7QUFFTyxJQUFNMEIsTUFBb0IsR0FBQUMsT0FBQSxDQUFBRCxNQUFBLEdBQUc7RUFDbENFLElBQUksRUFBRSxZQUFZO0VBQ2xCN0IsRUFBRSxFQUFGQSxFQUFFO0VBQ0Y4QixZQUFZLEVBQUU7SUFDWlgsSUFBSSxFQUFFLEtBQUs7SUFDWEksSUFBSSxFQUFFLEtBQUs7SUFDWEgsSUFBSSxFQUFFLEtBQUs7SUFDWEksSUFBSSxFQUFFLEtBQUs7SUFDWEgsSUFBSSxFQUFFLEtBQUs7SUFDWEksSUFBSSxFQUFFLEtBQUs7SUFDWEgsSUFBSSxFQUFFLEtBQUs7SUFDWEksSUFBSSxFQUFFO0VBQ1IsQ0FBQztFQUNEdEIsV0FBVyxFQUFYQSxXQUFXO0VBQ1gyQixNQUFNLEVBQUU7SUFDTix3QkFBd0I7RUFVMUI7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119