@kando-env/kando-ui 1.2.67-alpha.7 → 1.2.68
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/lib/Widgets/Map/Map.js +2 -2
- package/lib/hooks/useInitializeHeaders.js +3 -2
- package/lib/i18n/en.json +2 -2
- package/lib/i18n/he.json +1 -1
- package/lib/macros/getVersion.js +2 -2
- package/lib/pages/ImportGisPage/importGisUtils.js +26 -8
- package/lib/pages/SamplingsPage/SamplingActionDropdown.js +2 -7
- package/lib/pages/SamplingsPage/SamplingMobileModal.js +6 -4
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +105 -176
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +7 -9
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +2 -2
- package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +2 -14
- package/lib/pages/SamplingsPage/SamplingsPage.js +4 -9
- package/lib/pages/SamplingsPage/SamplingsPageContainer.js +1 -6
- package/lib/pages/SamplingsPage/samplingsPageUtils.js +9 -9
- package/lib/pages/SamplingsPage/style.module.scss +0 -4
- package/lib/ui-kit/KandoTable/KandoTable.js +5 -5
- package/lib/utilities/urls.js +2 -5
- package/package.json +1 -1
- package/lib/assets/icons/download.svg +0 -5
- package/lib/assets/icons/index.js +0 -22
- package/lib/pages/SamplingsPage/DownloadCSV.js +0 -72
- package/lib/ui-kit/IconAction/IconAction.js +0 -28
- package/lib/ui-kit/IconAction/styles.module.scss +0 -30
- package/lib/utilities/File.js +0 -114
|
@@ -9,12 +9,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
});
|
|
10
10
|
exports.SamplingProperties = void 0;
|
|
11
11
|
|
|
12
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
|
-
|
|
14
12
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
|
|
15
13
|
|
|
16
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
|
|
17
|
-
|
|
18
14
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
19
15
|
|
|
20
16
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
@@ -23,6 +19,8 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
23
19
|
|
|
24
20
|
var _axios = _interopRequireDefault(require("axios"));
|
|
25
21
|
|
|
22
|
+
var _moment = _interopRequireDefault(require("moment"));
|
|
23
|
+
|
|
26
24
|
var _reactDeviceDetect = require("react-device-detect");
|
|
27
25
|
|
|
28
26
|
var _formik = require("formik");
|
|
@@ -58,12 +56,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
58
56
|
/*
|
|
59
57
|
* Properties and Cancelling forms.
|
|
60
58
|
**/
|
|
61
|
-
var isPropertiesPage = function isPropertiesPage(pageType) {
|
|
62
|
-
return pageType === 'edit';
|
|
63
|
-
};
|
|
64
|
-
|
|
65
59
|
var SamplingProperties = function SamplingProperties() {
|
|
66
|
-
var _useState = (0, _react.useState)(
|
|
60
|
+
var _useState = (0, _react.useState)((0, _moment.default)(Date.now()).format('DD/MM/YYYY hh:mm')),
|
|
67
61
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
68
62
|
collectionTime = _useState2[0],
|
|
69
63
|
setCollectionTime = _useState2[1];
|
|
@@ -99,87 +93,18 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
99
93
|
return state.permissions.user_info;
|
|
100
94
|
});
|
|
101
95
|
var dateFormat = userInfo.date_time_format === 'us' ? 'MMM d, yyyy hh:mm aa' : 'd/MM/yyyy HH:mm';
|
|
102
|
-
var pageType = (0, _react.useRef)('');
|
|
103
96
|
|
|
104
97
|
var _useState13 = (0, _react.useState)(),
|
|
105
98
|
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
var _useParams = (0, _reactRouterDom.useParams)(),
|
|
110
|
-
sampleId = _useParams.sampleId;
|
|
111
|
-
|
|
112
|
-
var initFormikValues = function initFormikValues(samplingProperties, isCanceled) {
|
|
113
|
-
var pageCollectionTime = (0, _samplingPropertiesUtils.isCollectLayout)(pageType.current) ? collectionTime : samplingProperties.sampling.collection_time;
|
|
114
|
-
var sam = samplingProperties.sampling;
|
|
115
|
-
formik.setValues({
|
|
116
|
-
lab_id: sam.lab_id,
|
|
117
|
-
collection_time: pageCollectionTime,
|
|
118
|
-
pump_sampling_volume: sam.pump_sampling_volume,
|
|
119
|
-
pump_battery_level: sam.pump_battery_level,
|
|
120
|
-
description: sam.description,
|
|
121
|
-
kando_rep: sam.kando_rep,
|
|
122
|
-
sampling_plan_id: sam.sampling_plan_id,
|
|
123
|
-
cancellation_reason: sam.cancellation_reason || '',
|
|
124
|
-
is_canceled: isCanceled
|
|
125
|
-
});
|
|
126
|
-
};
|
|
99
|
+
pageType = _useState14[0],
|
|
100
|
+
setPageType = _useState14[1];
|
|
127
101
|
|
|
128
|
-
var
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
collect: false,
|
|
133
|
-
revert_cancel: false
|
|
134
|
-
};
|
|
135
|
-
var isCanceled = pageType2isCancelled[pageType.current];
|
|
136
|
-
|
|
137
|
-
if (isCanceled === null) {
|
|
138
|
-
isCanceled = samplingProperties.sampling.is_canceled || false;
|
|
139
|
-
}
|
|
102
|
+
var _useState15 = (0, _react.useState)(),
|
|
103
|
+
_useState16 = (0, _slicedToArray2.default)(_useState15, 2),
|
|
104
|
+
samplingProperties = _useState16[0],
|
|
105
|
+
setSamplingProperties = _useState16[1];
|
|
140
106
|
|
|
141
|
-
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
var fetchSamplingProperties = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
145
|
-
var samplingId,
|
|
146
|
-
op,
|
|
147
|
-
response,
|
|
148
|
-
sampling,
|
|
149
|
-
samplingProperties,
|
|
150
|
-
isCanceled,
|
|
151
|
-
_args = arguments;
|
|
152
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
153
|
-
while (1) {
|
|
154
|
-
switch (_context.prev = _context.next) {
|
|
155
|
-
case 0:
|
|
156
|
-
samplingId = _args.length > 0 && _args[0] !== undefined ? _args[0] : sampleId;
|
|
157
|
-
op = _args.length > 1 ? _args[1] : undefined;
|
|
158
|
-
_context.next = 4;
|
|
159
|
-
return _axios.default.get((0, _urls.urls)({
|
|
160
|
-
samplingId: samplingId
|
|
161
|
-
}).samplingProperties.fetchSampling.url);
|
|
162
|
-
|
|
163
|
-
case 4:
|
|
164
|
-
response = _context.sent;
|
|
165
|
-
sampling = response.data;
|
|
166
|
-
samplingProperties = sampling.sampling_properties;
|
|
167
|
-
isCanceled = isCancelledLayout(samplingProperties, op);
|
|
168
|
-
initFormikValues(samplingProperties, isCanceled);
|
|
169
|
-
setSamplingProperties(samplingProperties);
|
|
170
|
-
setSamplingPlan(sampling.sampling_plan);
|
|
171
|
-
|
|
172
|
-
case 11:
|
|
173
|
-
case "end":
|
|
174
|
-
return _context.stop();
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}, _callee);
|
|
178
|
-
})), []);
|
|
179
|
-
(0, _react.useEffect)(function () {
|
|
180
|
-
fetchSamplingProperties(sampleId, getUrlQueryOp());
|
|
181
|
-
}, [samplingUpdated, samplingUpdated]);
|
|
182
|
-
var validationSchema = (0, _samplingPropertiesUtils.isCollectLayout)(pageType.current) ? _samplingPropertiesUtils.propertiesValidationSchema : _samplingPropertiesUtils.cancellationValidationSchema;
|
|
107
|
+
var validationSchema = pageType === 'collect' ? _samplingPropertiesUtils.propertiesValidationSchema : _samplingPropertiesUtils.cancellationValidationSchema;
|
|
183
108
|
var formik = (0, _formik.useFormik)({
|
|
184
109
|
enableReinitialize: true,
|
|
185
110
|
initialValues: _samplingPropertiesUtils.samplingProperty,
|
|
@@ -226,99 +151,99 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
226
151
|
return formData;
|
|
227
152
|
};
|
|
228
153
|
|
|
229
|
-
var updateOrCreate =
|
|
230
|
-
var
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
switch (_context2.prev = _context2.next) {
|
|
238
|
-
case 0:
|
|
239
|
-
updateOrCreateSuccess = function updateOrCreateSuccess(msg) {
|
|
240
|
-
setSavingMsg(_i18n.default.t(msg));
|
|
241
|
-
setSamplingUpdated(true);
|
|
242
|
-
setOriginalSaveMessageWithTimeout();
|
|
243
|
-
handleClose();
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
if (!((samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s = samplingProperties.sampling) === null || _samplingProperties$s === void 0 ? void 0 : _samplingProperties$s.id) === null)) {
|
|
247
|
-
_context2.next = 15;
|
|
248
|
-
break;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// create
|
|
252
|
-
formData.append("sampling[date]", collectionTime);
|
|
253
|
-
_context2.prev = 3;
|
|
254
|
-
_context2.next = 6;
|
|
255
|
-
return _axios.default.post((0, _urls.urls)().samplingProperties.createSampling.url, formData);
|
|
256
|
-
|
|
257
|
-
case 6:
|
|
258
|
-
updateOrCreateSuccess('buttons.created');
|
|
259
|
-
_context2.next = 13;
|
|
260
|
-
break;
|
|
261
|
-
|
|
262
|
-
case 9:
|
|
263
|
-
_context2.prev = 9;
|
|
264
|
-
_context2.t0 = _context2["catch"](3);
|
|
265
|
-
setSavingMsg(_i18n.default.t('buttons.error'));
|
|
266
|
-
setOriginalSaveMessageWithTimeout();
|
|
267
|
-
|
|
268
|
-
case 13:
|
|
269
|
-
_context2.next = 25;
|
|
270
|
-
break;
|
|
271
|
-
|
|
272
|
-
case 15:
|
|
273
|
-
_context2.prev = 15;
|
|
274
|
-
_context2.next = 18;
|
|
275
|
-
return _axios.default.put((0, _urls.urls)({
|
|
276
|
-
samplingId: samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s2 = samplingProperties.sampling) === null || _samplingProperties$s2 === void 0 ? void 0 : _samplingProperties$s2.id
|
|
277
|
-
}).samplingProperties.updateSampling.url, formData);
|
|
278
|
-
|
|
279
|
-
case 18:
|
|
280
|
-
updateOrCreateSuccess('buttons.updated');
|
|
281
|
-
_context2.next = 25;
|
|
282
|
-
break;
|
|
283
|
-
|
|
284
|
-
case 21:
|
|
285
|
-
_context2.prev = 21;
|
|
286
|
-
_context2.t1 = _context2["catch"](15);
|
|
287
|
-
setSavingMsg(_i18n.default.t('buttons.error'));
|
|
288
|
-
setOriginalSaveMessageWithTimeout();
|
|
289
|
-
|
|
290
|
-
case 25:
|
|
291
|
-
case "end":
|
|
292
|
-
return _context2.stop();
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}, _callee2, null, [[3, 9], [15, 21]]);
|
|
296
|
-
}));
|
|
297
|
-
|
|
298
|
-
return function updateOrCreate(_x) {
|
|
299
|
-
return _ref2.apply(this, arguments);
|
|
154
|
+
var updateOrCreate = function updateOrCreate(formData) {
|
|
155
|
+
var _samplingProperties$s;
|
|
156
|
+
|
|
157
|
+
var updateOrCreateSuccess = function updateOrCreateSuccess(msg) {
|
|
158
|
+
setSavingMsg(_i18n.default.t(msg));
|
|
159
|
+
setSamplingUpdated(true);
|
|
160
|
+
setOriginalSaveMessageWithTimeout();
|
|
161
|
+
handleClose();
|
|
300
162
|
};
|
|
301
|
-
}(); // Detects and updates pageType and collectionTime.
|
|
302
163
|
|
|
164
|
+
if ((samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s = samplingProperties.sampling) === null || _samplingProperties$s === void 0 ? void 0 : _samplingProperties$s.id) === null) {
|
|
165
|
+
// create
|
|
166
|
+
formData.append("sampling[date]", collectionTime);
|
|
167
|
+
|
|
168
|
+
_axios.default.post((0, _urls.urls)().samplingProperties.createSampling.url, formData).then(function () {
|
|
169
|
+
updateOrCreateSuccess('buttons.created');
|
|
170
|
+
}).catch(function () {
|
|
171
|
+
setSavingMsg(_i18n.default.t('buttons.error'));
|
|
172
|
+
setOriginalSaveMessageWithTimeout();
|
|
173
|
+
});
|
|
174
|
+
} else {
|
|
175
|
+
var _samplingProperties$s2;
|
|
176
|
+
|
|
177
|
+
// update
|
|
178
|
+
_axios.default.put((0, _urls.urls)({
|
|
179
|
+
samplingId: samplingProperties === null || samplingProperties === void 0 ? void 0 : (_samplingProperties$s2 = samplingProperties.sampling) === null || _samplingProperties$s2 === void 0 ? void 0 : _samplingProperties$s2.id
|
|
180
|
+
}).samplingProperties.updateSampling.url, formData).then(function () {
|
|
181
|
+
updateOrCreateSuccess('buttons.updated');
|
|
182
|
+
}).catch(function () {
|
|
183
|
+
setSavingMsg(_i18n.default.t('buttons.error'));
|
|
184
|
+
setOriginalSaveMessageWithTimeout();
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
};
|
|
303
188
|
|
|
304
|
-
var detectPageType = function detectPageType(samplingProperties, op) {
|
|
305
|
-
var
|
|
306
|
-
var serverTime = collectionTimeServer ? new Date(collectionTimeServer) : new Date();
|
|
307
|
-
var currentTime = new Date();
|
|
189
|
+
var detectPageType = function detectPageType(samplingProperties, collectionTimeServer, op) {
|
|
190
|
+
var _pageType;
|
|
308
191
|
|
|
309
192
|
if (op === 'edit') {
|
|
310
|
-
|
|
311
|
-
|
|
193
|
+
_pageType = samplingProperties.sampling.is_canceled ? 'cancel' : 'collect';
|
|
194
|
+
|
|
195
|
+
if (collectionTimeServer) {
|
|
196
|
+
setCollectionTime(new Date(collectionTimeServer));
|
|
197
|
+
} else {
|
|
198
|
+
setCollectionTime(new Date());
|
|
199
|
+
}
|
|
312
200
|
} else if (op === _samplingsPageUtils.COLLECT_SAMPLING_OP) {
|
|
313
|
-
setCollectionTime(
|
|
314
|
-
|
|
201
|
+
setCollectionTime(new Date());
|
|
202
|
+
_pageType = 'collect';
|
|
315
203
|
} else if (op === _samplingsPageUtils.CANCEL_SAMPLING_OP) {
|
|
316
|
-
setCollectionTime(
|
|
317
|
-
|
|
318
|
-
} else if (op === _samplingsPageUtils.REVERT_CANCELLATION) {
|
|
319
|
-
setCollectionTime(serverTime);
|
|
320
|
-
pageType.current = 'revert_cancel';
|
|
204
|
+
setCollectionTime(new Date(collectionTimeServer));
|
|
205
|
+
_pageType = 'cancel';
|
|
321
206
|
}
|
|
207
|
+
|
|
208
|
+
return _pageType;
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
var isPropertiesPage = pageType === 'edit';
|
|
212
|
+
|
|
213
|
+
var _useParams = (0, _reactRouterDom.useParams)(),
|
|
214
|
+
sampleId = _useParams.sampleId;
|
|
215
|
+
|
|
216
|
+
var fetchSamplingProperties = function fetchSamplingProperties() {
|
|
217
|
+
var samplingId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : sampleId;
|
|
218
|
+
var op = arguments.length > 1 ? arguments[1] : undefined;
|
|
219
|
+
|
|
220
|
+
_axios.default.get((0, _urls.urls)({
|
|
221
|
+
samplingId: samplingId
|
|
222
|
+
}).samplingProperties.fetchSampling.url).then(function (res) {
|
|
223
|
+
var samplingRes = res.data;
|
|
224
|
+
var samplingProperties = samplingRes.sampling_properties;
|
|
225
|
+
var collectionTimeServer = samplingProperties.sampling.collection_time;
|
|
226
|
+
|
|
227
|
+
var _pageType = detectPageType(samplingProperties, collectionTimeServer, op);
|
|
228
|
+
|
|
229
|
+
setPageType(_pageType);
|
|
230
|
+
var isCanceled = _pageType === 'cancel' ? true : _pageType === 'collect' ? false : samplingProperties.sampling.is_canceled || false;
|
|
231
|
+
var pageCollectionTime = _pageType === 'collect' ? collectionTime : samplingProperties.sampling.collection_time;
|
|
232
|
+
var sam = samplingProperties.sampling;
|
|
233
|
+
formik.setValues({
|
|
234
|
+
lab_id: sam.lab_id,
|
|
235
|
+
collection_time: pageCollectionTime,
|
|
236
|
+
pump_sampling_volume: sam.pump_sampling_volume,
|
|
237
|
+
pump_battery_level: sam.pump_battery_level,
|
|
238
|
+
description: sam.description,
|
|
239
|
+
kando_rep: sam.kando_rep,
|
|
240
|
+
sampling_plan_id: sam.sampling_plan_id,
|
|
241
|
+
cancellation_reason: sam.cancellation_reason || '',
|
|
242
|
+
is_canceled: isCanceled
|
|
243
|
+
});
|
|
244
|
+
setSamplingProperties(samplingProperties);
|
|
245
|
+
setSamplingPlan(samplingRes.sampling_plan);
|
|
246
|
+
});
|
|
322
247
|
};
|
|
323
248
|
|
|
324
249
|
var getUrlQueryOp = function getUrlQueryOp() {
|
|
@@ -331,6 +256,10 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
331
256
|
return op;
|
|
332
257
|
};
|
|
333
258
|
|
|
259
|
+
(0, _react.useEffect)(function () {
|
|
260
|
+
fetchSamplingProperties(sampleId, getUrlQueryOp());
|
|
261
|
+
}, [samplingUpdated]);
|
|
262
|
+
|
|
334
263
|
if (!samplingPlan || !samplingProperties) {
|
|
335
264
|
return /*#__PURE__*/_react.default.createElement(_Spinner.Spinner, null);
|
|
336
265
|
}
|
|
@@ -341,26 +270,26 @@ var SamplingProperties = function SamplingProperties() {
|
|
|
341
270
|
samplingProperties: samplingProperties,
|
|
342
271
|
sampling: samplingPlan,
|
|
343
272
|
formik: formik,
|
|
344
|
-
pageType: pageType
|
|
273
|
+
pageType: pageType,
|
|
345
274
|
collectionDate: collectionTime,
|
|
346
275
|
setCollectionDate: setCollectionTime,
|
|
347
276
|
setSamplingUpdated: setSamplingUpdated,
|
|
348
|
-
isDatePickerDisabled: isPropertiesPage
|
|
277
|
+
isDatePickerDisabled: isPropertiesPage,
|
|
349
278
|
dateFormat: dateFormat
|
|
350
279
|
}), _reactDeviceDetect.isMobile && /*#__PURE__*/_react.default.createElement(_SamplingPropertiesHeadMobile.SamplingPropertiesHeadMobile, {
|
|
351
280
|
samplingProperties: samplingProperties,
|
|
352
281
|
sampling: samplingPlan,
|
|
353
282
|
formik: formik,
|
|
354
|
-
pageType: pageType
|
|
283
|
+
pageType: pageType,
|
|
355
284
|
collectionDate: collectionTime,
|
|
356
285
|
setCollectionDate: setCollectionTime,
|
|
357
286
|
setSamplingUpdated: setSamplingUpdated,
|
|
358
|
-
isDatePickerDisabled: isPropertiesPage
|
|
287
|
+
isDatePickerDisabled: isPropertiesPage,
|
|
359
288
|
dateFormat: dateFormat
|
|
360
289
|
}), samplingProperties && pageType && /*#__PURE__*/_react.default.createElement(_SamplingPropertiesForm.SamplingPropertiesForm, {
|
|
361
290
|
samplingProperties: samplingProperties,
|
|
362
291
|
sampling: samplingPlan,
|
|
363
|
-
pageType: pageType
|
|
292
|
+
pageType: pageType,
|
|
364
293
|
setSamplingUpdated: setSamplingUpdated,
|
|
365
294
|
savingMsg: savingMsg,
|
|
366
295
|
handleClose: handleClose,
|
|
@@ -377,4 +306,4 @@ var SamplingPropertiesStyle = _styledComponents.default.div.withConfig({
|
|
|
377
306
|
displayName: "SamplingProperties__SamplingPropertiesStyle",
|
|
378
307
|
componentId: "sc-opklsf-0"
|
|
379
308
|
})(["", " ", ""], !_reactDeviceDetect.isMobile ? 'width: 830px;' : '', !_reactDeviceDetect.isMobile ? 'margin: 100px auto;' : '');
|
|
380
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWdlcy9TYW1wbGluZ3NQYWdlL1NhbXBsaW5nUHJvcGVydGllcy9TYW1wbGluZ1Byb3BlcnRpZXMudHN4Il0sIm5hbWVzIjpbImlzUHJvcGVydGllc1BhZ2UiLCJwYWdlVHlwZSIsIlNhbXBsaW5nUHJvcGVydGllcyIsIkRhdGUiLCJjb2xsZWN0aW9uVGltZSIsInNldENvbGxlY3Rpb25UaW1lIiwicGhvdG9zIiwic2V0UGhvdG9zIiwicGhvdG9zVG9EZWxldGUiLCJzZXRQaG90b3NUb0RlbGV0ZSIsImkxOG4iLCJ0Iiwic2F2aW5nTXNnIiwic2V0U2F2aW5nTXNnIiwic2FtcGxpbmdVcGRhdGVkIiwic2V0U2FtcGxpbmdVcGRhdGVkIiwidW5kZWZpbmVkIiwic2FtcGxpbmdQbGFuIiwic2V0U2FtcGxpbmdQbGFuIiwiaGlzdG9yeSIsInF1ZXJ5IiwidXNlckluZm8iLCJzdGF0ZSIsInBlcm1pc3Npb25zIiwidXNlcl9pbmZvIiwiZGF0ZUZvcm1hdCIsImRhdGVfdGltZV9mb3JtYXQiLCJzYW1wbGluZ1Byb3BlcnRpZXMiLCJzZXRTYW1wbGluZ1Byb3BlcnRpZXMiLCJzYW1wbGVJZCIsImluaXRGb3JtaWtWYWx1ZXMiLCJpc0NhbmNlbGVkIiwicGFnZUNvbGxlY3Rpb25UaW1lIiwiY3VycmVudCIsInNhbXBsaW5nIiwiY29sbGVjdGlvbl90aW1lIiwic2FtIiwiZm9ybWlrIiwic2V0VmFsdWVzIiwibGFiX2lkIiwicHVtcF9zYW1wbGluZ192b2x1bWUiLCJwdW1wX2JhdHRlcnlfbGV2ZWwiLCJkZXNjcmlwdGlvbiIsImthbmRvX3JlcCIsInNhbXBsaW5nX3BsYW5faWQiLCJjYW5jZWxsYXRpb25fcmVhc29uIiwiaXNfY2FuY2VsZWQiLCJpc0NhbmNlbGxlZExheW91dCIsIm9wIiwiZGV0ZWN0UGFnZVR5cGUiLCJwYWdlVHlwZTJpc0NhbmNlbGxlZCIsImNhbmNlbCIsImNvbGxlY3QiLCJyZXZlcnRfY2FuY2VsIiwiZmV0Y2hTYW1wbGluZ1Byb3BlcnRpZXMiLCJzYW1wbGluZ0lkIiwiYXhpb3MiLCJnZXQiLCJmZXRjaFNhbXBsaW5nIiwidXJsIiwicmVzcG9uc2UiLCJkYXRhIiwic2FtcGxpbmdfcHJvcGVydGllcyIsInNhbXBsaW5nX3BsYW4iLCJnZXRVcmxRdWVyeU9wIiwidmFsaWRhdGlvblNjaGVtYSIsInByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hIiwiY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYSIsImVuYWJsZVJlaW5pdGlhbGl6ZSIsImluaXRpYWxWYWx1ZXMiLCJzYW1wbGluZ1Byb3BlcnR5IiwidmFsaWRhdGVPbkNoYW5nZSIsInZhbGlkYXRlT25CbHVyIiwib25TdWJtaXQiLCJ2YWx1ZXMiLCJoYW5kbGVTdWJtaXQiLCJoYW5kbGVDbG9zZSIsImdvQmFjayIsInBpY3R1cmVzX2F0dHJpYnV0ZXMiLCJzYXZlRm9ybURhdGEiLCJmb3JtRGF0YUJ1aWxkZXIiLCJ1cGRhdGVPckNyZWF0ZSIsInNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCIsInNldFRpbWVvdXQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwia2V5IiwidmFsdWUiLCJhcHBlbmQiLCJ1bmlxdWVQaG90b3NUb0RlbGV0ZSIsIlNldCIsImxlbmd0aCIsImZvckVhY2giLCJpZCIsImluZGV4IiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZU9yQ3JlYXRlU3VjY2VzcyIsIm1zZyIsInBvc3QiLCJjcmVhdGVTYW1wbGluZyIsInB1dCIsInVwZGF0ZVNhbXBsaW5nIiwiY29sbGVjdGlvblRpbWVTZXJ2ZXIiLCJzZXJ2ZXJUaW1lIiwiY3VycmVudFRpbWUiLCJDT0xMRUNUX1NBTVBMSU5HX09QIiwiQ0FOQ0VMX1NBTVBMSU5HX09QIiwiUkVWRVJUX0NBTkNFTExBVElPTiIsImluY2x1ZGVzIiwiaXNNb2JpbGUiLCJTYW1wbGluZ1Byb3BlcnRpZXNTdHlsZSIsInN0eWxlZCIsImRpdiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7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RUFBRVYsWUFGWjtBQUdFLElBQUEsTUFBTSxFQUFFb0IsTUFIVjtBQUlFLElBQUEsUUFBUSxFQUFFcEMsUUFBUSxDQUFDZ0MsT0FKckI7QUFLRSxJQUFBLGNBQWMsRUFBRTdCLGNBTGxCO0FBTUUsSUFBQSxpQkFBaUIsRUFBRUMsaUJBTnJCO0FBT0UsSUFBQSxrQkFBa0IsRUFBRVUsa0JBUHRCO0FBUUUsSUFBQSxvQkFBb0IsRUFBRWYsZ0JBQWdCLENBQUNDLFFBQUQsQ0FSeEM7QUFTRSxJQUFBLFVBQVUsRUFBRXdCO0FBVGQsSUFoQkosRUE2QkdFLGtCQUFrQixJQUFJMUIsUUFBdEIsaUJBQ0MsNkJBQUMsOENBQUQ7QUFDRSxJQUFBLGtCQUFrQixFQUFFMEIsa0JBRHRCO0FBRUUsSUFBQSxRQUFRLEVBQUVWLFlBRlo7QUFHRSxJQUFBLFFBQVEsRUFBRWhCLFFBQVEsQ0FBQ2dDLE9BSHJCO0FBSUUsSUFBQSxrQkFBa0IsRUFBRWxCLGtCQUp0QjtBQUtFLElBQUEsU0FBUyxFQUFFSCxTQUxiO0FBTUUsSUFBQSxXQUFXLEVBQUVnRSxXQU5mO0FBT0UsSUFBQSxpQkFBaUIsRUFBRW5FLGlCQVByQjtBQVFFLElBQUEsU0FBUyxFQUFFRixTQVJiO0FBU0UsSUFBQSxNQUFNLEVBQUVELE1BVFY7QUFVRSxJQUFBLE1BQU0sRUFBRStCO0FBVlYsSUE5QkosQ0FERixDQURGLENBREY7QUFrREQsQ0E3UE07Ozs7QUErUFAsSUFBTTBFLHVCQUF1QixHQUFHQywwQkFBT0MsR0FBVjtBQUFBO0FBQUE7QUFBQSxrQkFDekIsQ0FBQ0gsMkJBQUQsR0FBWSxlQUFaLEdBQThCLEVBREwsRUFFekIsQ0FBQ0EsMkJBQUQsR0FBWSxxQkFBWixHQUFvQyxFQUZYLENBQTdCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFByb3BlcnRpZXMgYW5kIENhbmNlbGxpbmcgZm9ybXMuXG4gKiovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cy9tYWNybyc7XG5pbXBvcnQgeyBGb3JtaWtDb25maWcgfSBmcm9tICdmb3JtaWsvZGlzdC90eXBlcyc7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJ3JlYWN0LWRldmljZS1kZXRlY3QnO1xuaW1wb3J0IHsgdXNlRm9ybWlrIH0gZnJvbSAnZm9ybWlrJztcbmltcG9ydCB7IHVzZUhpc3RvcnksIHVzZVBhcmFtcyB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHsgdXNlU2VsZWN0b3IgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBMYXlvdXQgZnJvbSAnc3JjL3VpLWtpdC9MYXlvdXQvTGF5b3V0JztcbmltcG9ydCBpMThuIGZyb20gJ3NyYy91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgdXNlUXVlcnlVUkwgZnJvbSAnc3JjL2hvb2tzL3VzZVF1ZXJ5VVJMJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICdzcmMvY29tcG9uZW50cy9TcGlubmVyL1NwaW5uZXInO1xuaW1wb3J0IHsgdXJscyB9IGZyb20gJ3NyYy91dGlsaXRpZXMvdXJscyc7XG5cbmltcG9ydCB7XG4gIENBTkNFTF9TQU1QTElOR19PUCxcbiAgQ09MTEVDVF9TQU1QTElOR19PUCxcbiAgUkVWRVJUX0NBTkNFTExBVElPTixcbiAgU2FtcGxpbmdGZXRjaERhdGEsXG59IGZyb20gJy4uL3NhbXBsaW5nc1BhZ2VVdGlscyc7XG5pbXBvcnQgeyBTYW1wbGluZ1Byb3BlcnRpZXNGb3JtIH0gZnJvbSAnLi9TYW1wbGluZ1Byb3BlcnRpZXNGb3JtJztcbmltcG9ydCB7IFNhbXBsaW5nUHJvcGVydGllc0hlYWQgfSBmcm9tICcuL1NhbXBsaW5nUHJvcGVydGllc0hlYWQnO1xuaW1wb3J0IHsgU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZE1vYmlsZSB9IGZyb20gJy4vU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZE1vYmlsZSc7XG5pbXBvcnQge1xuICBGb3JtVHlwZSxcbiAgVFNhbXBsaW5nUHJvcGVydGllcyxcbiAgY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYSxcbiAgaXNDb2xsZWN0TGF5b3V0LFxuICBwcm9wZXJ0aWVzVmFsaWRhdGlvblNjaGVtYSxcbiAgc2FtcGxpbmdQcm9wZXJ0eSxcbn0gZnJvbSAnLi9zYW1wbGluZ1Byb3BlcnRpZXNVdGlscyc7XG5cbmNvbnN0IGlzUHJvcGVydGllc1BhZ2UgPSAocGFnZVR5cGUpID0+IHBhZ2VUeXBlID09PSAnZWRpdCc7XG5cbmV4cG9ydCBjb25zdCBTYW1wbGluZ1Byb3BlcnRpZXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBbY29sbGVjdGlvblRpbWUsIHNldENvbGxlY3Rpb25UaW1lXSA9IHVzZVN0YXRlPHN0cmluZyB8IERhdGUgfCBudWxsPihcbiAgICBuZXcgRGF0ZSgpLFxuICApO1xuICBjb25zdCBbcGhvdG9zLCBzZXRQaG90b3NdID0gdXNlU3RhdGU8c3RyaW5nIHwgQmxvYiB8IGFueT4oW10pO1xuICBjb25zdCBbcGhvdG9zVG9EZWxldGUsIHNldFBob3Rvc1RvRGVsZXRlXSA9IHVzZVN0YXRlPG51bWJlcltdPihbXSk7XG4gIGNvbnN0IFtzYXZpbmdNc2csIHNldFNhdmluZ01zZ10gPSB1c2VTdGF0ZTxzdHJpbmc+KGkxOG4udCgnYnV0dG9ucy5zYXZlJykpO1xuICBjb25zdCBbc2FtcGxpbmdVcGRhdGVkLCBzZXRTYW1wbGluZ1VwZGF0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2FtcGxpbmdQbGFuLCBzZXRTYW1wbGluZ1BsYW5dID0gdXNlU3RhdGU8XG4gICAgU2FtcGxpbmdGZXRjaERhdGEgfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpO1xuICBjb25zdCBoaXN0b3J5ID0gdXNlSGlzdG9yeSgpO1xuICBjb25zdCBxdWVyeSA9IHVzZVF1ZXJ5VVJMKCk7XG4gIGNvbnN0IHVzZXJJbmZvID0gdXNlU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS5wZXJtaXNzaW9ucy51c2VyX2luZm8pO1xuICBjb25zdCBkYXRlRm9ybWF0ID1cbiAgICB1c2VySW5mby5kYXRlX3RpbWVfZm9ybWF0ID09PSAndXMnXG4gICAgICA/ICdNTU0gZCwgeXl5eSBoaDptbSBhYSdcbiAgICAgIDogJ2QvTU0veXl5eSBISDptbSc7XG4gIGNvbnN0IHBhZ2VUeXBlID0gdXNlUmVmPHN0cmluZz4oJycpO1xuICBjb25zdCBbc2FtcGxpbmdQcm9wZXJ0aWVzLCBzZXRTYW1wbGluZ1Byb3BlcnRpZXNdID1cbiAgICB1c2VTdGF0ZTxUU2FtcGxpbmdQcm9wZXJ0aWVzPigpO1xuICBjb25zdCB7IHNhbXBsZUlkIH0gPSB1c2VQYXJhbXMoKTtcblxuICBjb25zdCBpbml0Rm9ybWlrVmFsdWVzID0gKHNhbXBsaW5nUHJvcGVydGllcywgaXNDYW5jZWxlZCkgPT4ge1xuICAgIGNvbnN0IHBhZ2VDb2xsZWN0aW9uVGltZSA9IGlzQ29sbGVjdExheW91dChwYWdlVHlwZS5jdXJyZW50KVxuICAgICAgPyBjb2xsZWN0aW9uVGltZVxuICAgICAgOiBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuY29sbGVjdGlvbl90aW1lO1xuICAgIGNvbnN0IHNhbSA9IHNhbXBsaW5nUHJvcGVydGllcy5zYW1wbGluZztcbiAgICBmb3JtaWsuc2V0VmFsdWVzKHtcbiAgICAgIGxhYl9pZDogc2FtLmxhYl9pZCxcbiAgICAgIGNvbGxlY3Rpb25fdGltZTogcGFnZUNvbGxlY3Rpb25UaW1lLFxuICAgICAgcHVtcF9zYW1wbGluZ192b2x1bWU6IHNhbS5wdW1wX3NhbXBsaW5nX3ZvbHVtZSxcbiAgICAgIHB1bXBfYmF0dGVyeV9sZXZlbDogc2FtLnB1bXBfYmF0dGVyeV9sZXZlbCxcbiAgICAgIGRlc2NyaXB0aW9uOiBzYW0uZGVzY3JpcHRpb24sXG4gICAgICBrYW5kb19yZXA6IHNhbS5rYW5kb19yZXAsXG4gICAgICBzYW1wbGluZ19wbGFuX2lkOiBzYW0uc2FtcGxpbmdfcGxhbl9pZCxcbiAgICAgIGNhbmNlbGxhdGlvbl9yZWFzb246IHNhbS5jYW5jZWxsYXRpb25fcmVhc29uIHx8ICcnLFxuICAgICAgaXNfY2FuY2VsZWQ6IGlzQ2FuY2VsZWQsXG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgaXNDYW5jZWxsZWRMYXlvdXQgPSAoc2FtcGxpbmdQcm9wZXJ0aWVzLCBvcCkgPT4ge1xuICAgIGRldGVjdFBhZ2VUeXBlKHNhbXBsaW5nUHJvcGVydGllcywgb3ApO1xuICAgIGNvbnN0IHBhZ2VUeXBlMmlzQ2FuY2VsbGVkID0ge1xuICAgICAgY2FuY2VsOiB0cnVlLFxuICAgICAgY29sbGVjdDogZmFsc2UsXG4gICAgICByZXZlcnRfY2FuY2VsOiBmYWxzZSxcbiAgICB9O1xuICAgIGxldCBpc0NhbmNlbGVkID0gcGFnZVR5cGUyaXNDYW5jZWxsZWRbcGFnZVR5cGUuY3VycmVudF07XG4gICAgaWYgKGlzQ2FuY2VsZWQgPT09IG51bGwpIHtcbiAgICAgIGlzQ2FuY2VsZWQgPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuaXNfY2FuY2VsZWQgfHwgZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBpc0NhbmNlbGVkO1xuICB9O1xuXG4gIGNvbnN0IGZldGNoU2FtcGxpbmdQcm9wZXJ0aWVzID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNhbXBsaW5nSWQgPSBzYW1wbGVJZCwgb3ApID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICB1cmxzKHsgc2FtcGxpbmdJZDogc2FtcGxpbmdJZCB9KS5zYW1wbGluZ1Byb3BlcnRpZXMuZmV0Y2hTYW1wbGluZy51cmwsXG4gICAgICApO1xuICAgICAgY29uc3Qgc2FtcGxpbmcgPSByZXNwb25zZS5kYXRhO1xuICAgICAgY29uc3Qgc2FtcGxpbmdQcm9wZXJ0aWVzID0gc2FtcGxpbmcuc2FtcGxpbmdfcHJvcGVydGllcztcbiAgICAgIGxldCBpc0NhbmNlbGVkID0gaXNDYW5jZWxsZWRMYXlvdXQoc2FtcGxpbmdQcm9wZXJ0aWVzLCBvcCk7XG4gICAgICBpbml0Rm9ybWlrVmFsdWVzKHNhbXBsaW5nUHJvcGVydGllcywgaXNDYW5jZWxlZCk7XG4gICAgICBzZXRTYW1wbGluZ1Byb3BlcnRpZXMoc2FtcGxpbmdQcm9wZXJ0aWVzKTtcbiAgICAgIHNldFNhbXBsaW5nUGxhbihzYW1wbGluZy5zYW1wbGluZ19wbGFuKTtcbiAgICB9LFxuICAgIFtdLFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmV0Y2hTYW1wbGluZ1Byb3BlcnRpZXMoc2FtcGxlSWQsIGdldFVybFF1ZXJ5T3AoKSk7XG4gIH0sIFtzYW1wbGluZ1VwZGF0ZWQsIHNhbXBsaW5nVXBkYXRlZF0pO1xuXG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBpc0NvbGxlY3RMYXlvdXQocGFnZVR5cGUuY3VycmVudClcbiAgICA/IHByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hXG4gICAgOiBjYW5jZWxsYXRpb25WYWxpZGF0aW9uU2NoZW1hO1xuICBjb25zdCBmb3JtaWsgPSB1c2VGb3JtaWs8Rm9ybWlrQ29uZmlnPEZvcm1UeXBlPj4oe1xuICAgIGVuYWJsZVJlaW5pdGlhbGl6ZTogdHJ1ZSxcbiAgICBpbml0aWFsVmFsdWVzOiBzYW1wbGluZ1Byb3BlcnR5LFxuICAgIHZhbGlkYXRpb25TY2hlbWE6IHZhbGlkYXRpb25TY2hlbWEsXG4gICAgdmFsaWRhdGVPbkNoYW5nZTogZmFsc2UsXG4gICAgdmFsaWRhdGVPbkJsdXI6IHRydWUsXG4gICAgb25TdWJtaXQ6ICh2YWx1ZXMpID0+IHtcbiAgICAgIGhhbmRsZVN1Ym1pdCh2YWx1ZXMpO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xuICAgIGhpc3RvcnkuZ29CYWNrKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKHZhbHVlcykgPT4ge1xuICAgIHNldFNhdmluZ01zZyhpMThuLnQoJ2J1dHRvbnMuc2F2aW5nJykpO1xuICAgIHZhbHVlcy5waWN0dXJlc19hdHRyaWJ1dGVzID0gcGhvdG9zO1xuICAgIGNvbnN0IHNhdmVGb3JtRGF0YSA9IGZvcm1EYXRhQnVpbGRlcih2YWx1ZXMpO1xuICAgIHVwZGF0ZU9yQ3JlYXRlKHNhdmVGb3JtRGF0YSk7XG4gIH07XG5cbiAgY29uc3Qgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0ID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5zYXZlJykpO1xuICAgIH0sIDMwMDApO1xuICB9O1xuXG4gIGNvbnN0IGZvcm1EYXRhQnVpbGRlciA9ICh2YWx1ZXMpID0+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlcykge1xuICAgICAgaWYgKGtleSAhPT0gJ3BpY3R1cmVzX2F0dHJpYnV0ZXMnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2tleV0gPT09IG51bGwgPyAnJyA6IHZhbHVlc1trZXldO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYHNhbXBsaW5nWyR7a2V5fV1gLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCB1bmlxdWVQaG90b3NUb0RlbGV0ZSA9IFsuLi5uZXcgU2V0KHBob3Rvc1RvRGVsZXRlKV07XG4gICAgdW5pcXVlUGhvdG9zVG9EZWxldGUubGVuZ3RoICE9PSAwICYmXG4gICAgICB1bmlxdWVQaG90b3NUb0RlbGV0ZS5mb3JFYWNoKChpZCwgaW5kZXgpID0+IHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgIGBzYW1wbGluZ1twaWN0dXJlc19hdHRyaWJ1dGVzXVske2luZGV4fV1baWRdYCxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShpZCksXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICBgc2FtcGxpbmdbcGljdHVyZXNfYXR0cmlidXRlc11bJHtpbmRleH1dW19kZXN0cm95XWAsXG4gICAgICAgICAgJ3RydWUnLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZU9yQ3JlYXRlID0gYXN5bmMgKGZvcm1EYXRhKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlT3JDcmVhdGVTdWNjZXNzID0gKG1zZykgPT4ge1xuICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udChtc2cpKTtcbiAgICAgIHNldFNhbXBsaW5nVXBkYXRlZCh0cnVlKTtcbiAgICAgIHNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCgpO1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9O1xuXG4gICAgaWYgKHNhbXBsaW5nUHJvcGVydGllcz8uc2FtcGxpbmc/LmlkID09PSBudWxsKSB7XG4gICAgICAvLyBjcmVhdGVcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChgc2FtcGxpbmdbZGF0ZV1gLCBjb2xsZWN0aW9uVGltZSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgICAgIHVybHMoKS5zYW1wbGluZ1Byb3BlcnRpZXMuY3JlYXRlU2FtcGxpbmcudXJsLFxuICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICApO1xuICAgICAgICB1cGRhdGVPckNyZWF0ZVN1Y2Nlc3MoJ2J1dHRvbnMuY3JlYXRlZCcpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzZXRTYXZpbmdNc2coaTE4bi50KCdidXR0b25zLmVycm9yJykpO1xuICAgICAgICBzZXRPcmlnaW5hbFNhdmVNZXNzYWdlV2l0aFRpbWVvdXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBheGlvcy5wdXQoXG4gICAgICAgICAgdXJscyh7IHNhbXBsaW5nSWQ6IHNhbXBsaW5nUHJvcGVydGllcz8uc2FtcGxpbmc/LmlkIH0pXG4gICAgICAgICAgICAuc2FtcGxpbmdQcm9wZXJ0aWVzLnVwZGF0ZVNhbXBsaW5nLnVybCxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlT3JDcmVhdGVTdWNjZXNzKCdidXR0b25zLnVwZGF0ZWQnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5lcnJvcicpKTtcbiAgICAgICAgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIERldGVjdHMgYW5kIHVwZGF0ZXMgcGFnZVR5cGUgYW5kIGNvbGxlY3Rpb25UaW1lLlxuICBjb25zdCBkZXRlY3RQYWdlVHlwZSA9IChzYW1wbGluZ1Byb3BlcnRpZXMsIG9wKSA9PiB7XG4gICAgY29uc3QgY29sbGVjdGlvblRpbWVTZXJ2ZXIgPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuY29sbGVjdGlvbl90aW1lO1xuICAgIGNvbnN0IHNlcnZlclRpbWUgPSBjb2xsZWN0aW9uVGltZVNlcnZlclxuICAgICAgPyBuZXcgRGF0ZShjb2xsZWN0aW9uVGltZVNlcnZlcilcbiAgICAgIDogbmV3IERhdGUoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IG5ldyBEYXRlKCk7XG5cbiAgICBpZiAob3AgPT09ICdlZGl0Jykge1xuICAgICAgcGFnZVR5cGUuY3VycmVudCA9IHNhbXBsaW5nUHJvcGVydGllcy5zYW1wbGluZy5pc19jYW5jZWxlZFxuICAgICAgICA/ICdjYW5jZWwnXG4gICAgICAgIDogJ2NvbGxlY3QnO1xuICAgICAgc2V0Q29sbGVjdGlvblRpbWUoY29sbGVjdGlvblRpbWVTZXJ2ZXIgPyBzZXJ2ZXJUaW1lIDogY3VycmVudFRpbWUpO1xuICAgIH0gZWxzZSBpZiAob3AgPT09IENPTExFQ1RfU0FNUExJTkdfT1ApIHtcbiAgICAgIHNldENvbGxlY3Rpb25UaW1lKGN1cnJlbnRUaW1lKTtcbiAgICAgIHBhZ2VUeXBlLmN1cnJlbnQgPSAnY29sbGVjdCc7XG4gICAgfSBlbHNlIGlmIChvcCA9PT0gQ0FOQ0VMX1NBTVBMSU5HX09QKSB7XG4gICAgICBzZXRDb2xsZWN0aW9uVGltZShzZXJ2ZXJUaW1lKTtcbiAgICAgIHBhZ2VUeXBlLmN1cnJlbnQgPSAnY2FuY2VsJztcbiAgICB9IGVsc2UgaWYgKG9wID09PSBSRVZFUlRfQ0FOQ0VMTEFUSU9OKSB7XG4gICAgICBzZXRDb2xsZWN0aW9uVGltZShzZXJ2ZXJUaW1lKTtcbiAgICAgIHBhZ2VUeXBlLmN1cnJlbnQgPSAncmV2ZXJ0X2NhbmNlbCc7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFVybFF1ZXJ5T3AgPSAoKSA9PiB7XG4gICAgbGV0IG9wID0gcXVlcnkuZ2V0KCdvcCcpO1xuICAgIC8vIGlmIG5vdCBwcmVzZW50IHRoZW4gZGVmYXVsdCBvcCBpcyAnY29sbGVjdGluZydcbiAgICBpZiAoW3VuZGVmaW5lZCwgbnVsbCwgJyddLmluY2x1ZGVzKG9wKSkge1xuICAgICAgcmV0dXJuIENPTExFQ1RfU0FNUExJTkdfT1A7XG4gICAgfVxuICAgIHJldHVybiBvcDtcbiAgfTtcblxuICBpZiAoIXNhbXBsaW5nUGxhbiB8fCAhc2FtcGxpbmdQcm9wZXJ0aWVzKSB7XG4gICAgcmV0dXJuIDxTcGlubmVyIC8+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Zm9ybSBvblN1Ym1pdD17Zm9ybWlrLmhhbmRsZVN1Ym1pdH0+XG4gICAgICA8TGF5b3V0PlxuICAgICAgICA8U2FtcGxpbmdQcm9wZXJ0aWVzU3R5bGU+XG4gICAgICAgICAgeyFpc01vYmlsZSAmJiAoXG4gICAgICAgICAgICA8U2FtcGxpbmdQcm9wZXJ0aWVzSGVhZFxuICAgICAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXM9e3NhbXBsaW5nUHJvcGVydGllc31cbiAgICAgICAgICAgICAgc2FtcGxpbmc9e3NhbXBsaW5nUGxhbn1cbiAgICAgICAgICAgICAgZm9ybWlrPXtmb3JtaWt9XG4gICAgICAgICAgICAgIHBhZ2VUeXBlPXtwYWdlVHlwZS5jdXJyZW50fVxuICAgICAgICAgICAgICBjb2xsZWN0aW9uRGF0ZT17Y29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldENvbGxlY3Rpb25EYXRlPXtzZXRDb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkPXtzZXRTYW1wbGluZ1VwZGF0ZWR9XG4gICAgICAgICAgICAgIGlzRGF0ZVBpY2tlckRpc2FibGVkPXtpc1Byb3BlcnRpZXNQYWdlKHBhZ2VUeXBlKX1cbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdD17ZGF0ZUZvcm1hdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtpc01vYmlsZSAmJiAoXG4gICAgICAgICAgICA8U2FtcGxpbmdQcm9wZXJ0aWVzSGVhZE1vYmlsZVxuICAgICAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXM9e3NhbXBsaW5nUHJvcGVydGllc31cbiAgICAgICAgICAgICAgc2FtcGxpbmc9e3NhbXBsaW5nUGxhbn1cbiAgICAgICAgICAgICAgZm9ybWlrPXtmb3JtaWt9XG4gICAgICAgICAgICAgIHBhZ2VUeXBlPXtwYWdlVHlwZS5jdXJyZW50fVxuICAgICAgICAgICAgICBjb2xsZWN0aW9uRGF0ZT17Y29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldENvbGxlY3Rpb25EYXRlPXtzZXRDb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkPXtzZXRTYW1wbGluZ1VwZGF0ZWR9XG4gICAgICAgICAgICAgIGlzRGF0ZVBpY2tlckRpc2FibGVkPXtpc1Byb3BlcnRpZXNQYWdlKHBhZ2VUeXBlKX1cbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdD17ZGF0ZUZvcm1hdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHtzYW1wbGluZ1Byb3BlcnRpZXMgJiYgcGFnZVR5cGUgJiYgKFxuICAgICAgICAgICAgPFNhbXBsaW5nUHJvcGVydGllc0Zvcm1cbiAgICAgICAgICAgICAgc2FtcGxpbmdQcm9wZXJ0aWVzPXtzYW1wbGluZ1Byb3BlcnRpZXN9XG4gICAgICAgICAgICAgIHNhbXBsaW5nPXtzYW1wbGluZ1BsYW59XG4gICAgICAgICAgICAgIHBhZ2VUeXBlPXtwYWdlVHlwZS5jdXJyZW50fVxuICAgICAgICAgICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQ9e3NldFNhbXBsaW5nVXBkYXRlZH1cbiAgICAgICAgICAgICAgc2F2aW5nTXNnPXtzYXZpbmdNc2d9XG4gICAgICAgICAgICAgIGhhbmRsZUNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAgICAgICAgICAgc2V0UGhvdG9zVG9EZWxldGU9e3NldFBob3Rvc1RvRGVsZXRlfVxuICAgICAgICAgICAgICBzZXRQaG90b3M9e3NldFBob3Rvc31cbiAgICAgICAgICAgICAgcGhvdG9zPXtwaG90b3N9XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NhbXBsaW5nUHJvcGVydGllc1N0eWxlPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9mb3JtPlxuICApO1xufTtcblxuY29uc3QgU2FtcGxpbmdQcm9wZXJ0aWVzU3R5bGUgPSBzdHlsZWQuZGl2YFxuICAkeyFpc01vYmlsZSA/ICd3aWR0aDogODMwcHg7JyA6ICcnfVxuICAkeyFpc01vYmlsZSA/ICdtYXJnaW46IDEwMHB4IGF1dG87JyA6ICcnfVxuYDtcbiJdfQ==
|
|
309
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYWdlcy9TYW1wbGluZ3NQYWdlL1NhbXBsaW5nUHJvcGVydGllcy9TYW1wbGluZ1Byb3BlcnRpZXMudHN4Il0sIm5hbWVzIjpbIlNhbXBsaW5nUHJvcGVydGllcyIsIkRhdGUiLCJub3ciLCJmb3JtYXQiLCJjb2xsZWN0aW9uVGltZSIsInNldENvbGxlY3Rpb25UaW1lIiwicGhvdG9zIiwic2V0UGhvdG9zIiwicGhvdG9zVG9EZWxldGUiLCJzZXRQaG90b3NUb0RlbGV0ZSIsImkxOG4iLCJ0Iiwic2F2aW5nTXNnIiwic2V0U2F2aW5nTXNnIiwic2FtcGxpbmdVcGRhdGVkIiwic2V0U2FtcGxpbmdVcGRhdGVkIiwidW5kZWZpbmVkIiwic2FtcGxpbmdQbGFuIiwic2V0U2FtcGxpbmdQbGFuIiwiaGlzdG9yeSIsInF1ZXJ5IiwidXNlckluZm8iLCJzdGF0ZSIsInBlcm1pc3Npb25zIiwidXNlcl9pbmZvIiwiZGF0ZUZvcm1hdCIsImRhdGVfdGltZV9mb3JtYXQiLCJwYWdlVHlwZSIsInNldFBhZ2VUeXBlIiwic2FtcGxpbmdQcm9wZXJ0aWVzIiwic2V0U2FtcGxpbmdQcm9wZXJ0aWVzIiwidmFsaWRhdGlvblNjaGVtYSIsInByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hIiwiY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYSIsImZvcm1payIsImVuYWJsZVJlaW5pdGlhbGl6ZSIsImluaXRpYWxWYWx1ZXMiLCJzYW1wbGluZ1Byb3BlcnR5IiwidmFsaWRhdGVPbkNoYW5nZSIsInZhbGlkYXRlT25CbHVyIiwib25TdWJtaXQiLCJ2YWx1ZXMiLCJoYW5kbGVTdWJtaXQiLCJoYW5kbGVDbG9zZSIsImdvQmFjayIsInBpY3R1cmVzX2F0dHJpYnV0ZXMiLCJzYXZlRm9ybURhdGEiLCJmb3JtRGF0YUJ1aWxkZXIiLCJ1cGRhdGVPckNyZWF0ZSIsInNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCIsInNldFRpbWVvdXQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwia2V5IiwidmFsdWUiLCJhcHBlbmQiLCJ1bmlxdWVQaG90b3NUb0RlbGV0ZSIsIlNldCIsImxlbmd0aCIsImZvckVhY2giLCJpZCIsImluZGV4IiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZU9yQ3JlYXRlU3VjY2VzcyIsIm1zZyIsInNhbXBsaW5nIiwiYXhpb3MiLCJwb3N0IiwiY3JlYXRlU2FtcGxpbmciLCJ1cmwiLCJ0aGVuIiwiY2F0Y2giLCJwdXQiLCJzYW1wbGluZ0lkIiwidXBkYXRlU2FtcGxpbmciLCJkZXRlY3RQYWdlVHlwZSIsImNvbGxlY3Rpb25UaW1lU2VydmVyIiwib3AiLCJfcGFnZVR5cGUiLCJpc19jYW5jZWxlZCIsIkNPTExFQ1RfU0FNUExJTkdfT1AiLCJDQU5DRUxfU0FNUExJTkdfT1AiLCJpc1Byb3BlcnRpZXNQYWdlIiwic2FtcGxlSWQiLCJmZXRjaFNhbXBsaW5nUHJvcGVydGllcyIsImdldCIsImZldGNoU2FtcGxpbmciLCJyZXMiLCJzYW1wbGluZ1JlcyIsImRhdGEiLCJzYW1wbGluZ19wcm9wZXJ0aWVzIiwiY29sbGVjdGlvbl90aW1lIiwiaXNDYW5jZWxlZCIsInBhZ2VDb2xsZWN0aW9uVGltZSIsInNhbSIsInNldFZhbHVlcyIsImxhYl9pZCIsInB1bXBfc2FtcGxpbmdfdm9sdW1lIiwicHVtcF9iYXR0ZXJ5X2xldmVsIiwiZGVzY3JpcHRpb24iLCJrYW5kb19yZXAiLCJzYW1wbGluZ19wbGFuX2lkIiwiY2FuY2VsbGF0aW9uX3JlYXNvbiIsInNhbXBsaW5nX3BsYW4iLCJnZXRVcmxRdWVyeU9wIiwiaW5jbHVkZXMiLCJpc01vYmlsZSIsIlNhbXBsaW5nUHJvcGVydGllc1N0eWxlIiwic3R5bGVkIiwiZGl2Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUtBOztBQUNBOztB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RSxJQUFBLGtCQUFrQixFQUFFOUUsa0JBRHRCO0FBRUUsSUFBQSxRQUFRLEVBQUVaLFlBRlo7QUFHRSxJQUFBLE1BQU0sRUFBRWlCLE1BSFY7QUFJRSxJQUFBLFFBQVEsRUFBRVAsUUFKWjtBQUtFLElBQUEsY0FBYyxFQUFFdkIsY0FMbEI7QUFNRSxJQUFBLGlCQUFpQixFQUFFQyxpQkFOckI7QUFPRSxJQUFBLGtCQUFrQixFQUFFVSxrQkFQdEI7QUFRRSxJQUFBLG9CQUFvQixFQUFFb0UsZ0JBUnhCO0FBU0UsSUFBQSxVQUFVLEVBQUUxRDtBQVRkLElBaEJKLEVBNkJHSSxrQkFBa0IsSUFBSUYsUUFBdEIsaUJBQ0MsNkJBQUMsOENBQUQ7QUFDRSxJQUFBLGtCQUFrQixFQUFFRSxrQkFEdEI7QUFFRSxJQUFBLFFBQVEsRUFBRVosWUFGWjtBQUdFLElBQUEsUUFBUSxFQUFFVSxRQUhaO0FBSUUsSUFBQSxrQkFBa0IsRUFBRVosa0JBSnRCO0FBS0UsSUFBQSxTQUFTLEVBQUVILFNBTGI7QUFNRSxJQUFBLFdBQVcsRUFBRStCLFdBTmY7QUFPRSxJQUFBLGlCQUFpQixFQUFFbEMsaUJBUHJCO0FBUUUsSUFBQSxTQUFTLEVBQUVGLFNBUmI7QUFTRSxJQUFBLE1BQU0sRUFBRUQsTUFUVjtBQVVFLElBQUEsTUFBTSxFQUFFNEI7QUFWVixJQTlCSixDQURGLENBREYsQ0FERjtBQWtERCxDQS9QTTs7OztBQWlRUCxJQUFNMEUsdUJBQXVCLEdBQUdDLDBCQUFPQyxHQUFWO0FBQUE7QUFBQTtBQUFBLGtCQUN6QixDQUFDSCwyQkFBRCxHQUFZLGVBQVosR0FBOEIsRUFETCxFQUV6QixDQUFDQSwyQkFBRCxHQUFZLHFCQUFaLEdBQW9DLEVBRlgsQ0FBN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHJvcGVydGllcyBhbmQgQ2FuY2VsbGluZyBmb3Jtcy5cbiAqKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzL21hY3JvJztcbmltcG9ydCB7IEZvcm1pa0NvbmZpZyB9IGZyb20gJ2Zvcm1pay9kaXN0L3R5cGVzJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAncmVhY3QtZGV2aWNlLWRldGVjdCc7XG5pbXBvcnQgeyB1c2VGb3JtaWsgfSBmcm9tICdmb3JtaWsnO1xuaW1wb3J0IHsgdXNlSGlzdG9yeSwgdXNlUGFyYW1zIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuaW1wb3J0IExheW91dCBmcm9tICdzcmMvdWkta2l0L0xheW91dC9MYXlvdXQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnc3JjL3V0aWxpdGllcy9pMThuJztcbmltcG9ydCB1c2VRdWVyeVVSTCBmcm9tICdzcmMvaG9va3MvdXNlUXVlcnlVUkwnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJ3NyYy9jb21wb25lbnRzL1NwaW5uZXIvU3Bpbm5lcic7XG5pbXBvcnQgeyB1cmxzIH0gZnJvbSAnc3JjL3V0aWxpdGllcy91cmxzJztcblxuaW1wb3J0IHtcbiAgQ0FOQ0VMX1NBTVBMSU5HX09QLFxuICBDT0xMRUNUX1NBTVBMSU5HX09QLFxuICBTYW1wbGluZ0ZldGNoRGF0YSxcbn0gZnJvbSAnLi4vc2FtcGxpbmdzUGFnZVV0aWxzJztcbmltcG9ydCB7IFNhbXBsaW5nUHJvcGVydGllc0Zvcm0gfSBmcm9tICcuL1NhbXBsaW5nUHJvcGVydGllc0Zvcm0nO1xuaW1wb3J0IHsgU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZCB9IGZyb20gJy4vU2FtcGxpbmdQcm9wZXJ0aWVzSGVhZCc7XG5pbXBvcnQgeyBTYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlIH0gZnJvbSAnLi9TYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlJztcbmltcG9ydCB7XG4gIGNhbmNlbGxhdGlvblZhbGlkYXRpb25TY2hlbWEsXG4gIHByb3BlcnRpZXNWYWxpZGF0aW9uU2NoZW1hLFxuICBUU2FtcGxpbmdQcm9wZXJ0aWVzLFxuICBzYW1wbGluZ1Byb3BlcnR5LFxuICBGb3JtVHlwZSxcbn0gZnJvbSAnLi9zYW1wbGluZ1Byb3BlcnRpZXNVdGlscyc7XG5cbmV4cG9ydCBjb25zdCBTYW1wbGluZ1Byb3BlcnRpZXM6IEZDID0gKCkgPT4ge1xuICBjb25zdCBbY29sbGVjdGlvblRpbWUsIHNldENvbGxlY3Rpb25UaW1lXSA9IHVzZVN0YXRlPHN0cmluZyB8IERhdGUgfCBudWxsPihcbiAgICBtb21lbnQoRGF0ZS5ub3coKSkuZm9ybWF0KCdERC9NTS9ZWVlZIGhoOm1tJyksXG4gICk7XG4gIGNvbnN0IFtwaG90b3MsIHNldFBob3Rvc10gPSB1c2VTdGF0ZTxzdHJpbmcgfCBCbG9iIHwgYW55PihbXSk7XG4gIGNvbnN0IFtwaG90b3NUb0RlbGV0ZSwgc2V0UGhvdG9zVG9EZWxldGVdID0gdXNlU3RhdGU8bnVtYmVyW10+KFtdKTtcbiAgY29uc3QgW3NhdmluZ01zZywgc2V0U2F2aW5nTXNnXSA9IHVzZVN0YXRlPHN0cmluZz4oaTE4bi50KCdidXR0b25zLnNhdmUnKSk7XG4gIGNvbnN0IFtzYW1wbGluZ1VwZGF0ZWQsIHNldFNhbXBsaW5nVXBkYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzYW1wbGluZ1BsYW4sIHNldFNhbXBsaW5nUGxhbl0gPSB1c2VTdGF0ZTxcbiAgICBTYW1wbGluZ0ZldGNoRGF0YSB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhpc3RvcnkgPSB1c2VIaXN0b3J5KCk7XG4gIGNvbnN0IHF1ZXJ5ID0gdXNlUXVlcnlVUkwoKTtcblxuICBjb25zdCB1c2VySW5mbyA9IHVzZVNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUucGVybWlzc2lvbnMudXNlcl9pbmZvKTtcbiAgY29uc3QgZGF0ZUZvcm1hdCA9XG4gICAgdXNlckluZm8uZGF0ZV90aW1lX2Zvcm1hdCA9PT0gJ3VzJ1xuICAgICAgPyAnTU1NIGQsIHl5eXkgaGg6bW0gYWEnXG4gICAgICA6ICdkL01NL3l5eXkgSEg6bW0nO1xuICBjb25zdCBbcGFnZVR5cGUsIHNldFBhZ2VUeXBlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KCk7XG4gIGNvbnN0IFtzYW1wbGluZ1Byb3BlcnRpZXMsIHNldFNhbXBsaW5nUHJvcGVydGllc10gPVxuICAgIHVzZVN0YXRlPFRTYW1wbGluZ1Byb3BlcnRpZXM+KCk7XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPVxuICAgIHBhZ2VUeXBlID09PSAnY29sbGVjdCdcbiAgICAgID8gcHJvcGVydGllc1ZhbGlkYXRpb25TY2hlbWFcbiAgICAgIDogY2FuY2VsbGF0aW9uVmFsaWRhdGlvblNjaGVtYTtcblxuICBjb25zdCBmb3JtaWsgPSB1c2VGb3JtaWs8Rm9ybWlrQ29uZmlnPEZvcm1UeXBlPj4oe1xuICAgIGVuYWJsZVJlaW5pdGlhbGl6ZTogdHJ1ZSxcbiAgICBpbml0aWFsVmFsdWVzOiBzYW1wbGluZ1Byb3BlcnR5LFxuICAgIHZhbGlkYXRpb25TY2hlbWE6IHZhbGlkYXRpb25TY2hlbWEsXG4gICAgdmFsaWRhdGVPbkNoYW5nZTogZmFsc2UsXG4gICAgdmFsaWRhdGVPbkJsdXI6IHRydWUsXG4gICAgb25TdWJtaXQ6ICh2YWx1ZXMpID0+IHtcbiAgICAgIGhhbmRsZVN1Ym1pdCh2YWx1ZXMpO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xuICAgIGhpc3RvcnkuZ29CYWNrKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKHZhbHVlcykgPT4ge1xuICAgIHNldFNhdmluZ01zZyhpMThuLnQoJ2J1dHRvbnMuc2F2aW5nJykpO1xuICAgIHZhbHVlcy5waWN0dXJlc19hdHRyaWJ1dGVzID0gcGhvdG9zO1xuICAgIGNvbnN0IHNhdmVGb3JtRGF0YSA9IGZvcm1EYXRhQnVpbGRlcih2YWx1ZXMpO1xuICAgIHVwZGF0ZU9yQ3JlYXRlKHNhdmVGb3JtRGF0YSk7XG4gIH07XG5cbiAgY29uc3Qgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0ID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udCgnYnV0dG9ucy5zYXZlJykpO1xuICAgIH0sIDMwMDApO1xuICB9O1xuXG4gIGNvbnN0IGZvcm1EYXRhQnVpbGRlciA9ICh2YWx1ZXMpID0+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlcykge1xuICAgICAgaWYgKGtleSAhPT0gJ3BpY3R1cmVzX2F0dHJpYnV0ZXMnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2tleV0gPT09IG51bGwgPyAnJyA6IHZhbHVlc1trZXldO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoYHNhbXBsaW5nWyR7a2V5fV1gLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCB1bmlxdWVQaG90b3NUb0RlbGV0ZSA9IFsuLi5uZXcgU2V0KHBob3Rvc1RvRGVsZXRlKV07XG4gICAgdW5pcXVlUGhvdG9zVG9EZWxldGUubGVuZ3RoICE9PSAwICYmXG4gICAgICB1bmlxdWVQaG90b3NUb0RlbGV0ZS5mb3JFYWNoKChpZCwgaW5kZXgpID0+IHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgIGBzYW1wbGluZ1twaWN0dXJlc19hdHRyaWJ1dGVzXVske2luZGV4fV1baWRdYCxcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShpZCksXG4gICAgICAgICk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICBgc2FtcGxpbmdbcGljdHVyZXNfYXR0cmlidXRlc11bJHtpbmRleH1dW19kZXN0cm95XWAsXG4gICAgICAgICAgJ3RydWUnLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZU9yQ3JlYXRlID0gKGZvcm1EYXRhKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlT3JDcmVhdGVTdWNjZXNzID0gKG1zZykgPT4ge1xuICAgICAgc2V0U2F2aW5nTXNnKGkxOG4udChtc2cpKTtcbiAgICAgIHNldFNhbXBsaW5nVXBkYXRlZCh0cnVlKTtcbiAgICAgIHNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCgpO1xuICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICB9O1xuXG4gICAgaWYgKHNhbXBsaW5nUHJvcGVydGllcz8uc2FtcGxpbmc/LmlkID09PSBudWxsKSB7XG4gICAgICAvLyBjcmVhdGVcbiAgICAgIGZvcm1EYXRhLmFwcGVuZChgc2FtcGxpbmdbZGF0ZV1gLCBjb2xsZWN0aW9uVGltZSk7XG4gICAgICBheGlvc1xuICAgICAgICAucG9zdCh1cmxzKCkuc2FtcGxpbmdQcm9wZXJ0aWVzLmNyZWF0ZVNhbXBsaW5nLnVybCwgZm9ybURhdGEpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB1cGRhdGVPckNyZWF0ZVN1Y2Nlc3MoJ2J1dHRvbnMuY3JlYXRlZCcpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHNldFNhdmluZ01zZyhpMThuLnQoJ2J1dHRvbnMuZXJyb3InKSk7XG4gICAgICAgICAgc2V0T3JpZ2luYWxTYXZlTWVzc2FnZVdpdGhUaW1lb3V0KCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGVcbiAgICAgIGF4aW9zXG4gICAgICAgIC5wdXQoXG4gICAgICAgICAgdXJscyh7IHNhbXBsaW5nSWQ6IHNhbXBsaW5nUHJvcGVydGllcz8uc2FtcGxpbmc/LmlkIH0pXG4gICAgICAgICAgICAuc2FtcGxpbmdQcm9wZXJ0aWVzLnVwZGF0ZVNhbXBsaW5nLnVybCxcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlT3JDcmVhdGVTdWNjZXNzKCdidXR0b25zLnVwZGF0ZWQnKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICBzZXRTYXZpbmdNc2coaTE4bi50KCdidXR0b25zLmVycm9yJykpO1xuICAgICAgICAgIHNldE9yaWdpbmFsU2F2ZU1lc3NhZ2VXaXRoVGltZW91dCgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGV0ZWN0UGFnZVR5cGUgPSAoc2FtcGxpbmdQcm9wZXJ0aWVzLCBjb2xsZWN0aW9uVGltZVNlcnZlciwgb3ApID0+IHtcbiAgICBsZXQgX3BhZ2VUeXBlO1xuICAgIGlmIChvcCA9PT0gJ2VkaXQnKSB7XG4gICAgICBfcGFnZVR5cGUgPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuaXNfY2FuY2VsZWRcbiAgICAgICAgPyAnY2FuY2VsJ1xuICAgICAgICA6ICdjb2xsZWN0JztcbiAgICAgIGlmIChjb2xsZWN0aW9uVGltZVNlcnZlcikge1xuICAgICAgICBzZXRDb2xsZWN0aW9uVGltZShuZXcgRGF0ZShjb2xsZWN0aW9uVGltZVNlcnZlcikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29sbGVjdGlvblRpbWUobmV3IERhdGUoKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcCA9PT0gQ09MTEVDVF9TQU1QTElOR19PUCkge1xuICAgICAgc2V0Q29sbGVjdGlvblRpbWUobmV3IERhdGUoKSk7XG4gICAgICBfcGFnZVR5cGUgPSAnY29sbGVjdCc7XG4gICAgfSBlbHNlIGlmIChvcCA9PT0gQ0FOQ0VMX1NBTVBMSU5HX09QKSB7XG4gICAgICBzZXRDb2xsZWN0aW9uVGltZShuZXcgRGF0ZShjb2xsZWN0aW9uVGltZVNlcnZlcikpO1xuICAgICAgX3BhZ2VUeXBlID0gJ2NhbmNlbCc7XG4gICAgfVxuICAgIHJldHVybiBfcGFnZVR5cGU7XG4gIH07XG5cbiAgY29uc3QgaXNQcm9wZXJ0aWVzUGFnZSA9IHBhZ2VUeXBlID09PSAnZWRpdCc7XG5cbiAgY29uc3QgeyBzYW1wbGVJZCB9ID0gdXNlUGFyYW1zKCk7XG5cbiAgY29uc3QgZmV0Y2hTYW1wbGluZ1Byb3BlcnRpZXMgPSAoc2FtcGxpbmdJZCA9IHNhbXBsZUlkLCBvcCkgPT4ge1xuICAgIGF4aW9zXG4gICAgICAuZ2V0KFxuICAgICAgICB1cmxzKHsgc2FtcGxpbmdJZDogc2FtcGxpbmdJZCB9KS5zYW1wbGluZ1Byb3BlcnRpZXMuZmV0Y2hTYW1wbGluZy51cmwsXG4gICAgICApXG4gICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbXBsaW5nUmVzID0gcmVzLmRhdGE7XG4gICAgICAgIGNvbnN0IHNhbXBsaW5nUHJvcGVydGllcyA9IHNhbXBsaW5nUmVzLnNhbXBsaW5nX3Byb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25UaW1lU2VydmVyID1cbiAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmcuY29sbGVjdGlvbl90aW1lO1xuXG4gICAgICAgIGNvbnN0IF9wYWdlVHlwZSA9IGRldGVjdFBhZ2VUeXBlKFxuICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcyxcbiAgICAgICAgICBjb2xsZWN0aW9uVGltZVNlcnZlcixcbiAgICAgICAgICBvcCxcbiAgICAgICAgKTtcbiAgICAgICAgc2V0UGFnZVR5cGUoX3BhZ2VUeXBlKTtcblxuICAgICAgICBjb25zdCBpc0NhbmNlbGVkID1cbiAgICAgICAgICBfcGFnZVR5cGUgPT09ICdjYW5jZWwnXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogX3BhZ2VUeXBlID09PSAnY29sbGVjdCdcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmlzX2NhbmNlbGVkIHx8IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHBhZ2VDb2xsZWN0aW9uVGltZSA9XG4gICAgICAgICAgX3BhZ2VUeXBlID09PSAnY29sbGVjdCdcbiAgICAgICAgICAgID8gY29sbGVjdGlvblRpbWVcbiAgICAgICAgICAgIDogc2FtcGxpbmdQcm9wZXJ0aWVzLnNhbXBsaW5nLmNvbGxlY3Rpb25fdGltZTtcblxuICAgICAgICBjb25zdCBzYW0gPSBzYW1wbGluZ1Byb3BlcnRpZXMuc2FtcGxpbmc7XG4gICAgICAgIGZvcm1pay5zZXRWYWx1ZXMoe1xuICAgICAgICAgIGxhYl9pZDogc2FtLmxhYl9pZCxcbiAgICAgICAgICBjb2xsZWN0aW9uX3RpbWU6IHBhZ2VDb2xsZWN0aW9uVGltZSxcbiAgICAgICAgICBwdW1wX3NhbXBsaW5nX3ZvbHVtZTogc2FtLnB1bXBfc2FtcGxpbmdfdm9sdW1lLFxuICAgICAgICAgIHB1bXBfYmF0dGVyeV9sZXZlbDogc2FtLnB1bXBfYmF0dGVyeV9sZXZlbCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogc2FtLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGthbmRvX3JlcDogc2FtLmthbmRvX3JlcCxcbiAgICAgICAgICBzYW1wbGluZ19wbGFuX2lkOiBzYW0uc2FtcGxpbmdfcGxhbl9pZCxcbiAgICAgICAgICBjYW5jZWxsYXRpb25fcmVhc29uOiBzYW0uY2FuY2VsbGF0aW9uX3JlYXNvbiB8fCAnJyxcbiAgICAgICAgICBpc19jYW5jZWxlZDogaXNDYW5jZWxlZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFNhbXBsaW5nUHJvcGVydGllcyhzYW1wbGluZ1Byb3BlcnRpZXMpO1xuICAgICAgICBzZXRTYW1wbGluZ1BsYW4oc2FtcGxpbmdSZXMuc2FtcGxpbmdfcGxhbik7XG4gICAgICB9KTtcbiAgfTtcblxuICBjb25zdCBnZXRVcmxRdWVyeU9wID0gKCkgPT4ge1xuICAgIGxldCBvcCA9IHF1ZXJ5LmdldCgnb3AnKTtcbiAgICAvLyBpZiBub3QgcHJlc2VudCB0aGVuIGRlZmF1bHQgb3AgaXMgJ2NvbGxlY3RpbmcnXG4gICAgaWYgKFt1bmRlZmluZWQsIG51bGwsICcnXS5pbmNsdWRlcyhvcCkpIHtcbiAgICAgIHJldHVybiBDT0xMRUNUX1NBTVBMSU5HX09QO1xuICAgIH1cbiAgICByZXR1cm4gb3A7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaFNhbXBsaW5nUHJvcGVydGllcyhzYW1wbGVJZCwgZ2V0VXJsUXVlcnlPcCgpKTtcbiAgfSwgW3NhbXBsaW5nVXBkYXRlZF0pO1xuXG4gIGlmICghc2FtcGxpbmdQbGFuIHx8ICFzYW1wbGluZ1Byb3BlcnRpZXMpIHtcbiAgICByZXR1cm4gPFNwaW5uZXIgLz47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxmb3JtIG9uU3VibWl0PXtmb3JtaWsuaGFuZGxlU3VibWl0fT5cbiAgICAgIDxMYXlvdXQ+XG4gICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNTdHlsZT5cbiAgICAgICAgICB7IWlzTW9iaWxlICYmIChcbiAgICAgICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNIZWFkXG4gICAgICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcz17c2FtcGxpbmdQcm9wZXJ0aWVzfVxuICAgICAgICAgICAgICBzYW1wbGluZz17c2FtcGxpbmdQbGFufVxuICAgICAgICAgICAgICBmb3JtaWs9e2Zvcm1pa31cbiAgICAgICAgICAgICAgcGFnZVR5cGU9e3BhZ2VUeXBlfVxuICAgICAgICAgICAgICBjb2xsZWN0aW9uRGF0ZT17Y29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldENvbGxlY3Rpb25EYXRlPXtzZXRDb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkPXtzZXRTYW1wbGluZ1VwZGF0ZWR9XG4gICAgICAgICAgICAgIGlzRGF0ZVBpY2tlckRpc2FibGVkPXtpc1Byb3BlcnRpZXNQYWdlfVxuICAgICAgICAgICAgICBkYXRlRm9ybWF0PXtkYXRlRm9ybWF0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgICAgIDxTYW1wbGluZ1Byb3BlcnRpZXNIZWFkTW9iaWxlXG4gICAgICAgICAgICAgIHNhbXBsaW5nUHJvcGVydGllcz17c2FtcGxpbmdQcm9wZXJ0aWVzfVxuICAgICAgICAgICAgICBzYW1wbGluZz17c2FtcGxpbmdQbGFufVxuICAgICAgICAgICAgICBmb3JtaWs9e2Zvcm1pa31cbiAgICAgICAgICAgICAgcGFnZVR5cGU9e3BhZ2VUeXBlfVxuICAgICAgICAgICAgICBjb2xsZWN0aW9uRGF0ZT17Y29sbGVjdGlvblRpbWV9XG4gICAgICAgICAgICAgIHNldENvbGxlY3Rpb25EYXRlPXtzZXRDb2xsZWN0aW9uVGltZX1cbiAgICAgICAgICAgICAgc2V0U2FtcGxpbmdVcGRhdGVkPXtzZXRTYW1wbGluZ1VwZGF0ZWR9XG4gICAgICAgICAgICAgIGlzRGF0ZVBpY2tlckRpc2FibGVkPXtpc1Byb3BlcnRpZXNQYWdlfVxuICAgICAgICAgICAgICBkYXRlRm9ybWF0PXtkYXRlRm9ybWF0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge3NhbXBsaW5nUHJvcGVydGllcyAmJiBwYWdlVHlwZSAmJiAoXG4gICAgICAgICAgICA8U2FtcGxpbmdQcm9wZXJ0aWVzRm9ybVxuICAgICAgICAgICAgICBzYW1wbGluZ1Byb3BlcnRpZXM9e3NhbXBsaW5nUHJvcGVydGllc31cbiAgICAgICAgICAgICAgc2FtcGxpbmc9e3NhbXBsaW5nUGxhbn1cbiAgICAgICAgICAgICAgcGFnZVR5cGU9e3BhZ2VUeXBlfVxuICAgICAgICAgICAgICBzZXRTYW1wbGluZ1VwZGF0ZWQ9e3NldFNhbXBsaW5nVXBkYXRlZH1cbiAgICAgICAgICAgICAgc2F2aW5nTXNnPXtzYXZpbmdNc2d9XG4gICAgICAgICAgICAgIGhhbmRsZUNsb3NlPXtoYW5kbGVDbG9zZX1cbiAgICAgICAgICAgICAgc2V0UGhvdG9zVG9EZWxldGU9e3NldFBob3Rvc1RvRGVsZXRlfVxuICAgICAgICAgICAgICBzZXRQaG90b3M9e3NldFBob3Rvc31cbiAgICAgICAgICAgICAgcGhvdG9zPXtwaG90b3N9XG4gICAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NhbXBsaW5nUHJvcGVydGllc1N0eWxlPlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9mb3JtPlxuICApO1xufTtcblxuY29uc3QgU2FtcGxpbmdQcm9wZXJ0aWVzU3R5bGUgPSBzdHlsZWQuZGl2YFxuICAkeyFpc01vYmlsZSA/ICd3aWR0aDogODMwcHg7JyA6ICcnfVxuICAkeyFpc01vYmlsZSA/ICdtYXJnaW46IDEwMHB4IGF1dG87JyA6ICcnfVxuYDtcbiJdfQ==
|