@kepler.gl/deckgl-layers 3.2.6 → 3.3.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 (65) 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 -33
  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 +4913 -6
  13. package/dist/grid-layer/enhanced-cpu-grid-layer.js +67 -44
  14. package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +4910 -4
  15. package/dist/hexagon-layer/enhanced-hexagon-layer.js +82 -41
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +13 -1
  18. package/dist/layer-utils/aggregation-utils.d.ts +44 -0
  19. package/dist/layer-utils/aggregation-utils.js +181 -0
  20. package/dist/layer-utils/cpu-aggregator.d.ts +74 -27
  21. package/dist/layer-utils/cpu-aggregator.js +224 -19
  22. package/dist/layer-utils/shader-utils.d.ts +1 -0
  23. package/dist/layer-utils/shader-utils.js +10 -1
  24. package/dist/line-layer/line-layer.d.ts +4 -4
  25. package/dist/line-layer/line-layer.js +29 -21
  26. package/dist/raster/images.d.ts +10 -3
  27. package/dist/raster/images.js +154 -60
  28. package/dist/raster/pipeline-validation-patch.d.ts +1 -0
  29. package/dist/raster/pipeline-validation-patch.js +101 -0
  30. package/dist/raster/raster-layer/raster-layer-shaders.d.ts +56 -0
  31. package/dist/raster/raster-layer/raster-layer-shaders.js +163 -0
  32. package/dist/raster/raster-layer/raster-layer.d.ts +6 -6
  33. package/dist/raster/raster-layer/raster-layer.js +90 -88
  34. package/dist/raster/raster-mesh-layer/matrix.d.ts +3 -1
  35. package/dist/raster/raster-mesh-layer/matrix.js +3 -3
  36. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.d.ts +19 -0
  37. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  38. package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +7 -6
  39. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +97 -83
  40. package/dist/raster/raster-processing-uniforms.d.ts +38 -0
  41. package/dist/raster/raster-processing-uniforms.js +124 -0
  42. package/dist/raster/types.d.ts +8 -8
  43. package/dist/raster/types.js +1 -1
  44. package/dist/raster/util.d.ts +15 -0
  45. package/dist/raster/util.js +113 -3
  46. package/dist/raster/webgl/color/colormap.js +13 -7
  47. package/dist/raster/webgl/color/filter.js +22 -12
  48. package/dist/raster/webgl/color/gamma-contrast.js +9 -3
  49. package/dist/raster/webgl/color/linear-rescale.js +9 -5
  50. package/dist/raster/webgl/color/saturation.js +7 -4
  51. package/dist/raster/webgl/color/sigmoidal-contrast.js +9 -5
  52. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +7 -4
  53. package/dist/raster/webgl/texture/combine-bands.js +1 -1
  54. package/dist/raster/webgl/texture/mask.js +27 -35
  55. package/dist/raster/webgl/texture/reorder-bands.js +8 -5
  56. package/dist/raster/webgl/texture/rgba-image.js +1 -1
  57. package/dist/raster/webgl/types.d.ts +11 -6
  58. package/dist/raster/webgl/types.js +1 -1
  59. package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +2 -4
  60. package/dist/svg-icon-layer/scatterplot-icon-layer.js +19 -25
  61. package/dist/svg-icon-layer/svg-icon-layer.d.ts +4 -6
  62. package/dist/svg-icon-layer/svg-icon-layer.js +5 -3
  63. package/dist/wms/wms-layer.d.ts +8 -5
  64. package/dist/wms/wms-layer.js +100 -27
  65. package/package.json +21 -17
@@ -1,67 +1,90 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
- exports.gridAggregation = exports["default"] = void 0;
7
+ exports["default"] = void 0;
9
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
10
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
12
11
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
13
13
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
15
  var _aggregationLayers = require("@deck.gl/aggregation-layers");
15
- var _cpuAggregator = _interopRequireWildcard(require("../layer-utils/cpu-aggregator"));
16
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
17
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
16
+ var _aggregationUtils = require("../layer-utils/aggregation-utils");
17
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
18
+ 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; }
18
19
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
19
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } // SPDX-License-Identifier: MIT
20
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
21
+ function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; } // SPDX-License-Identifier: MIT
20
22
  // Copyright contributors to the kepler.gl project
21
- var gridAggregation = exports.gridAggregation = {
22
- key: 'position',
23
- updateSteps: [{
24
- key: 'aggregate',
25
- triggers: {
26
- cellSize: {
27
- prop: 'cellSize'
28
- },
29
- position: {
30
- prop: 'getPosition',
31
- updateTrigger: 'getPosition'
32
- },
33
- aggregator: {
34
- prop: 'gridAggregator'
35
- }
36
- },
37
- updater: _cpuAggregator.getAggregatedData
38
- }]
39
- };
40
- var ScaleEnhancedGridLayer = exports["default"] = /*#__PURE__*/function (_CPUGridLayer) {
23
+ /**
24
+ * In deck.gl 9, GridLayer natively supports CPU aggregation via gpuAggregation: false,
25
+ * custom getColorValue/getElevationValue accessors, percentile filtering, and scale types.
26
+ * The custom CPUAggregator override from deck.gl 8 is no longer needed.
27
+ *
28
+ * We override getPickingInfo to add `cellOutline` — an array of [lng, lat] coordinates
29
+ * computed in common space so the outline aligns with rendered cells at all latitudes.
30
+ *
31
+ * We also override _onAggregationUpdate to send per-bin aggregated values through
32
+ * onSetColorDomain so the legend can compute proper quantile/custom breaks.
33
+ */
34
+ // @ts-expect-error -- overriding private _onAggregationUpdate to enrich the onSetColorDomain callback
35
+ var ScaleEnhancedGridLayer = exports["default"] = /*#__PURE__*/function (_GridLayer) {
41
36
  function ScaleEnhancedGridLayer() {
42
37
  (0, _classCallCheck2["default"])(this, ScaleEnhancedGridLayer);
43
38
  return _callSuper(this, ScaleEnhancedGridLayer, arguments);
44
39
  }
45
- (0, _inherits2["default"])(ScaleEnhancedGridLayer, _CPUGridLayer);
40
+ (0, _inherits2["default"])(ScaleEnhancedGridLayer, _GridLayer);
46
41
  return (0, _createClass2["default"])(ScaleEnhancedGridLayer, [{
47
- key: "initializeState",
48
- value: function initializeState() {
49
- var cpuAggregator = new _cpuAggregator["default"]({
50
- aggregation: gridAggregation
51
- });
52
- this.state = {
53
- cpuAggregator: cpuAggregator,
54
- aggregatorState: cpuAggregator.state
55
- };
56
- var attributeManager = this.getAttributeManager();
57
- attributeManager.add({
58
- positions: {
59
- size: 3,
60
- accessor: 'getPosition'
42
+ key: "_onAggregationUpdate",
43
+ value:
44
+ // HACK: deck.gl 9's _onAggregationUpdate is private and its onSetColorDomain
45
+ // callback only provides [min, max]. That is sufficient for quantize/linear
46
+ // scales but d3.scaleQuantile needs the *full sorted array* of bin values to
47
+ // compute correct break points — without it the legend labels are wrong
48
+ function _onAggregationUpdate(_ref) {
49
+ var channel = _ref.channel;
50
+ (0, _aggregationUtils.enrichedAggregationUpdate)(this, _aggregationLayers.GridLayer, channel);
51
+ }
52
+ }, {
53
+ key: "renderLayers",
54
+ value: function renderLayers() {
55
+ return (0, _aggregationUtils.enrichedRenderLayers)(this, _aggregationLayers.GridLayer);
56
+ }
57
+ }, {
58
+ key: "getPickingInfo",
59
+ value: function getPickingInfo(params) {
60
+ var info = _superPropGet(ScaleEnhancedGridLayer, "getPickingInfo", this, 3)([params]);
61
+ if (info.object) {
62
+ var _this$props$coverage;
63
+ var _ref2 = this.state,
64
+ cellOriginCommon = _ref2.cellOriginCommon,
65
+ cellSizeCommon = _ref2.cellSizeCommon,
66
+ aggregatorViewport = _ref2.aggregatorViewport;
67
+ var coverage = (_this$props$coverage = this.props.coverage) !== null && _this$props$coverage !== void 0 ? _this$props$coverage : 1;
68
+ if (!cellOriginCommon || !cellSizeCommon || !aggregatorViewport) {
69
+ console.error('ScaleEnhancedGridLayer: expected internal state properties ' + '(cellOriginCommon, cellSizeCommon, aggregatorViewport) are missing. ' + 'Hover outline will not be shown. This may indicate a deck.gl version change.');
70
+ return info;
61
71
  }
62
- });
72
+ var _ref3 = info.object,
73
+ col = _ref3.col,
74
+ row = _ref3.row;
75
+ if (typeof col !== 'number' || typeof row !== 'number') return info;
76
+ var cx = (col + 0.5) * cellSizeCommon[0] + cellOriginCommon[0];
77
+ var cy = (row + 0.5) * cellSizeCommon[1] + cellOriginCommon[1];
78
+ var hw = 0.5 * coverage * cellSizeCommon[0];
79
+ var hh = 0.5 * coverage * cellSizeCommon[1];
80
+ info.object.cellOutline = [aggregatorViewport.unprojectFlat([cx - hw, cy - hh]), aggregatorViewport.unprojectFlat([cx + hw, cy - hh]), aggregatorViewport.unprojectFlat([cx + hw, cy + hh]), aggregatorViewport.unprojectFlat([cx - hw, cy + hh]), aggregatorViewport.unprojectFlat([cx - hw, cy - hh])];
81
+ }
82
+ return info;
63
83
  }
64
84
  }]);
65
- }(_aggregationLayers.CPUGridLayer);
85
+ }(_aggregationLayers.GridLayer);
86
+ (0, _defineProperty2["default"])(ScaleEnhancedGridLayer, "defaultProps", _objectSpread(_objectSpread({}, _aggregationLayers.GridLayer.defaultProps), {}, {
87
+ gpuAggregation: false
88
+ }));
66
89
  ScaleEnhancedGridLayer.layerName = 'ScaleEnhancedGridLayer';
67
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWdncmVnYXRpb25MYXllcnMiLCJyZXF1aXJlIiwiX2NwdUFnZ3JlZ2F0b3IiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jYWxsU3VwZXIiLCJvIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiZ3JpZEFnZ3JlZ2F0aW9uIiwiZXhwb3J0cyIsImtleSIsInVwZGF0ZVN0ZXBzIiwidHJpZ2dlcnMiLCJjZWxsU2l6ZSIsInByb3AiLCJwb3NpdGlvbiIsInVwZGF0ZVRyaWdnZXIiLCJhZ2dyZWdhdG9yIiwidXBkYXRlciIsImdldEFnZ3JlZ2F0ZWREYXRhIiwiU2NhbGVFbmhhbmNlZEdyaWRMYXllciIsIl9DUFVHcmlkTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiYXJndW1lbnRzIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJ2YWx1ZSIsImluaXRpYWxpemVTdGF0ZSIsImNwdUFnZ3JlZ2F0b3IiLCJDUFVBZ2dyZWdhdG9yIiwiYWdncmVnYXRpb24iLCJzdGF0ZSIsImFnZ3JlZ2F0b3JTdGF0ZSIsImF0dHJpYnV0ZU1hbmFnZXIiLCJnZXRBdHRyaWJ1dGVNYW5hZ2VyIiwiYWRkIiwicG9zaXRpb25zIiwic2l6ZSIsImFjY2Vzc29yIiwiQ1BVR3JpZExheWVyIiwibGF5ZXJOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dyaWQtbGF5ZXIvZW5oYW5jZWQtY3B1LWdyaWQtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtDUFVHcmlkTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2FnZ3JlZ2F0aW9uLWxheWVycyc7XG5pbXBvcnQgQ1BVQWdncmVnYXRvciwge0FnZ3JlZ2F0aW9uVHlwZSwgZ2V0QWdncmVnYXRlZERhdGF9IGZyb20gJy4uL2xheWVyLXV0aWxzL2NwdS1hZ2dyZWdhdG9yJztcblxuZXhwb3J0IGNvbnN0IGdyaWRBZ2dyZWdhdGlvbjogQWdncmVnYXRpb25UeXBlID0ge1xuICBrZXk6ICdwb3NpdGlvbicsXG4gIHVwZGF0ZVN0ZXBzOiBbXG4gICAge1xuICAgICAga2V5OiAnYWdncmVnYXRlJyxcbiAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgIGNlbGxTaXplOiB7XG4gICAgICAgICAgcHJvcDogJ2NlbGxTaXplJ1xuICAgICAgICB9LFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIHByb3A6ICdnZXRQb3NpdGlvbicsXG4gICAgICAgICAgdXBkYXRlVHJpZ2dlcjogJ2dldFBvc2l0aW9uJ1xuICAgICAgICB9LFxuICAgICAgICBhZ2dyZWdhdG9yOiB7XG4gICAgICAgICAgcHJvcDogJ2dyaWRBZ2dyZWdhdG9yJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXBkYXRlcjogZ2V0QWdncmVnYXRlZERhdGFcbiAgICB9XG4gIF1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNjYWxlRW5oYW5jZWRHcmlkTGF5ZXIgZXh0ZW5kcyBDUFVHcmlkTGF5ZXI8YW55PiB7XG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICBjb25zdCBjcHVBZ2dyZWdhdG9yID0gbmV3IENQVUFnZ3JlZ2F0b3Ioe1xuICAgICAgYWdncmVnYXRpb246IGdyaWRBZ2dyZWdhdGlvblxuICAgIH0pO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNwdUFnZ3JlZ2F0b3IsXG4gICAgICBhZ2dyZWdhdG9yU3RhdGU6IGNwdUFnZ3JlZ2F0b3Iuc3RhdGVcbiAgICB9O1xuICAgIGNvbnN0IGF0dHJpYnV0ZU1hbmFnZXIgPSB0aGlzLmdldEF0dHJpYnV0ZU1hbmFnZXIoKTtcbiAgICBhdHRyaWJ1dGVNYW5hZ2VyLmFkZCh7XG4gICAgICBwb3NpdGlvbnM6IHtzaXplOiAzLCBhY2Nlc3NvcjogJ2dldFBvc2l0aW9uJ31cbiAgICB9KTtcbiAgfVxufVxuXG5TY2FsZUVuaGFuY2VkR3JpZExheWVyLmxheWVyTmFtZSA9ICdTY2FsZUVuaGFuY2VkR3JpZExheWVyJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGtCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFBZ0csU0FBQUcseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFGLHdCQUFBRSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtB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
90
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWdncmVnYXRpb25MYXllcnMiLCJyZXF1aXJlIiwiX2FnZ3JlZ2F0aW9uVXRpbHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJTY2FsZUVuaGFuY2VkR3JpZExheWVyIiwiZXhwb3J0cyIsIl9HcmlkTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsIl9vbkFnZ3JlZ2F0aW9uVXBkYXRlIiwiX3JlZiIsImNoYW5uZWwiLCJlbnJpY2hlZEFnZ3JlZ2F0aW9uVXBkYXRlIiwiR3JpZExheWVyIiwicmVuZGVyTGF5ZXJzIiwiZW5yaWNoZWRSZW5kZXJMYXllcnMiLCJnZXRQaWNraW5nSW5mbyIsInBhcmFtcyIsImluZm8iLCJvYmplY3QiLCJfdGhpcyRwcm9wcyRjb3ZlcmFnZSIsIl9yZWYyIiwic3RhdGUiLCJjZWxsT3JpZ2luQ29tbW9uIiwiY2VsbFNpemVDb21tb24iLCJhZ2dyZWdhdG9yVmlld3BvcnQiLCJjb3ZlcmFnZSIsInByb3BzIiwiY29uc29sZSIsImVycm9yIiwiX3JlZjMiLCJjb2wiLCJyb3ciLCJjeCIsImN5IiwiaHciLCJoaCIsImNlbGxPdXRsaW5lIiwidW5wcm9qZWN0RmxhdCIsImRlZmF1bHRQcm9wcyIsImdwdUFnZ3JlZ2F0aW9uIiwibGF5ZXJOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dyaWQtbGF5ZXIvZW5oYW5jZWQtY3B1LWdyaWQtbGF5ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtHcmlkTGF5ZXIsIEdyaWRMYXllclBpY2tpbmdJbmZvfSBmcm9tICdAZGVjay5nbC9hZ2dyZWdhdGlvbi1sYXllcnMnO1xuaW1wb3J0IHtHZXRQaWNraW5nSW5mb1BhcmFtcywgUGlja2luZ0luZm8sIFZpZXdwb3J0fSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7ZW5yaWNoZWRBZ2dyZWdhdGlvblVwZGF0ZSwgZW5yaWNoZWRSZW5kZXJMYXllcnN9IGZyb20gJy4uL2xheWVyLXV0aWxzL2FnZ3JlZ2F0aW9uLXV0aWxzJztcblxuaW50ZXJmYWNlIEdyaWRJbnRlcm5hbFN0YXRlIHtcbiAgY2VsbE9yaWdpbkNvbW1vbj86IFtudW1iZXIsIG51bWJlcl07XG4gIGNlbGxTaXplQ29tbW9uPzogW251bWJlciwgbnVtYmVyXTtcbiAgYWdncmVnYXRvclZpZXdwb3J0PzogVmlld3BvcnQgJiB7dW5wcm9qZWN0RmxhdCh4eTogbnVtYmVyW10pOiBudW1iZXJbXX07XG59XG5cbmludGVyZmFjZSBHcmlkUGlja2luZ09iamVjdCB7XG4gIGNvbDogbnVtYmVyO1xuICByb3c6IG51bWJlcjtcbiAgY2VsbE91dGxpbmU/OiBudW1iZXJbXVtdO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG4vKipcbiAqIEluIGRlY2suZ2wgOSwgR3JpZExheWVyIG5hdGl2ZWx5IHN1cHBvcnRzIENQVSBhZ2dyZWdhdGlvbiB2aWEgZ3B1QWdncmVnYXRpb246IGZhbHNlLFxuICogY3VzdG9tIGdldENvbG9yVmFsdWUvZ2V0RWxldmF0aW9uVmFsdWUgYWNjZXNzb3JzLCBwZXJjZW50aWxlIGZpbHRlcmluZywgYW5kIHNjYWxlIHR5cGVzLlxuICogVGhlIGN1c3RvbSBDUFVBZ2dyZWdhdG9yIG92ZXJyaWRlIGZyb20gZGVjay5nbCA4IGlzIG5vIGxvbmdlciBuZWVkZWQuXG4gKlxuICogV2Ugb3ZlcnJpZGUgZ2V0UGlja2luZ0luZm8gdG8gYWRkIGBjZWxsT3V0bGluZWAg4oCUIGFuIGFycmF5IG9mIFtsbmcsIGxhdF0gY29vcmRpbmF0ZXNcbiAqIGNvbXB1dGVkIGluIGNvbW1vbiBzcGFjZSBzbyB0aGUgb3V0bGluZSBhbGlnbnMgd2l0aCByZW5kZXJlZCBjZWxscyBhdCBhbGwgbGF0aXR1ZGVzLlxuICpcbiAqIFdlIGFsc28gb3ZlcnJpZGUgX29uQWdncmVnYXRpb25VcGRhdGUgdG8gc2VuZCBwZXItYmluIGFnZ3JlZ2F0ZWQgdmFsdWVzIHRocm91Z2hcbiAqIG9uU2V0Q29sb3JEb21haW4gc28gdGhlIGxlZ2VuZCBjYW4gY29tcHV0ZSBwcm9wZXIgcXVhbnRpbGUvY3VzdG9tIGJyZWFrcy5cbiAqL1xuLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBvdmVycmlkaW5nIHByaXZhdGUgX29uQWdncmVnYXRpb25VcGRhdGUgdG8gZW5yaWNoIHRoZSBvblNldENvbG9yRG9tYWluIGNhbGxiYWNrXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY2FsZUVuaGFuY2VkR3JpZExheWVyIGV4dGVuZHMgR3JpZExheWVyPGFueT4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIC4uLkdyaWRMYXllci5kZWZhdWx0UHJvcHMsXG4gICAgZ3B1QWdncmVnYXRpb246IGZhbHNlXG4gIH07XG5cbiAgLy8gSEFDSzogZGVjay5nbCA5J3MgX29uQWdncmVnYXRpb25VcGRhdGUgaXMgcHJpdmF0ZSBhbmQgaXRzIG9uU2V0Q29sb3JEb21haW5cbiAgLy8gY2FsbGJhY2sgb25seSBwcm92aWRlcyBbbWluLCBtYXhdLiAgVGhhdCBpcyBzdWZmaWNpZW50IGZvciBxdWFudGl6ZS9saW5lYXJcbiAgLy8gc2NhbGVzIGJ1dCBkMy5zY2FsZVF1YW50aWxlIG5lZWRzIHRoZSAqZnVsbCBzb3J0ZWQgYXJyYXkqIG9mIGJpbiB2YWx1ZXMgdG9cbiAgLy8gY29tcHV0ZSBjb3JyZWN0IGJyZWFrIHBvaW50cyDigJQgd2l0aG91dCBpdCB0aGUgbGVnZW5kIGxhYmVscyBhcmUgd3JvbmdcbiAgX29uQWdncmVnYXRpb25VcGRhdGUoe2NoYW5uZWx9OiB7Y2hhbm5lbDogbnVtYmVyfSkge1xuICAgIGVucmljaGVkQWdncmVnYXRpb25VcGRhdGUodGhpcywgR3JpZExheWVyLCBjaGFubmVsKTtcbiAgfVxuXG4gIHJlbmRlckxheWVycygpIHtcbiAgICByZXR1cm4gZW5yaWNoZWRSZW5kZXJMYXllcnModGhpcywgR3JpZExheWVyKTtcbiAgfVxuXG4gIGdldFBpY2tpbmdJbmZvKHBhcmFtczogR2V0UGlja2luZ0luZm9QYXJhbXMpOiBQaWNraW5nSW5mbyB7XG4gICAgY29uc3QgaW5mbyA9IHN1cGVyLmdldFBpY2tpbmdJbmZvKHBhcmFtcykgYXMgR3JpZExheWVyUGlja2luZ0luZm88UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAgIGlmIChpbmZvLm9iamVjdCkge1xuICAgICAgY29uc3Qge2NlbGxPcmlnaW5Db21tb24sIGNlbGxTaXplQ29tbW9uLCBhZ2dyZWdhdG9yVmlld3BvcnR9ID0gdGhpc1xuICAgICAgICAuc3RhdGUgYXMgdW5rbm93biBhcyBHcmlkSW50ZXJuYWxTdGF0ZTtcbiAgICAgIGNvbnN0IGNvdmVyYWdlID0gdGhpcy5wcm9wcy5jb3ZlcmFnZSA/PyAxO1xuICAgICAgaWYgKCFjZWxsT3JpZ2luQ29tbW9uIHx8ICFjZWxsU2l6ZUNvbW1vbiB8fCAhYWdncmVnYXRvclZpZXdwb3J0KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ1NjYWxlRW5oYW5jZWRHcmlkTGF5ZXI6IGV4cGVjdGVkIGludGVybmFsIHN0YXRlIHByb3BlcnRpZXMgJyArXG4gICAgICAgICAgICAnKGNlbGxPcmlnaW5Db21tb24sIGNlbGxTaXplQ29tbW9uLCBhZ2dyZWdhdG9yVmlld3BvcnQpIGFyZSBtaXNzaW5nLiAnICtcbiAgICAgICAgICAgICdIb3ZlciBvdXRsaW5lIHdpbGwgbm90IGJlIHNob3duLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGRlY2suZ2wgdmVyc2lvbiBjaGFuZ2UuJ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtjb2wsIHJvd30gPSBpbmZvLm9iamVjdCBhcyBHcmlkUGlja2luZ09iamVjdDtcbiAgICAgIGlmICh0eXBlb2YgY29sICE9PSAnbnVtYmVyJyB8fCB0eXBlb2Ygcm93ICE9PSAnbnVtYmVyJykgcmV0dXJuIGluZm87XG4gICAgICBjb25zdCBjeCA9IChjb2wgKyAwLjUpICogY2VsbFNpemVDb21tb25bMF0gKyBjZWxsT3JpZ2luQ29tbW9uWzBdO1xuICAgICAgY29uc3QgY3kgPSAocm93ICsgMC41KSAqIGNlbGxTaXplQ29tbW9uWzFdICsgY2VsbE9yaWdpbkNvbW1vblsxXTtcbiAgICAgIGNvbnN0IGh3ID0gMC41ICogY292ZXJhZ2UgKiBjZWxsU2l6ZUNvbW1vblswXTtcbiAgICAgIGNvbnN0IGhoID0gMC41ICogY292ZXJhZ2UgKiBjZWxsU2l6ZUNvbW1vblsxXTtcblxuICAgICAgKGluZm8ub2JqZWN0IGFzIEdyaWRQaWNraW5nT2JqZWN0KS5jZWxsT3V0bGluZSA9IFtcbiAgICAgICAgYWdncmVnYXRvclZpZXdwb3J0LnVucHJvamVjdEZsYXQoW2N4IC0gaHcsIGN5IC0gaGhdKSxcbiAgICAgICAgYWdncmVnYXRvclZpZXdwb3J0LnVucHJvamVjdEZsYXQoW2N4ICsgaHcsIGN5IC0gaGhdKSxcbiAgICAgICAgYWdncmVnYXRvclZpZXdwb3J0LnVucHJvamVjdEZsYXQoW2N4ICsgaHcsIGN5ICsgaGhdKSxcbiAgICAgICAgYWdncmVnYXRvclZpZXdwb3J0LnVucHJvamVjdEZsYXQoW2N4IC0gaHcsIGN5ICsgaGhdKSxcbiAgICAgICAgYWdncmVnYXRvclZpZXdwb3J0LnVucHJvamVjdEZsYXQoW2N4IC0gaHcsIGN5IC0gaGhdKVxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG4gIH1cbn1cblxuU2NhbGVFbmhhbmNlZEdyaWRMYXllci5sYXllck5hbWUgPSAnU2NhbGVFbmhhbmNlZEdyaWRMYXllcic7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsa0JBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLGlCQUFBLEdBQUFELE9BQUE7QUFBaUcsU0FBQUUsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9B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