UNPKG

kepler.gl

Version:

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

477 lines (466 loc) 47.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "DEFAULT_COLOR_RANGE", { enumerable: true, get: function get() { return _colorRanges.DEFAULT_COLOR_RANGE; } }); exports.LAYER_TEXT_CONFIGS = exports.LAYER_VIS_CONFIGS = exports.DEFAULT_COLOR_UI = exports.UNKNOWN_COLOR_KEY = exports.DEFAULT_CUSTOM_PALETTE = exports.DEFAULT_TEXT_LABEL = exports.DEFAULT_LAYER_LABEL = exports.DEFAULT_HIGHLIGHT_COLOR = exports.DEFAULT_LAYER_OPACITY = exports.PROPERTY_GROUPS = void 0; var _keymirror = _interopRequireDefault(require("keymirror")); var _defaultSettings = require("../constants/default-settings"); var _colorRanges = require("../constants/color-ranges"); // Copyright (c) 2021 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 PROPERTY_GROUPS = (0, _keymirror["default"])({ color: null, stroke: null, radius: null, height: null, angle: null, // for heatmap aggregation cell: null, precision: null }); exports.PROPERTY_GROUPS = PROPERTY_GROUPS; var DEFAULT_LAYER_OPACITY = 0.8; exports.DEFAULT_LAYER_OPACITY = DEFAULT_LAYER_OPACITY; var DEFAULT_HIGHLIGHT_COLOR = [252, 242, 26, 255]; exports.DEFAULT_HIGHLIGHT_COLOR = DEFAULT_HIGHLIGHT_COLOR; var DEFAULT_LAYER_LABEL = 'new layer'; exports.DEFAULT_LAYER_LABEL = DEFAULT_LAYER_LABEL; /** @type {import('./layer-factory').LayerTextLabel} */ var DEFAULT_TEXT_LABEL = { field: null, color: [255, 255, 255], size: 18, offset: [0, 0], anchor: 'start', alignment: 'center' }; /** @type {import('./layer-factory').ColorRange} */ exports.DEFAULT_TEXT_LABEL = DEFAULT_TEXT_LABEL; var DEFAULT_CUSTOM_PALETTE = { name: 'color.customPalette', type: 'custom', category: 'Custom', colors: [] }; exports.DEFAULT_CUSTOM_PALETTE = DEFAULT_CUSTOM_PALETTE; var UNKNOWN_COLOR_KEY = '__unknownColor__'; /** @type {import('./layer-factory').ColorUI} */ exports.UNKNOWN_COLOR_KEY = UNKNOWN_COLOR_KEY; var DEFAULT_COLOR_UI = { // customPalette in edit customPalette: DEFAULT_CUSTOM_PALETTE, // show color sketcher modal showSketcher: false, // show color range selection panel showDropdown: false, // color range selector config colorRangeConfig: { type: 'all', steps: 6, reversed: false, custom: false } }; /** @type {import('./layer-factory').LayerVisConfig} */ exports.DEFAULT_COLOR_UI = DEFAULT_COLOR_UI; var LAYER_VIS_CONFIGS = { thickness: { type: 'number', defaultValue: 2, label: 'layerVisConfigs.strokeWidth', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.stroke, property: 'thickness' }, strokeWidthRange: { type: 'number', defaultValue: [0, 10], label: 'layerVisConfigs.strokeWidthRange', isRanged: true, range: [0, 200], step: 0.1, group: PROPERTY_GROUPS.stroke, property: 'sizeRange' }, trailLength: { type: 'number', defaultValue: 180, label: 'layerVisConfigs.strokeWidth', isRanged: false, range: [1, 1000], step: 1, group: PROPERTY_GROUPS.stroke, property: 'trailLength' }, // radius is actually radiusScale in deck.gl radius: { type: 'number', defaultValue: 10, label: 'layerVisConfigs.radius', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'radius' }, fixedRadius: { defaultValue: false, type: 'boolean', label: 'layerVisConfigs.fixedRadius', description: 'layerVisConfigs.fixedRadiusDescription', group: PROPERTY_GROUPS.radius, property: 'fixedRadius' }, radiusRange: { type: 'number', defaultValue: [0, 50], isRanged: true, range: [0, 500], step: 0.1, label: 'layerVisConfigs.radiusRange', group: PROPERTY_GROUPS.radius, property: 'radiusRange' }, clusterRadius: { type: 'number', label: 'layerVisConfigs.clusterRadius', defaultValue: 40, isRanged: false, range: [1, 500], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'clusterRadius' }, clusterRadiusRange: { type: 'number', label: 'layerVisConfigs.radiusRangePixels', defaultValue: [1, 40], isRanged: true, range: [1, 150], step: 0.1, group: PROPERTY_GROUPS.radius, property: 'radiusRange' }, opacity: { type: 'number', defaultValue: DEFAULT_LAYER_OPACITY, label: 'layerVisConfigs.opacity', isRanged: false, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.color, property: 'opacity' }, coverage: { type: 'number', defaultValue: 1, label: 'layerVisConfigs.coverage', isRanged: false, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.cell, property: 'coverage' }, // used in point layer outline: { type: 'boolean', defaultValue: false, label: 'layer.outline', group: PROPERTY_GROUPS.display, property: 'outline' }, colorRange: { type: 'color-range-select', defaultValue: _colorRanges.DEFAULT_COLOR_RANGE, label: 'layerVisConfigs.colorRange', group: PROPERTY_GROUPS.color, property: 'colorRange' }, strokeColorRange: { type: 'color-range-select', defaultValue: _colorRanges.DEFAULT_COLOR_RANGE, label: 'layerVisConfigs.strokeColorRange', group: PROPERTY_GROUPS.color, property: 'strokeColorRange' }, targetColor: { type: 'color-select', label: 'layerVisConfigs.targetColor', defaultValue: null, group: PROPERTY_GROUPS.color, property: 'targetColor' }, strokeColor: { type: 'color-select', label: 'layerVisConfigs.strokeColor', defaultValue: null, group: PROPERTY_GROUPS.color, property: 'strokeColor' }, aggregation: { type: 'select', defaultValue: _defaultSettings.AGGREGATION_TYPES.average, label: 'layerVisConfigs.colorAggregation', // 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: 'layerVisConfigs.heightAggregation', // 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 ".concat(config.colorField ? "".concat(config.visConfig.colorAggregation, " ").concat(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 ".concat(config.sizeField ? "".concat(config.visConfig.sizeAggregation, " ").concat(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: 'layerVisConfigs.resolution', isRanged: false, range: [0, 13], step: 1, group: PROPERTY_GROUPS.cell, property: 'resolution' }, sizeScale: { type: 'number', defaultValue: 10, label: 'layerVisConfigs.sizeScale', isRanged: false, range: [1, 1000], step: 1, group: PROPERTY_GROUPS.stroke, property: 'sizeScale' }, angle: { type: 'number', label: 'layerVisConfigs.angle', defaultValue: 0, isRanged: false, range: [0, 360], group: PROPERTY_GROUPS.angle, step: 1, property: 'angle' }, worldUnitSize: { type: 'number', defaultValue: 1, label: 'layerVisConfigs.worldUnitSize', isRanged: false, range: [0, 500], step: 0.0001, group: PROPERTY_GROUPS.cell, property: 'worldUnitSize' }, elevationScale: { type: 'number', defaultValue: 5, label: 'layerVisConfigs.elevationScale', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.height, property: 'elevationScale' }, enableElevationZoomFactor: { type: 'boolean', defaultValue: true, label: 'layerVisConfigs.enableElevationZoomFactor', group: PROPERTY_GROUPS.height, property: 'enableElevationZoomFactor', description: 'layerVisConfigs.enableElevationZoomFactorDescription' }, elevationRange: { type: 'number', defaultValue: [0, 500], label: 'layerVisConfigs.heightScale', isRanged: true, range: [0, 1000], step: 0.01, group: PROPERTY_GROUPS.height, property: 'sizeRange' }, heightRange: { type: 'number', defaultValue: [0, 500], label: 'Height Scale', isRanged: true, range: [0, 1000], step: 0.01, group: PROPERTY_GROUPS.height, property: 'heightRange' }, coverageRange: { type: 'number', defaultValue: [0, 1], label: 'layerVisConfigs.coverageRange', isRanged: true, range: [0, 1], step: 0.01, group: PROPERTY_GROUPS.radius, property: 'coverageRange' }, // hi precision is deprecated by deck.gl 'hi-precision': { type: 'boolean', defaultValue: false, label: 'layerVisConfigs.highPrecisionRendering', group: PROPERTY_GROUPS.precision, property: 'hi-precision', description: 'layerVisConfigs.highPrecisionRenderingDescription' }, enable3d: { type: 'boolean', defaultValue: false, label: 'layerVisConfigs.height', group: PROPERTY_GROUPS.height, property: 'enable3d', description: 'layerVisConfigs.heightDescription' }, stroked: { type: 'boolean', label: 'layerVisConfigs.stroke', defaultValue: true, group: PROPERTY_GROUPS.display, property: 'stroked' }, filled: { type: 'boolean', label: 'layerVisConfigs.fill', defaultValue: false, group: PROPERTY_GROUPS.display, property: 'filled' }, extruded: { type: 'boolean', defaultValue: false, label: 'layerVisConfigs.enablePolygonHeight', group: PROPERTY_GROUPS.display, property: 'extruded' }, wireframe: { type: 'boolean', defaultValue: false, label: 'layerVisConfigs.showWireframe', group: PROPERTY_GROUPS.display, property: 'wireframe' }, // used for heatmap weight: { type: 'number', defaultValue: 1, label: 'layerVisConfigs.weightIntensity', 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: 'layerVisConfigs.radius', isRanged: false, range: [0, 100], step: 0.1, group: PROPERTY_GROUPS.cell, property: 'radius' } }; /** @type {import('./layer-factory').LayerTextConfig} */ exports.LAYER_VIS_CONFIGS = LAYER_VIS_CONFIGS; var 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 }, textAlignment: { type: 'select', options: ['top', 'center', 'bottom'], multiSelect: false, searchable: false } }; exports.LAYER_TEXT_CONFIGS = LAYER_TEXT_CONFIGS; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvbGF5ZXItZmFjdG9yeS5qcyJdLCJuYW1lcyI6WyJQUk9QRVJUWV9HUk9VUFMiLCJjb2xvciIsInN0cm9rZSIsInJhZGl1cyIsImhlaWdodCIsImFuZ2xlIiwiY2VsbCIsInByZWNpc2lvbiIsIkRFRkFVTFRfTEFZRVJfT1BBQ0lUWSIsIkRFRkFVTFRfSElHSExJR0hUX0NPTE9SIiwiREVGQVVMVF9MQVlFUl9MQUJFTCIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsImZpZWxkIiwic2l6ZSIsIm9mZnNldCIsImFuY2hvciIsImFsaWdubWVudCIsIkRFRkFVTFRfQ1VTVE9NX1BBTEVUVEUiLCJuYW1lIiwidHlwZSIsImNhdGVnb3J5IiwiY29sb3JzIiwiVU5LTk9XTl9DT0xPUl9LRVkiLCJERUZBVUxUX0NPTE9SX1VJIiwiY3VzdG9tUGFsZXR0ZSIsInNob3dTa2V0Y2hlciIsInNob3dEcm9wZG93biIsImNvbG9yUmFuZ2VDb25maWciLCJzdGVwcyIsInJldmVyc2VkIiwiY3VzdG9tIiwiTEFZRVJfVklTX0NPTkZJR1MiLCJ0aGlja25lc3MiLCJkZWZhdWx0VmFsdWUiLCJsYWJlbCIsImlzUmFuZ2VkIiwicmFuZ2UiLCJzdGVwIiwiZ3JvdXAiLCJwcm9wZXJ0eSIsInN0cm9rZVdpZHRoUmFuZ2UiLCJ0cmFpbExlbmd0aCIsImZpeGVkUmFkaXVzIiwiZGVzY3JpcHRpb24iLCJyYWRpdXNSYW5nZSIsImNsdXN0ZXJSYWRpdXMiLCJjbHVzdGVyUmFkaXVzUmFuZ2UiLCJvcGFjaXR5IiwiY292ZXJhZ2UiLCJvdXRsaW5lIiwiZGlzcGxheSIsImNvbG9yUmFuZ2UiLCJERUZBVUxUX0NPTE9SX1JBTkdFIiwic3Ryb2tlQ29sb3JSYW5nZSIsInRhcmdldENvbG9yIiwic3Ryb2tlQ29sb3IiLCJhZ2dyZWdhdGlvbiIsIkFHR1JFR0FUSU9OX1RZUEVTIiwiYXZlcmFnZSIsIm9wdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwiY29uZGl0aW9uIiwiY29uZmlnIiwiY29sb3JGaWVsZCIsInNpemVBZ2dyZWdhdGlvbiIsInNpemVGaWVsZCIsInBlcmNlbnRpbGUiLCJ2aXNDb25maWciLCJjb2xvckFnZ3JlZ2F0aW9uIiwiY29sb3JTY2FsZSIsImVsZXZhdGlvblBlcmNlbnRpbGUiLCJlbmFibGUzZCIsInJlc29sdXRpb24iLCJzaXplU2NhbGUiLCJ3b3JsZFVuaXRTaXplIiwiZWxldmF0aW9uU2NhbGUiLCJlbmFibGVFbGV2YXRpb25ab29tRmFjdG9yIiwiZWxldmF0aW9uUmFuZ2UiLCJoZWlnaHRSYW5nZSIsImNvdmVyYWdlUmFuZ2UiLCJzdHJva2VkIiwiZmlsbGVkIiwiZXh0cnVkZWQiLCJ3aXJlZnJhbWUiLCJ3ZWlnaHQiLCJ3ZWlnaHRGaWVsZCIsImhlYXRtYXBSYWRpdXMiLCJMQVlFUl9URVhUX0NPTkZJR1MiLCJmb250U2l6ZSIsInZhbHVlMCIsInNob3dJbnB1dCIsInRleHRBbmNob3IiLCJtdWx0aVNlbGVjdCIsInNlYXJjaGFibGUiLCJ0ZXh0QWxpZ25tZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBRUE7O0FBQ0E7O0FBdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT08sSUFBTUEsZUFBZSxHQUFHLDJCQUFVO0FBQ3ZDQyxFQUFBQSxLQUFLLEVBQUUsSUFEZ0M7QUFFdkNDLEVBQUFBLE1BQU0sRUFBRSxJQUYrQjtBQUd2Q0MsRUFBQUEsTUFBTSxFQUFFLElBSCtCO0FBSXZDQyxFQUFBQSxNQUFNLEVBQUUsSUFKK0I7QUFLdkNDLEVBQUFBLEtBQUssRUFBRSxJQUxnQztBQU12QztBQUNBQyxFQUFBQSxJQUFJLEVBQUUsSUFQaUM7QUFRdkNDLEVBQUFBLFNBQVMsRUFBRTtBQVI0QixDQUFWLENBQXhCOztBQVdBLElBQU1DLHFCQUFxQixHQUFHLEdBQTlCOztBQUNBLElBQU1DLHVCQUF1QixH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LEVBQUUsUUFERTtBQUVSaUIsSUFBQUEsS0FBSyxFQUFFLENBQUMsQ0FBRCxFQUFJLEdBQUosQ0FGQztBQUdSc0QsSUFBQUEsTUFBTSxFQUFFLENBSEE7QUFJUnJELElBQUFBLElBQUksRUFBRSxDQUpFO0FBS1JGLElBQUFBLFFBQVEsRUFBRSxLQUxGO0FBTVJELElBQUFBLEtBQUssRUFBRSxXQU5DO0FBT1J5RCxJQUFBQSxTQUFTLEVBQUU7QUFQSCxHQURzQjtBQVVoQ0MsRUFBQUEsVUFBVSxFQUFFO0FBQ1Z6RSxJQUFBQSxJQUFJLEVBQUUsUUFESTtBQUVWd0MsSUFBQUEsT0FBTyxFQUFFLENBQUMsT0FBRCxFQUFVLFFBQVYsRUFBb0IsS0FBcEIsQ0FGQztBQUdWa0MsSUFBQUEsV0FBVyxFQUFFLEtBSEg7QUFJVkMsSUFBQUEsVUFBVSxFQUFFO0FBSkYsR0FWb0I7QUFnQmhDQyxFQUFBQSxhQUFhLEVBQUU7QUFDYjVFLElBQUFBLElBQUksRUFBRSxRQURPO0FBRWJ3QyxJQUFBQSxPQUFPLEVBQUUsQ0FBQyxLQUFELEVBQVEsUUFBUixFQUFrQixRQUFsQixDQUZJO0FBR2JrQyxJQUFBQSxXQUFXLEVBQUUsS0FIQTtBQUliQyxJQUFBQSxVQUFVLEVBQUU7QUFKQztBQWhCaUIsQ0FBM0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMjEgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQga2V5TWlycm9yIGZyb20gJ2tleW1pcnJvcic7XG5cbmltcG9ydCB7QUdHUkVHQVRJT05fVFlQRVN9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCB7REVGQVVMVF9DT0xPUl9SQU5HRX0gZnJvbSAnY29uc3RhbnRzL2NvbG9yLXJhbmdlcyc7XG5cbmV4cG9ydCBjb25zdCBQUk9QRVJUWV9HUk9VUFMgPSBrZXlNaXJyb3Ioe1xuICBjb2xvcjogbnVsbCxcbiAgc3Ryb2tlOiBudWxsLFxuICByYWRpdXM6IG51bGwsXG4gIGhlaWdodDogbnVsbCxcbiAgYW5nbGU6IG51bGwsXG4gIC8vIGZvciBoZWF0bWFwIGFnZ3JlZ2F0aW9uXG4gIGNlbGw6IG51bGwsXG4gIHByZWNpc2lvbjogbnVsbFxufSk7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xBWUVSX09QQUNJVFkgPSAwLjg7XG5leHBvcnQgY29uc3QgREVGQVVMVF9ISUdITElHSFRfQ09MT1IgPSBbMjUyLCAyNDIsIDI2LCAyNTVdO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFZRVJfTEFCRUwgPSAnbmV3IGxheWVyJztcbmV4cG9ydCB7REVGQVVMVF9DT0xPUl9SQU5HRX07XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2xheWVyLWZhY3RvcnknKS5MYXllclRleHRMYWJlbH0gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RFWFRfTEFCRUwgPSB7XG4gIGZpZWxkOiBudWxsLFxuICBjb2xvcjogWzI1NSwgMjU1LCAyNTVdLFxuICBzaXplOiAxOCxcbiAgb2Zmc2V0OiBbMCwgMF0sXG4gIGFuY2hvcjogJ3N0YXJ0JyxcbiAgYWxpZ25tZW50OiAnY2VudGVyJ1xufTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vbGF5ZXItZmFjdG9yeScpLkNvbG9yUmFuZ2V9ICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9DVVNUT01fUEFMRVRURSA9IHtcbiAgbmFtZTogJ2NvbG9yLmN1c3RvbVBhbGV0dGUnLFxuICB0eXBlOiAnY3VzdG9tJyxcbiAgY2F0ZWdvcnk6ICdDdXN0b20nLFxuICBjb2xvcnM6IFtdXG59O1xuXG5leHBvcnQgY29uc3QgVU5LTk9XTl9DT0xPUl9LRVkgPSAnX191bmtub3duQ29sb3JfXyc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2xheWVyLWZhY3RvcnknKS5Db2xvclVJfSAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ09MT1JfVUkgPSB7XG4gIC8vIGN1c3RvbVBhbGV0dGUgaW4gZWRpdFxuICBjdXN0b21QYWxldHRlOiBERUZBVUxUX0NVU1RPTV9QQUxFVFRFLFxuICAvLyBzaG93IGNvbG9yIHNrZXRjaGVyIG1vZGFsXG4gIHNob3dTa2V0Y2hlcjogZmFsc2UsXG4gIC8vIHNob3cgY29sb3IgcmFuZ2Ugc2VsZWN0aW9uIHBhbmVsXG4gIHNob3dEcm9wZG93bjogZmFsc2UsXG4gIC8vIGNvbG9yIHJhbmdlIHNlbGVjdG9yIGNvbmZpZ1xuICBjb2xvclJhbmdlQ29uZmlnOiB7XG4gICAgdHlwZTogJ2FsbCcsXG4gICAgc3RlcHM6IDYsXG4gICAgcmV2ZXJzZWQ6IGZhbHNlLFxuICAgIGN1c3RvbTogZmFsc2VcbiAgfVxufTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vbGF5ZXItZmFjdG9yeScpLkxheWVyVmlzQ29uZmlnfSAqL1xuZXhwb3J0IGNvbnN0IExBWUVSX1ZJU19DT05GSUdTID0ge1xuICB0aGlja25lc3M6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDIsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc3Ryb2tlV2lkdGgnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuc3Ryb2tlLFxuICAgIHByb3BlcnR5OiAndGhpY2tuZXNzJ1xuICB9LFxuICBzdHJva2VXaWR0aFJhbmdlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTBdLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnN0cm9rZVdpZHRoUmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMjAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5zdHJva2UsXG4gICAgcHJvcGVydHk6ICdzaXplUmFuZ2UnXG4gIH0sXG4gIHRyYWlsTGVuZ3RoOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAxODAsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc3Ryb2tlV2lkdGgnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzEsIDEwMDBdLFxuICAgIHN0ZXA6IDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5zdHJva2UsXG4gICAgcHJvcGVydHk6ICd0cmFpbExlbmd0aCdcbiAgfSxcbiAgLy8gcmFkaXVzIGlzIGFjdHVhbGx5IHJhZGl1c1NjYWxlIGluIGRlY2suZ2xcbiAgcmFkaXVzOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAxMCxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5yYWRpdXMnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMucmFkaXVzLFxuICAgIHByb3BlcnR5OiAncmFkaXVzJ1xuICB9LFxuICBmaXhlZFJhZGl1czoge1xuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmZpeGVkUmFkaXVzJyxcbiAgICBkZXNjcmlwdGlvbjogJ2xheWVyVmlzQ29uZmlncy5maXhlZFJhZGl1c0Rlc2NyaXB0aW9uJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2ZpeGVkUmFkaXVzJ1xuICB9LFxuICByYWRpdXNSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDUwXSxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDUwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnJhZGl1c1JhbmdlJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1c1JhbmdlJ1xuICB9LFxuICBjbHVzdGVyUmFkaXVzOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuY2x1c3RlclJhZGl1cycsXG4gICAgZGVmYXVsdFZhbHVlOiA0MCxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFsxLCA1MDBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2NsdXN0ZXJSYWRpdXMnXG4gIH0sXG4gIGNsdXN0ZXJSYWRpdXNSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnJhZGl1c1JhbmdlUGl4ZWxzJyxcbiAgICBkZWZhdWx0VmFsdWU6IFsxLCA0MF0sXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFsxLCAxNTBdLFxuICAgIHN0ZXA6IDAuMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ3JhZGl1c1JhbmdlJ1xuICB9LFxuICBvcGFjaXR5OiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX0xBWUVSX09QQUNJVFksXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Mub3BhY2l0eScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnb3BhY2l0eSdcbiAgfSxcbiAgY292ZXJhZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuY292ZXJhZ2UnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDFdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnY292ZXJhZ2UnXG4gIH0sXG4gIC8vIHVzZWQgaW4gcG9pbnQgbGF5ZXJcbiAgb3V0bGluZToge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnbGF5ZXIub3V0bGluZScsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnb3V0bGluZSdcbiAgfSxcbiAgY29sb3JSYW5nZToge1xuICAgIHR5cGU6ICdjb2xvci1yYW5nZS1zZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9DT0xPUl9SQU5HRSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5jb2xvclJhbmdlJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnY29sb3JSYW5nZSdcbiAgfSxcbiAgc3Ryb2tlQ29sb3JSYW5nZToge1xuICAgIHR5cGU6ICdjb2xvci1yYW5nZS1zZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9DT0xPUl9SQU5HRSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5zdHJva2VDb2xvclJhbmdlJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlQ29sb3JSYW5nZSdcbiAgfSxcbiAgdGFyZ2V0Q29sb3I6IHtcbiAgICB0eXBlOiAnY29sb3Itc2VsZWN0JyxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy50YXJnZXRDb2xvcicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICd0YXJnZXRDb2xvcidcbiAgfSxcbiAgc3Ryb2tlQ29sb3I6IHtcbiAgICB0eXBlOiAnY29sb3Itc2VsZWN0JyxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5zdHJva2VDb2xvcicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY29sb3IsXG4gICAgcHJvcGVydHk6ICdzdHJva2VDb2xvcidcbiAgfSxcbiAgYWdncmVnYXRpb246IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBkZWZhdWx0VmFsdWU6IEFHR1JFR0FUSU9OX1RZUEVTLmF2ZXJhZ2UsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuY29sb3JBZ2dyZWdhdGlvbicsXG4gICAgLy8gYWdncmVnYXRpb24gb3B0aW9ucyBhcmUgYmFzZWQgb24gY29sb3IgZmllbGQgdHlwZXNcbiAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jb2xvcixcbiAgICBwcm9wZXJ0eTogJ2NvbG9yQWdncmVnYXRpb24nLFxuICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy5jb2xvckZpZWxkXG4gIH0sXG4gIHNpemVBZ2dyZWdhdGlvbjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIGRlZmF1bHRWYWx1ZTogQUdHUkVHQVRJT05fVFlQRVMuYXZlcmFnZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5oZWlnaHRBZ2dyZWdhdGlvbicsXG4gICAgLy8gYWdncmVnYXRpb24gb3B0aW9ucyBhcmUgYmFzZWQgb24gY29sb3IgZmllbGQgdHlwZXNcbiAgICBvcHRpb25zOiBPYmplY3Qua2V5cyhBR0dSRUdBVElPTl9UWVBFUyksXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdzaXplQWdncmVnYXRpb24nLFxuICAgIGNvbmRpdGlvbjogY29uZmlnID0+IGNvbmZpZy5zaXplRmllbGRcbiAgfSxcbiAgcGVyY2VudGlsZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDEwMF0sXG4gICAgbGFiZWw6IGNvbmZpZyA9PlxuICAgICAgYEZpbHRlciBieSAke1xuICAgICAgICBjb25maWcuY29sb3JGaWVsZFxuICAgICAgICAgID8gYCR7Y29uZmlnLnZpc0NvbmZpZy5jb2xvckFnZ3JlZ2F0aW9ufSAke2NvbmZpZy5jb2xvckZpZWxkLm5hbWV9YFxuICAgICAgICAgIDogJ2NvdW50J1xuICAgICAgfSBwZXJjZW50aWxlYCxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNvbG9yLFxuICAgIHByb3BlcnR5OiAncGVyY2VudGlsZScsXG5cbiAgICAvLyBwZXJjZW50aWxlIGZpbHRlciBvbmx5IG1ha2VzIHNlbnNlIHdpdGggbGluZWFyIGFnZ3JlZ2F0aW9uXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLmNvbG9yU2NhbGUgIT09ICdvcmRpbmFsJ1xuICB9LFxuICBlbGV2YXRpb25QZXJjZW50aWxlOiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiBbMCwgMTAwXSxcbiAgICBsYWJlbDogY29uZmlnID0+XG4gICAgICBgRmlsdGVyIGJ5ICR7XG4gICAgICAgIGNvbmZpZy5zaXplRmllbGQgPyBgJHtjb25maWcudmlzQ29uZmlnLnNpemVBZ2dyZWdhdGlvbn0gJHtjb25maWcuc2l6ZUZpZWxkLm5hbWV9YCA6ICdjb3VudCdcbiAgICAgIH0gcGVyY2VudGlsZWAsXG4gICAgaXNSYW5nZWQ6IHRydWUsXG4gICAgcmFuZ2U6IFswLCAxMDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbGV2YXRpb25QZXJjZW50aWxlJyxcbiAgICAvLyBwZXJjZW50aWxlIGZpbHRlciBvbmx5IG1ha2VzIHNlbnNlIHdpdGggbGluZWFyIGFnZ3JlZ2F0aW9uXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLnZpc0NvbmZpZy5lbmFibGUzZCAmJiAoY29uZmlnLmNvbG9yRmllbGQgfHwgY29uZmlnLnNpemVGaWVsZClcbiAgfSxcbiAgcmVzb2x1dGlvbjoge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogOCxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5yZXNvbHV0aW9uJyxcbiAgICBpc1JhbmdlZDogZmFsc2UsXG4gICAgcmFuZ2U6IFswLCAxM10sXG4gICAgc3RlcDogMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmNlbGwsXG4gICAgcHJvcGVydHk6ICdyZXNvbHV0aW9uJ1xuICB9LFxuICBzaXplU2NhbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEwLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnNpemVTY2FsZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMSwgMTAwMF0sXG4gICAgc3RlcDogMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnN0cm9rZSxcbiAgICBwcm9wZXJ0eTogJ3NpemVTY2FsZSdcbiAgfSxcbiAgYW5nbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5hbmdsZScsXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDM2MF0sXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5hbmdsZSxcbiAgICBzdGVwOiAxLFxuICAgIHByb3BlcnR5OiAnYW5nbGUnXG4gIH0sXG4gIHdvcmxkVW5pdFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Mud29ybGRVbml0U2l6ZScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgNTAwXSxcbiAgICBzdGVwOiAwLjAwMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAnd29ybGRVbml0U2l6ZSdcbiAgfSxcbiAgZWxldmF0aW9uU2NhbGU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDUsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuZWxldmF0aW9uU2NhbGUnLFxuICAgIGlzUmFuZ2VkOiBmYWxzZSxcbiAgICByYW5nZTogWzAsIDEwMF0sXG4gICAgc3RlcDogMC4xLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnZWxldmF0aW9uU2NhbGUnXG4gIH0sXG4gIGVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3I6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmVuYWJsZUVsZXZhdGlvblpvb21GYWN0b3InLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuaGVpZ2h0LFxuICAgIHByb3BlcnR5OiAnZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvcicsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuZW5hYmxlRWxldmF0aW9uWm9vbUZhY3RvckRlc2NyaXB0aW9uJ1xuICB9LFxuICBlbGV2YXRpb25SYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDUwMF0sXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3MuaGVpZ2h0U2NhbGUnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMTAwMF0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmhlaWdodCxcbiAgICBwcm9wZXJ0eTogJ3NpemVSYW5nZSdcbiAgfSxcbiAgaGVpZ2h0UmFuZ2U6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IFswLCA1MDBdLFxuICAgIGxhYmVsOiAnSGVpZ2h0IFNjYWxlJyxcbiAgICBpc1JhbmdlZDogdHJ1ZSxcbiAgICByYW5nZTogWzAsIDEwMDBdLFxuICAgIHN0ZXA6IDAuMDEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdoZWlnaHRSYW5nZSdcbiAgfSxcbiAgY292ZXJhZ2VSYW5nZToge1xuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHRWYWx1ZTogWzAsIDFdLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmNvdmVyYWdlUmFuZ2UnLFxuICAgIGlzUmFuZ2VkOiB0cnVlLFxuICAgIHJhbmdlOiBbMCwgMV0sXG4gICAgc3RlcDogMC4wMSxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnJhZGl1cyxcbiAgICBwcm9wZXJ0eTogJ2NvdmVyYWdlUmFuZ2UnXG4gIH0sXG4gIC8vIGhpIHByZWNpc2lvbiBpcyBkZXByZWNhdGVkIGJ5IGRlY2suZ2xcbiAgJ2hpLXByZWNpc2lvbic6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5oaWdoUHJlY2lzaW9uUmVuZGVyaW5nJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLnByZWNpc2lvbixcbiAgICBwcm9wZXJ0eTogJ2hpLXByZWNpc2lvbicsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuaGlnaFByZWNpc2lvblJlbmRlcmluZ0Rlc2NyaXB0aW9uJ1xuICB9LFxuICBlbmFibGUzZDoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmhlaWdodCcsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5oZWlnaHQsXG4gICAgcHJvcGVydHk6ICdlbmFibGUzZCcsXG4gICAgZGVzY3JpcHRpb246ICdsYXllclZpc0NvbmZpZ3MuaGVpZ2h0RGVzY3JpcHRpb24nXG4gIH0sXG4gIHN0cm9rZWQ6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgbGFiZWw6ICdsYXllclZpc0NvbmZpZ3Muc3Ryb2tlJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnc3Ryb2tlZCdcbiAgfSxcbiAgZmlsbGVkOiB7XG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmZpbGwnLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5kaXNwbGF5LFxuICAgIHByb3BlcnR5OiAnZmlsbGVkJ1xuICB9LFxuICBleHRydWRlZDoge1xuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLmVuYWJsZVBvbHlnb25IZWlnaHQnLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuZGlzcGxheSxcbiAgICBwcm9wZXJ0eTogJ2V4dHJ1ZGVkJ1xuICB9LFxuICB3aXJlZnJhbWU6IHtcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogJ2xheWVyVmlzQ29uZmlncy5zaG93V2lyZWZyYW1lJyxcbiAgICBncm91cDogUFJPUEVSVFlfR1JPVVBTLmRpc3BsYXksXG4gICAgcHJvcGVydHk6ICd3aXJlZnJhbWUnXG4gIH0sXG4gIC8vIHVzZWQgZm9yIGhlYXRtYXBcbiAgd2VpZ2h0OiB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLndlaWdodEludGVuc2l0eScsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMC4wMSwgNTAwXSxcbiAgICBzdGVwOiAwLjAxLFxuICAgIGdyb3VwOiBQUk9QRVJUWV9HUk9VUFMuY2VsbCxcbiAgICBwcm9wZXJ0eTogJ3dlaWdodCcsXG4gICAgY29uZGl0aW9uOiBjb25maWcgPT4gY29uZmlnLndlaWdodEZpZWxkXG4gIH0sXG4gIGhlYXRtYXBSYWRpdXM6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0VmFsdWU6IDIwLFxuICAgIGxhYmVsOiAnbGF5ZXJWaXNDb25maWdzLnJhZGl1cycsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIHJhbmdlOiBbMCwgMTAwXSxcbiAgICBzdGVwOiAwLjEsXG4gICAgZ3JvdXA6IFBST1BFUlRZX0dST1VQUy5jZWxsLFxuICAgIHByb3BlcnR5OiAncmFkaXVzJ1xuICB9XG59O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9sYXllci1mYWN0b3J5JykuTGF5ZXJUZXh0Q29uZmlnfSAqL1xuZXhwb3J0IGNvbnN0IExBWUVSX1RFWFRfQ09ORklHUyA9IHtcbiAgZm9udFNpemU6IHtcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICByYW5nZTogWzEsIDEwMF0sXG4gICAgdmFsdWUwOiAxLFxuICAgIHN0ZXA6IDEsXG4gICAgaXNSYW5nZWQ6IGZhbHNlLFxuICAgIGxhYmVsOiAnRm9udCBzaXplJyxcbiAgICBzaG93SW5wdXQ6IHRydWVcbiAgfSxcbiAgdGV4dEFuY2hvcjoge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG9wdGlvbnM6IFsnc3RhcnQnLCAnbWlkZGxlJywgJ2VuZCddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9LFxuICB0ZXh0QWxpZ25tZW50OiB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgb3B0aW9uczogWyd0b3AnLCAnY2VudGVyJywgJ2JvdHRvbSddLFxuICAgIG11bHRpU2VsZWN0OiBmYWxzZSxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZVxuICB9XG59O1xuIl19