UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

352 lines (341 loc) 30.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.LAYER_TEXT_CONFIGS = exports.LAYER_VIS_CONFIGS = exports.PROPERTY_GROUPS = undefined; var _keymirror = require('keymirror'); var _keymirror2 = _interopRequireDefault(_keymirror); var _defaultSettings = require('../constants/default-settings'); var _colorRanges = require('../constants/color-ranges'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var PROPERTY_GROUPS = exports.PROPERTY_GROUPS = (0, _keymirror2.default)({ color: null, stroke: null, radius: null, height: null, // for heatmap aggregation cell: null, precision: null }); // Copyright (c) 2018 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. var LAYER_VIS_CONFIGS = exports.LAYER_VIS_CONFIGS = { thickness: { type: 'number', defaultValue: 2, label: 'Stroke Width', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.stroke, property: 'thickness' }, strokeWidthRange: { type: 'number', defaultValue: [0, 10], label: 'Stroke Width Range', isRanged: true, range: [0, 200], step: 0.1, group: PROPERTY_GROUPS.stroke, property: 'sizeRange' }, // radius is actually radiusScale in deck.gl radius: { type: 'number', defaultValue: 10, label: 'Radius', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'radius' }, fixedRadius: { defaultValue: false, type: 'boolean', label: 'Fixed Radius to meter', description: 'Map radius to absolute radius in meters, e.g. 5 to 5 meters', group: PROPERTY_GROUPS.radius, property: 'fixedRadius' }, radiusRange: { type: 'number', defaultValue: [0, 50], isRanged: true, range: [0, 500], step: 0.1, label: 'Radius Range', group: PROPERTY_GROUPS.radius, property: 'radiusRange' }, clusterRadius: { type: 'number', label: 'Cluster Size (m)', defaultValue: 40, isRanged: false, range: [1, 500], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'clusterRadius' }, clusterRadiusRange: { type: 'number', label: 'Radius Range (m)', defaultValue: [1, 40], isRanged: true, range: [1, 150], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'radiusRange' }, opacity: { type: 'number', defaultValue: 0.8, label: 'Opacity', isRanged: false, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.color, property: 'opacity' }, coverage: { type: 'number', defaultValue: 1, label: 'Coverage', isRanged: false, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.cell, property: 'coverage' }, outline: { type: 'boolean', defaultValue: false, label: 'Draw outline', group: PROPERTY_GROUPS.display, property: 'outline' }, colorRange: { type: 'color-range-select', defaultValue: _colorRanges.DefaultColorRange, label: 'Color range', group: PROPERTY_GROUPS.color, property: 'colorRange' }, targetColor: { type: 'color-select', label: 'Target Color', defaultValue: null, group: PROPERTY_GROUPS.color, property: 'targetColor' }, aggregation: { type: 'select', defaultValue: _defaultSettings.AGGREGATION_TYPES.average, label: 'Color Aggregation', // aggregation options are based on color field types options: Object.keys(_defaultSettings.AGGREGATION_TYPES), group: PROPERTY_GROUPS.color, property: 'colorAggregation', condition: function condition(config) { return config.colorField; } }, sizeAggregation: { type: 'select', defaultValue: _defaultSettings.AGGREGATION_TYPES.average, label: 'Height Aggregation', // aggregation options are based on color field types options: Object.keys(_defaultSettings.AGGREGATION_TYPES), group: PROPERTY_GROUPS.height, property: 'sizeAggregation', condition: function condition(config) { return config.sizeField; } }, percentile: { type: 'number', defaultValue: [0, 100], label: function label(config) { return 'Filter by ' + (config.colorField ? config.visConfig.colorAggregation + ' ' + config.colorField.name : 'count') + ' percentile'; }, isRanged: true, range: [0, 100], step: 0.01, group: PROPERTY_GROUPS.color, property: 'percentile', // percentile filter only makes sense with linear aggregation condition: function condition(config) { return config.colorScale !== 'ordinal'; } }, elevationPercentile: { type: 'number', defaultValue: [0, 100], label: function label(config) { return 'Filter by ' + (config.sizeField ? config.visConfig.sizeAggregation + ' ' + config.sizeField.name : 'count') + ' percentile'; }, isRanged: true, range: [0, 100], step: 0.01, group: PROPERTY_GROUPS.height, property: 'elevationPercentile', // percentile filter only makes sense with linear aggregation condition: function condition(config) { return config.visConfig.enable3d && (config.colorField || config.sizeField); } }, resolution: { type: 'number', defaultValue: 8, label: 'Resolution range', isRanged: false, range: [0, 13], step: 1, group: PROPERTY_GROUPS.cell, property: 'resolution' }, worldUnitSize: { type: 'number', defaultValue: 1, label: 'World Unit Size', isRanged: false, range: [0.01, 500], step: 0.01, group: PROPERTY_GROUPS.cell, property: 'worldUnitSize' }, elevationScale: { type: 'number', defaultValue: 5, label: 'Elevation Scale', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.height, property: 'elevationScale' }, elevationRange: { type: 'number', defaultValue: [0, 500], label: 'Height Scale', isRanged: true, range: [0, 1000], step: 0.01, group: PROPERTY_GROUPS.height, property: 'sizeRange' }, coverageRange: { type: 'number', defaultValue: [0, 1], label: 'Coverage Range', isRanged: true, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.radius, property: 'coverageRange' }, 'hi-precision': { type: 'boolean', defaultValue: false, label: 'High Precision Rendering', group: PROPERTY_GROUPS.precision, property: 'hi-precision', description: 'High precision will result in slower performance' }, enable3d: { type: 'boolean', defaultValue: false, label: 'Enable Height', group: PROPERTY_GROUPS.height, property: 'enable3d', description: 'Click button at top right of the map to switch to 3d view' }, stroked: { type: 'boolean', label: 'Polygon Stroke', defaultValue: true, group: PROPERTY_GROUPS.display, property: 'stroked' }, filled: { type: 'boolean', label: 'Polygon Fill', defaultValue: false, group: PROPERTY_GROUPS.display, property: 'filled' }, extruded: { type: 'boolean', defaultValue: false, label: 'Enable Polygon Height', group: PROPERTY_GROUPS.display, property: 'extruded' }, wireframe: { type: 'boolean', defaultValue: false, label: 'Show Wireframe', group: PROPERTY_GROUPS.display, property: 'wireframe' }, // used for heatmap weight: { type: 'number', defaultValue: 1, label: 'Weight Intensity', isRanged: false, range: [0.01, 500], step: 0.01, group: PROPERTY_GROUPS.cell, property: 'weight', condition: function condition(config) { return config.weightField; } }, heatmapRadius: { type: 'number', defaultValue: 20, label: 'Radius', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.cell, property: 'radius' } }; var LAYER_TEXT_CONFIGS = exports.LAYER_TEXT_CONFIGS = { fontSize: { type: 'number', range: [1, 100], value0: 1, step: 1, isRanged: false, label: 'Font size', showInput: true }, textAnchor: { type: 'select', options: ['start', 'middle', 'end'], multiSelect: false, searchable: false } }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvbGF5ZXItZmFjdG9yeS5qcyJdLCJuYW1lcyI6WyJQUk9QRVJUWV9HUk9VUFMiLCJjb2xvciIsInN0cm9rZSIsInJhZGl1cyIsImhlaWdodCIsImNlbGwiLCJwcmVjaXNpb24iLCJMQVlFUl9WSVNfQ09ORklHUyIsInRoaWNrbmVzcyIsInR5cGUiLCJkZWZhdWx0VmFsdWUiLCJsYWJlbCIsImlzUmFuZ2VkIiwicmFuZ2UiLCJzdGVwIiwiZ3JvdXAiLCJwcm9wZXJ0eSIsInN0cm9rZVdpZHRoUmFuZ2UiLCJmaXhlZFJhZGl1cyIsImRlc2NyaXB0aW9uIiwicmFkaXVzUmFuZ2UiLCJjbHVzdGVyUmFkaXVzIiwiY2x1c3RlclJhZGl1c1JhbmdlIiwib3BhY2l0eSIsImNvdmVyYWdlIiwib3V0bGluZSIsImRpc3BsYXkiLCJjb2xvclJhbmdlIiwiRGVmYXVsdENvbG9yUmFuZ2UiLCJ0YXJnZXRDb2xvciIsImFnZ3JlZ2F0aW9uIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJhdmVyYWdlIiwib3B0aW9ucyIsIk9iamVjdCIsImtleXMiLCJjb25kaXRpb24iLCJjb25maWciLCJjb2xvckZpZWxkIiwic2l6ZUFnZ3JlZ2F0aW9uIiwic2l6ZUZpZWxkIiwicGVyY2VudGlsZSIsInZpc0NvbmZpZyIsImNvbG9yQWdncmVnYXRpb24iLCJuYW1lIiwiY29sb3JTY2FsZSIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJlbmFibGUzZCIsInJlc29sdXRpb24iLCJ3b3JsZFVuaXRTaXplIiwiZWxldmF0aW9uU2NhbGUiLCJlbGV2YXRpb25SYW5nZSIsImNvdmVyYWdlUmFuZ2UiLCJzdHJva2VkIiwiZmlsbGVkIiwiZXh0cnVkZWQiLCJ3aXJlZnJhbWUiLCJ3ZWlnaHQiLCJ3ZWlnaHRGaWVsZCIsImhlYXRtYXBSYWRpdXMiLCJMQVlFUl9URVhUX0NPTkZJR1MiLCJmb250U2l6ZSIsInZhbHVlMCIsInNob3dJbnB1dCIsInRleHRBbmNob3IiLCJtdWx0aVNl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QUE7QUFUTCxHQXJRdUI7QUFnUi9CQyxpQkFBZTtBQUNibEQsVUFBTSxRQURPO0FBRWJDLGtCQUFjLEVBRkQ7QUFHYkMsV0FBTyxRQUhNO0FBSWJDLGNBQVUsS0FKRztBQUtiQyxXQUFPLENBQUMsQ0FBRCxFQUFJLEdBQUosQ0FMTTtBQU1iQyxVQUFNLEdBTk87QUFPYkMsV0FBT2YsZ0JBQWdCSyxJQVBWO0FBUWJXLGNBQVU7QUFSRztBQWhSZ0IsQ0FBMUI7O0FBNFJBLElBQU00QyxrREFBcUI7QUFDaENDLFlBQVU7QUFDUnBELFVBQU0sUUFERTtBQUVSSSxXQUFPLENBQUMsQ0FBRCxFQUFJLEdBQUosQ0FGQztBQUdSaUQsWUFBUSxDQUhBO0FBSVJoRCxVQUFNLENBSkU7QUFLUkYsY0FBVSxLQUxGO0FBTVJELFdBQU8sV0FOQztBQU9Sb0QsZUFBVztBQVBILEdBRHNCO0FBVWhDQyxjQUFZO0FBQ1Z2RCxVQUFNLFFBREk7QUFFVndCLGFBQVMsQ0FBQyxPQUFELEVBQVUsUUFBVixFQUFvQixLQUFwQixDQUZDO0FBR1ZnQyxpQkFBYSxLQUhIO0FBSVZDLGdCQUFZO0FBSkY7QUFWb0IsQ0FBM0IiLCJmaWxlIjoibGF5ZXItZmFjdG9yeS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxOCBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBrZXlNaXJyb3IgZnJvbSAna2V5bWlycm9yJztcblxuaW1wb3J0IHtBR0dSRUdBVElPTl9UWVBFU30gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuaW1wb3J0IHtEZWZhdWx0Q29sb3JSYW5nZX0gZnJvbSAnY29uc3RhbnRzL2NvbG9yLXJhbmdlcyc7XG5cbmV4cG9ydCBjb25zdCBQUk9QRVJUWV9HUk9VUFMgPSBrZXlNaXJyb3Ioe1xuICBjb2xvcjogbnVsbCxcbiAgc3Ryb2tlOiBudWxsLFxuICByYWRpdXM6IG51bGwsXG4gIGhlaWdodDogbnVsbCxcblxuICAvLyBmb3IgaGVhdG1hcCBhZ2dyZWdhdGlvblxuICBjZWxsOiBudWxsLFxuICBwcmVjaXNpb246IG51bGxcbn0pO1xuXG5leHBvcnQgY29uc3QgTEFZRVJfVklTX0NPTkZJR1MgPSB7XG4gIHRoaWNrbmVzczoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMixcbiAgICBsYWJlbDogJ1N0cm9rZSBXaWR0aCcsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5zdHJva2UsXG4gICAgcHJvcGVydHk6ICd0aGlja25lc3MnXG4gIH0sXG4gIHN0cm9rZVdpZHRoUmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxMF0sXG4gICAgbGFiZWw6ICdTdHJva2UgV2lkdGggUmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMjAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5zdHJva2UsXG4gICAgcHJvcGVydHk6ICdzaXplUmFuZ2UnXG4gIH0sXG4gIC8vIHJhZGl1cyBpcyBhY3R1YWxseSByYWRpdXNTY2FsZSBpbiBkZWNrLmdsXG4gIHJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMTAsXG4gICAgbGFiZWw6ICdSYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAncmFkaXVzJ1xuICB9LFxuICBmaXhlZFJhZGl1czoge1xuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnRml4ZWQgUmFkaXVzIHRvIG1ldGVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ01hcCByYWRpdXMgdG8gYWJzb2x1dGUgcmFkaXVzIGluIG1ldGVycywgZS5nLiA1IHRvIDUgbWV0ZXJzJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2ZpeGVkUmFkaXVzJ1xuICB9LFxuICByYWRpdXNSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDUwXSxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDUwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGxhYmVsOiAnUmFkaXVzIFJhbmdlJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1c1JhbmdlJ1xuICB9LFxuICBjbHVzdGVyUmFkaXVzOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdDbHVzdGVyIFNpemUgKG0pJyxcbiAgICBkZWZhdWx0VmFsdWU6IDQwLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzEsIDUwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAnY2x1c3RlclJhZGl1cydcbiAgfSxcbiAgY2x1c3RlclJhZGl1c1JhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdSYWRpdXMgUmFuZ2UgKG0pJyxcbiAgICBkZWZhdWx0VmFsdWU6IFsxLCA0MF0sXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFsxLCAxNTBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1c1JhbmdlJ1xuICB9LFxuICBvcGFjaXR5OiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAwLjgsXG4gICAgbGFiZWw6ICdPcGFjaXR5JyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdvcGFjaXR5J1xuICB9LFxuICBjb3ZlcmFnZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICBsYWJlbDogJ0NvdmVyYWdlJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlJ1xuICB9LFxuICBvdXRsaW5lOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdEcmF3IG91dGxpbmUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ291dGxpbmUnXG4gIH0sXG4gIGNvbG9yUmFuZ2U6IHtcbiAgICB0eXBlOiAnY29sb3ItcmFuZ2Utc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IERlZmF1bHRDb2xvclJhbmdlLFxuICAgIGxhYmVsOiAnQ29sb3IgcmFuZ2UnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdjb2xvclJhbmdlJ1xuICB9LFxuICB0YXJnZXRDb2xvcjoge1xuICAgIHR5cGU6ICdjb2xvci1zZWxlY3QnLFxuICAgIGxhYmVsOiAnVGFyZ2V0IENvbG9yJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ3RhcmdldENvbG9yJ1xuICB9LFxuICBhZ2dyZWdhdGlvbjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBsYWJlbDogJ0NvbG9yIEFnZ3JlZ2F0aW9uJyxcbiAgICAvLyBhZ2dyZWdhdGlvbiBvcHRpb25zIGFyZSBiYXNlZCBvbiBjb2xvciBmaWVsZCB0eXBlc1xuICAgIG9wdGlvbnM6IE9iamVjdC5rZXlzKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnY29sb3JBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLmNvbG9yRmllbGRcbiAgfSxcbiAgc2l6ZUFnZ3JlZ2F0aW9uOiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgZGVmYXVsdFZhbHVlOiBBR0dSRUdBVElPTl9UWVBFUy5hdmVyYWdlLFxuICAgIGxhYmVsOiAnSGVpZ2h0IEFnZ3JlZ2F0aW9uJyxcbiAgICAvLyBhZ2dyZWdhdGlvbiBvcHRpb25zIGFyZSBiYXNlZCBvbiBjb2xvciBmaWVsZCB0eXBlc1xuICAgIG9wdGlvbnM6IE9iamVjdC5rZXlzKEFHR1JFR0FUSU9OX1RZUEVTKSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ3NpemVBZ2dyZWdhdGlvbicsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnNpemVGaWVsZFxuICB9LFxuICBwZXJjZW50aWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTAwXSxcbiAgICBsYWJlbDogY29uZmlnID0+XG4gICAgICBgRmlsdGVyIGJ5ICR7XG4gICAgICAgIGNvbmZpZy5jb2xvckZpZWxkXG4gICAgICAgICAgPyBgJHtjb25maWcudmlzQ29uZmlnLmNvbG9yQWdncmVnYXRpb259ICR7Y29uZmlnLmNvbG9yRmllbGQubmFtZX1gXG4gICAgICAgICAgOiAnY291bnQnXG4gICAgICB9IHBlcmNlbnRpbGVgLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdwZXJjZW50aWxlJyxcblxuICAgIC8vIHBlcmNlbnRpbGUgZmlsdGVyIG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCBsaW5lYXIgYWdncmVnYXRpb25cbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcuY29sb3JTY2FsZSAhPT0gJ29yZGluYWwnXG4gIH0sXG4gIGVsZXZhdGlvblBlcmNlbnRpbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxMDBdLFxuICAgIGxhYmVsOiBjb25maWcgPT5cbiAgICAgIGBGaWx0ZXIgYnkgJHtcbiAgICAgICAgY29uZmlnLnNpemVGaWVsZFxuICAgICAgICAgID8gYCR7Y29uZmlnLnZpc0NvbmZpZy5zaXplQWdncmVnYXRpb259ICR7Y29uZmlnLnNpemVGaWVsZC5uYW1lfWBcbiAgICAgICAgICA6ICdjb3VudCdcbiAgICAgIH0gcGVyY2VudGlsZWAsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbGV2YXRpb25QZXJjZW50aWxlJyxcbiAgICAvLyBwZXJjZW50aWxlIGZpbHRlciBvbmx5IG1ha2VzIHNlbnNlIHdpdGggbGluZWFyIGFnZ3JlZ2F0aW9uXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCAmJiAoY29uZmlnLmNvbG9yRmllbGQgfHwgY29uZmlnLnNpemVGaWVsZClcbiAgfSxcbiAgcmVzb2x1dGlvbjoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogOCxcbiAgICBsYWJlbDogJ1Jlc29sdXRpb24gcmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEzXSxcbiAgICBzdGVwOiAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3Jlc29sdXRpb24nXG4gIH0sXG4gIHdvcmxkVW5pdFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdXb3JsZCBVbml0IFNpemUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAuMDEsIDUwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNlbGwsXG4gICAgcHJvcGVydHk6ICd3b3JsZFVuaXRTaXplJ1xuICB9LFxuICBlbGV2YXRpb25TY2FsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogNSxcbiAgICBsYWJlbDogJ0VsZXZhdGlvbiBTY2FsZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbGV2YXRpb25TY2FsZSdcbiAgfSxcbiAgZWxldmF0aW9uUmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCA1MDBdLFxuICAgIGxhYmVsOiAnSGVpZ2h0IFNjYWxlJyxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDEwMDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdzaXplUmFuZ2UnXG4gIH0sXG4gIGNvdmVyYWdlUmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCAxXSxcbiAgICBsYWJlbDogJ0NvdmVyYWdlIFJhbmdlJyxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDFdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5yYWRpdXMsXG4gICAgcHJvcGVydHk6ICdjb3ZlcmFnZVJhbmdlJ1xuICB9LFxuICAnaGktcHJlY2lzaW9uJzoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnSGlnaCBQcmVjaXNpb24gUmVuZGVyaW5nJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnByZWNpc2lvbixcbiAgICBwcm9wZXJ0eTogJ2hpLXByZWNpc2lvbicsXG4gICAgZGVzY3JpcHRpb246ICdIaWdoIHByZWNpc2lvbiB3aWxsIHJlc3VsdCBpbiBzbG93ZXIgcGVyZm9ybWFuY2UnXG4gIH0sXG4gIGVuYWJsZTNkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgbGFiZWw6ICdFbmFibGUgSGVpZ2h0JyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ2VuYWJsZTNkJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NsaWNrIGJ1dHRvbiBhdCB0b3AgcmlnaHQgb2YgdGhlIG1hcCB0byBzd2l0Y2ggdG8gM2QgdmlldydcbiAgfSxcbiAgc3Ryb2tlZDoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBsYWJlbDogJ1BvbHlnb24gU3Ryb2tlJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlZCdcbiAgfSxcbiAgZmlsbGVkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnUG9seWdvbiBGaWxsJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ2ZpbGxlZCdcbiAgfSxcbiAgZXh0cnVkZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ0VuYWJsZSBQb2x5Z29uIEhlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnZXh0cnVkZWQnXG4gIH0sXG4gIHdpcmVmcmFtZToge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnU2hvdyBXaXJlZnJhbWUnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ3dpcmVmcmFtZSdcbiAgfSxcbiAgLy8gdXNlZCBmb3IgaGVhdG1hcFxuICB3ZWlnaHQ6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdXZWlnaHQgSW50ZW5zaXR5JyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLjAxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd2VpZ2h0JyxcbiAgICBjb25kaXRpb246IGNvbmZpZyA9PiBjb25maWcud2VpZ2h0RmllbGRcbiAgfSxcbiAgaGVhdG1hcFJhZGl1czoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogMjAsXG4gICAgbGFiZWw6ICdSYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1cydcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBWUVSX1RFWFRfQ09ORklHUyA9IHtcbiAgZm9udFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICByYW5nZTogWzEsIDEwMF0sXG4gICAgdmFsdWUwOiAxLFxuICAgIHN0ZXA6IDEsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIGxhYmVsOiAnRm9udCBzaXplJyxcbiAgICBzaG93SW5wdXQ6IHRydWVcbiAgfSxcbiAgdGV4dEFuY2hvcjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG9wdGlvbnM6IFsnc3RhcnQnLCAnbWlkZGxlJywgJ2VuZCddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9XG59O1xuIl19