@kepler.gl/reducers 3.0.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.
- package/dist/combined-updaters.d.ts +50 -0
- package/dist/combined-updaters.js +212 -0
- package/dist/composer-helpers.d.ts +21 -0
- package/dist/composer-helpers.js +133 -0
- package/dist/composers.d.ts +12 -0
- package/dist/composers.js +47 -0
- package/dist/core.d.ts +64 -0
- package/dist/core.js +149 -0
- package/dist/data-utils.d.ts +8 -0
- package/dist/data-utils.js +60 -0
- package/dist/export-utils.d.ts +21 -0
- package/dist/export-utils.js +124 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +372 -0
- package/dist/interaction-utils.d.ts +35 -0
- package/dist/interaction-utils.js +149 -0
- package/dist/layer-utils.d.ts +66 -0
- package/dist/layer-utils.js +289 -0
- package/dist/map-state-updaters.d.ts +62 -0
- package/dist/map-state-updaters.js +250 -0
- package/dist/map-state.d.ts +3 -0
- package/dist/map-state.js +67 -0
- package/dist/map-style-updaters.d.ts +173 -0
- package/dist/map-style-updaters.js +538 -0
- package/dist/map-style.d.ts +4 -0
- package/dist/map-style.js +66 -0
- package/dist/middleware.d.ts +8 -0
- package/dist/middleware.js +46 -0
- package/dist/provider-state-updaters.d.ts +42 -0
- package/dist/provider-state-updaters.js +512 -0
- package/dist/provider-state.d.ts +4 -0
- package/dist/provider-state.js +66 -0
- package/dist/root.d.ts +31 -0
- package/dist/root.js +235 -0
- package/dist/ui-state-updaters.d.ts +355 -0
- package/dist/ui-state-updaters.js +866 -0
- package/dist/ui-state.d.ts +3 -0
- package/dist/ui-state.js +68 -0
- package/dist/vis-state-merger.d.ts +102 -0
- package/dist/vis-state-merger.js +635 -0
- package/dist/vis-state-selectors.d.ts +2 -0
- package/dist/vis-state-selectors.js +53 -0
- package/dist/vis-state-updaters.d.ts +419 -0
- package/dist/vis-state-updaters.js +2472 -0
- package/dist/vis-state.d.ts +3 -0
- package/dist/vis-state.js +66 -0
- package/package.json +83 -0
|
@@ -0,0 +1,866 @@
|
|
|
1
|
+
// Copyright (c) 2022 Uber Technologies, Inc.
|
|
2
|
+
//
|
|
3
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
// of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
// in the Software without restriction, including without limitation the rights
|
|
6
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
// copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
// furnished to do so, subject to the following conditions:
|
|
9
|
+
//
|
|
10
|
+
// The above copyright notice and this permission notice shall be included in
|
|
11
|
+
// all copies or substantial portions of the Software.
|
|
12
|
+
//
|
|
13
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
+
// THE SOFTWARE.
|
|
20
|
+
|
|
21
|
+
"use strict";
|
|
22
|
+
|
|
23
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
24
|
+
|
|
25
|
+
Object.defineProperty(exports, "__esModule", {
|
|
26
|
+
value: true
|
|
27
|
+
});
|
|
28
|
+
exports.toggleLayerPanelListViewUpdater = exports.setLocaleUpdater = exports.showDatasetTableUpdater = exports.toggleSplitMapUpdater = exports.loadFilesErrUpdater = exports.loadFilesSuccessUpdater = exports.loadFilesUpdater = exports.removeNotificationUpdater = exports.addNotificationUpdater = exports.setExportMapHTMLModeUpdater = exports.setExportMapFormatUpdater = exports.setUserMapboxAccessTokenUpdater = exports.setExportDataUpdater = exports.setExportFilteredUpdater = exports.setExportDataTypeUpdater = exports.setExportSelectedDatasetUpdater = exports.startExportingImageUpdater = exports.cleanupExportImageUpdater = exports.setExportImageErrorUpdater = exports.setExportImageDataUriUpdater = exports.setExportImageSettingUpdater = exports.openDeleteModalUpdater = exports.setMapControlVisibilityUpdater = exports.toggleMapControlUpdater = exports.hideExportDropdownUpdater = exports.showExportDropdownUpdater = exports.toggleModalUpdater = exports.toggleSidePanelUpdater = exports.initUiStateUpdater = exports.INITIAL_UI_STATE = exports.DEFAULT_EXPORT_MAP = exports.DEFAULT_EXPORT_JSON = exports.DEFAULT_EXPORT_HTML = exports.DEFAULT_NOTIFICATIONS = exports.DEFAULT_EXPORT_DATA = exports.DEFAULT_LOAD_FILES = exports.DEFAULT_EXPORT_IMAGE = exports.DEFAULT_MAP_CONTROLS = exports.DEFAULT_MODAL = exports.DEFAULT_ACTIVE_SIDE_PANEL = void 0;
|
|
29
|
+
|
|
30
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
31
|
+
|
|
32
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
33
|
+
|
|
34
|
+
var _constants = require("@kepler.gl/constants");
|
|
35
|
+
|
|
36
|
+
var _localization = require("@kepler.gl/localization");
|
|
37
|
+
|
|
38
|
+
var _utils = require("@kepler.gl/utils");
|
|
39
|
+
|
|
40
|
+
var _composerHelpers = require("./composer-helpers");
|
|
41
|
+
|
|
42
|
+
var _DEFAULT_EXPORT_MAP;
|
|
43
|
+
|
|
44
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
45
|
+
|
|
46
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
47
|
+
|
|
48
|
+
var DEFAULT_ACTIVE_SIDE_PANEL = 'layer';
|
|
49
|
+
exports.DEFAULT_ACTIVE_SIDE_PANEL = DEFAULT_ACTIVE_SIDE_PANEL;
|
|
50
|
+
var DEFAULT_MODAL = _constants.ADD_DATA_ID;
|
|
51
|
+
/**
|
|
52
|
+
* Updaters for `uiState` reducer. Can be used in your root reducer to directly modify kepler.gl's state.
|
|
53
|
+
* Read more about [Using updaters](../advanced-usage/using-updaters.md)
|
|
54
|
+
*
|
|
55
|
+
* @public
|
|
56
|
+
* @example
|
|
57
|
+
*
|
|
58
|
+
* import keplerGlReducer, {uiStateUpdaters} from 'kepler.gl/reducers';
|
|
59
|
+
* // Root Reducer
|
|
60
|
+
* const reducers = combineReducers({
|
|
61
|
+
* keplerGl: keplerGlReducer,
|
|
62
|
+
* app: appReducer
|
|
63
|
+
* });
|
|
64
|
+
*
|
|
65
|
+
* const composedReducer = (state, action) => {
|
|
66
|
+
* switch (action.type) {
|
|
67
|
+
* // click button to close side panel
|
|
68
|
+
* case 'CLICK_BUTTON':
|
|
69
|
+
* return {
|
|
70
|
+
* ...state,
|
|
71
|
+
* keplerGl: {
|
|
72
|
+
* ...state.keplerGl,
|
|
73
|
+
* foo: {
|
|
74
|
+
* ...state.keplerGl.foo,
|
|
75
|
+
* uiState: uiStateUpdaters.toggleSidePanelUpdater(
|
|
76
|
+
* uiState, {payload: null}
|
|
77
|
+
* )
|
|
78
|
+
* }
|
|
79
|
+
* }
|
|
80
|
+
* };
|
|
81
|
+
* }
|
|
82
|
+
* return reducers(state, action);
|
|
83
|
+
* };
|
|
84
|
+
*
|
|
85
|
+
* export default composedReducer;
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
/* eslint-disable no-unused-vars */
|
|
89
|
+
// @ts-ignore
|
|
90
|
+
|
|
91
|
+
exports.DEFAULT_MODAL = DEFAULT_MODAL;
|
|
92
|
+
var uiStateUpdaters = null;
|
|
93
|
+
/* eslint-enable no-unused-vars */
|
|
94
|
+
|
|
95
|
+
var DEFAULT_MAP_CONTROLS_FEATURES = {
|
|
96
|
+
show: true,
|
|
97
|
+
active: false,
|
|
98
|
+
disableClose: false,
|
|
99
|
+
// defines which map index users are interacting with (through map controls)
|
|
100
|
+
activeMapIndex: 0
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* A list of map control visibility and whether is it active.
|
|
104
|
+
* @memberof uiStateUpdaters
|
|
105
|
+
* @constant
|
|
106
|
+
* @property visibleLayers Default: `{show: true, active: false}`
|
|
107
|
+
* @property mapLegend Default: `{show: true, active: false}`
|
|
108
|
+
* @property toggle3d Default: `{show: true}`
|
|
109
|
+
* @property splitMap Default: `{show: true}`
|
|
110
|
+
* @property mapDraw Default: `{show: true, active: false}`
|
|
111
|
+
* @property mapLocale Default: `{show: false, active: false}`
|
|
112
|
+
* @public
|
|
113
|
+
*/
|
|
114
|
+
|
|
115
|
+
var DEFAULT_MAP_CONTROLS = Object.keys(_constants.MAP_CONTROLS).reduce(function (_final, current) {
|
|
116
|
+
return _objectSpread(_objectSpread({}, _final), {}, (0, _defineProperty2["default"])({}, current, DEFAULT_MAP_CONTROLS_FEATURES));
|
|
117
|
+
}, {});
|
|
118
|
+
/**
|
|
119
|
+
* Default image export config
|
|
120
|
+
* @memberof uiStateUpdaters
|
|
121
|
+
* @constant
|
|
122
|
+
* @property ratio Default: `'SCREEN'`,
|
|
123
|
+
* @property resolution Default: `'ONE_X'`,
|
|
124
|
+
* @property legend Default: `false`,
|
|
125
|
+
* @property mapH Default: 0,
|
|
126
|
+
* @property mapW Default: 0,
|
|
127
|
+
* @property imageSize Default: {zoomOffset: 0, scale: 1, imageW: 0, imageH: 0},
|
|
128
|
+
* @property imageDataUri Default: `''`,
|
|
129
|
+
* @property exporting Default: `false`
|
|
130
|
+
* @property error Default: `false`
|
|
131
|
+
* @public
|
|
132
|
+
*/
|
|
133
|
+
|
|
134
|
+
exports.DEFAULT_MAP_CONTROLS = DEFAULT_MAP_CONTROLS;
|
|
135
|
+
var DEFAULT_EXPORT_IMAGE = {
|
|
136
|
+
// user options
|
|
137
|
+
ratio: _constants.EXPORT_IMG_RATIOS.SCREEN,
|
|
138
|
+
resolution: _constants.RESOLUTIONS.ONE_X,
|
|
139
|
+
legend: false,
|
|
140
|
+
mapH: 0,
|
|
141
|
+
mapW: 0,
|
|
142
|
+
imageSize: {
|
|
143
|
+
zoomOffset: 0,
|
|
144
|
+
scale: 1,
|
|
145
|
+
imageW: 0,
|
|
146
|
+
imageH: 0
|
|
147
|
+
},
|
|
148
|
+
// when this is set to true, the mock map viewport will move to the center of data
|
|
149
|
+
center: false,
|
|
150
|
+
// exporting state
|
|
151
|
+
imageDataUri: '',
|
|
152
|
+
// exporting: used to attach plot-container to dom
|
|
153
|
+
exporting: false,
|
|
154
|
+
// processing: used as loading indicator when export image is being produced
|
|
155
|
+
processing: false,
|
|
156
|
+
error: false
|
|
157
|
+
};
|
|
158
|
+
exports.DEFAULT_EXPORT_IMAGE = DEFAULT_EXPORT_IMAGE;
|
|
159
|
+
var DEFAULT_LOAD_FILES = {
|
|
160
|
+
fileLoading: false
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* Default initial `exportData` settings
|
|
164
|
+
* @memberof uiStateUpdaters
|
|
165
|
+
* @constant
|
|
166
|
+
* @property selectedDataset Default: `''`,
|
|
167
|
+
* @property dataType Default: `'csv'`,
|
|
168
|
+
* @property filtered Default: `true`,
|
|
169
|
+
* @public
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
exports.DEFAULT_LOAD_FILES = DEFAULT_LOAD_FILES;
|
|
173
|
+
var DEFAULT_EXPORT_DATA = {
|
|
174
|
+
selectedDataset: '',
|
|
175
|
+
dataType: _constants.EXPORT_DATA_TYPE.CSV,
|
|
176
|
+
filtered: true
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* @constant
|
|
180
|
+
*/
|
|
181
|
+
|
|
182
|
+
exports.DEFAULT_EXPORT_DATA = DEFAULT_EXPORT_DATA;
|
|
183
|
+
var DEFAULT_NOTIFICATIONS = [];
|
|
184
|
+
/**
|
|
185
|
+
* @constant
|
|
186
|
+
* @property exportMapboxAccessToken - Default: null, this is used when we provide a default mapbox token for users to take advantage of
|
|
187
|
+
* @property userMapboxToken - Default: '', mapbox token provided by user through input field
|
|
188
|
+
* @property mode - Default: 'READ', read only or editable
|
|
189
|
+
* @public
|
|
190
|
+
*/
|
|
191
|
+
|
|
192
|
+
exports.DEFAULT_NOTIFICATIONS = DEFAULT_NOTIFICATIONS;
|
|
193
|
+
var DEFAULT_EXPORT_HTML = {
|
|
194
|
+
exportMapboxAccessToken: null,
|
|
195
|
+
userMapboxToken: '',
|
|
196
|
+
mode: _constants.EXPORT_HTML_MAP_MODES.READ
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* @constant
|
|
200
|
+
* @property hasData - Default: 'true',
|
|
201
|
+
* @public
|
|
202
|
+
*/
|
|
203
|
+
|
|
204
|
+
exports.DEFAULT_EXPORT_HTML = DEFAULT_EXPORT_HTML;
|
|
205
|
+
var DEFAULT_EXPORT_JSON = {
|
|
206
|
+
hasData: true
|
|
207
|
+
};
|
|
208
|
+
/**
|
|
209
|
+
* Export Map Config
|
|
210
|
+
* @constant
|
|
211
|
+
* @property HTML - Default: 'DEFAULT_EXPORT_HTML',
|
|
212
|
+
* @property JSON - Default: 'DEFAULT_EXPORT_JSON',
|
|
213
|
+
* @property format - Default: 'HTML',
|
|
214
|
+
* @public
|
|
215
|
+
*/
|
|
216
|
+
|
|
217
|
+
exports.DEFAULT_EXPORT_JSON = DEFAULT_EXPORT_JSON;
|
|
218
|
+
var DEFAULT_EXPORT_MAP = (_DEFAULT_EXPORT_MAP = {}, (0, _defineProperty2["default"])(_DEFAULT_EXPORT_MAP, _constants.EXPORT_MAP_FORMATS.HTML, DEFAULT_EXPORT_HTML), (0, _defineProperty2["default"])(_DEFAULT_EXPORT_MAP, _constants.EXPORT_MAP_FORMATS.JSON, DEFAULT_EXPORT_JSON), (0, _defineProperty2["default"])(_DEFAULT_EXPORT_MAP, "format", _constants.EXPORT_MAP_FORMATS.HTML), _DEFAULT_EXPORT_MAP);
|
|
219
|
+
/**
|
|
220
|
+
* Default initial `uiState`
|
|
221
|
+
* @memberof uiStateUpdaters
|
|
222
|
+
* @constant
|
|
223
|
+
* @property readOnly Default: `false`
|
|
224
|
+
* @property activeSidePanel Default: `'layer'`
|
|
225
|
+
* @property currentModal Default: `'addData'`
|
|
226
|
+
* @property datasetKeyToRemove Default: `null`
|
|
227
|
+
* @property visibleDropdown Default: `null`
|
|
228
|
+
* @property exportImage Default: [`DEFAULT_EXPORT_IMAGE`](#default_export_image)
|
|
229
|
+
* @property exportData Default: [`DEFAULT_EXPORT_DATA`](#default_export_data)
|
|
230
|
+
* @property exportMap Default: [`DEFAULT_EXPORT_MAP`](#default_export_map)
|
|
231
|
+
* @property mapControls Default: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
232
|
+
* @property notifications Default: `[]`
|
|
233
|
+
* @property notifications Default: `[]`
|
|
234
|
+
* @property loadFiles
|
|
235
|
+
* @public
|
|
236
|
+
*/
|
|
237
|
+
|
|
238
|
+
exports.DEFAULT_EXPORT_MAP = DEFAULT_EXPORT_MAP;
|
|
239
|
+
var INITIAL_UI_STATE = {
|
|
240
|
+
readOnly: false,
|
|
241
|
+
activeSidePanel: DEFAULT_ACTIVE_SIDE_PANEL,
|
|
242
|
+
currentModal: DEFAULT_MODAL,
|
|
243
|
+
datasetKeyToRemove: null,
|
|
244
|
+
visibleDropdown: null,
|
|
245
|
+
// export image modal ui
|
|
246
|
+
exportImage: DEFAULT_EXPORT_IMAGE,
|
|
247
|
+
// export data modal ui
|
|
248
|
+
exportData: DEFAULT_EXPORT_DATA,
|
|
249
|
+
// html export
|
|
250
|
+
exportMap: DEFAULT_EXPORT_MAP,
|
|
251
|
+
// map control panels
|
|
252
|
+
mapControls: DEFAULT_MAP_CONTROLS,
|
|
253
|
+
// ui notifications
|
|
254
|
+
notifications: DEFAULT_NOTIFICATIONS,
|
|
255
|
+
// load files
|
|
256
|
+
loadFiles: DEFAULT_LOAD_FILES,
|
|
257
|
+
// Locale of the UI
|
|
258
|
+
locale: _localization.LOCALE_CODES.en,
|
|
259
|
+
layerPanelListView: 'list'
|
|
260
|
+
};
|
|
261
|
+
/* Updaters */
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* @memberof uiStateUpdaters
|
|
265
|
+
|
|
266
|
+
*/
|
|
267
|
+
|
|
268
|
+
exports.INITIAL_UI_STATE = INITIAL_UI_STATE;
|
|
269
|
+
|
|
270
|
+
var initUiStateUpdater = function initUiStateUpdater(state, action) {
|
|
271
|
+
return _objectSpread(_objectSpread({}, state), (action.payload || {}).initialUiState);
|
|
272
|
+
};
|
|
273
|
+
/**
|
|
274
|
+
* Toggle active side panel
|
|
275
|
+
* @memberof uiStateUpdaters
|
|
276
|
+
* @param state `uiState`
|
|
277
|
+
* @param action
|
|
278
|
+
* @param action.payload id of side panel to be shown, one of `layer`, `filter`, `interaction`, `map`. close side panel if `null`
|
|
279
|
+
* @returns nextState
|
|
280
|
+
* @public
|
|
281
|
+
*/
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
exports.initUiStateUpdater = initUiStateUpdater;
|
|
285
|
+
|
|
286
|
+
var toggleSidePanelUpdater = function toggleSidePanelUpdater(state, _ref) {
|
|
287
|
+
var id = _ref.payload;
|
|
288
|
+
return id === state.activeSidePanel ? state : _objectSpread(_objectSpread({}, state), {}, {
|
|
289
|
+
activeSidePanel: id
|
|
290
|
+
});
|
|
291
|
+
};
|
|
292
|
+
/**
|
|
293
|
+
* Show and hide modal dialog
|
|
294
|
+
* @memberof uiStateUpdaters
|
|
295
|
+
* @param state `uiState`
|
|
296
|
+
* @param action
|
|
297
|
+
* @paramaction.payload id of modal to be shown, null to hide modals. One of:
|
|
298
|
+
* - [`DATA_TABLE_ID`](../constants/default-settings.md#data_table_id)
|
|
299
|
+
* - [`DELETE_DATA_ID`](../constants/default-settings.md#delete_data_id)
|
|
300
|
+
* - [`ADD_DATA_ID`](../constants/default-settings.md#add_data_id)
|
|
301
|
+
* - [`EXPORT_IMAGE_ID`](../constants/default-settings.md#export_image_id)
|
|
302
|
+
* - [`EXPORT_DATA_ID`](../constants/default-settings.md#export_data_id)
|
|
303
|
+
* - [`ADD_MAP_STYLE_ID`](../constants/default-settings.md#add_map_style_id)
|
|
304
|
+
* @returns nextState
|
|
305
|
+
* @public
|
|
306
|
+
*/
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
exports.toggleSidePanelUpdater = toggleSidePanelUpdater;
|
|
310
|
+
|
|
311
|
+
var toggleModalUpdater = function toggleModalUpdater(state, _ref2) {
|
|
312
|
+
var id = _ref2.payload;
|
|
313
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
314
|
+
currentModal: id
|
|
315
|
+
});
|
|
316
|
+
};
|
|
317
|
+
/**
|
|
318
|
+
* Hide and show side panel header dropdown, activated by clicking the share link on top of the side panel
|
|
319
|
+
* @memberof uiStateUpdaters
|
|
320
|
+
* @public
|
|
321
|
+
*/
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
exports.toggleModalUpdater = toggleModalUpdater;
|
|
325
|
+
|
|
326
|
+
var showExportDropdownUpdater = function showExportDropdownUpdater(state, _ref3) {
|
|
327
|
+
var id = _ref3.payload;
|
|
328
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
329
|
+
visibleDropdown: id
|
|
330
|
+
});
|
|
331
|
+
};
|
|
332
|
+
/**
|
|
333
|
+
* Hide side panel header dropdown, activated by clicking the share link on top of the side panel
|
|
334
|
+
* @memberof uiStateUpdaters
|
|
335
|
+
* @public
|
|
336
|
+
*/
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
exports.showExportDropdownUpdater = showExportDropdownUpdater;
|
|
340
|
+
|
|
341
|
+
var hideExportDropdownUpdater = function hideExportDropdownUpdater(state) {
|
|
342
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
343
|
+
visibleDropdown: null
|
|
344
|
+
});
|
|
345
|
+
};
|
|
346
|
+
/**
|
|
347
|
+
* Toggle active map control panel
|
|
348
|
+
* @memberof uiStateUpdaters
|
|
349
|
+
* @param state `uiState`
|
|
350
|
+
* @param action action
|
|
351
|
+
* @param action.payload map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
352
|
+
* @returns nextState
|
|
353
|
+
* @public
|
|
354
|
+
*/
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
exports.hideExportDropdownUpdater = hideExportDropdownUpdater;
|
|
358
|
+
|
|
359
|
+
var toggleMapControlUpdater = function toggleMapControlUpdater(state, _ref4) {
|
|
360
|
+
var _ref4$payload = _ref4.payload,
|
|
361
|
+
panelId = _ref4$payload.panelId,
|
|
362
|
+
_ref4$payload$index = _ref4$payload.index,
|
|
363
|
+
index = _ref4$payload$index === void 0 ? 0 : _ref4$payload$index;
|
|
364
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
365
|
+
mapControls: _objectSpread(_objectSpread({}, state.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, state.mapControls[panelId]), {}, {
|
|
366
|
+
// this handles split map interaction
|
|
367
|
+
// Toggling from within the same map will simply toggle the active property
|
|
368
|
+
// Toggling from within different maps we set the active property to true
|
|
369
|
+
active: index === state.mapControls[panelId].activeMapIndex ? !state.mapControls[panelId].active : true,
|
|
370
|
+
activeMapIndex: index
|
|
371
|
+
})))
|
|
372
|
+
});
|
|
373
|
+
};
|
|
374
|
+
/**
|
|
375
|
+
* Toggle map control visibility
|
|
376
|
+
* @memberof uiStateUpdaters
|
|
377
|
+
* @param state `uiState`
|
|
378
|
+
* @param action action
|
|
379
|
+
* @param action.payload map control panel id, one of the keys of: [`DEFAULT_MAP_CONTROLS`](#default_map_controls)
|
|
380
|
+
* @returns nextState
|
|
381
|
+
* @public
|
|
382
|
+
*/
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
exports.toggleMapControlUpdater = toggleMapControlUpdater;
|
|
386
|
+
|
|
387
|
+
var setMapControlVisibilityUpdater = function setMapControlVisibilityUpdater(state, _ref5) {
|
|
388
|
+
var _state$mapControls;
|
|
389
|
+
|
|
390
|
+
var _ref5$payload = _ref5.payload,
|
|
391
|
+
panelId = _ref5$payload.panelId,
|
|
392
|
+
show = _ref5$payload.show;
|
|
393
|
+
|
|
394
|
+
if (!((_state$mapControls = state.mapControls) !== null && _state$mapControls !== void 0 && _state$mapControls[panelId])) {
|
|
395
|
+
return state;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
399
|
+
mapControls: _objectSpread(_objectSpread({}, state.mapControls), {}, (0, _defineProperty2["default"])({}, panelId, _objectSpread(_objectSpread({}, state.mapControls[panelId]), {}, {
|
|
400
|
+
show: Boolean(show)
|
|
401
|
+
})))
|
|
402
|
+
});
|
|
403
|
+
};
|
|
404
|
+
/**
|
|
405
|
+
* Toggle active map control panel
|
|
406
|
+
* @memberof uiStateUpdaters
|
|
407
|
+
* @param state `uiState`
|
|
408
|
+
* @param action
|
|
409
|
+
* @param action.payload dataset id
|
|
410
|
+
* @returns nextState
|
|
411
|
+
* @public
|
|
412
|
+
*/
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
exports.setMapControlVisibilityUpdater = setMapControlVisibilityUpdater;
|
|
416
|
+
|
|
417
|
+
var openDeleteModalUpdater = function openDeleteModalUpdater(state, _ref6) {
|
|
418
|
+
var datasetKeyToRemove = _ref6.payload;
|
|
419
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
420
|
+
currentModal: _constants.DELETE_DATA_ID,
|
|
421
|
+
datasetKeyToRemove: datasetKeyToRemove
|
|
422
|
+
});
|
|
423
|
+
};
|
|
424
|
+
/**
|
|
425
|
+
* Set `exportImage.legend` to `true` or `false`
|
|
426
|
+
* @memberof uiStateUpdaters
|
|
427
|
+
* @param state `uiState`
|
|
428
|
+
* @returns nextState
|
|
429
|
+
* @public
|
|
430
|
+
*/
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
exports.openDeleteModalUpdater = openDeleteModalUpdater;
|
|
434
|
+
|
|
435
|
+
var setExportImageSettingUpdater = function setExportImageSettingUpdater(state, _ref7) {
|
|
436
|
+
var newSetting = _ref7.payload;
|
|
437
|
+
|
|
438
|
+
var updated = _objectSpread(_objectSpread({}, state.exportImage), newSetting);
|
|
439
|
+
|
|
440
|
+
var imageSize = (0, _utils.calculateExportImageSize)(updated) || state.exportImage.imageSize;
|
|
441
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
442
|
+
exportImage: _objectSpread(_objectSpread({}, updated), {}, {
|
|
443
|
+
// @ts-expect-error
|
|
444
|
+
// TODO: calculateExportImageSize does not return imageSize.zoomOffset,
|
|
445
|
+
// do we need take this value from current state, or return defaul value = 0
|
|
446
|
+
imageSize: imageSize
|
|
447
|
+
})
|
|
448
|
+
});
|
|
449
|
+
};
|
|
450
|
+
/**
|
|
451
|
+
* Set `exportImage.setExportImageDataUri` to a image dataUri
|
|
452
|
+
* @memberof uiStateUpdaters
|
|
453
|
+
* @param state `uiState`
|
|
454
|
+
* @param action
|
|
455
|
+
* @param action.payload export image data uri
|
|
456
|
+
* @returns nextState
|
|
457
|
+
* @public
|
|
458
|
+
*/
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
exports.setExportImageSettingUpdater = setExportImageSettingUpdater;
|
|
462
|
+
|
|
463
|
+
var setExportImageDataUriUpdater = function setExportImageDataUriUpdater(state, _ref8) {
|
|
464
|
+
var dataUri = _ref8.payload;
|
|
465
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
466
|
+
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
467
|
+
processing: false,
|
|
468
|
+
imageDataUri: dataUri
|
|
469
|
+
})
|
|
470
|
+
});
|
|
471
|
+
};
|
|
472
|
+
/**
|
|
473
|
+
* @memberof uiStateUpdaters
|
|
474
|
+
* @public
|
|
475
|
+
*/
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
exports.setExportImageDataUriUpdater = setExportImageDataUriUpdater;
|
|
479
|
+
|
|
480
|
+
var setExportImageErrorUpdater = function setExportImageErrorUpdater(state, _ref9) {
|
|
481
|
+
var error = _ref9.payload;
|
|
482
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
483
|
+
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
484
|
+
processing: false,
|
|
485
|
+
error: error
|
|
486
|
+
})
|
|
487
|
+
});
|
|
488
|
+
};
|
|
489
|
+
/**
|
|
490
|
+
* Delete cached export image
|
|
491
|
+
* @memberof uiStateUpdaters
|
|
492
|
+
* @public
|
|
493
|
+
*/
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
exports.setExportImageErrorUpdater = setExportImageErrorUpdater;
|
|
497
|
+
|
|
498
|
+
var cleanupExportImageUpdater = function cleanupExportImageUpdater(state) {
|
|
499
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
500
|
+
exportImage: _objectSpread(_objectSpread({}, state.exportImage), {}, {
|
|
501
|
+
exporting: false,
|
|
502
|
+
imageDataUri: '',
|
|
503
|
+
error: false,
|
|
504
|
+
processing: false,
|
|
505
|
+
center: false
|
|
506
|
+
})
|
|
507
|
+
});
|
|
508
|
+
};
|
|
509
|
+
/**
|
|
510
|
+
* Start image exporting flow
|
|
511
|
+
* @memberof uiStateUpdaters
|
|
512
|
+
* @param state
|
|
513
|
+
* @param options
|
|
514
|
+
* @returns {UiState}
|
|
515
|
+
* @public
|
|
516
|
+
*/
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
exports.cleanupExportImageUpdater = cleanupExportImageUpdater;
|
|
520
|
+
|
|
521
|
+
var startExportingImageUpdater = function startExportingImageUpdater(state, _ref10) {
|
|
522
|
+
var _ref10$payload = _ref10.payload,
|
|
523
|
+
options = _ref10$payload === void 0 ? {} : _ref10$payload;
|
|
524
|
+
|
|
525
|
+
var imageSettings = _objectSpread(_objectSpread({}, options), {}, {
|
|
526
|
+
exporting: true
|
|
527
|
+
});
|
|
528
|
+
|
|
529
|
+
return (0, _composerHelpers.compose_)([cleanupExportImageUpdater, (0, _composerHelpers.apply_)(setExportImageSettingUpdater, (0, _composerHelpers.payload_)(imageSettings))])(state);
|
|
530
|
+
};
|
|
531
|
+
/**
|
|
532
|
+
* Set selected dataset for export
|
|
533
|
+
* @memberof uiStateUpdaters
|
|
534
|
+
* @param state `uiState`
|
|
535
|
+
* @param action
|
|
536
|
+
* @param action.payload dataset id
|
|
537
|
+
* @returns nextState
|
|
538
|
+
* @public
|
|
539
|
+
*/
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
exports.startExportingImageUpdater = startExportingImageUpdater;
|
|
543
|
+
|
|
544
|
+
var setExportSelectedDatasetUpdater = function setExportSelectedDatasetUpdater(state, _ref11) {
|
|
545
|
+
var dataset = _ref11.payload;
|
|
546
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
547
|
+
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
548
|
+
selectedDataset: dataset
|
|
549
|
+
})
|
|
550
|
+
});
|
|
551
|
+
};
|
|
552
|
+
/**
|
|
553
|
+
* Set data format for exporting data
|
|
554
|
+
* @memberof uiStateUpdaters
|
|
555
|
+
* @param state `uiState`
|
|
556
|
+
* @param action
|
|
557
|
+
* @param action.payload one of `'text/csv'`
|
|
558
|
+
* @returns nextState
|
|
559
|
+
* @public
|
|
560
|
+
*/
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
exports.setExportSelectedDatasetUpdater = setExportSelectedDatasetUpdater;
|
|
564
|
+
|
|
565
|
+
var setExportDataTypeUpdater = function setExportDataTypeUpdater(state, _ref12) {
|
|
566
|
+
var dataType = _ref12.payload;
|
|
567
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
568
|
+
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
569
|
+
dataType: dataType
|
|
570
|
+
})
|
|
571
|
+
});
|
|
572
|
+
};
|
|
573
|
+
/**
|
|
574
|
+
* Whether to export filtered data, `true` or `false`
|
|
575
|
+
* @memberof uiStateUpdaters
|
|
576
|
+
* @param state `uiState`
|
|
577
|
+
* @param action
|
|
578
|
+
* @param action.payload
|
|
579
|
+
* @returns nextState
|
|
580
|
+
* @public
|
|
581
|
+
*/
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
exports.setExportDataTypeUpdater = setExportDataTypeUpdater;
|
|
585
|
+
|
|
586
|
+
var setExportFilteredUpdater = function setExportFilteredUpdater(state, _ref13) {
|
|
587
|
+
var filtered = _ref13.payload;
|
|
588
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
589
|
+
exportData: _objectSpread(_objectSpread({}, state.exportData), {}, {
|
|
590
|
+
filtered: filtered
|
|
591
|
+
})
|
|
592
|
+
});
|
|
593
|
+
};
|
|
594
|
+
/**
|
|
595
|
+
* Whether to including data in map config, toggle between `true` or `false`
|
|
596
|
+
* @memberof uiStateUpdaters
|
|
597
|
+
* @param state `uiState`
|
|
598
|
+
* @returns nextState
|
|
599
|
+
* @public
|
|
600
|
+
*/
|
|
601
|
+
|
|
602
|
+
|
|
603
|
+
exports.setExportFilteredUpdater = setExportFilteredUpdater;
|
|
604
|
+
|
|
605
|
+
var setExportDataUpdater = function setExportDataUpdater(state) {
|
|
606
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
607
|
+
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.JSON, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.JSON]), {}, {
|
|
608
|
+
hasData: !state.exportMap[_constants.EXPORT_MAP_FORMATS.JSON].hasData
|
|
609
|
+
})))
|
|
610
|
+
});
|
|
611
|
+
};
|
|
612
|
+
/**
|
|
613
|
+
* whether to export a mapbox access to HTML single page
|
|
614
|
+
* @param state - `uiState`
|
|
615
|
+
* @param action
|
|
616
|
+
* @param action.payload
|
|
617
|
+
* @returns nextState
|
|
618
|
+
* @public
|
|
619
|
+
*/
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
exports.setExportDataUpdater = setExportDataUpdater;
|
|
623
|
+
|
|
624
|
+
var setUserMapboxAccessTokenUpdater = function setUserMapboxAccessTokenUpdater(state, _ref14) {
|
|
625
|
+
var userMapboxToken = _ref14.payload;
|
|
626
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
627
|
+
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.HTML, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.HTML]), {}, {
|
|
628
|
+
userMapboxToken: userMapboxToken
|
|
629
|
+
})))
|
|
630
|
+
});
|
|
631
|
+
};
|
|
632
|
+
/**
|
|
633
|
+
* Sets the export map format
|
|
634
|
+
* @param state - `uiState`
|
|
635
|
+
* @param action
|
|
636
|
+
* @param action.payload format to use to export the map into
|
|
637
|
+
* @return nextState
|
|
638
|
+
*/
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
exports.setUserMapboxAccessTokenUpdater = setUserMapboxAccessTokenUpdater;
|
|
642
|
+
|
|
643
|
+
var setExportMapFormatUpdater = function setExportMapFormatUpdater(state, _ref15) {
|
|
644
|
+
var format = _ref15.payload;
|
|
645
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
646
|
+
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, {
|
|
647
|
+
// @ts-expect-error
|
|
648
|
+
format: format
|
|
649
|
+
})
|
|
650
|
+
});
|
|
651
|
+
};
|
|
652
|
+
/**
|
|
653
|
+
* Set the export html map mode
|
|
654
|
+
* @param state - `uiState`
|
|
655
|
+
* @param action
|
|
656
|
+
* @param action.payload to be set (available modes: EXPORT_HTML_MAP_MODES)
|
|
657
|
+
* @return nextState
|
|
658
|
+
*/
|
|
659
|
+
|
|
660
|
+
|
|
661
|
+
exports.setExportMapFormatUpdater = setExportMapFormatUpdater;
|
|
662
|
+
|
|
663
|
+
var setExportMapHTMLModeUpdater = function setExportMapHTMLModeUpdater(state, _ref16) {
|
|
664
|
+
var mode = _ref16.payload;
|
|
665
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
666
|
+
exportMap: _objectSpread(_objectSpread({}, state.exportMap), {}, (0, _defineProperty2["default"])({}, _constants.EXPORT_MAP_FORMATS.HTML, _objectSpread(_objectSpread({}, state.exportMap[_constants.EXPORT_MAP_FORMATS.HTML]), {}, {
|
|
667
|
+
mode: mode
|
|
668
|
+
})))
|
|
669
|
+
});
|
|
670
|
+
};
|
|
671
|
+
/**
|
|
672
|
+
* Adds a new notification.
|
|
673
|
+
* Updates a notification in case of matching ids.
|
|
674
|
+
* @memberof uiStateUpdaters
|
|
675
|
+
* @param state `uiState`
|
|
676
|
+
* @param action
|
|
677
|
+
* @param action.payload Params of a notification
|
|
678
|
+
* @returns nextState
|
|
679
|
+
* @public
|
|
680
|
+
*/
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
exports.setExportMapHTMLModeUpdater = setExportMapHTMLModeUpdater;
|
|
684
|
+
|
|
685
|
+
var addNotificationUpdater = function addNotificationUpdater(state, _ref17) {
|
|
686
|
+
var payload = _ref17.payload;
|
|
687
|
+
var notifications; // @ts-expect-error
|
|
688
|
+
|
|
689
|
+
var payloadId = payload === null || payload === void 0 ? void 0 : payload.id;
|
|
690
|
+
var notificationToUpdate = payloadId ? state.notifications.find(function (n) {
|
|
691
|
+
return n.id === payloadId;
|
|
692
|
+
}) : null;
|
|
693
|
+
|
|
694
|
+
if (notificationToUpdate) {
|
|
695
|
+
notifications = state.notifications.map(function (n) {
|
|
696
|
+
return n.id === payloadId ? (0, _utils.createNotification)(payload) : n;
|
|
697
|
+
});
|
|
698
|
+
} else {
|
|
699
|
+
notifications = [].concat((0, _toConsumableArray2["default"])(state.notifications || []), [(0, _utils.createNotification)(payload)]);
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
703
|
+
notifications: notifications
|
|
704
|
+
});
|
|
705
|
+
};
|
|
706
|
+
/**
|
|
707
|
+
* Remove a notification
|
|
708
|
+
* @memberof uiStateUpdaters
|
|
709
|
+
* @param state `uiState`
|
|
710
|
+
* @param action
|
|
711
|
+
* @param action.payload id of the notification to be removed
|
|
712
|
+
* @returns nextState
|
|
713
|
+
* @public
|
|
714
|
+
*/
|
|
715
|
+
|
|
716
|
+
|
|
717
|
+
exports.addNotificationUpdater = addNotificationUpdater;
|
|
718
|
+
|
|
719
|
+
var removeNotificationUpdater = function removeNotificationUpdater(state, _ref18) {
|
|
720
|
+
var id = _ref18.payload;
|
|
721
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
722
|
+
notifications: state.notifications.filter(function (n) {
|
|
723
|
+
return n.id !== id;
|
|
724
|
+
})
|
|
725
|
+
});
|
|
726
|
+
};
|
|
727
|
+
/**
|
|
728
|
+
* Fired when file loading begin
|
|
729
|
+
* @memberof uiStateUpdaters
|
|
730
|
+
* @param state `uiState`
|
|
731
|
+
* @returns nextState
|
|
732
|
+
* @public
|
|
733
|
+
*/
|
|
734
|
+
|
|
735
|
+
|
|
736
|
+
exports.removeNotificationUpdater = removeNotificationUpdater;
|
|
737
|
+
|
|
738
|
+
var loadFilesUpdater = function loadFilesUpdater(state) {
|
|
739
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
740
|
+
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
741
|
+
fileLoading: true
|
|
742
|
+
})
|
|
743
|
+
});
|
|
744
|
+
};
|
|
745
|
+
/**
|
|
746
|
+
* Handles loading file success and set fileLoading property to false
|
|
747
|
+
* @memberof uiStateUpdaters
|
|
748
|
+
* @param state `uiState`
|
|
749
|
+
* @returns nextState
|
|
750
|
+
*/
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
exports.loadFilesUpdater = loadFilesUpdater;
|
|
754
|
+
|
|
755
|
+
var loadFilesSuccessUpdater = function loadFilesSuccessUpdater(state) {
|
|
756
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
757
|
+
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
758
|
+
fileLoading: false
|
|
759
|
+
})
|
|
760
|
+
});
|
|
761
|
+
};
|
|
762
|
+
/**
|
|
763
|
+
* Handles load file error and set fileLoading property to false
|
|
764
|
+
* @memberof uiStateUpdaters
|
|
765
|
+
* @param state
|
|
766
|
+
* @param action
|
|
767
|
+
* @param action.error
|
|
768
|
+
* @returns nextState
|
|
769
|
+
* @public
|
|
770
|
+
*/
|
|
771
|
+
|
|
772
|
+
|
|
773
|
+
exports.loadFilesSuccessUpdater = loadFilesSuccessUpdater;
|
|
774
|
+
|
|
775
|
+
var loadFilesErrUpdater = function loadFilesErrUpdater(state, _ref19) {
|
|
776
|
+
var error = _ref19.error;
|
|
777
|
+
return addNotificationUpdater(_objectSpread(_objectSpread({}, state), {}, {
|
|
778
|
+
loadFiles: _objectSpread(_objectSpread({}, state.loadFiles), {}, {
|
|
779
|
+
fileLoading: false
|
|
780
|
+
})
|
|
781
|
+
}), {
|
|
782
|
+
payload: (0, _utils.errorNotification)({
|
|
783
|
+
message: (error || {}).message || 'Failed to upload files',
|
|
784
|
+
topic: _constants.DEFAULT_NOTIFICATION_TOPICS.global
|
|
785
|
+
})
|
|
786
|
+
});
|
|
787
|
+
};
|
|
788
|
+
/**
|
|
789
|
+
* Handles toggle map split and reset all map control index to 0
|
|
790
|
+
* @memberof uiStateUpdaters
|
|
791
|
+
* @param state
|
|
792
|
+
* @returns nextState
|
|
793
|
+
* @public
|
|
794
|
+
*/
|
|
795
|
+
|
|
796
|
+
|
|
797
|
+
exports.loadFilesErrUpdater = loadFilesErrUpdater;
|
|
798
|
+
|
|
799
|
+
var toggleSplitMapUpdater = function toggleSplitMapUpdater(state) {
|
|
800
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
801
|
+
mapControls: Object.entries(state.mapControls).reduce(function (acc, entry) {
|
|
802
|
+
return _objectSpread(_objectSpread({}, acc), {}, (0, _defineProperty2["default"])({}, entry[0], _objectSpread(_objectSpread({}, entry[1]), {}, {
|
|
803
|
+
activeMapIndex: 0
|
|
804
|
+
})));
|
|
805
|
+
}, {})
|
|
806
|
+
});
|
|
807
|
+
};
|
|
808
|
+
/**
|
|
809
|
+
* Toggle modal data
|
|
810
|
+
* @memberof uiStateUpdaters
|
|
811
|
+
* @param state
|
|
812
|
+
* @returns nextState
|
|
813
|
+
* @public
|
|
814
|
+
*/
|
|
815
|
+
|
|
816
|
+
|
|
817
|
+
exports.toggleSplitMapUpdater = toggleSplitMapUpdater;
|
|
818
|
+
|
|
819
|
+
var showDatasetTableUpdater = function showDatasetTableUpdater(state) {
|
|
820
|
+
return toggleModalUpdater(state, {
|
|
821
|
+
payload: _constants.DATA_TABLE_ID
|
|
822
|
+
});
|
|
823
|
+
};
|
|
824
|
+
/**
|
|
825
|
+
* Set the locale of the UI
|
|
826
|
+
* @memberof uiStateUpdaters
|
|
827
|
+
* @param state `uiState`
|
|
828
|
+
* @param action
|
|
829
|
+
* @param action.payload
|
|
830
|
+
* @param action.payload.locale locale
|
|
831
|
+
* @returns nextState
|
|
832
|
+
* @public
|
|
833
|
+
*/
|
|
834
|
+
|
|
835
|
+
|
|
836
|
+
exports.showDatasetTableUpdater = showDatasetTableUpdater;
|
|
837
|
+
|
|
838
|
+
var setLocaleUpdater = function setLocaleUpdater(state, _ref20) {
|
|
839
|
+
var locale = _ref20.payload.locale;
|
|
840
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
841
|
+
locale: locale
|
|
842
|
+
});
|
|
843
|
+
};
|
|
844
|
+
/**
|
|
845
|
+
* Toggle layer panel list view
|
|
846
|
+
* @memberof uiStateUpdaters
|
|
847
|
+
* @param state `uiState`
|
|
848
|
+
* @param action
|
|
849
|
+
* @param action.payload layer panel listView value. Can be 'list' or 'sortByDataset'
|
|
850
|
+
* @returns nextState
|
|
851
|
+
* @public
|
|
852
|
+
*/
|
|
853
|
+
|
|
854
|
+
|
|
855
|
+
exports.setLocaleUpdater = setLocaleUpdater;
|
|
856
|
+
|
|
857
|
+
var toggleLayerPanelListViewUpdater = function toggleLayerPanelListViewUpdater(state, _ref21) {
|
|
858
|
+
var listView = _ref21.payload;
|
|
859
|
+
// @ts-expect-error
|
|
860
|
+
return listView === state.layerPanelListView ? state : _objectSpread(_objectSpread({}, state), {}, {
|
|
861
|
+
layerPanelListView: listView
|
|
862
|
+
});
|
|
863
|
+
};
|
|
864
|
+
|
|
865
|
+
exports.toggleLayerPanelListViewUpdater = toggleLayerPanelListViewUpdater;
|
|
866
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91aS1zdGF0ZS11cGRhdGVycy50cyJdLCJuYW1lcyI6WyJERUZBVUxUX0FDVElWRV9TSURFX1BBTkVMIiwiREVGQVVMVF9NT0RBTCIsIkFERF9EQVRBX0lEIiwidWlTdGF0ZVVwZGF0ZXJzIiwiREVGQVVMVF9NQVBfQ09OVFJPTFNfRkVBVFVSRVMiLCJzaG93IiwiYWN0aXZlIiwiZGlzYWJsZUNsb3NlIiwiYWN0aXZlTWFwSW5kZXgiLCJERUZBVUxUX01BUF9DT05UUk9MUyIsIk9iamVjdCIsImtleXMiLCJNQVBfQ09OVFJPTFMiLCJyZWR1Y2UiLCJmaW5hbCIsImN1cnJlbnQiLCJERUZBVUxUX0VYUE9SVF9JTUFHRSIsInJhdGlvIiwiRVhQT1JUX0lNR19SQVRJT1MiLCJTQ1JFRU4iLCJyZXNvbHV0aW9uIiwiUkVTT0xVVElPTlMiLCJPTkVfWCIsImxlZ2VuZCIsIm1hcEgiLCJtYXBXIiwiaW1hZ2VTaXplIiwiem9vbU9mZnNldCIsInNjYWxlIiwiaW1hZ2VXIiwiaW1hZ2VIIiwiY2VudGVyIiwiaW1hZ2VEYXRhVXJpIiwiZXhwb3J0aW5nIiwicHJvY2Vzc2luZyIsImVycm9yIiwiREVGQVVMVF9MT0FEX0ZJTEVTIiwiZmlsZUxvYWRpbmciLCJERUZBVUxUX0VYUE9SVF9EQVRBIiwic2VsZWN0ZWREYXRhc2V0IiwiZGF0YVR5cGUiLCJFWFBPUlRfREFUQV9UWVBFIiwiQ1NWIiwiZmlsdGVyZWQiLCJERUZBVUxUX05PVElGSUNBVElPTlMiLCJERUZBVUxUX0VYUE9SVF9IVE1MIiwiZXhwb3J0TWFwYm94QWNjZXNzVG9rZW4iLCJ1c2VyTWFwYm94VG9rZW4iLCJtb2RlIiwiRVhQT1JUX0hUTUxfTUFQX01PREVTIiwiUkVBRCIsIkRFRkFVTFRfRVhQT1JUX0pTT04iLCJoYXNEYXRhIiwiREVGQVVMVF9FWFBPUlRfTUFQIiwiRVhQT1JUX01BUF9GT1JNQVRTIiwiSFRNTCIsIkpTT04iLCJJTklUSUFMX1VJX1NUQVRFIiwicmVhZE9ubHkiLCJhY3RpdmVTaWRlUGFuZWwiLCJjdXJyZW50TW9kYWwiLCJkYXRhc2V0S2V5VG9SZW1vdmUiLCJ2aXNpYmxlRHJvcGRvd24iLCJleHBvcnRJbWFnZSIsImV4cG9ydERhdGEiLCJleHBvcnRNYXAiLCJtYXBDb250cm9scyIsIm5vdGlmaWNhdGlvbnMiLCJsb2FkRmlsZXMiLCJsb2NhbGUiLCJMT0NBTEVfQ09ERVMiLCJlbiIsImxheWVyUGFuZWxMaXN0VmlldyIsImluaXRVaVN0YXRlVXBkYXRlciIsInN0YXRlIiwiYWN0aW9uIiwicGF5bG9hZCIsImluaXRpYWxVaVN0YXRlIiwidG9nZ2xlU2lkZVBhbmVsVXBkYXRlciIsImlkIiwidG9nZ2xlTW9kYWxVcGRhdGVyIiwic2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlciIsImhpZGVFeHBvcnREcm9wZG93blVwZGF0ZXIiLCJ0b2dnbGVNYXBDb250cm9sVXBkYXRlciIsInBhbmVsSWQiLCJpbmRleCIsInNldE1hcENvbnRyb2xWaXNpYmlsaXR5VXBkYXRlciIsIkJvb2xlYW4iLCJvcGVuRGVsZXRlTW9kYWxVcGRhdGVyIiwiREVMRVRFX0RBVEFfSUQiLCJzZXRFeHBvcnRJbWFnZVNldHRpbmdVcGRhdGVyIiwibmV3U2V0dGluZyIsInVwZGF0ZWQiLCJzZXRFeHBvcnRJbWFnZURhdGFVcmlVcGRhdGVyIiwiZGF0YVVyaSIsInNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyIiwiY2xlYW51cEV4cG9ydEltYWdlVXBkYXRlciIsInN0YXJ0RXhwb3J0aW5nSW1hZ2VVcGRhdGVyIiwib3B0aW9ucyIsImltYWdlU2V0dGluZ3MiLCJzZXRFeHBvcnRTZWxlY3RlZERhdGFzZXRVcGRhdGVyIiwiZGF0YXNldCIsInNldEV4cG9ydERhdGFUeXBlVXBkYXRlciIsInNldEV4cG9ydEZpbHRlcmVkVXBkYXRlciIsInNldEV4cG9ydERhdGFVcGRhdGVyIiwic2V0VXNlck1hcGJveEFjY2Vzc1Rva2VuVXBkYXRlciIsInNldEV4cG9ydE1hcEZvcm1hdFVwZGF0ZXIiLCJmb3JtYXQiLCJzZXRFeHBvcnRNYXBIVE1MTW9kZVVwZGF0ZXIiLCJhZGROb3RpZmljYXRpb25VcGRhdGVyIiwicGF5bG9hZElkIiwibm90aWZpY2F0aW9uVG9VcGRhdGUiLCJmaW5kIiwibiIsIm1hcCIsInJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXIiLCJmaWx0ZXIiLCJsb2FkRmlsZXNVcGRhdGVyIiwibG9hZEZpbGVzU3VjY2Vzc1VwZGF0ZXIiLCJsb2FkRmlsZXNFcnJVcGRhdGVyIiwibWVzc2FnZSIsInRvcGljIiwiREVGQVVMVF9OT1RJRklDQVRJT05fVE9QSUNTIiwiZ2xvYmFsIiwidG9nZ2xlU3BsaXRNYXBVcGRhdGVyIiwiZW50cmllcyIsImFjYyIsImVudHJ5Iiwic2hvd0RhdGFzZXRUYWJsZVVwZGF0ZXIiLCJEQVRBX1RBQkxFX0lEIiwic2V0TG9jYWxlVXBkYXRlciIsInRvZ2dsZUxheWVyUGFuZWxMaXN0Vmlld1VwZGF0ZXIiLCJsaXN0VmlldyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFhQTs7QUFDQTs7QUFLQTs7Ozs7Ozs7QUFrQk8sSUFBTUEseUJBQXlCLEdBQUcsT0FBbEM7O0FBQ0EsSUFBTUMsYUFBYSxHQUFHQyxzQkFBdEI7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTs7O0FBQ0EsSUFBTUMsZUFBZSxHQUFHLElBQXhCO0FBQ0E7O0FBRUEsSUFBTUMsNkJBQXlDLEdBQUc7QUFDaERDLEVBQUFBLElBQUksRUFBRSxJQUQwQztBQUVoREMsRUFBQUEsTUFBTSxFQUFFLEtBRndDO0FBR2hEQyxFQUFBQSxZQUFZLEVBQUUsS0FIa0M7QUFJaEQ7QUFDQUMsRUFBQUEsY0FBYyxFQUFF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O0FBQUNFLElBQUFBLE9BQU8sRUFBRXFEO0FBQVYsR0FBUixDQURtQjtBQUFBLENBQWhDO0FBR1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUM5QnhELEtBRDhCO0FBQUEsTUFFbkJMLE1BRm1CLFVBRTdCTyxPQUY2QixDQUVuQlAsTUFGbUI7QUFBQSx5Q0FJM0JLLEtBSjJCO0FBSzlCTCxJQUFBQSxNQUFNLEVBQU5BO0FBTDhCO0FBQUEsQ0FBekI7QUFRUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sSUFBTThELCtCQUErQixHQUFHLFNBQWxDQSwrQkFBa0MsQ0FDN0N6RCxLQUQ2QyxVQUdqQztBQUFBLE1BREYwRCxRQUNFLFVBRFh4RCxPQUNXO0FBQ1o7QUFDQSxTQUFPd0QsUUFBUSxLQUFLMUQsS0FBSyxDQUFDRixrQkFBbkIsR0FDSEUsS0FERyxtQ0FHRUEsS0FIRjtBQUlERixJQUFBQSxrQkFBa0IsRUFBRTREO0FBSm5CLElBQVA7QUFNRCxDQVhNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIyIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtcbiAgQUREX0RBVEFfSUQsXG4gIERBVEFfVEFCTEVfSUQsXG4gIERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUyxcbiAgREVMRVRFX0RBVEFfSUQsXG4gIEVYUE9SVF9EQVRBX1RZUEUsXG4gIEVYUE9SVF9IVE1MX01BUF9NT0RFUyxcbiAgRVhQT1JUX0lNR19SQVRJT1MsXG4gIEVYUE9SVF9NQVBfRk9STUFUUyxcbiAgUkVTT0xVVElPTlMsXG4gIE1BUF9DT05UUk9MUyxcbiAgRXhwb3J0SW1hZ2Vcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtMT0NBTEVfQ09ERVN9IGZyb20gJ0BrZXBsZXIuZ2wvbG9jYWxpemF0aW9uJztcbmltcG9ydCB7XG4gIGNyZWF0ZU5vdGlmaWNhdGlvbixcbiAgZXJyb3JOb3RpZmljYXRpb24sXG4gIGNhbGN1bGF0ZUV4cG9ydEltYWdlU2l6ZVxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7cGF5bG9hZF8sIGFwcGx5XywgY29tcG9zZV99IGZyb20gJy4vY29tcG9zZXItaGVscGVycyc7XG5cbmltcG9ydCB7XG4gIEFjdGlvblR5cGVzLFxuICBLZXBsZXJHbEluaXRQYXlsb2FkLFxuICBMb2FkRmlsZXNFcnJVcGRhdGVyQWN0aW9uLFxuICBVSVN0YXRlQWN0aW9uc1xufSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtcbiAgRXhwb3J0RGF0YSxcbiAgRXhwb3J0SHRtbCxcbiAgRXhwb3J0SnNvbixcbiAgRXhwb3J0TWFwLFxuICBNYXBDb250cm9sLFxuICBNYXBDb250cm9scyxcbiAgVWlTdGF0ZVxufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUNUSVZFX1NJREVfUEFORUwgPSAnbGF5ZXInO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTU9EQUwgPSBBRERfREFUQV9JRDtcblxuLyoqXG4gKiBVcGRhdGVycyBmb3IgYHVpU3RhdGVgIHJlZHVjZXIuIENhbiBiZSB1c2VkIGluIHlvdXIgcm9vdCByZWR1Y2VyIHRvIGRpcmVjdGx5IG1vZGlmeSBrZXBsZXIuZ2wncyBzdGF0ZS5cbiAqIFJlYWQgbW9yZSBhYm91dCBbVXNpbmcgdXBkYXRlcnNdKC4uL2FkdmFuY2VkLXVzYWdlL3VzaW5nLXVwZGF0ZXJzLm1kKVxuICpcbiAqIEBwdWJsaWNcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGtlcGxlckdsUmVkdWNlciwge3VpU3RhdGVVcGRhdGVyc30gZnJvbSAna2VwbGVyLmdsL3JlZHVjZXJzJztcbiAqIC8vIFJvb3QgUmVkdWNlclxuICogY29uc3QgcmVkdWNlcnMgPSBjb21iaW5lUmVkdWNlcnMoe1xuICogIGtlcGxlckdsOiBrZXBsZXJHbFJlZHVjZXIsXG4gKiAgYXBwOiBhcHBSZWR1Y2VyXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBjb21wb3NlZFJlZHVjZXIgPSAoc3RhdGUsIGFjdGlvbikgPT4ge1xuICogIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAqICAgIC8vIGNsaWNrIGJ1dHRvbiB0byBjbG9zZSBzaWRlIHBhbmVsXG4gKiAgICBjYXNlICdDTElDS19CVVRUT04nOlxuICogICAgICByZXR1cm4ge1xuICogICAgICAgIC4uLnN0YXRlLFxuICogICAgICAgIGtlcGxlckdsOiB7XG4gKiAgICAgICAgICAuLi5zdGF0ZS5rZXBsZXJHbCxcbiAqICAgICAgICAgIGZvbzoge1xuICogICAgICAgICAgICAgLi4uc3RhdGUua2VwbGVyR2wuZm9vLFxuICogICAgICAgICAgICAgdWlTdGF0ZTogdWlTdGF0ZVVwZGF0ZXJzLnRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXIoXG4gKiAgICAgICAgICAgICAgIHVpU3RhdGUsIHtwYXlsb2FkOiBudWxsfVxuICogICAgICAgICAgICAgKVxuICogICAgICAgICAgfVxuICogICAgICAgIH1cbiAqICAgICAgfTtcbiAqICB9XG4gKiAgcmV0dXJuIHJlZHVjZXJzKHN0YXRlLCBhY3Rpb24pO1xuICogfTtcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBjb21wb3NlZFJlZHVjZXI7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCB1aVN0YXRlVXBkYXRlcnMgPSBudWxsO1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG5jb25zdCBERUZBVUxUX01BUF9DT05UUk9MU19GRUFUVVJFUzogTWFwQ29udHJvbCA9IHtcbiAgc2hvdzogdHJ1ZSxcbiAgYWN0aXZlOiBmYWxzZSxcbiAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgLy8gZGVmaW5lcyB3aGljaCBtYXAgaW5kZXggdXNlcnMgYXJlIGludGVyYWN0aW5nIHdpdGggKHRocm91Z2ggbWFwIGNvbnRyb2xzKVxuICBhY3RpdmVNYXBJbmRleDogMFxufTtcblxuLyoqXG4gKiBBIGxpc3Qgb2YgbWFwIGNvbnRyb2wgdmlzaWJpbGl0eSBhbmQgd2hldGhlciBpcyBpdCBhY3RpdmUuXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSB2aXNpYmxlTGF5ZXJzIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgbWFwTGVnZW5kIERlZmF1bHQ6IGB7c2hvdzogdHJ1ZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHJvcGVydHkgdG9nZ2xlM2QgRGVmYXVsdDogYHtzaG93OiB0cnVlfWBcbiAqIEBwcm9wZXJ0eSBzcGxpdE1hcCBEZWZhdWx0OiBge3Nob3c6IHRydWV9YFxuICogQHByb3BlcnR5IG1hcERyYXcgRGVmYXVsdDogYHtzaG93OiB0cnVlLCBhY3RpdmU6IGZhbHNlfWBcbiAqIEBwcm9wZXJ0eSBtYXBMb2NhbGUgRGVmYXVsdDogYHtzaG93OiBmYWxzZSwgYWN0aXZlOiBmYWxzZX1gXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BUF9DT05UUk9MUzogTWFwQ29udHJvbHMgPSAoT2JqZWN0LmtleXMoTUFQX0NPTlRST0xTKSBhcyBBcnJheTxcbiAga2V5b2YgdHlwZW9mIE1BUF9DT05UUk9MU1xuPikucmVkdWNlKFxuICAoZmluYWwsIGN1cnJlbnQpID0+ICh7XG4gICAgLi4uZmluYWwsXG4gICAgW2N1cnJlbnRdOiBERUZBVUxUX01BUF9DT05UUk9MU19GRUFUVVJFU1xuICB9KSxcbiAge30gYXMgTWFwQ29udHJvbHNcbik7XG5cbi8qKlxuICogRGVmYXVsdCBpbWFnZSBleHBvcnQgY29uZmlnXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSByYXRpbyBEZWZhdWx0OiBgJ1NDUkVFTidgLFxuICogQHByb3BlcnR5IHJlc29sdXRpb24gRGVmYXVsdDogYCdPTkVfWCdgLFxuICogQHByb3BlcnR5IGxlZ2VuZCBEZWZhdWx0OiBgZmFsc2VgLFxuICogQHByb3BlcnR5IG1hcEggRGVmYXVsdDogMCxcbiAqIEBwcm9wZXJ0eSBtYXBXIERlZmF1bHQ6IDAsXG4gKiBAcHJvcGVydHkgaW1hZ2VTaXplIERlZmF1bHQ6IHt6b29tT2Zmc2V0OiAwLCBzY2FsZTogMSwgaW1hZ2VXOiAwLCBpbWFnZUg6IDB9LFxuICogQHByb3BlcnR5IGltYWdlRGF0YVVyaSBEZWZhdWx0OiBgJydgLFxuICogQHByb3BlcnR5IGV4cG9ydGluZyBEZWZhdWx0OiBgZmFsc2VgXG4gKiBAcHJvcGVydHkgZXJyb3IgRGVmYXVsdDogYGZhbHNlYFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfSU1BR0U6IEV4cG9ydEltYWdlID0ge1xuICAvLyB1c2VyIG9wdGlvbnNcbiAgcmF0aW86IEVYUE9SVF9JTUdfUkFUSU9TLlNDUkVFTixcbiAgcmVzb2x1dGlvbjogUkVTT0xVVElPTlMuT05FX1gsXG4gIGxlZ2VuZDogZmFsc2UsXG4gIG1hcEg6IDAsXG4gIG1hcFc6IDAsXG4gIGltYWdlU2l6ZToge1xuICAgIHpvb21PZmZzZXQ6IDAsXG4gICAgc2NhbGU6IDEsXG4gICAgaW1hZ2VXOiAwLFxuICAgIGltYWdlSDogMFxuICB9LFxuICAvLyB3aGVuIHRoaXMgaXMgc2V0IHRvIHRydWUsIHRoZSBtb2NrIG1hcCB2aWV3cG9ydCB3aWxsIG1vdmUgdG8gdGhlIGNlbnRlciBvZiBkYXRhXG4gIGNlbnRlcjogZmFsc2UsXG4gIC8vIGV4cG9ydGluZyBzdGF0ZVxuICBpbWFnZURhdGFVcmk6ICcnLFxuICAvLyBleHBvcnRpbmc6IHVzZWQgdG8gYXR0YWNoIHBsb3QtY29udGFpbmVyIHRvIGRvbVxuICBleHBvcnRpbmc6IGZhbHNlLFxuICAvLyBwcm9jZXNzaW5nOiB1c2VkIGFzIGxvYWRpbmcgaW5kaWNhdG9yIHdoZW4gZXhwb3J0IGltYWdlIGlzIGJlaW5nIHByb2R1Y2VkXG4gIHByb2Nlc3Npbmc6IGZhbHNlLFxuICBlcnJvcjogZmFsc2Vcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xPQURfRklMRVMgPSB7XG4gIGZpbGVMb2FkaW5nOiBmYWxzZVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IGluaXRpYWwgYGV4cG9ydERhdGFgIHNldHRpbmdzXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBzZWxlY3RlZERhdGFzZXQgRGVmYXVsdDogYCcnYCxcbiAqIEBwcm9wZXJ0eSBkYXRhVHlwZSBEZWZhdWx0OiBgJ2NzdidgLFxuICogQHByb3BlcnR5IGZpbHRlcmVkIERlZmF1bHQ6IGB0cnVlYCxcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX0RBVEE6IEV4cG9ydERhdGEgPSB7XG4gIHNlbGVjdGVkRGF0YXNldDogJycsXG4gIGRhdGFUeXBlOiBFWFBPUlRfREFUQV9UWVBFLkNTVixcbiAgZmlsdGVyZWQ6IHRydWVcbn07XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PVElGSUNBVElPTlMgPSBbXTtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBleHBvcnRNYXBib3hBY2Nlc3NUb2tlbiAtIERlZmF1bHQ6IG51bGwsIHRoaXMgaXMgdXNlZCB3aGVuIHdlIHByb3ZpZGUgYSBkZWZhdWx0IG1hcGJveCB0b2tlbiBmb3IgdXNlcnMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2ZcbiAqIEBwcm9wZXJ0eSB1c2VyTWFwYm94VG9rZW4gLSBEZWZhdWx0OiAnJywgbWFwYm94IHRva2VuIHByb3ZpZGVkIGJ5IHVzZXIgdGhyb3VnaCBpbnB1dCBmaWVsZFxuICogQHByb3BlcnR5IG1vZGUgLSBEZWZhdWx0OiAnUkVBRCcsIHJlYWQgb25seSBvciBlZGl0YWJsZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfSFRNTDogRXhwb3J0SHRtbCA9IHtcbiAgZXhwb3J0TWFwYm94QWNjZXNzVG9rZW46IG51bGwsXG4gIHVzZXJNYXBib3hUb2tlbjogJycsXG4gIG1vZGU6IEVYUE9SVF9IVE1MX01BUF9NT0RFUy5SRUFEXG59O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQHByb3BlcnR5IGhhc0RhdGEgLSBEZWZhdWx0OiAndHJ1ZScsXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9KU09OOiBFeHBvcnRKc29uID0ge1xuICBoYXNEYXRhOiB0cnVlXG59O1xuXG4vKipcbiAqIEV4cG9ydCBNYXAgQ29uZmlnXG4gKiBAY29uc3RhbnRcbiAqIEBwcm9wZXJ0eSBIVE1MIC0gRGVmYXVsdDogJ0RFRkFVTFRfRVhQT1JUX0hUTUwnLFxuICogQHByb3BlcnR5IEpTT04gLSBEZWZhdWx0OiAnREVGQVVMVF9FWFBPUlRfSlNPTicsXG4gKiBAcHJvcGVydHkgZm9ybWF0IC0gRGVmYXVsdDogJ0hUTUwnLFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9FWFBPUlRfTUFQOiBFeHBvcnRNYXAgPSB7XG4gIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSFRNTF06IERFRkFVTFRfRVhQT1JUX0hUTUwsXG4gIFtFWFBPUlRfTUFQX0ZPUk1BVFMuSlNPTl06IERFRkFVTFRfRVhQT1JUX0pTT04sXG4gIGZvcm1hdDogRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBpbml0aWFsIGB1aVN0YXRlYFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQGNvbnN0YW50XG4gKiBAcHJvcGVydHkgcmVhZE9ubHkgRGVmYXVsdDogYGZhbHNlYFxuICogQHByb3BlcnR5IGFjdGl2ZVNpZGVQYW5lbCBEZWZhdWx0OiBgJ2xheWVyJ2BcbiAqIEBwcm9wZXJ0eSBjdXJyZW50TW9kYWwgRGVmYXVsdDogYCdhZGREYXRhJ2BcbiAqIEBwcm9wZXJ0eSBkYXRhc2V0S2V5VG9SZW1vdmUgRGVmYXVsdDogYG51bGxgXG4gKiBAcHJvcGVydHkgdmlzaWJsZURyb3Bkb3duIERlZmF1bHQ6IGBudWxsYFxuICogQHByb3BlcnR5IGV4cG9ydEltYWdlIERlZmF1bHQ6IFtgREVGQVVMVF9FWFBPUlRfSU1BR0VgXSgjZGVmYXVsdF9leHBvcnRfaW1hZ2UpXG4gKiBAcHJvcGVydHkgZXhwb3J0RGF0YSBEZWZhdWx0OiBbYERFRkFVTFRfRVhQT1JUX0RBVEFgXSgjZGVmYXVsdF9leHBvcnRfZGF0YSlcbiAqIEBwcm9wZXJ0eSBleHBvcnRNYXAgRGVmYXVsdDogW2BERUZBVUxUX0VYUE9SVF9NQVBgXSgjZGVmYXVsdF9leHBvcnRfbWFwKVxuICogQHByb3BlcnR5IG1hcENvbnRyb2xzIERlZmF1bHQ6IFtgREVGQVVMVF9NQVBfQ09OVFJPTFNgXSgjZGVmYXVsdF9tYXBfY29udHJvbHMpXG4gKiBAcHJvcGVydHkgbm90aWZpY2F0aW9ucyBEZWZhdWx0OiBgW11gXG4gKiBAcHJvcGVydHkgbm90aWZpY2F0aW9ucyBEZWZhdWx0OiBgW11gXG4gKiBAcHJvcGVydHkgbG9hZEZpbGVzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJTklUSUFMX1VJX1NUQVRFOiBVaVN0YXRlID0ge1xuICByZWFkT25seTogZmFsc2UsXG4gIGFjdGl2ZVNpZGVQYW5lbDogREVGQVVMVF9BQ1RJVkVfU0lERV9QQU5FTCxcbiAgY3VycmVudE1vZGFsOiBERUZBVUxUX01PREFMLFxuICBkYXRhc2V0S2V5VG9SZW1vdmU6IG51bGwsXG4gIHZpc2libGVEcm9wZG93bjogbnVsbCxcbiAgLy8gZXhwb3J0IGltYWdlIG1vZGFsIHVpXG4gIGV4cG9ydEltYWdlOiBERUZBVUxUX0VYUE9SVF9JTUFHRSxcbiAgLy8gZXhwb3J0IGRhdGEgbW9kYWwgdWlcbiAgZXhwb3J0RGF0YTogREVGQVVMVF9FWFBPUlRfREFUQSxcbiAgLy8gaHRtbCBleHBvcnRcbiAgZXhwb3J0TWFwOiBERUZBVUxUX0VYUE9SVF9NQVAsXG4gIC8vIG1hcCBjb250cm9sIHBhbmVsc1xuICBtYXBDb250cm9sczogREVGQVVMVF9NQVBfQ09OVFJPTFMsXG4gIC8vIHVpIG5vdGlmaWNhdGlvbnNcbiAgbm90aWZpY2F0aW9uczogREVGQVVMVF9OT1RJRklDQVRJT05TLFxuICAvLyBsb2FkIGZpbGVzXG4gIGxvYWRGaWxlczogREVGQVVMVF9MT0FEX0ZJTEVTLFxuICAvLyBMb2NhbGUgb2YgdGhlIFVJXG4gIGxvY2FsZTogTE9DQUxFX0NPREVTLmVuLFxuICBsYXllclBhbmVsTGlzdFZpZXc6ICdsaXN0J1xufTtcblxuLyogVXBkYXRlcnMgKi9cbi8qKlxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0VWlTdGF0ZVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICBhY3Rpb246IHtcbiAgICB0eXBlPzogdHlwZW9mIEFjdGlvblR5cGVzWydJTklUJ107XG4gICAgcGF5bG9hZDogS2VwbGVyR2xJbml0UGF5bG9hZDtcbiAgfVxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgLi4uKGFjdGlvbi5wYXlsb2FkIHx8IHt9KS5pbml0aWFsVWlTdGF0ZVxufSk7XG5cbi8qKlxuICogVG9nZ2xlIGFjdGl2ZSBzaWRlIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgaWQgb2Ygc2lkZSBwYW5lbCB0byBiZSBzaG93biwgb25lIG9mIGBsYXllcmAsIGBmaWx0ZXJgLCBgaW50ZXJhY3Rpb25gLCBgbWFwYC4gY2xvc2Ugc2lkZSBwYW5lbCBpZiBgbnVsbGBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlU2lkZVBhbmVsVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZVNpZGVQYW5lbFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICByZXR1cm4gaWQgPT09IHN0YXRlLmFjdGl2ZVNpZGVQYW5lbFxuICAgID8gc3RhdGVcbiAgICA6IHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFjdGl2ZVNpZGVQYW5lbDogaWRcbiAgICAgIH07XG59O1xuXG4vKipcbiAqIFNob3cgYW5kIGhpZGUgbW9kYWwgZGlhbG9nXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW1hY3Rpb24ucGF5bG9hZCBpZCBvZiBtb2RhbCB0byBiZSBzaG93biwgbnVsbCB0byBoaWRlIG1vZGFscy4gT25lIG9mOlxuICogIC0gW2BEQVRBX1RBQkxFX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZGF0YV90YWJsZV9pZClcbiAqICAtIFtgREVMRVRFX0RBVEFfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNkZWxldGVfZGF0YV9pZClcbiAqICAtIFtgQUREX0RBVEFfSURgXSguLi9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5tZCNhZGRfZGF0YV9pZClcbiAqICAtIFtgRVhQT1JUX0lNQUdFX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjZXhwb3J0X2ltYWdlX2lkKVxuICogIC0gW2BFWFBPUlRfREFUQV9JRGBdKC4uL2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzLm1kI2V4cG9ydF9kYXRhX2lkKVxuICogIC0gW2BBRERfTUFQX1NUWUxFX0lEYF0oLi4vY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MubWQjYWRkX21hcF9zdHlsZV9pZClcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlTW9kYWxVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGlkfTogVUlTdGF0ZUFjdGlvbnMuVG9nZ2xlTW9kYWxVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBjdXJyZW50TW9kYWw6IGlkXG59KTtcblxuLyoqXG4gKiBIaWRlIGFuZCBzaG93IHNpZGUgcGFuZWwgaGVhZGVyIGRyb3Bkb3duLCBhY3RpdmF0ZWQgYnkgY2xpY2tpbmcgdGhlIHNoYXJlIGxpbmsgb24gdG9wIG9mIHRoZSBzaWRlIHBhbmVsXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RXhwb3J0RHJvcGRvd25VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGlkfTogVUlTdGF0ZUFjdGlvbnMuU2hvd0V4cG9ydERyb3Bkb3duVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgdmlzaWJsZURyb3Bkb3duOiBpZFxufSk7XG5cbi8qKlxuICogSGlkZSBzaWRlIHBhbmVsIGhlYWRlciBkcm9wZG93biwgYWN0aXZhdGVkIGJ5IGNsaWNraW5nIHRoZSBzaGFyZSBsaW5rIG9uIHRvcCBvZiB0aGUgc2lkZSBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgaGlkZUV4cG9ydERyb3Bkb3duVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIHZpc2libGVEcm9wZG93bjogbnVsbFxufSk7XG5cbi8qKlxuICogVG9nZ2xlIGFjdGl2ZSBtYXAgY29udHJvbCBwYW5lbFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvbiBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBtYXAgY29udHJvbCBwYW5lbCBpZCwgb25lIG9mIHRoZSBrZXlzIG9mOiBbYERFRkFVTFRfTUFQX0NPTlRST0xTYF0oI2RlZmF1bHRfbWFwX2NvbnRyb2xzKVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVNYXBDb250cm9sVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiB7cGFuZWxJZCwgaW5kZXggPSAwfX06IFVJU3RhdGVBY3Rpb25zLlRvZ2dsZU1hcENvbnRyb2xVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBDb250cm9sczoge1xuICAgIC4uLnN0YXRlLm1hcENvbnRyb2xzLFxuICAgIFtwYW5lbElkXToge1xuICAgICAgLi4uc3RhdGUubWFwQ29udHJvbHNbcGFuZWxJZF0sXG4gICAgICAvLyB0aGlzIGhhbmRsZXMgc3BsaXQgbWFwIGludGVyYWN0aW9uXG4gICAgICAvLyBUb2dnbGluZyBmcm9tIHdpdGhpbiB0aGUgc2FtZSBtYXAgd2lsbCBzaW1wbHkgdG9nZ2xlIHRoZSBhY3RpdmUgcHJvcGVydHlcbiAgICAgIC8vIFRvZ2dsaW5nIGZyb20gd2l0aGluIGRpZmZlcmVudCBtYXBzIHdlIHNldCB0aGUgYWN0aXZlIHByb3BlcnR5IHRvIHRydWVcbiAgICAgIGFjdGl2ZTpcbiAgICAgICAgaW5kZXggPT09IHN0YXRlLm1hcENvbnRyb2xzW3BhbmVsSWRdLmFjdGl2ZU1hcEluZGV4XG4gICAgICAgICAgPyAhc3RhdGUubWFwQ29udHJvbHNbcGFuZWxJZF0uYWN0aXZlXG4gICAgICAgICAgOiB0cnVlLFxuICAgICAgYWN0aXZlTWFwSW5kZXg6IGluZGV4XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBUb2dnbGUgbWFwIGNvbnRyb2wgdmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvbiBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBtYXAgY29udHJvbCBwYW5lbCBpZCwgb25lIG9mIHRoZSBrZXlzIG9mOiBbYERFRkFVTFRfTUFQX0NPTlRST0xTYF0oI2RlZmF1bHRfbWFwX2NvbnRyb2xzKVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRNYXBDb250cm9sVmlzaWJpbGl0eVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDoge3BhbmVsSWQsIHNob3d9fTogVUlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFZpc2liaWxpdHlVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+IHtcbiAgaWYgKCFzdGF0ZS5tYXBDb250cm9scz8uW3BhbmVsSWRdKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtYXBDb250cm9sczoge1xuICAgICAgLi4uc3RhdGUubWFwQ29udHJvbHMsXG4gICAgICBbcGFuZWxJZF06IHtcbiAgICAgICAgLi4uc3RhdGUubWFwQ29udHJvbHNbcGFuZWxJZF0sXG4gICAgICAgIHNob3c6IEJvb2xlYW4oc2hvdylcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFRvZ2dsZSBhY3RpdmUgbWFwIGNvbnRyb2wgcGFuZWxcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBkYXRhc2V0IGlkXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IG9wZW5EZWxldGVNb2RhbFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YXNldEtleVRvUmVtb3ZlfTogVUlTdGF0ZUFjdGlvbnMuT3BlbkRlbGV0ZU1vZGFsVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgY3VycmVudE1vZGFsOiBERUxFVEVfREFUQV9JRCxcbiAgZGF0YXNldEtleVRvUmVtb3ZlXG59KTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydEltYWdlLmxlZ2VuZGAgdG8gYHRydWVgIG9yIGBmYWxzZWBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0SW1hZ2VTZXR0aW5nVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBuZXdTZXR0aW5nfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0SW1hZ2VTZXR0aW5nVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGNvbnN0IHVwZGF0ZWQgPSB7Li4uc3RhdGUuZXhwb3J0SW1hZ2UsIC4uLm5ld1NldHRpbmd9O1xuICBjb25zdCBpbWFnZVNpemUgPSBjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUodXBkYXRlZCkgfHwgc3RhdGUuZXhwb3J0SW1hZ2UuaW1hZ2VTaXplO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZXhwb3J0SW1hZ2U6IHtcbiAgICAgIC4uLnVwZGF0ZWQsXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAvLyBUT0RPOiBjYWxjdWxhdGVFeHBvcnRJbWFnZVNpemUgZG9lcyBub3QgcmV0dXJuIGltYWdlU2l6ZS56b29tT2Zmc2V0LFxuICAgICAgLy8gZG8gd2UgbmVlZCB0YWtlIHRoaXMgdmFsdWUgZnJvbSBjdXJyZW50IHN0YXRlLCBvciByZXR1cm4gZGVmYXVsIHZhbHVlID0gMFxuICAgICAgaW1hZ2VTaXplXG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBTZXQgYGV4cG9ydEltYWdlLnNldEV4cG9ydEltYWdlRGF0YVVyaWAgdG8gYSBpbWFnZSBkYXRhVXJpXG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZXhwb3J0IGltYWdlIGRhdGEgdXJpXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZGF0YVVyaX06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydEltYWdlRGF0YVVyaVVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydEltYWdlOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0SW1hZ2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgaW1hZ2VEYXRhVXJpOiBkYXRhVXJpXG4gIH1cbn0pO1xuXG4vKipcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEltYWdlRXJyb3JVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IGVycm9yfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0SW1hZ2VFcnJvclVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydEltYWdlOiB7XG4gICAgLi4uc3RhdGUuZXhwb3J0SW1hZ2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgZXJyb3JcbiAgfVxufSk7XG5cbi8qKlxuICogRGVsZXRlIGNhY2hlZCBleHBvcnQgaW1hZ2VcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFudXBFeHBvcnRJbWFnZVVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRJbWFnZToge1xuICAgIC4uLnN0YXRlLmV4cG9ydEltYWdlLFxuICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgaW1hZ2VEYXRhVXJpOiAnJyxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgcHJvY2Vzc2luZzogZmFsc2UsXG4gICAgY2VudGVyOiBmYWxzZVxuICB9XG59KTtcblxuLyoqXG4gKiBTdGFydCBpbWFnZSBleHBvcnRpbmcgZmxvd1xuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlXG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybnMge1VpU3RhdGV9XG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzdGFydEV4cG9ydGluZ0ltYWdlVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBvcHRpb25zID0ge319OiB7cGF5bG9hZDogUGFydGlhbDxFeHBvcnRJbWFnZT59XG4pOiBVaVN0YXRlID0+IHtcbiAgY29uc3QgaW1hZ2VTZXR0aW5ncyA9IHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGV4cG9ydGluZzogdHJ1ZVxuICB9O1xuXG4gIHJldHVybiBjb21wb3NlXyhbXG4gICAgY2xlYW51cEV4cG9ydEltYWdlVXBkYXRlcixcbiAgICBhcHBseV8oc2V0RXhwb3J0SW1hZ2VTZXR0aW5nVXBkYXRlciwgcGF5bG9hZF8oaW1hZ2VTZXR0aW5ncykpXG4gIF0pKHN0YXRlKTtcbn07XG5cbi8qKlxuICogU2V0IHNlbGVjdGVkIGRhdGFzZXQgZm9yIGV4cG9ydFxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkIGRhdGFzZXQgaWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0VXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBkYXRhc2V0fTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0U2VsZWN0ZWREYXRhc2V0VXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0RGF0YToge1xuICAgIC4uLnN0YXRlLmV4cG9ydERhdGEsXG4gICAgc2VsZWN0ZWREYXRhc2V0OiBkYXRhc2V0XG4gIH1cbn0pO1xuXG4vKipcbiAqIFNldCBkYXRhIGZvcm1hdCBmb3IgZXhwb3J0aW5nIGRhdGFcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBvbmUgb2YgYCd0ZXh0L2NzdidgXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydERhdGFUeXBlVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBkYXRhVHlwZX06IFVJU3RhdGVBY3Rpb25zLlNldEV4cG9ydERhdGFUeXBlVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgZXhwb3J0RGF0YToge1xuICAgIC4uLnN0YXRlLmV4cG9ydERhdGEsXG4gICAgZGF0YVR5cGVcbiAgfVxufSk7XG5cbi8qKlxuICogV2hldGhlciB0byBleHBvcnQgZmlsdGVyZWQgZGF0YSwgYHRydWVgIG9yIGBmYWxzZWBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRFeHBvcnRGaWx0ZXJlZFVwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogZmlsdGVyZWR9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRGaWx0ZXJlZFVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydERhdGE6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnREYXRhLFxuICAgIGZpbHRlcmVkXG4gIH1cbn0pO1xuXG4vKipcbiAqIFdoZXRoZXIgdG8gaW5jbHVkaW5nIGRhdGEgaW4gbWFwIGNvbmZpZywgdG9nZ2xlIGJldHdlZW4gYHRydWVgIG9yIGBmYWxzZWBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RGF0YVVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXToge1xuICAgICAgLi4uc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5KU09OXSxcbiAgICAgIGhhc0RhdGE6ICFzdGF0ZS5leHBvcnRNYXBbRVhQT1JUX01BUF9GT1JNQVRTLkpTT05dLmhhc0RhdGFcbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIHdoZXRoZXIgdG8gZXhwb3J0IGEgbWFwYm94IGFjY2VzcyB0byBIVE1MIHNpbmdsZSBwYWdlXG4gKiBAcGFyYW0gc3RhdGUgLSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRVc2VyTWFwYm94QWNjZXNzVG9rZW5VcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHVzZXJNYXBib3hUb2tlbn06IFVJU3RhdGVBY3Rpb25zLlNldFVzZXJNYXBib3hBY2Nlc3NUb2tlblVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGV4cG9ydE1hcDoge1xuICAgIC4uLnN0YXRlLmV4cG9ydE1hcCxcbiAgICBbRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxdOiB7XG4gICAgICAuLi5zdGF0ZS5leHBvcnRNYXBbRVhQT1JUX01BUF9GT1JNQVRTLkhUTUxdLFxuICAgICAgdXNlck1hcGJveFRva2VuXG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBTZXRzIHRoZSBleHBvcnQgbWFwIGZvcm1hdFxuICogQHBhcmFtIHN0YXRlIC0gYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgZm9ybWF0IHRvIHVzZSB0byBleHBvcnQgdGhlIG1hcCBpbnRvXG4gKiBAcmV0dXJuIG5leHRTdGF0ZVxuICovXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0TWFwRm9ybWF0VXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBmb3JtYXR9OiBVSVN0YXRlQWN0aW9ucy5TZXRFeHBvcnRNYXBGb3JtYXRVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGZvcm1hdFxuICB9XG59KTtcblxuLyoqXG4gKiBTZXQgdGhlIGV4cG9ydCBodG1sIG1hcCBtb2RlXG4gKiBAcGFyYW0gc3RhdGUgLSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCB0byBiZSBzZXQgKGF2YWlsYWJsZSBtb2RlczogRVhQT1JUX0hUTUxfTUFQX01PREVTKVxuICogQHJldHVybiBuZXh0U3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEV4cG9ydE1hcEhUTUxNb2RlVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBtb2RlfTogVUlTdGF0ZUFjdGlvbnMuU2V0RXhwb3J0SFRNTE1hcE1vZGVVcGRhdGVyQWN0aW9uXG4pOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBleHBvcnRNYXA6IHtcbiAgICAuLi5zdGF0ZS5leHBvcnRNYXAsXG4gICAgW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXToge1xuICAgICAgLi4uc3RhdGUuZXhwb3J0TWFwW0VYUE9SVF9NQVBfRk9STUFUUy5IVE1MXSxcbiAgICAgIG1vZGVcbiAgICB9XG4gIH1cbn0pO1xuXG4vKipcbiAqIEFkZHMgYSBuZXcgbm90aWZpY2F0aW9uLlxuICogVXBkYXRlcyBhIG5vdGlmaWNhdGlvbiBpbiBjYXNlIG9mIG1hdGNoaW5nIGlkcy5cbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBQYXJhbXMgb2YgYSBub3RpZmljYXRpb25cbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgYWRkTm90aWZpY2F0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkfTogVUlTdGF0ZUFjdGlvbnMuQWRkTm90aWZpY2F0aW9uVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiB7XG4gIGxldCBub3RpZmljYXRpb25zO1xuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgY29uc3QgcGF5bG9hZElkID0gcGF5bG9hZD8uaWQ7XG4gIGNvbnN0IG5vdGlmaWNhdGlvblRvVXBkYXRlID0gcGF5bG9hZElkID8gc3RhdGUubm90aWZpY2F0aW9ucy5maW5kKG4gPT4gbi5pZCA9PT0gcGF5bG9hZElkKSA6IG51bGw7XG4gIGlmIChub3RpZmljYXRpb25Ub1VwZGF0ZSkge1xuICAgIG5vdGlmaWNhdGlvbnMgPSBzdGF0ZS5ub3RpZmljYXRpb25zLm1hcChuID0+XG4gICAgICBuLmlkID09PSBwYXlsb2FkSWQgPyBjcmVhdGVOb3RpZmljYXRpb24ocGF5bG9hZCkgOiBuXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBub3RpZmljYXRpb25zID0gWy4uLihzdGF0ZS5ub3RpZmljYXRpb25zIHx8IFtdKSwgY3JlYXRlTm90aWZpY2F0aW9uKHBheWxvYWQpXTtcbiAgfVxuXG4gIHJldHVybiB7Li4uc3RhdGUsIG5vdGlmaWNhdGlvbnN9O1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYSBub3RpZmljYXRpb25cbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZSBgdWlTdGF0ZWBcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24ucGF5bG9hZCBpZCBvZiB0aGUgbm90aWZpY2F0aW9uIHRvIGJlIHJlbW92ZWRcbiAqIEByZXR1cm5zIG5leHRTdGF0ZVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlTm90aWZpY2F0aW9uVXBkYXRlciA9IChcbiAgc3RhdGU6IFVpU3RhdGUsXG4gIHtwYXlsb2FkOiBpZH06IFVJU3RhdGVBY3Rpb25zLlJlbW92ZU5vdGlmaWNhdGlvblVwZGF0ZXJBY3Rpb25cbik6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIG5vdGlmaWNhdGlvbnM6IHN0YXRlLm5vdGlmaWNhdGlvbnMuZmlsdGVyKG4gPT4gbi5pZCAhPT0gaWQpXG59KTtcblxuLyoqXG4gKiBGaXJlZCB3aGVuIGZpbGUgbG9hZGluZyBiZWdpblxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNVcGRhdGVyID0gKHN0YXRlOiBVaVN0YXRlKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbG9hZEZpbGVzOiB7XG4gICAgLi4uc3RhdGUubG9hZEZpbGVzLFxuICAgIGZpbGVMb2FkaW5nOiB0cnVlXG4gIH1cbn0pO1xuXG4vKipcbiAqIEhhbmRsZXMgbG9hZGluZyBmaWxlIHN1Y2Nlc3MgYW5kIHNldCBmaWxlTG9hZGluZyBwcm9wZXJ0eSB0byBmYWxzZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkRmlsZXNTdWNjZXNzVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT4gKHtcbiAgLi4uc3RhdGUsXG4gIGxvYWRGaWxlczoge1xuICAgIC4uLnN0YXRlLmxvYWRGaWxlcyxcbiAgICBmaWxlTG9hZGluZzogZmFsc2VcbiAgfVxufSk7XG5cbi8qKlxuICogSGFuZGxlcyBsb2FkIGZpbGUgZXJyb3IgYW5kIHNldCBmaWxlTG9hZGluZyBwcm9wZXJ0eSB0byBmYWxzZVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLmVycm9yXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGaWxlc0VyclVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUsIHtlcnJvcn06IExvYWRGaWxlc0VyclVwZGF0ZXJBY3Rpb24pOiBVaVN0YXRlID0+XG4gIGFkZE5vdGlmaWNhdGlvblVwZGF0ZXIoXG4gICAge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsb2FkRmlsZXM6IHtcbiAgICAgICAgLi4uc3RhdGUubG9hZEZpbGVzLFxuICAgICAgICBmaWxlTG9hZGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIHBheWxvYWQ6IGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgbWVzc2FnZTogKGVycm9yIHx8IHt9KS5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gdXBsb2FkIGZpbGVzJyxcbiAgICAgICAgdG9waWM6IERFRkFVTFRfTk9USUZJQ0FUSU9OX1RPUElDUy5nbG9iYWxcbiAgICAgIH0pXG4gICAgfVxuICApO1xuXG4vKipcbiAqIEhhbmRsZXMgdG9nZ2xlIG1hcCBzcGxpdCBhbmQgcmVzZXQgYWxsIG1hcCBjb250cm9sIGluZGV4IHRvIDBcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCB0b2dnbGVTcGxpdE1hcFVwZGF0ZXIgPSAoc3RhdGU6IFVpU3RhdGUpOiBVaVN0YXRlID0+ICh7XG4gIC4uLnN0YXRlLFxuICBtYXBDb250cm9sczogT2JqZWN0LmVudHJpZXMoc3RhdGUubWFwQ29udHJvbHMpLnJlZHVjZShcbiAgICAoYWNjLCBlbnRyeSkgPT4gKHtcbiAgICAgIC4uLmFjYyxcbiAgICAgIFtlbnRyeVswXV06IHtcbiAgICAgICAgLi4uZW50cnlbMV0sXG4gICAgICAgIGFjdGl2ZU1hcEluZGV4OiAwXG4gICAgICB9XG4gICAgfSksXG4gICAge30gYXMgTWFwQ29udHJvbHNcbiAgKVxufSk7XG5cbi8qKlxuICogVG9nZ2xlIG1vZGFsIGRhdGFcbiAqIEBtZW1iZXJvZiB1aVN0YXRlVXBkYXRlcnNcbiAqIEBwYXJhbSBzdGF0ZVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzaG93RGF0YXNldFRhYmxlVXBkYXRlciA9IChzdGF0ZTogVWlTdGF0ZSk6IFVpU3RhdGUgPT5cbiAgdG9nZ2xlTW9kYWxVcGRhdGVyKHN0YXRlLCB7cGF5bG9hZDogREFUQV9UQUJMRV9JRH0pO1xuXG4vKipcbiAqIFNldCB0aGUgbG9jYWxlIG9mIHRoZSBVSVxuICogQG1lbWJlcm9mIHVpU3RhdGVVcGRhdGVyc1xuICogQHBhcmFtIHN0YXRlIGB1aVN0YXRlYFxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbi5wYXlsb2FkXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQubG9jYWxlIGxvY2FsZVxuICogQHJldHVybnMgbmV4dFN0YXRlXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRMb2NhbGVVcGRhdGVyID0gKFxuICBzdGF0ZTogVWlTdGF0ZSxcbiAge3BheWxvYWQ6IHtsb2NhbGV9fTogVUlTdGF0ZUFjdGlvbnMuU2V0TG9jYWxlVXBkYXRlckFjdGlvblxuKTogVWlTdGF0ZSA9PiAoe1xuICAuLi5zdGF0ZSxcbiAgbG9jYWxlXG59KTtcblxuLyoqXG4gKiBUb2dnbGUgbGF5ZXIgcGFuZWwgbGlzdCB2aWV3XG4gKiBAbWVtYmVyb2YgdWlTdGF0ZVVwZGF0ZXJzXG4gKiBAcGFyYW0gc3RhdGUgYHVpU3RhdGVgXG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uLnBheWxvYWQgbGF5ZXIgcGFuZWwgbGlzdFZpZXcgdmFsdWUuIENhbiBiZSAnbGlzdCcgb3IgJ3NvcnRCeURhdGFzZXQnXG4gKiBAcmV0dXJucyBuZXh0U3RhdGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvZ2dsZUxheWVyUGFuZWxMaXN0Vmlld1VwZGF0ZXIgPSAoXG4gIHN0YXRlOiBVaVN0YXRlLFxuICB7cGF5bG9hZDogbGlzdFZpZXd9OiBVSVN0YXRlQWN0aW9ucy5Ub2dnbGVMYXllclBhbmVsTGlzdFZpZXdBY3Rpb25cbik6IFVpU3RhdGUgPT4ge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gIHJldHVybiBsaXN0VmlldyA9PT0gc3RhdGUubGF5ZXJQYW5lbExpc3RWaWV3XG4gICAgPyBzdGF0ZVxuICAgIDoge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbGF5ZXJQYW5lbExpc3RWaWV3OiBsaXN0Vmlld1xuICAgICAgfTtcbn07XG4iXX0=
|