single-scripture-rcl 3.3.1 → 3.3.2-beta
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.
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import "core-js/modules/es.array.concat.js";
|
|
2
|
+
import "core-js/modules/es.array.find-index.js";
|
|
2
3
|
import "core-js/modules/es.array.includes.js";
|
|
3
4
|
import "core-js/modules/es.array.is-array.js";
|
|
5
|
+
import "core-js/modules/es.array.join.js";
|
|
4
6
|
import "core-js/modules/es.array.map.js";
|
|
5
|
-
import "core-js/modules/es.
|
|
7
|
+
import "core-js/modules/es.object.keys.js";
|
|
8
|
+
import "core-js/modules/es.regexp.exec.js";
|
|
6
9
|
import "core-js/modules/es.string.includes.js";
|
|
10
|
+
import "core-js/modules/es.string.split.js";
|
|
7
11
|
import "regenerator-runtime/runtime.js";
|
|
8
12
|
|
|
9
|
-
function
|
|
10
|
-
|
|
11
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
12
|
-
|
|
13
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
|
|
14
|
-
|
|
15
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
13
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
16
14
|
|
|
17
15
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
18
16
|
|
|
@@ -40,44 +38,25 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
40
38
|
|
|
41
39
|
import * as React from 'react';
|
|
42
40
|
import * as PropTypes from 'prop-types';
|
|
43
|
-
import {
|
|
41
|
+
import { core } from 'scripture-resources-rcl';
|
|
42
|
+
import usfmjs from 'usfm-js';
|
|
43
|
+
import { useEdit } from 'gitea-react-toolkit';
|
|
44
44
|
import { Card, useCardState, useUserBranch, ERROR_STATE, MANIFEST_NOT_LOADED_ERROR } from 'translation-helps-rcl';
|
|
45
|
-
import {
|
|
46
|
-
import
|
|
47
|
-
import CancelOutlinedIcon from '@mui/icons-material/CancelOutlined';
|
|
48
|
-
import { IconButton } from '@mui/material';
|
|
45
|
+
import { AlignmentHelpers, UsfmFileConversionHelpers } from 'word-aligner-rcl';
|
|
46
|
+
import * as isEqual from 'deep-equal';
|
|
49
47
|
import { ScripturePane, ScriptureSelector } from '..';
|
|
50
48
|
import { useScriptureSettings } from '../../hooks/useScriptureSettings';
|
|
51
|
-
import {
|
|
49
|
+
import { getResourceLink, getResourceMessage, getScriptureVersionSettings, isOriginalBible } from '../../utils/ScriptureSettings';
|
|
52
50
|
import { Title } from '../ScripturePane/styled';
|
|
53
51
|
import { NT_ORIG_LANG, ORIGINAL_SOURCE, OT_ORIG_LANG } from '../../utils';
|
|
54
|
-
import { useScriptureAlignmentEdit } from '../../hooks/useScriptureAlignmentEdit';
|
|
55
52
|
var KEY_FONT_SIZE_BASE = 'scripturePaneFontSize_';
|
|
56
53
|
var label = 'Version';
|
|
57
54
|
var style = {
|
|
58
55
|
marginTop: '16px',
|
|
59
56
|
width: '500px'
|
|
60
57
|
};
|
|
61
|
-
|
|
62
|
-
function initializeVerseNumber(verse) {
|
|
63
|
-
var initialVerse = verse;
|
|
64
|
-
|
|
65
|
-
if (typeof verse === 'string' && verse.includes('-')) {
|
|
66
|
-
initialVerse = parseInt(verse.charAt(0));
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return initialVerse;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function getVerseObjectsForVerse(scriptureConfig, currentVerseNum) {
|
|
73
|
-
var _currentVerseData$ver;
|
|
74
|
-
|
|
75
|
-
var currentVerseData = getVerseDataFromScripConfig(scriptureConfig, currentVerseNum) || null;
|
|
76
|
-
return (currentVerseData === null || currentVerseData === void 0 ? void 0 : (_currentVerseData$ver = currentVerseData.verseData) === null || _currentVerseData$ver === void 0 ? void 0 : _currentVerseData$ver.verseObjects) || null;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
58
|
export default function ScriptureCard(_ref) {
|
|
80
|
-
var _scriptureConfig$reso, _scriptureConfig$reso2, _scriptureConfig$
|
|
59
|
+
var _scriptureConfig$reso, _scriptureConfig$reso2, _scriptureConfig$reso3, _scriptureConfig$reso4, _scriptureConfig$reso6, _scriptureConfig$reso7, _scriptureConfig$reso8, _httpConfig, _httpConfig2;
|
|
81
60
|
|
|
82
61
|
var id = _ref.id,
|
|
83
62
|
isNT = _ref.isNT,
|
|
@@ -111,22 +90,33 @@ export default function ScriptureCard(_ref) {
|
|
|
111
90
|
authentication = _ref.authentication,
|
|
112
91
|
setSavedChanges = _ref.setSavedChanges,
|
|
113
92
|
bookIndex = _ref.bookIndex,
|
|
114
|
-
addVerseRange = _ref.addVerseRange
|
|
93
|
+
addVerseRange = _ref.addVerseRange,
|
|
94
|
+
setWordAlignerStatus = _ref.setWordAlignerStatus;
|
|
115
95
|
|
|
116
96
|
var _React$useState = React.useState({
|
|
117
|
-
|
|
97
|
+
haveUnsavedChanges: false,
|
|
118
98
|
ref: appRef,
|
|
99
|
+
saveContent: null,
|
|
100
|
+
sha: null,
|
|
101
|
+
startSave: false,
|
|
119
102
|
urlError: null,
|
|
120
|
-
usingUserBranch: false
|
|
103
|
+
usingUserBranch: false,
|
|
104
|
+
unsavedChangesList: {},
|
|
105
|
+
versesForRef: null
|
|
121
106
|
}),
|
|
122
107
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
123
108
|
state = _React$useState2[0],
|
|
124
109
|
setState_ = _React$useState2[1];
|
|
125
110
|
|
|
126
|
-
var
|
|
127
|
-
|
|
111
|
+
var ref = state.ref,
|
|
112
|
+
saveContent = state.saveContent,
|
|
113
|
+
sha = state.sha,
|
|
114
|
+
startSave = state.startSave,
|
|
128
115
|
urlError = state.urlError,
|
|
129
|
-
usingUserBranch = state.usingUserBranch
|
|
116
|
+
usingUserBranch = state.usingUserBranch,
|
|
117
|
+
unsavedChangesList = state.unsavedChangesList,
|
|
118
|
+
haveUnsavedChanges = state.haveUnsavedChanges,
|
|
119
|
+
versesForRef = state.versesForRef;
|
|
130
120
|
|
|
131
121
|
var _useUserLocalStorage = useUserLocalStorage(KEY_FONT_SIZE_BASE + cardNum, 100),
|
|
132
122
|
_useUserLocalStorage2 = _slicedToArray(_useUserLocalStorage, 2),
|
|
@@ -181,11 +171,28 @@ export default function ScriptureCard(_ref) {
|
|
|
181
171
|
scriptureSettings = _useScriptureSettings.scriptureSettings,
|
|
182
172
|
scriptureVersionHist = _useScriptureSettings.scriptureVersionHist;
|
|
183
173
|
|
|
184
|
-
var
|
|
174
|
+
var fetchResp_ = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.fetchResponse; // @ts-ignore
|
|
175
|
+
|
|
176
|
+
var repo = "".concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso = scriptureConfig.resource) === null || _scriptureConfig$reso === void 0 ? void 0 : _scriptureConfig$reso.languageId, "_").concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso2 = scriptureConfig.resource) === null || _scriptureConfig$reso2 === void 0 ? void 0 : _scriptureConfig$reso2.projectId);
|
|
177
|
+
var reference_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.reference) || null;
|
|
178
|
+
React.useEffect(function () {
|
|
179
|
+
var _fetchResp_$data;
|
|
180
|
+
|
|
181
|
+
// get the _sha from last scripture download
|
|
182
|
+
var _sha = (fetchResp_ === null || fetchResp_ === void 0 ? void 0 : (_fetchResp_$data = fetchResp_.data) === null || _fetchResp_$data === void 0 ? void 0 : _fetchResp_$data.sha) || null;
|
|
185
183
|
|
|
186
|
-
|
|
184
|
+
console.log("for ".concat(JSON.stringify(reference_), " new sha is ").concat(_sha));
|
|
187
185
|
|
|
188
|
-
|
|
186
|
+
if (_sha !== sha) {
|
|
187
|
+
setState({
|
|
188
|
+
sha: _sha
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}, [fetchResp_]); // @ts-ignore
|
|
192
|
+
|
|
193
|
+
var cardResourceId = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso3 = scriptureConfig.resource) === null || _scriptureConfig$reso3 === void 0 ? void 0 : _scriptureConfig$reso3.projectId) || resourceId; // @ts-ignore
|
|
194
|
+
|
|
195
|
+
var ref_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso4 = scriptureConfig.resource) === null || _scriptureConfig$reso4 === void 0 ? void 0 : _scriptureConfig$reso4.ref) || appRef;
|
|
189
196
|
var canUseEditBranch = loggedInUser && authentication && resourceId !== ORIGINAL_SOURCE && (ref_ === 'master' || ref_.substring(0, loggedInUser.length) === loggedInUser); // not tag
|
|
190
197
|
|
|
191
198
|
var _useUserBranch = useUserBranch({
|
|
@@ -206,11 +213,6 @@ export default function ScriptureCard(_ref) {
|
|
|
206
213
|
startEditBranch = _useUserBranch.actions.startEdit;
|
|
207
214
|
|
|
208
215
|
var workingRef = canUseEditBranch ? workingResourceBranch : appRef;
|
|
209
|
-
var reference_ = {
|
|
210
|
-
bookId: bookId,
|
|
211
|
-
chapter: chapter,
|
|
212
|
-
verse: verse
|
|
213
|
-
};
|
|
214
216
|
var scriptureTitle;
|
|
215
217
|
React.useEffect(function () {
|
|
216
218
|
// select correct working ref - could be master, user branch, or release
|
|
@@ -231,10 +233,10 @@ export default function ScriptureCard(_ref) {
|
|
|
231
233
|
}
|
|
232
234
|
}, [workingRef, ref, appRef]);
|
|
233
235
|
React.useEffect(function () {
|
|
234
|
-
var _scriptureConfig$
|
|
236
|
+
var _scriptureConfig$reso5;
|
|
235
237
|
|
|
236
238
|
// update display status if error
|
|
237
|
-
var error = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$
|
|
239
|
+
var error = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso5 = scriptureConfig.resourceStatus) === null || _scriptureConfig$reso5 === void 0 ? void 0 : _scriptureConfig$reso5[ERROR_STATE];
|
|
238
240
|
|
|
239
241
|
if (error) {
|
|
240
242
|
// if error was found do callback
|
|
@@ -246,7 +248,7 @@ export default function ScriptureCard(_ref) {
|
|
|
246
248
|
var isAccessError = resourceStatus[MANIFEST_NOT_LOADED_ERROR];
|
|
247
249
|
onResourceError && onResourceError(message, isAccessError, resourceStatus);
|
|
248
250
|
}
|
|
249
|
-
}, [scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$
|
|
251
|
+
}, [scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso6 = scriptureConfig.resourceStatus) === null || _scriptureConfig$reso6 === void 0 ? void 0 : _scriptureConfig$reso6[ERROR_STATE]]);
|
|
250
252
|
|
|
251
253
|
if (scriptureConfig.title && scriptureConfig.version) {
|
|
252
254
|
scriptureTitle = "".concat(scriptureConfig.title, " v").concat(scriptureConfig.version);
|
|
@@ -278,7 +280,7 @@ export default function ScriptureCard(_ref) {
|
|
|
278
280
|
} // @ts-ignore
|
|
279
281
|
|
|
280
282
|
|
|
281
|
-
var languageId_ = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$
|
|
283
|
+
var languageId_ = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso7 = scriptureConfig.resource) === null || _scriptureConfig$reso7 === void 0 ? void 0 : _scriptureConfig$reso7.languageId;
|
|
282
284
|
var language = getLanguage({
|
|
283
285
|
languageId: languageId_
|
|
284
286
|
});
|
|
@@ -290,12 +292,6 @@ export default function ScriptureCard(_ref) {
|
|
|
290
292
|
var fontFactor = isHebrew ? 1.4 : 1; // we automatically scale up font size for Hebrew
|
|
291
293
|
|
|
292
294
|
var scaledFontSize = fontSize * fontFactor;
|
|
293
|
-
|
|
294
|
-
if (scriptureConfig.matchedVerse) {
|
|
295
|
-
// support verse ranges
|
|
296
|
-
reference.verse = scriptureConfig.matchedVerse;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
295
|
var items = null;
|
|
300
296
|
|
|
301
297
|
var _useCardState = useCardState({
|
|
@@ -325,7 +321,7 @@ export default function ScriptureCard(_ref) {
|
|
|
325
321
|
}, [scaledFontSize]);
|
|
326
322
|
var scriptureLabel = /*#__PURE__*/React.createElement(Title, null, scriptureTitle);
|
|
327
323
|
var disableWordPopover_ = disableWordPopover;
|
|
328
|
-
var usingOriginalBible = isOriginalBible((_scriptureConfig$
|
|
324
|
+
var usingOriginalBible = isOriginalBible((_scriptureConfig$reso8 = scriptureConfig['resource']) === null || _scriptureConfig$reso8 === void 0 ? void 0 : _scriptureConfig$reso8.projectId);
|
|
329
325
|
|
|
330
326
|
if (disableWordPopover === undefined) {
|
|
331
327
|
// if not specified, then determine if original language resource
|
|
@@ -336,19 +332,39 @@ export default function ScriptureCard(_ref) {
|
|
|
336
332
|
// pre-cache glosses on verse change
|
|
337
333
|
var fetchGlossDataForVerse = /*#__PURE__*/function () {
|
|
338
334
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
335
|
+
var _verseObjects2;
|
|
336
|
+
|
|
337
|
+
var verseObjects, _iterator, _step, _verseRef$verseData, verseRef, _verseObjects;
|
|
338
|
+
|
|
339
339
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
340
340
|
while (1) {
|
|
341
341
|
switch (_context.prev = _context.next) {
|
|
342
342
|
case 0:
|
|
343
|
-
|
|
344
|
-
|
|
343
|
+
verseObjects = []; // get verse objects of all the verses
|
|
344
|
+
|
|
345
|
+
_iterator = _createForOfIteratorHelper((scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef) || []);
|
|
346
|
+
|
|
347
|
+
try {
|
|
348
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
349
|
+
verseRef = _step.value;
|
|
350
|
+
_verseObjects = verseRef === null || verseRef === void 0 ? void 0 : (_verseRef$verseData = verseRef.verseData) === null || _verseRef$verseData === void 0 ? void 0 : _verseRef$verseData.verseObjects;
|
|
351
|
+
verseObjects = verseObjects.concat(_verseObjects);
|
|
352
|
+
}
|
|
353
|
+
} catch (err) {
|
|
354
|
+
_iterator.e(err);
|
|
355
|
+
} finally {
|
|
356
|
+
_iterator.f();
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
if (!(!disableWordPopover && (_verseObjects2 = verseObjects) !== null && _verseObjects2 !== void 0 && _verseObjects2.length && fetchGlossesForVerse)) {
|
|
360
|
+
_context.next = 6;
|
|
345
361
|
break;
|
|
346
362
|
}
|
|
347
363
|
|
|
348
|
-
_context.next =
|
|
349
|
-
return fetchGlossesForVerse(
|
|
364
|
+
_context.next = 6;
|
|
365
|
+
return fetchGlossesForVerse(verseObjects, languageId_);
|
|
350
366
|
|
|
351
|
-
case
|
|
367
|
+
case 6:
|
|
352
368
|
case "end":
|
|
353
369
|
return _context.stop();
|
|
354
370
|
}
|
|
@@ -361,118 +377,358 @@ export default function ScriptureCard(_ref) {
|
|
|
361
377
|
};
|
|
362
378
|
}();
|
|
363
379
|
|
|
364
|
-
|
|
365
|
-
|
|
380
|
+
if (usingOriginalBible) {
|
|
381
|
+
fetchGlossDataForVerse();
|
|
382
|
+
}
|
|
383
|
+
}, [versesForRef, languageId_]);
|
|
366
384
|
var enableEdit = !usingOriginalBible;
|
|
367
385
|
var enableAlignment = !usingOriginalBible;
|
|
368
386
|
var originalRepoUrl = isNewTestament ? greekRepoUrl : hebrewRepoUrl;
|
|
369
|
-
|
|
370
|
-
var _useScriptureAlignmen = useScriptureAlignmentEdit({
|
|
387
|
+
var scriptureAlignmentEditConfig = {
|
|
371
388
|
authentication: canUseEditBranch ? authentication : null,
|
|
389
|
+
bookIndex: bookIndex,
|
|
390
|
+
currentVerseRef: reference,
|
|
372
391
|
enableEdit: enableEdit,
|
|
373
392
|
enableAlignment: enableAlignment,
|
|
374
393
|
httpConfig: httpConfig,
|
|
375
|
-
initialVerseObjects: currentVerseObjects,
|
|
376
|
-
isNewTestament: isNewTestament,
|
|
377
394
|
// @ts-ignore
|
|
395
|
+
isNewTestament: isNewTestament,
|
|
378
396
|
loggedInUser: canUseEditBranch ? loggedInUser : null,
|
|
379
397
|
originalLanguageOwner: originalLanguageOwner,
|
|
380
|
-
originalRepoUrl: originalRepoUrl,
|
|
381
398
|
// @ts-ignore
|
|
399
|
+
originalRepoUrl: originalRepoUrl,
|
|
382
400
|
scriptureConfig: scriptureConfig,
|
|
383
401
|
scriptureSettings: scriptureSettings,
|
|
384
402
|
startEditBranch: startEditBranch,
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
403
|
+
setSavedChanges: _setSavedChanges,
|
|
404
|
+
sourceLanguage: isNT_ ? NT_ORIG_LANG : OT_ORIG_LANG,
|
|
405
|
+
targetLanguage: language,
|
|
406
|
+
title: scriptureTitle,
|
|
407
|
+
workingResourceBranch: ref
|
|
408
|
+
};
|
|
409
|
+
/**
|
|
410
|
+
* this gets called whenever a scripture pane has a change in save state
|
|
411
|
+
* @param {number} currentIndex
|
|
412
|
+
* @param {boolean} saved
|
|
413
|
+
* @param {function} getChanges - will be called whenever user clicks save button
|
|
414
|
+
* @param {function} clearChanges - will be called whenever save has completed
|
|
415
|
+
*/
|
|
416
|
+
|
|
417
|
+
function _setSavedChanges(currentIndex, saved) {
|
|
418
|
+
var getChanges = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
419
|
+
var clearChanges = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
|
420
|
+
|
|
421
|
+
var _unsavedChangesList = _objectSpread({}, unsavedChangesList);
|
|
422
|
+
|
|
423
|
+
if (saved) {
|
|
424
|
+
if (_unsavedChangesList.hasOwnProperty(currentIndex)) {
|
|
425
|
+
delete _unsavedChangesList[currentIndex];
|
|
426
|
+
}
|
|
427
|
+
} else {
|
|
428
|
+
if (!_unsavedChangesList.hasOwnProperty(currentIndex)) {
|
|
429
|
+
_unsavedChangesList[currentIndex] = {
|
|
430
|
+
getChanges: getChanges,
|
|
431
|
+
clearChanges: clearChanges
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
var _haveUnsavedChanges = !!Object.keys(_unsavedChangesList).length;
|
|
437
|
+
|
|
438
|
+
if (haveUnsavedChanges != _haveUnsavedChanges) {
|
|
439
|
+
setSavedChanges && setSavedChanges(resourceId, !_haveUnsavedChanges);
|
|
440
|
+
setState({
|
|
441
|
+
haveUnsavedChanges: _haveUnsavedChanges
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
if (!isEqual(_unsavedChangesList, unsavedChangesList)) {
|
|
446
|
+
setState({
|
|
447
|
+
unsavedChangesList: _unsavedChangesList
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* search chapter or verse chunk to line that starts with findItem
|
|
453
|
+
* @param {number|string} findItem
|
|
454
|
+
* @param {string[]} chunks
|
|
455
|
+
*/
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
function findRefInArray(findItem, chunks) {
|
|
459
|
+
var ref_ = findItem + '';
|
|
460
|
+
var refLen = ref_.length;
|
|
461
|
+
var index = chunks.findIndex(function (chunk, idx) {
|
|
462
|
+
if (idx > 0) {
|
|
463
|
+
if (chunk.substring(0, refLen) === ref_) {
|
|
464
|
+
var nextChar = chunk[ref_];
|
|
465
|
+
|
|
466
|
+
if (nextChar > '9' || nextChar < '0') {
|
|
467
|
+
return true;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
return false;
|
|
473
|
+
});
|
|
474
|
+
return index;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
function getBookName() {
|
|
478
|
+
var _scriptureConfig$refe;
|
|
479
|
+
|
|
480
|
+
var bookCaps = scriptureConfig !== null && scriptureConfig !== void 0 && (_scriptureConfig$refe = scriptureConfig.reference) !== null && _scriptureConfig$refe !== void 0 && _scriptureConfig$refe.projectId ? scriptureConfig.reference.projectId.toUpperCase() : '';
|
|
481
|
+
return "".concat(bookIndex, "-").concat(bookCaps, ".usfm");
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
var filepath = getBookName(); // keep track of verse edit state
|
|
485
|
+
|
|
486
|
+
var _useEdit = useEdit({
|
|
487
|
+
sha: sha,
|
|
488
|
+
owner: owner,
|
|
489
|
+
content: saveContent,
|
|
490
|
+
config: _objectSpread(_objectSpread({
|
|
491
|
+
cache: {
|
|
492
|
+
maxAge: 0
|
|
493
|
+
}
|
|
494
|
+
}, authentication === null || authentication === void 0 ? void 0 : authentication.config), {}, {
|
|
495
|
+
token: authentication === null || authentication === void 0 ? void 0 : authentication.token,
|
|
496
|
+
// @ts-ignore
|
|
497
|
+
timeout: ((_httpConfig = httpConfig) === null || _httpConfig === void 0 ? void 0 : _httpConfig.serverTimeOut) || ((_httpConfig2 = httpConfig) === null || _httpConfig2 === void 0 ? void 0 : _httpConfig2.timeout) || 5000
|
|
498
|
+
}),
|
|
499
|
+
author: loggedInUser,
|
|
500
|
+
token: authentication === null || authentication === void 0 ? void 0 : authentication.token,
|
|
501
|
+
branch: workingResourceBranch,
|
|
502
|
+
filepath: filepath,
|
|
503
|
+
repo: repo
|
|
388
504
|
}),
|
|
389
|
-
|
|
390
|
-
cancelAlignment = _useScriptureAlignmen2.cancelAlignment,
|
|
391
|
-
editedVerseObjects = _useScriptureAlignmen2.editedVerseObjects,
|
|
392
|
-
handleAlignmentClick = _useScriptureAlignmen2.handleAlignmentClick,
|
|
393
|
-
onAlignmentsChange = _useScriptureAlignmen2.onAlignmentsChange,
|
|
394
|
-
saveAlignment = _useScriptureAlignmen2.saveAlignment,
|
|
395
|
-
setEditing = _useScriptureAlignmen2.setEditing,
|
|
396
|
-
setVerseChanged = _useScriptureAlignmen2.setVerseChanged,
|
|
397
|
-
saveChangesToCloud = _useScriptureAlignmen2.saveChangesToCloud,
|
|
398
|
-
_useScriptureAlignmen3 = _useScriptureAlignmen.state,
|
|
399
|
-
aligned = _useScriptureAlignmen3.aligned,
|
|
400
|
-
alignerData = _useScriptureAlignmen3.alignerData,
|
|
401
|
-
editing = _useScriptureAlignmen3.editing,
|
|
402
|
-
unsavedChanges = _useScriptureAlignmen3.unsavedChanges;
|
|
505
|
+
onSaveEdit = _useEdit.onSaveEdit;
|
|
403
506
|
|
|
404
507
|
React.useEffect(function () {
|
|
405
|
-
//
|
|
406
|
-
var
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
508
|
+
// when startSave goes true, save edits to user branch and then clear startSave
|
|
509
|
+
var _saveEdit = /*#__PURE__*/function () {
|
|
510
|
+
var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
511
|
+
var branch;
|
|
512
|
+
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
513
|
+
while (1) {
|
|
514
|
+
switch (_context2.prev = _context2.next) {
|
|
515
|
+
case 0:
|
|
516
|
+
// begin uploading new USFM
|
|
517
|
+
branch = workingResourceBranch !== 'master' ? workingResourceBranch : undefined;
|
|
518
|
+
|
|
519
|
+
if (branch) {
|
|
520
|
+
_context2.next = 5;
|
|
521
|
+
break;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
_context2.next = 4;
|
|
525
|
+
return startEditBranch();
|
|
526
|
+
|
|
527
|
+
case 4:
|
|
528
|
+
branch = _context2.sent;
|
|
529
|
+
|
|
530
|
+
case 5:
|
|
531
|
+
_context2.next = 7;
|
|
532
|
+
return onSaveEdit(branch).then(function (success) {
|
|
533
|
+
// push changed to server
|
|
534
|
+
if (success) {
|
|
535
|
+
console.log("saveChangesToCloud() - save scripture edits success");
|
|
536
|
+
setState({
|
|
537
|
+
startSave: false
|
|
538
|
+
});
|
|
539
|
+
var unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
540
|
+
|
|
541
|
+
if (unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length) {
|
|
542
|
+
var _iterator2 = _createForOfIteratorHelper(unsavedCardIndices),
|
|
543
|
+
_step2;
|
|
544
|
+
|
|
545
|
+
try {
|
|
546
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
547
|
+
var cardIndex = _step2.value;
|
|
548
|
+
var clearChanges = unsavedChangesList[cardIndex].clearChanges;
|
|
549
|
+
clearChanges && clearChanges();
|
|
550
|
+
}
|
|
551
|
+
} catch (err) {
|
|
552
|
+
_iterator2.e(err);
|
|
553
|
+
} finally {
|
|
554
|
+
_iterator2.f();
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
console.info('saveChangesToCloud() - Reloading resource');
|
|
559
|
+
scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.reloadResource();
|
|
560
|
+
} else {
|
|
561
|
+
console.error('saveChangesToCloud() - saving changed scripture failed');
|
|
562
|
+
setState({
|
|
563
|
+
startSave: false
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
case 7:
|
|
569
|
+
case "end":
|
|
570
|
+
return _context2.stop();
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}, _callee2);
|
|
574
|
+
}));
|
|
575
|
+
|
|
576
|
+
return function _saveEdit() {
|
|
577
|
+
return _ref3.apply(this, arguments);
|
|
578
|
+
};
|
|
579
|
+
}();
|
|
415
580
|
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
581
|
+
if (startSave) {
|
|
582
|
+
console.log("saveChangesToCloud - calling _saveEdit()");
|
|
583
|
+
|
|
584
|
+
_saveEdit();
|
|
585
|
+
}
|
|
586
|
+
}, [startSave]);
|
|
587
|
+
/**
|
|
588
|
+
* for each unsaved change, call into versePane to get latest changes for verse to save
|
|
589
|
+
*/
|
|
590
|
+
|
|
591
|
+
function saveChangesToCloud() {
|
|
592
|
+
var unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
593
|
+
|
|
594
|
+
if (unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length) {
|
|
595
|
+
var originalUsfm = core.getResponseData(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.fetchResponse);
|
|
596
|
+
var updatedBibleUsfm = originalUsfm;
|
|
597
|
+
|
|
598
|
+
var _iterator3 = _createForOfIteratorHelper(unsavedCardIndices),
|
|
599
|
+
_step3;
|
|
600
|
+
|
|
601
|
+
try {
|
|
602
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
603
|
+
var cardIndex = _step3.value;
|
|
604
|
+
var getChanges = unsavedChangesList[cardIndex].getChanges;
|
|
605
|
+
|
|
606
|
+
if (getChanges) {
|
|
607
|
+
var newUsfm = void 0;
|
|
608
|
+
|
|
609
|
+
var _getChanges = getChanges(),
|
|
610
|
+
newVerseText = _getChanges.newVerseText,
|
|
611
|
+
_ref4 = _getChanges.ref,
|
|
612
|
+
updatedVerseObjects = _getChanges.updatedVerseObjects;
|
|
613
|
+
|
|
614
|
+
if (updatedVerseObjects && updatedBibleUsfm) {
|
|
615
|
+
var _updatedBibleUsfm;
|
|
616
|
+
|
|
617
|
+
// just replace verse
|
|
618
|
+
var chapterChunks = (_updatedBibleUsfm = updatedBibleUsfm) === null || _updatedBibleUsfm === void 0 ? void 0 : _updatedBibleUsfm.split('\\c ');
|
|
619
|
+
var chapterIndex = findRefInArray(_ref4 === null || _ref4 === void 0 ? void 0 : _ref4.chapter, chapterChunks);
|
|
620
|
+
|
|
621
|
+
if (chapterIndex >= 0) {
|
|
622
|
+
var currentChapter = chapterChunks[chapterIndex];
|
|
623
|
+
var verseChunks = currentChapter.split('\\v ');
|
|
624
|
+
var verseIndex = findRefInArray(_ref4 === null || _ref4 === void 0 ? void 0 : _ref4.verse, verseChunks);
|
|
625
|
+
|
|
626
|
+
if (verseIndex >= 0) {
|
|
627
|
+
var newVerseUsfm = UsfmFileConversionHelpers.convertVerseDataToUSFM(updatedVerseObjects);
|
|
628
|
+
var oldVerse = verseChunks[verseIndex];
|
|
629
|
+
var verseNumLen = ((_ref4 === null || _ref4 === void 0 ? void 0 : _ref4.verse) + '').length;
|
|
630
|
+
verseChunks[verseIndex] = oldVerse.substring(0, verseNumLen + 1) + newVerseUsfm;
|
|
631
|
+
var newChapter = verseChunks.join('\\v ');
|
|
632
|
+
chapterChunks[chapterIndex] = newChapter;
|
|
633
|
+
newUsfm = chapterChunks.join('\\c ');
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
if (updatedVerseObjects && !newUsfm) {
|
|
639
|
+
var targetVerseObjects_ = null;
|
|
640
|
+
|
|
641
|
+
if (_ref4) {
|
|
642
|
+
if (newVerseText) {
|
|
643
|
+
var _AlignmentHelpers$upd = AlignmentHelpers.updateAlignmentsToTargetVerse(updatedVerseObjects, newVerseText),
|
|
644
|
+
targetVerseObjects = _AlignmentHelpers$upd.targetVerseObjects;
|
|
645
|
+
|
|
646
|
+
targetVerseObjects_ = targetVerseObjects;
|
|
647
|
+
} else {
|
|
648
|
+
targetVerseObjects_ = updatedVerseObjects;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
var newBookJson = targetVerseObjects_ && (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.updateVerse(_ref4.chapter, _ref4.verse, {
|
|
653
|
+
verseObjects: targetVerseObjects_
|
|
654
|
+
}));
|
|
655
|
+
updatedBibleUsfm = usfmjs.toUSFM(newBookJson, {
|
|
656
|
+
forcedNewLines: true
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
} catch (err) {
|
|
662
|
+
_iterator3.e(err);
|
|
663
|
+
} finally {
|
|
664
|
+
_iterator3.f();
|
|
431
665
|
}
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
}
|
|
439
|
-
}
|
|
666
|
+
|
|
667
|
+
console.log("saveChangesToCloud() - saving new USFM: ".concat(updatedBibleUsfm.substring(0, 100), "..."));
|
|
668
|
+
setState({
|
|
669
|
+
saveContent: updatedBibleUsfm,
|
|
670
|
+
startSave: true
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
}
|
|
440
674
|
|
|
441
675
|
React.useEffect(function () {
|
|
442
676
|
// check for verse range
|
|
443
|
-
var _verse =
|
|
677
|
+
var _verse = reference.verse;
|
|
444
678
|
|
|
445
679
|
if (addVerseRange && typeof _verse === 'string') {
|
|
446
680
|
// @ts-ignore
|
|
447
681
|
if (_verse.includes('-')) {
|
|
448
|
-
var _scriptureConfig$
|
|
682
|
+
var _scriptureConfig$refe2;
|
|
449
683
|
|
|
450
|
-
addVerseRange("".concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$
|
|
684
|
+
addVerseRange("".concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$refe2 = scriptureConfig.reference) === null || _scriptureConfig$refe2 === void 0 ? void 0 : _scriptureConfig$refe2.chapter, ":").concat(_verse));
|
|
451
685
|
}
|
|
452
686
|
}
|
|
453
|
-
}, [
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
687
|
+
}, [reference.verse]);
|
|
688
|
+
React.useEffect(function () {
|
|
689
|
+
if (!isEqual(versesForRef, scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef)) {
|
|
690
|
+
setState({
|
|
691
|
+
versesForRef: scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef
|
|
692
|
+
});
|
|
693
|
+
}
|
|
694
|
+
}, [scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef]);
|
|
695
|
+
var renderedScripturePanes = versesForRef === null || versesForRef === void 0 ? void 0 : versesForRef.map(function (_currentVerseData, index) {
|
|
696
|
+
var _currentVerseData$ver;
|
|
697
|
+
|
|
698
|
+
var initialVerseObjects = (_currentVerseData === null || _currentVerseData === void 0 ? void 0 : (_currentVerseData$ver = _currentVerseData.verseData) === null || _currentVerseData$ver === void 0 ? void 0 : _currentVerseData$ver.verseObjects) || null; // @ts-ignore
|
|
699
|
+
|
|
700
|
+
var _ref5 = _currentVerseData || {},
|
|
701
|
+
chapter = _ref5.chapter,
|
|
702
|
+
verse = _ref5.verse;
|
|
703
|
+
|
|
704
|
+
var _reference = _objectSpread(_objectSpread({}, reference), {}, {
|
|
705
|
+
chapter: chapter,
|
|
706
|
+
verse: verse
|
|
707
|
+
});
|
|
708
|
+
|
|
709
|
+
var _scriptureAlignmentEditConfig = _objectSpread(_objectSpread({}, scriptureAlignmentEditConfig), {}, {
|
|
710
|
+
currentIndex: index,
|
|
711
|
+
initialVerseObjects: initialVerseObjects,
|
|
712
|
+
reference: _reference
|
|
713
|
+
});
|
|
714
|
+
|
|
715
|
+
return /*#__PURE__*/React.createElement(ScripturePane, _extends({}, scriptureConfig, {
|
|
468
716
|
contentStyle: contentStyle,
|
|
469
|
-
|
|
717
|
+
currentIndex: index,
|
|
718
|
+
direction: direction,
|
|
470
719
|
disableWordPopover: disableWordPopover_,
|
|
720
|
+
fontSize: fontSize,
|
|
471
721
|
getLexiconData: getLexiconData,
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
722
|
+
isNT: isNT_,
|
|
723
|
+
key: index,
|
|
724
|
+
refStyle: refStyle,
|
|
725
|
+
reference: _reference,
|
|
726
|
+
saving: startSave // @ts-ignore
|
|
727
|
+
,
|
|
728
|
+
scriptureAlignmentEditConfig: _scriptureAlignmentEditConfig,
|
|
729
|
+
setWordAlignerStatus: setWordAlignerStatus,
|
|
730
|
+
server: server,
|
|
731
|
+
translate: translate
|
|
476
732
|
}));
|
|
477
733
|
});
|
|
478
734
|
return /*#__PURE__*/React.createElement(Card, {
|
|
@@ -497,63 +753,9 @@ export default function ScriptureCard(_ref) {
|
|
|
497
753
|
return onMinimize(id);
|
|
498
754
|
} : null,
|
|
499
755
|
editable: enableEdit || enableAlignment,
|
|
500
|
-
saved: !
|
|
501
|
-
onSaveEdit: saveChangesToCloud
|
|
502
|
-
|
|
503
|
-
return setEditing(false);
|
|
504
|
-
},
|
|
505
|
-
onRenderToolbar: onRenderToolbar
|
|
506
|
-
}, alignerData ? /*#__PURE__*/React.createElement("div", {
|
|
507
|
-
style: {
|
|
508
|
-
flexDirection: 'column'
|
|
509
|
-
}
|
|
510
|
-
}, /*#__PURE__*/React.createElement(WordAligner, {
|
|
511
|
-
style: {
|
|
512
|
-
maxHeight: '450px',
|
|
513
|
-
overflowY: 'auto'
|
|
514
|
-
},
|
|
515
|
-
verseAlignments: alignerData.alignments,
|
|
516
|
-
targetWords: alignerData.wordBank,
|
|
517
|
-
translate: translate,
|
|
518
|
-
contextId: {
|
|
519
|
-
reference: reference_
|
|
520
|
-
},
|
|
521
|
-
targetLanguage: language,
|
|
522
|
-
targetLanguageFont: '',
|
|
523
|
-
sourceLanguage: isNT_ ? NT_ORIG_LANG : OT_ORIG_LANG,
|
|
524
|
-
showPopover: showPopover,
|
|
525
|
-
lexicons: {},
|
|
526
|
-
loadLexiconEntry: getLexiconData,
|
|
527
|
-
onChange: function onChange(results) {
|
|
528
|
-
return onAlignmentsChange(results);
|
|
529
|
-
}
|
|
530
|
-
}), /*#__PURE__*/React.createElement("br", null), /*#__PURE__*/React.createElement("div", {
|
|
531
|
-
style: {
|
|
532
|
-
width: '100%'
|
|
533
|
-
}
|
|
534
|
-
}, /*#__PURE__*/React.createElement(IconButton, {
|
|
535
|
-
disabled: false,
|
|
536
|
-
className: classes.margin,
|
|
537
|
-
key: "alignment-save",
|
|
538
|
-
onClick: function onClick() {
|
|
539
|
-
return saveAlignment();
|
|
540
|
-
},
|
|
541
|
-
"aria-label": 'Alignment Save'
|
|
542
|
-
}, /*#__PURE__*/React.createElement(CheckOutlinedIcon, {
|
|
543
|
-
id: "alignment-save-icon",
|
|
544
|
-
htmlColor: "#000"
|
|
545
|
-
})), /*#__PURE__*/React.createElement(IconButton, {
|
|
546
|
-
disabled: false,
|
|
547
|
-
className: classes.margin,
|
|
548
|
-
key: "alignment-cancel",
|
|
549
|
-
onClick: function onClick() {
|
|
550
|
-
return cancelAlignment();
|
|
551
|
-
},
|
|
552
|
-
"aria-label": 'Alignment Cancel'
|
|
553
|
-
}, /*#__PURE__*/React.createElement(CancelOutlinedIcon, {
|
|
554
|
-
id: "alignment-cancel-icon",
|
|
555
|
-
htmlColor: "#000"
|
|
556
|
-
})))) : /*#__PURE__*/React.createElement("div", {
|
|
756
|
+
saved: startSave || !haveUnsavedChanges,
|
|
757
|
+
onSaveEdit: saveChangesToCloud
|
|
758
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
557
759
|
id: "scripture-pane-list"
|
|
558
760
|
}, renderedScripturePanes));
|
|
559
761
|
}
|
|
@@ -656,6 +858,9 @@ ScriptureCard.propTypes = {
|
|
|
656
858
|
bookIndex: PropTypes.string,
|
|
657
859
|
|
|
658
860
|
/** callback to indicate that we are using a verse range here */
|
|
659
|
-
addVerseRange: PropTypes.func
|
|
861
|
+
addVerseRange: PropTypes.func,
|
|
862
|
+
|
|
863
|
+
/** callback to update word aligner state */
|
|
864
|
+
setWordAlignerStatus: PropTypes.func
|
|
660
865
|
};
|
|
661
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJSeExpbmsyIiwiUnhMaW5rQnJlYWsyIiwiQ2FyZCIsInVzZUNhcmRTdGF0ZSIsInVzZVVzZXJCcmFuY2giLCJFUlJPUl9TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJXb3JkQWxpZ25lciIsIkNoZWNrT3V0bGluZWRJY29uIiwiQ2FuY2VsT3V0bGluZWRJY29uIiwiSWNvbkJ1dHRvbiIsIlNjcmlwdHVyZVBhbmUiLCJTY3JpcHR1cmVTZWxlY3RvciIsInVzZVNjcmlwdHVyZVNldHRpbmdzIiwiZ2V0VmVyc2VEYXRhRnJvbVNjcmlwQ29uZmlnIiwiZ2V0UmVzb3VyY2VMaW5rIiwiZ2V0UmVzb3VyY2VNZXNzYWdlIiwiZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzIiwiaXNPcmlnaW5hbEJpYmxlIiwiVGl0bGUiLCJOVF9PUklHX0xBTkciLCJPUklHSU5BTF9TT1VSQ0UiLCJPVF9PUklHX0xBTkciLCJ1c2VTY3JpcHR1cmVBbGlnbm1lbnRFZGl0IiwiS0VZX0ZPTlRfU0laRV9CQVNFIiwibGFiZWwiLCJzdHlsZSIsIm1hcmdpblRvcCIsIndpZHRoIiwiaW5pdGlhbGl6ZVZlcnNlTnVtYmVyIiwidmVyc2UiLCJpbml0aWFsVmVyc2UiLCJpbmNsdWRlcyIsInBhcnNlSW50IiwiY2hhckF0IiwiZ2V0VmVyc2VPYmplY3RzRm9yVmVyc2UiLCJzY3JpcHR1cmVDb25maWciLCJjdXJyZW50VmVyc2VOdW0iLCJjdXJyZW50VmVyc2VEYXRhIiwidmVyc2VEYXRhIiwidmVyc2VPYmplY3RzIiwiU2NyaXB0dXJlQ2FyZCIsImlkIiwiaXNOVCIsInRpdGxlIiwic2VydmVyIiwiYXBwUmVmIiwiY2FyZE51bSIsImNsYXNzZXMiLCJyZXNvdXJjZSIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInJlc291cmNlSWQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJnZXRMYW5ndWFnZSIsInJlZmVyZW5jZSIsImNoYXB0ZXIiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJyZXNvdXJjZUxpbmsiLCJ1c2VVc2VyTG9jYWxTdG9yYWdlIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwib25SZXNvdXJjZUVycm9yIiwiaHR0cENvbmZpZyIsImdyZWVrUmVwb1VybCIsImhlYnJld1JlcG9VcmwiLCJnZXRMZXhpY29uRGF0YSIsImZldGNoR2xvc3Nlc0ZvclZlcnNlIiwidHJhbnNsYXRlIiwib25NaW5pbWl6ZSIsImxvZ2dlZEluVXNlciIsImF1dGhlbnRpY2F0aW9uIiwic2V0U2F2ZWRDaGFuZ2VzIiwiYm9va0luZGV4IiwiYWRkVmVyc2VSYW5nZSIsInVzZVN0YXRlIiwicmVmIiwidXJsRXJyb3IiLCJ1c2luZ1VzZXJCcmFuY2giLCJzdGF0ZSIsInNldFN0YXRlXyIsImZvbnRTaXplIiwic2V0Rm9udFNpemUiLCJpc05UXyIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJjYWNoZSIsIm1heEFnZSIsInNldFVybEVycm9yIiwiZXJyb3IiLCJ3aG9sZUJvb2siLCJpc05ld1Rlc3RhbWVudCIsInNldFNjcmlwdHVyZSIsInNjcmlwdHVyZVNldHRpbmdzIiwic2NyaXB0dXJlVmVyc2lvbkhpc3QiLCJjdXJyZW50VmVyc2VPYmplY3RzIiwiY2FyZFJlc291cmNlSWQiLCJyZWZfIiwiY2FuVXNlRWRpdEJyYW5jaCIsInN1YnN0cmluZyIsImxlbmd0aCIsImNhcmRJZCIsIndvcmtpbmdSZXNvdXJjZUJyYW5jaCIsInVzaW5nVXNlckJyYW5jaF8iLCJzdGFydEVkaXRCcmFuY2giLCJhY3Rpb25zIiwic3RhcnRFZGl0Iiwid29ya2luZ1JlZiIsInJlZmVyZW5jZV8iLCJzY3JpcHR1cmVUaXRsZSIsInVzZUVmZmVjdCIsIndvcmtpbmdSZWZfIiwicmVzb3VyY2VTdGF0dXMiLCJtZXNzYWdlIiwiaXNBY2Nlc3NFcnJvciIsInZlcnNpb24iLCJ1cGRhdGVUaXRsZSIsImdldFNjcmlwdHVyZVNlbGVjdG9yIiwic2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnIiwib25NZW51Q2xvc2UiLCJsYW5ndWFnZUlkXyIsImxhbmd1YWdlIiwiZGlyZWN0aW9uIiwiaXNIZWJyZXciLCJmb250RmFjdG9yIiwic2NhbGVkRm9udFNpemUiLCJtYXRjaGVkVmVyc2UiLCJpdGVtcyIsImhlYWRlcnMiLCJmaWx0ZXJzIiwiaXRlbUluZGV4IiwibWFya2Rvd25WaWV3Iiwic2V0RmlsdGVycyIsInNldEl0ZW1JbmRleCIsInNldE1hcmtkb3duVmlldyIsInJlZlN0eWxlIiwidXNlTWVtbyIsImZvbnRGYW1pbHkiLCJNYXRoIiwicm91bmQiLCJjb250ZW50U3R5bGUiLCJzY3JpcHR1cmVMYWJlbCIsImRpc2FibGVXb3JkUG9wb3Zlcl8iLCJ1c2luZ09yaWdpbmFsQmlibGUiLCJ1bmRlZmluZWQiLCJmZXRjaEdsb3NzRGF0YUZvclZlcnNlIiwiZW5hYmxlRWRpdCIsImVuYWJsZUFsaWdubWVudCIsIm9yaWdpbmFsUmVwb1VybCIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJjYW5jZWxBbGlnbm1lbnQiLCJlZGl0ZWRWZXJzZU9iamVjdHMiLCJoYW5kbGVBbGlnbm1lbnRDbGljayIsIm9uQWxpZ25tZW50c0NoYW5nZSIsInNhdmVBbGlnbm1lbnQiLCJzZXRFZGl0aW5nIiwic2V0VmVyc2VDaGFuZ2VkIiwic2F2ZUNoYW5nZXNUb0Nsb3VkIiwiYWxpZ25lZCIsImFsaWduZXJEYXRhIiwiZWRpdGluZyIsInVuc2F2ZWRDaGFuZ2VzIiwidW5zYXZlZENoYW5nZXNfIiwic2hvd1BvcG92ZXIiLCJQb3BvdmVyVGl0bGUiLCJ3b3JkRGV0YWlscyIsInBvc2l0aW9uQ29vcmQiLCJyYXdEYXRhIiwiY29uc29sZSIsImxvZyIsIndpbmRvdyIsInByb21wdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0b2tlbiIsImNoZWNraW5nU3RhdGUiLCJ0aXRsZVRleHQiLCJvblJlbmRlclRvb2xiYXIiLCJtYXJnaW4iLCJjdXJzb3IiLCJfdmVyc2UiLCJyZW5kZXJlZFNjcmlwdHVyZVBhbmVzIiwidmVyc2VzRm9yUmVmIiwibWFwIiwiaW5kZXgiLCJtYXBwZWRWZXJzZU9iamVjdHMiLCJmbGV4RGlyZWN0aW9uIiwibWF4SGVpZ2h0Iiwib3ZlcmZsb3dZIiwiYWxpZ25tZW50cyIsIndvcmRCYW5rIiwicmVzdWx0cyIsInByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwic2hhcGUiLCJvbmVPZlR5cGUiLCJib29sIiwib2JqZWN0IiwiYW55Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsT0FBTyxLQUFLQyxTQUFaLE1BQTJCLFlBQTNCO0FBQ0EsU0FBU0MsT0FBVCxFQUFrQkMsWUFBbEIsUUFBc0MsZ0JBQXRDO0FBRUEsU0FDRUMsSUFERixFQUVFQyxZQUZGLEVBR0VDLGFBSEYsRUFJRUMsV0FKRixFQUtFQyx5QkFMRixRQU1PLHVCQU5QO0FBT0EsU0FBU0MsV0FBVCxRQUE0QixrQkFBNUI7QUFDQSxPQUFPQyxpQkFBUCxNQUE4QixtQ0FBOUI7QUFDQSxPQUFPQyxrQkFBUCxNQUErQixvQ0FBL0I7QUFDQSxTQUFTQyxVQUFULFFBQTJCLGVBQTNCO0FBQ0EsU0FBU0MsYUFBVCxFQUF3QkMsaUJBQXhCLFFBQWlELElBQWpEO0FBQ0EsU0FBU0Msb0JBQVQsUUFBcUMsa0NBQXJDO0FBQ0EsU0FDRUMsMkJBREYsRUFFRUMsZUFGRixFQUdFQyxrQkFIRixFQUlFQywyQkFKRixFQUtFQyxlQUxGLFFBTU8sK0JBTlA7QUFPQSxTQUFTQyxLQUFULFFBQXNCLHlCQUF0QjtBQUNBLFNBQ0VDLFlBREYsRUFFRUMsZUFGRixFQUdFQyxZQUhGLFFBSU8sYUFKUDtBQUtBLFNBQVNDLHlCQUFULFFBQTBDLHVDQUExQztBQUVBLElBQU1DLGtCQUFrQixH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QjtBQUNBN0gsRUFBQUEsWUFBWSxFQUFFdkUsU0FBUyxDQUFDbU0sTUE5REE7O0FBK0R4QjtBQUNBM0gsRUFBQUEsY0FBYyxFQUFFeEUsU0FBUyxDQUFDME0sTUFoRUY7O0FBaUV4QjtBQUNBakksRUFBQUEsZUFBZSxFQUFFekUsU0FBUyxDQUFDb00sSUFsRUg7O0FBbUV4QjtBQUNBMUgsRUFBQUEsU0FBUyxFQUFFMUUsU0FBUyxDQUFDbU0sTUFwRUc7O0FBcUV4QjtBQUNBeEgsRUFBQUEsYUFBYSxFQUFFM0UsU0FBUyxDQUFDb007QUF0RUQsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgUnhMaW5rMiwgUnhMaW5rQnJlYWsyIH0gZnJvbSAncmVhY3QtaWNvbnMvcngnXG5cbmltcG9ydCB7XG4gIENhcmQsXG4gIHVzZUNhcmRTdGF0ZSxcbiAgdXNlVXNlckJyYW5jaCxcbiAgRVJST1JfU1RBVEUsXG4gIE1BTklGRVNUX05PVF9MT0FERURfRVJST1IsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbmltcG9ydCB7IFdvcmRBbGlnbmVyIH0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCBDaGVja091dGxpbmVkSWNvbiBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrT3V0bGluZWQnXG5pbXBvcnQgQ2FuY2VsT3V0bGluZWRJY29uIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvQ2FuY2VsT3V0bGluZWQnXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgZ2V0VmVyc2VEYXRhRnJvbVNjcmlwQ29uZmlnLFxuICBnZXRSZXNvdXJjZUxpbmssXG4gIGdldFJlc291cmNlTWVzc2FnZSxcbiAgZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzLFxuICBpc09yaWdpbmFsQmlibGUsXG59IGZyb20gJy4uLy4uL3V0aWxzL1NjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICcuLi9TY3JpcHR1cmVQYW5lL3N0eWxlZCdcbmltcG9ydCB7XG4gIE5UX09SSUdfTEFORyxcbiAgT1JJR0lOQUxfU09VUkNFLFxuICBPVF9PUklHX0xBTkcsXG59IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgdXNlU2NyaXB0dXJlQWxpZ25tZW50RWRpdCB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZUFsaWdubWVudEVkaXQnXG5cbmNvbnN0IEtFWV9GT05UX1NJWkVfQkFTRSA9ICdzY3JpcHR1cmVQYW5lRm9udFNpemVfJ1xuY29uc3QgbGFiZWwgPSAnVmVyc2lvbidcbmNvbnN0IHN0eWxlID0geyBtYXJnaW5Ub3A6ICcxNnB4Jywgd2lkdGg6ICc1MDBweCcgfVxuXG5mdW5jdGlvbiBpbml0aWFsaXplVmVyc2VOdW1iZXIodmVyc2UpIHtcbiAgbGV0IGluaXRpYWxWZXJzZSA9IHZlcnNlXG4gIGlmICh0eXBlb2YgdmVyc2UgPT09ICdzdHJpbmcnICYmIHZlcnNlLmluY2x1ZGVzKCctJykpIHtcbiAgICBpbml0aWFsVmVyc2UgPSBwYXJzZUludCh2ZXJzZS5jaGFyQXQoMCkpXG4gIH1cbiAgcmV0dXJuIGluaXRpYWxWZXJzZVxufVxuXG5mdW5jdGlvbiBnZXRWZXJzZU9iamVjdHNGb3JWZXJzZShzY3JpcHR1cmVDb25maWcsIGN1cnJlbnRWZXJzZU51bSkge1xuICBjb25zdCBjdXJyZW50VmVyc2VEYXRhID0gZ2V0VmVyc2VEYXRhRnJvbVNjcmlwQ29uZmlnKHNjcmlwdHVyZUNvbmZpZywgY3VycmVudFZlcnNlTnVtKSB8fCBudWxsXG4gIHJldHVybiBjdXJyZW50VmVyc2VEYXRhPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0cyB8fCBudWxsXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjcmlwdHVyZUNhcmQoe1xuICBpZCxcbiAgaXNOVCxcbiAgdGl0bGUsXG4gIHNlcnZlcixcbiAgYXBwUmVmLFxuICBjYXJkTnVtLFxuICBjbGFzc2VzLFxuICByZXNvdXJjZToge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIH0sXG4gIGdldExhbmd1YWdlLFxuICByZWZlcmVuY2U6IHtcbiAgICB2ZXJzZSxcbiAgICBjaGFwdGVyLFxuICAgIHByb2plY3RJZDogYm9va0lkLFxuICB9LFxuICByZXNvdXJjZUxpbmssXG4gIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgb25SZXNvdXJjZUVycm9yLFxuICBodHRwQ29uZmlnLFxuICBncmVla1JlcG9VcmwsXG4gIGhlYnJld1JlcG9VcmwsXG4gIGdldExleGljb25EYXRhLFxuICBmZXRjaEdsb3NzZXNGb3JWZXJzZSxcbiAgdHJhbnNsYXRlLFxuICBvbk1pbmltaXplLFxuICBsb2dnZWRJblVzZXIsXG4gIGF1dGhlbnRpY2F0aW9uLFxuICBzZXRTYXZlZENoYW5nZXMsXG4gIGJvb2tJbmRleCxcbiAgYWRkVmVyc2VSYW5nZSxcbn0pIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGN1cnJlbnRWZXJzZU51bTogaW5pdGlhbGl6ZVZlcnNlTnVtYmVyKHZlcnNlKSxcbiAgICByZWY6IGFwcFJlZixcbiAgICB1cmxFcnJvcjogbnVsbCxcbiAgICB1c2luZ1VzZXJCcmFuY2g6IGZhbHNlLFxuICB9KVxuICBjb25zdCB7XG4gICAgY3VycmVudFZlcnNlTnVtLFxuICAgIHJlZixcbiAgICB1cmxFcnJvcixcbiAgICB1c2luZ1VzZXJCcmFuY2gsXG4gIH0gPSBzdGF0ZVxuXG4gIGNvbnN0IFtmb250U2l6ZSwgc2V0Rm9udFNpemVdID0gdXNlVXNlckxvY2FsU3RvcmFnZShLRVlfRk9OVF9TSVpFX0JBU0UgKyBjYXJkTnVtLCAxMDApXG4gIGNvbnN0IGlzTlRfID0gaXNOVChib29rSWQpXG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBzZXRTdGF0ZV8ocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICBpZiAodXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgaHR0cENvbmZpZyA9IHsgLi4uaHR0cENvbmZpZywgY2FjaGU6IHsgbWF4QWdlOiAwIH0gfSAvLyBkaXNhYmxlIGh0dHAgY2FjaGluZ1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzZXRTY3JpcHR1cmUsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gIH0gPSB1c2VTY3JpcHR1cmVTZXR0aW5ncyh7XG4gICAgaXNOVCxcbiAgICB0aXRsZSxcbiAgICB2ZXJzZSxcbiAgICBvd25lcixcbiAgICBib29rSWQsXG4gICAgYXBwUmVmOiByZWYsXG4gICAgc2VydmVyLFxuICAgIGNhcmROdW0sXG4gICAgY2hhcHRlcixcbiAgICBsYW5ndWFnZUlkLFxuICAgIHJlc291cmNlSWQsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICBzZXRVcmxFcnJvcjogKGVycm9yKSA9PiBzZXRTdGF0ZSh7IHVybEVycm9yOiBlcnJvciB9KSxcbiAgICBodHRwQ29uZmlnLFxuICAgIGdyZWVrUmVwb1VybCxcbiAgICBoZWJyZXdSZXBvVXJsLFxuICAgIHdob2xlQm9vazogdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBjdXJyZW50VmVyc2VPYmplY3RzID0gZ2V0VmVyc2VPYmplY3RzRm9yVmVyc2Uoc2NyaXB0dXJlQ29uZmlnLCBjdXJyZW50VmVyc2VOdW0pXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBjYXJkUmVzb3VyY2VJZCA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZCB8fCByZXNvdXJjZUlkXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBsZXQgcmVmXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnJlZiB8fCBhcHBSZWZcbiAgY29uc3QgY2FuVXNlRWRpdEJyYW5jaCA9IGxvZ2dlZEluVXNlciAmJiBhdXRoZW50aWNhdGlvbiAmJlxuICAgIChyZXNvdXJjZUlkICE9PSBPUklHSU5BTF9TT1VSQ0UpICYmXG4gICAgKChyZWZfID09PSAnbWFzdGVyJykgfHwgKHJlZl8uc3Vic3RyaW5nKDAsIGxvZ2dlZEluVXNlci5sZW5ndGgpID09PSBsb2dnZWRJblVzZXIpICkgLy8gbm90IHRhZ1xuXG4gIGNvbnN0IHtcbiAgICBzdGF0ZTogeyB3b3JraW5nUmVzb3VyY2VCcmFuY2gsIHVzaW5nVXNlckJyYW5jaDogdXNpbmdVc2VyQnJhbmNoXyB9LFxuICAgIGFjdGlvbnM6IHsgc3RhcnRFZGl0OiBzdGFydEVkaXRCcmFuY2ggfSxcbiAgfSA9IHVzZVVzZXJCcmFuY2goe1xuICAgIG93bmVyLFxuICAgIHNlcnZlcixcbiAgICBhcHBSZWYsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICBjYXJkSWQ6IGlkLFxuICAgIGxvZ2dlZEluVXNlcjogY2FuVXNlRWRpdEJyYW5jaCA/IGxvZ2dlZEluVXNlciA6IG51bGwsXG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgY2FyZFJlc291cmNlSWQsXG4gICAgb25SZXNvdXJjZUVycm9yLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gIH0pXG5cbiAgY29uc3Qgd29ya2luZ1JlZiA9IGNhblVzZUVkaXRCcmFuY2ggPyB3b3JraW5nUmVzb3VyY2VCcmFuY2ggOiBhcHBSZWZcbiAgY29uc3QgcmVmZXJlbmNlXyA9IHsgYm9va0lkLCBjaGFwdGVyLCB2ZXJzZSB9XG4gIGxldCBzY3JpcHR1cmVUaXRsZVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHNlbGVjdCBjb3JyZWN0IHdvcmtpbmcgcmVmIC0gY291bGQgYmUgbWFzdGVyLCB1c2VyIGJyYW5jaCwgb3IgcmVsZWFzZVxuICAgIGlmICh1c2luZ1VzZXJCcmFuY2hfICE9PSB1c2luZ1VzZXJCcmFuY2gpIHtcbiAgICAgIHNldFN0YXRlKHsgdXNpbmdVc2VyQnJhbmNoOiB1c2luZ1VzZXJCcmFuY2hfIH0pXG4gICAgfVxuICB9LCBbdXNpbmdVc2VyQnJhbmNoXywgdXNpbmdVc2VyQnJhbmNoXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZWxlY3QgY29ycmVjdCB3b3JraW5nIHJlZiAtIGNvdWxkIGJlIG1hc3RlciwgdXNlciBicmFuY2gsIG9yIHJlbGVhc2VcbiAgICBsZXQgd29ya2luZ1JlZl8gPSB3b3JraW5nUmVmIHx8IGFwcFJlZlxuXG4gICAgaWYgKHJlZiAhPT0gd29ya2luZ1JlZl8pIHtcbiAgICAgIHNldFN0YXRlKHsgcmVmOiB3b3JraW5nUmVmXyB9KVxuICAgIH1cbiAgfSwgW3dvcmtpbmdSZWYsIHJlZiwgYXBwUmVmXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyB1cGRhdGUgZGlzcGxheSBzdGF0dXMgaWYgZXJyb3JcbiAgICBjb25zdCBlcnJvciA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1cblxuICAgIGlmIChlcnJvcikgeyAvLyBpZiBlcnJvciB3YXMgZm91bmQgZG8gY2FsbGJhY2tcbiAgICAgIGNvbnN0IHJlc291cmNlU3RhdHVzID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1c1xuICAgICAgY29uc3QgcmVzb3VyY2VMaW5rID0gZ2V0UmVzb3VyY2VMaW5rKHNjcmlwdHVyZUNvbmZpZylcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBnZXRSZXNvdXJjZU1lc3NhZ2UocmVzb3VyY2VTdGF0dXMsIHNlcnZlciwgcmVzb3VyY2VMaW5rLCBpc05UXylcbiAgICAgIGNvbnN0IGlzQWNjZXNzRXJyb3IgPSByZXNvdXJjZVN0YXR1c1tNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SXVxuICAgICAgb25SZXNvdXJjZUVycm9yICYmIG9uUmVzb3VyY2VFcnJvcihtZXNzYWdlLCBpc0FjY2Vzc0Vycm9yLCByZXNvdXJjZVN0YXR1cylcbiAgICB9XG4gIH0sIFtzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdLCBvblJlc291cmNlRXJyb3JdKVxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcudGl0bGUgJiYgc2NyaXB0dXJlQ29uZmlnLnZlcnNpb24pIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGAke3NjcmlwdHVyZUNvbmZpZy50aXRsZX0gdiR7c2NyaXB0dXJlQ29uZmlnLnZlcnNpb259YFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LnVwZGF0ZVRpdGxlKHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssIHNjcmlwdHVyZVRpdGxlKVxuICB9IGVsc2Uge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYFRpdGxlIG1pc3NpbmcgZnJvbSBwcm9qZWN0IG1hbmlmZXN0YFxuICB9XG5cbiAgLyoqIER5bmFtaWNhbGx5IGNyZWF0ZXMgdGhlIHNjcmlwdHVyZSBzZWxlY3Rpb24gZHJvcGRvd24gdG8gYmUgaW5zZXJ0ZWQgaW50byBjYXJkIHNldHRpbmdzICovXG4gIGZ1bmN0aW9uIGdldFNjcmlwdHVyZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IHNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyA9IGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyh7XG4gICAgICBsYWJlbCxcbiAgICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluayxcbiAgICAgIHNldFNjcmlwdHVyZSxcbiAgICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICAgIH0pXG5cbiAgICByZXR1cm4gPFNjcmlwdHVyZVNlbGVjdG9yIHsuLi5zY3JpcHR1cmVTZWxlY3Rpb25Db25maWd9IHN0eWxlPXtzdHlsZX0gZXJyb3JNZXNzYWdlPXt1cmxFcnJvcn0gLz5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBvbk1lbnVDbG9zZSgpYClcbiAgICBzZXRTdGF0ZSh7IHVybEVycm9yOiBudWxsIH0pXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGxhbmd1YWdlSWRfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZFxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKHsgbGFuZ3VhZ2VJZDogbGFuZ3VhZ2VJZF8gfSlcbiAgY29uc3QgZGlyZWN0aW9uID0gKGxhbmd1YWdlPy5kaXJlY3Rpb24pIHx8ICdsdHInXG4gIGNvbnN0IHJlZmVyZW5jZSA9IHsgLi4uc2NyaXB0dXJlQ29uZmlnLnJlZmVyZW5jZSB9XG5cbiAgY29uc3QgaXNIZWJyZXcgPSAobGFuZ3VhZ2VJZF8gPT09ICdoYm8nKVxuICBjb25zdCBmb250RmFjdG9yID0gaXNIZWJyZXcgPyAxLjQgOiAxIC8vIHdlIGF1dG9tYXRpY2FsbHkgc2NhbGUgdXAgZm9udCBzaXplIGZvciBIZWJyZXdcbiAgY29uc3Qgc2NhbGVkRm9udFNpemUgPSBmb250U2l6ZSAqIGZvbnRGYWN0b3JcblxuICBpZiAoc2NyaXB0dXJlQ29uZmlnLm1hdGNoZWRWZXJzZSkgeyAvLyBzdXBwb3J0IHZlcnNlIHJhbmdlc1xuICAgIHJlZmVyZW5jZS52ZXJzZSA9IHNjcmlwdHVyZUNvbmZpZy5tYXRjaGVkVmVyc2VcbiAgfVxuXG4gIGNvbnN0IGl0ZW1zID0gbnVsbFxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGhlYWRlcnMsIGZpbHRlcnMsIGl0ZW1JbmRleCwgbWFya2Rvd25WaWV3LFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgc2V0RmlsdGVycywgc2V0SXRlbUluZGV4LCBzZXRNYXJrZG93blZpZXcsXG4gICAgfSxcbiAgfSA9IHVzZUNhcmRTdGF0ZSh7IGl0ZW1zIH0pXG5cbiAgY29uc3QgcmVmU3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke01hdGgucm91bmQoc2NhbGVkRm9udFNpemUgKiAwLjkpfSVgLFxuICB9KSwgW3NjYWxlZEZvbnRTaXplXSlcblxuICBjb25zdCBjb250ZW50U3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke3NjYWxlZEZvbnRTaXplfSVgLFxuICB9KSwgW3NjYWxlZEZvbnRTaXplXSlcblxuICBjb25zdCBzY3JpcHR1cmVMYWJlbCA9IDxUaXRsZT57c2NyaXB0dXJlVGl0bGV9PC9UaXRsZT5cbiAgbGV0IGRpc2FibGVXb3JkUG9wb3Zlcl8gPSBkaXNhYmxlV29yZFBvcG92ZXJcbiAgY29uc3QgdXNpbmdPcmlnaW5hbEJpYmxlID0gaXNPcmlnaW5hbEJpYmxlKHNjcmlwdHVyZUNvbmZpZ1sncmVzb3VyY2UnXT8ucHJvamVjdElkKVxuXG4gIGlmIChkaXNhYmxlV29yZFBvcG92ZXIgPT09IHVuZGVmaW5lZCkgeyAvLyBpZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGRldGVybWluZSBpZiBvcmlnaW5hbCBsYW5ndWFnZSByZXNvdXJjZVxuICAgIGRpc2FibGVXb3JkUG9wb3Zlcl8gPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBwcmUtY2FjaGUgZ2xvc3NlcyBvbiB2ZXJzZSBjaGFuZ2VcbiAgICBjb25zdCBmZXRjaEdsb3NzRGF0YUZvclZlcnNlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFkaXNhYmxlV29yZFBvcG92ZXIgJiYgY3VycmVudFZlcnNlT2JqZWN0cyAmJiBmZXRjaEdsb3NzZXNGb3JWZXJzZSkge1xuICAgICAgICBhd2FpdCBmZXRjaEdsb3NzZXNGb3JWZXJzZShjdXJyZW50VmVyc2VPYmplY3RzLCBsYW5ndWFnZUlkXylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmZXRjaEdsb3NzRGF0YUZvclZlcnNlKClcbiAgfSwgWyBjdXJyZW50VmVyc2VPYmplY3RzLCBkaXNhYmxlV29yZFBvcG92ZXIsIGxhbmd1YWdlSWRfLCBmZXRjaEdsb3NzZXNGb3JWZXJzZSBdKVxuXG4gIGNvbnN0IGVuYWJsZUVkaXQgPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIGNvbnN0IGVuYWJsZUFsaWdubWVudCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3Qgb3JpZ2luYWxSZXBvVXJsID0gaXNOZXdUZXN0YW1lbnQgPyBncmVla1JlcG9VcmwgOiBoZWJyZXdSZXBvVXJsXG4gIGNvbnN0IHtcbiAgICBhY3Rpb25zOiB7XG4gICAgICBjYW5jZWxBbGlnbm1lbnQsXG4gICAgICBlZGl0ZWRWZXJzZU9iamVjdHMsXG4gICAgICBoYW5kbGVBbGlnbm1lbnRDbGljayxcbiAgICAgIG9uQWxpZ25tZW50c0NoYW5nZSxcbiAgICAgIHNhdmVBbGlnbm1lbnQsXG4gICAgICBzZXRFZGl0aW5nLFxuICAgICAgc2V0VmVyc2VDaGFuZ2VkLFxuICAgICAgc2F2ZUNoYW5nZXNUb0Nsb3VkLFxuICAgIH0sXG4gICAgc3RhdGU6IHtcbiAgICAgIGFsaWduZWQsXG4gICAgICBhbGlnbmVyRGF0YSxcbiAgICAgIGVkaXRpbmcsXG4gICAgICB1bnNhdmVkQ2hhbmdlcyxcbiAgICB9LFxuICB9ID0gdXNlU2NyaXB0dXJlQWxpZ25tZW50RWRpdCh7XG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgZW5hYmxlRWRpdCxcbiAgICBlbmFibGVBbGlnbm1lbnQsXG4gICAgaHR0cENvbmZpZyxcbiAgICBpbml0aWFsVmVyc2VPYmplY3RzOiBjdXJyZW50VmVyc2VPYmplY3RzLFxuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICBvcmlnaW5hbFJlcG9VcmwsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzdGFydEVkaXRCcmFuY2gsXG4gICAgYm9va0luZGV4LFxuICAgIHdvcmtpbmdSZXNvdXJjZUJyYW5jaDogcmVmLFxuICAgIGN1cnJlbnRWZXJzZU51bSxcbiAgfSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZXQgc2F2ZWQgY2hhbmdlcyB3aGVuZXZlciB1c2VyIGVkaXRzIHZlcnNlIHRleHQgb3IgYWxpZ25tZW50cyBvciBpZiBhbGlnbm1lbnRzIGFyZSBvcGVuXG4gICAgY29uc3QgdW5zYXZlZENoYW5nZXNfID0gdW5zYXZlZENoYW5nZXMgfHwgYWxpZ25lckRhdGFcbiAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKHJlc291cmNlSWQsICF1bnNhdmVkQ2hhbmdlc18pXG4gIH0sIFt1bnNhdmVkQ2hhbmdlcywgYWxpZ25lckRhdGFdKVxuXG4gIGZ1bmN0aW9uIHNob3dQb3BvdmVyKFBvcG92ZXJUaXRsZSwgd29yZERldGFpbHMsIHBvc2l0aW9uQ29vcmQsIHJhd0RhdGEpIHtcbiAgICAvLyBUT0RPOiBtYWtlIHNob3cgcG9wb3ZlciBwcmV0dHlcbiAgICBjb25zb2xlLmxvZyhgc2hvd1BvcG92ZXJgLCByYXdEYXRhKVxuICAgIHdpbmRvdy5wcm9tcHQoYFVzZXIgY2xpY2tlZCBvbiAke0pTT04uc3RyaW5naWZ5KHJhd0RhdGEudG9rZW4pfWApXG4gIH1cblxuICBjb25zdCBjaGVja2luZ1N0YXRlID0gYWxpZ25lZCA/ICd2YWxpZCcgOiAnaW52YWxpZCdcbiAgY29uc3QgdGl0bGVUZXh0ID0gY2hlY2tpbmdTdGF0ZSA9PT0gJ3ZhbGlkJyA/ICdBbGlnbm1lbnQgaXMgVmFsaWQnIDogJ0FsaWdubWVudCBpcyBJbnZhbGlkJ1xuICBjb25zdCBvblJlbmRlclRvb2xiYXIgPSAoeyBpdGVtcyB9KSA9PiBbXG4gICAgLi4uaXRlbXMsXG4gICAgPEljb25CdXR0b25cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5tYXJnaW59XG4gICAgICBrZXk9J2NoZWNraW5nLWJ1dHRvbidcbiAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFsaWdubWVudENsaWNrKCl9XG4gICAgICB0aXRsZT17dGl0bGVUZXh0fVxuICAgICAgYXJpYS1sYWJlbD17dGl0bGVUZXh0fVxuICAgICAgc3R5bGU9e3sgY3Vyc29yOiAncG9pbnRlcicgfX1cbiAgICA+XG4gICAgICB7Y2hlY2tpbmdTdGF0ZSA9PT0gJ3ZhbGlkJyA/IChcbiAgICAgICAgPFJ4TGluazIgaWQ9J3ZhbGlkX2ljb24nIGNvbG9yPScjQkJCJyAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPFJ4TGlua0JyZWFrMiBpZD0naW52YWxpZF9pY29uJyBjb2xvcj0nIzAwMCcgLz5cbiAgICAgICl9XG4gICAgPC9JY29uQnV0dG9uPixcbiAgXVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gY2hlY2sgZm9yIHZlcnNlIHJhbmdlXG4gICAgY29uc3QgX3ZlcnNlID0gc2NyaXB0dXJlQ29uZmlnPy5tYXRjaGVkVmVyc2VcblxuICAgIGlmIChhZGRWZXJzZVJhbmdlICYmICh0eXBlb2YgX3ZlcnNlID09PSAnc3RyaW5nJykpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmIChfdmVyc2UuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICBhZGRWZXJzZVJhbmdlKGAke3NjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlPy5jaGFwdGVyfToke192ZXJzZX1gKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ubWF0Y2hlZFZlcnNlXSlcblxuXG4gIGNvbnN0IHJlbmRlcmVkU2NyaXB0dXJlUGFuZXMgPSBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZj8ubWFwKCh7dmVyc2V9LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG1hcHBlZFZlcnNlT2JqZWN0cyA9IGdldFZlcnNlT2JqZWN0c0ZvclZlcnNlKHNjcmlwdHVyZUNvbmZpZywgdmVyc2UpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNjcmlwdHVyZVBhbmVcbiAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgcmVmU3R5bGU9e3JlZlN0eWxlfVxuICAgICAgICB7Li4uc2NyaXB0dXJlQ29uZmlnfVxuICAgICAgICB2ZXJzZU9iamVjdHM9e21hcHBlZFZlcnNlT2JqZWN0c31cbiAgICAgICAgaXNOVD17aXNOVF99XG4gICAgICAgIHNlcnZlcj17c2VydmVyfVxuICAgICAgICByZWZlcmVuY2U9e3suLi5yZWZlcmVuY2UsIHZlcnNlfX1cbiAgICAgICAgZGlyZWN0aW9uPXtkaXJlY3Rpb259XG4gICAgICAgIGNvbnRlbnRTdHlsZT17Y29udGVudFN0eWxlfVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGRpc2FibGVXb3JkUG9wb3Zlcj17ZGlzYWJsZVdvcmRQb3BvdmVyX31cbiAgICAgICAgZ2V0TGV4aWNvbkRhdGE9e2dldExleGljb25EYXRhfVxuICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgZWRpdGluZz17ZWRpdGluZ31cbiAgICAgICAgc2V0RWRpdGluZz17c2V0RWRpdGluZ31cbiAgICAgICAgc2V0VmVyc2VDaGFuZ2VkPXtzZXRWZXJzZUNoYW5nZWR9XG4gICAgICAvPlxuICAgIClcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxDYXJkXG4gICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgdGl0bGU9e3NjcmlwdHVyZUxhYmVsfVxuICAgICAgc2V0dGluZ3NUaXRsZT17c2NyaXB0dXJlVGl0bGUgKyAnIFNldHRpbmdzJ31cbiAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgIGNsYXNzZXM9e2NsYXNzZXN9XG4gICAgICBoZWFkZXJzPXtoZWFkZXJzfVxuICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgIGZvbnRTaXplPXtmb250U2l6ZX1cbiAgICAgIGl0ZW1JbmRleD17aXRlbUluZGV4fVxuICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgIHNldEZvbnRTaXplPXtzZXRGb250U2l6ZX1cbiAgICAgIHNldEl0ZW1JbmRleD17c2V0SXRlbUluZGV4fVxuICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICBzZXRNYXJrZG93blZpZXc9e3NldE1hcmtkb3duVmlld31cbiAgICAgIGdldEN1c3RvbUNvbXBvbmVudD17Z2V0U2NyaXB0dXJlU2VsZWN0b3J9XG4gICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgIG9uTWluaW1pemU9e29uTWluaW1pemUgPyAoKSA9PiBvbk1pbmltaXplKGlkKSA6IG51bGx9XG4gICAgICBlZGl0YWJsZT17ZW5hYmxlRWRpdCB8fCBlbmFibGVBbGlnbm1lbnR9XG4gICAgICBzYXZlZD17IXVuc2F2ZWRDaGFuZ2VzfVxuICAgICAgb25TYXZlRWRpdD17c2F2ZUNoYW5nZXNUb0Nsb3VkfVxuICAgICAgb25CbHVyPXsoKSA9PiBzZXRFZGl0aW5nKGZhbHNlKX1cbiAgICAgIG9uUmVuZGVyVG9vbGJhcj17b25SZW5kZXJUb29sYmFyfVxuICAgID5cbiAgICAgIHthbGlnbmVyRGF0YSA/XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPFdvcmRBbGlnbmVyXG4gICAgICAgICAgICBzdHlsZT17eyBtYXhIZWlnaHQ6ICc0NTBweCcsIG92ZXJmbG93WTogJ2F1dG8nIH19XG4gICAgICAgICAgICB2ZXJzZUFsaWdubWVudHM9e2FsaWduZXJEYXRhLmFsaWdubWVudHN9XG4gICAgICAgICAgICB0YXJnZXRXb3Jkcz17YWxpZ25lckRhdGEud29yZEJhbmt9XG4gICAgICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgICAgIGNvbnRleHRJZD17eyByZWZlcmVuY2U6IHJlZmVyZW5jZV8gfX1cbiAgICAgICAgICAgIHRhcmdldExhbmd1YWdlPXtsYW5ndWFnZX1cbiAgICAgICAgICAgIHRhcmdldExhbmd1YWdlRm9udD17Jyd9XG4gICAgICAgICAgICBzb3VyY2VMYW5ndWFnZT17aXNOVF8gPyBOVF9PUklHX0xBTkcgOiBPVF9PUklHX0xBTkd9XG4gICAgICAgICAgICBzaG93UG9wb3Zlcj17c2hvd1BvcG92ZXJ9XG4gICAgICAgICAgICBsZXhpY29ucz17e319XG4gICAgICAgICAgICBsb2FkTGV4aWNvbkVudHJ5PXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsocmVzdWx0cykgPT4gb25BbGlnbm1lbnRzQ2hhbmdlKHJlc3VsdHMpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogJzEwMCUnIH19PlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMubWFyZ2lufVxuICAgICAgICAgICAgICBrZXk9J2FsaWdubWVudC1zYXZlJ1xuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzYXZlQWxpZ25tZW50KCl9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9eydBbGlnbm1lbnQgU2F2ZSd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxDaGVja091dGxpbmVkSWNvbiBpZD0nYWxpZ25tZW50LXNhdmUtaWNvbicgaHRtbENvbG9yPScjMDAwJyAvPlxuICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2ZhbHNlfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMubWFyZ2lufVxuICAgICAgICAgICAgICBrZXk9J2FsaWdubWVudC1jYW5jZWwnXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNhbmNlbEFsaWdubWVudCgpfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXsnQWxpZ25tZW50IENhbmNlbCd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxDYW5jZWxPdXRsaW5lZEljb24gaWQ9J2FsaWdubWVudC1jYW5jZWwtaWNvbicgaHRtbENvbG9yPScjMDAwJyAvPlxuICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgOlxuICAgICAgICA8ZGl2IGlkPVwic2NyaXB0dXJlLXBhbmUtbGlzdFwiPlxuICAgICAgICAgIHtyZW5kZXJlZFNjcmlwdHVyZVBhbmVzfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L0NhcmQ+XG4gIClcbn1cblxuU2NyaXB0dXJlQ2FyZC5wcm9wVHlwZXMgPSB7XG4gIC8qKiBodG1sIGlkZW50aWZpZXIgdG8gdXNlIGZvciBjYXJkICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogbWV0aG9kIHRvIGRldGVybWluZSBpZiBOVCBvciBPVCAqL1xuICBpc05UOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogdGl0bGUgZm9yIHNjcmlwdHVyZSBjYXJkICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBnZXQgbGFuZ3VhZ2UgZGV0YWlscyAqL1xuICBnZXRMYW5ndWFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHNjcmlwdHVyZSBjYXJkIG51bWJlciAoMCB0byAyIGZvciBleGFtcGxlKSAqL1xuICBjYXJkTnVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKiByZXNvdXJjZSBvYmplY3QgKi9cbiAgcmVzb3VyY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHJlc291cmNlIGxhbmd1YWdlIHRvIHVzZSAqL1xuICAgIGxhbmd1YWdlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXNvdXJjZUlkIHRvIHVzZSAoZS5nLiB1Z250KSAqL1xuICAgIHJlc291cmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBmb3Igb3JpZ2luYWwgbGFuZ3VhZ2VzIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KSxcbiAgcmVmZXJlbmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiBwcm9qZWN0SWQgKGJvb2tJRCkgdG8gdXNlICovXG4gICAgcHJvamVjdElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgY2hhcHRlciBudW1iZXIgKi9cbiAgICBjaGFwdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCB2ZXJzZSBudW1iZXIgKi9cbiAgICB2ZXJzZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gIH0pLFxuICAvKiogc2VydmVyIChlLmcuICdodHRwczovL2dpdC5kb29yNDMub3JnJykgKi9cbiAgc2VydmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiByZXBvIGJyYW5jaCBvciB0YWcgc3VjaCBhcyBtYXN0ZXIgKi9cbiAgYXBwUmVmOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBpZiB0cnVlIHRoZW4gd29yZCBkYXRhIGhvdmVyIGlzIHNob3duICovXG4gIGRpc2FibGVXb3JkUG9wb3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBDU1MgY2xhc3NlcyAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogcmVzb3VyY2VMaW5rICovXG4gIHJlc291cmNlTGluazogUHJvcFR5cGVzLmFueSxcbiAgLyoqIHVzZSBtZXRob2QgZm9yIHVzaW5nIGxvY2FsIHN0b3JhZ2Ugc3BlY2lmaWMgZm9yIHVzZXIgKi9cbiAgdXNlVXNlckxvY2FsU3RvcmFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIG9wdGlvbmFsIGNhbGxiYWNrIGlmIGVycm9yIGxvYWRpbmcgcmVzb3VyY2UsIHBhcmFtZXRlciByZXR1cm5lZCBhcmU6XG4gICAqICAgICh7c3RyaW5nfSBlcnJvck1lc3NhZ2UsIHtib29sZWFufSBpc0FjY2Vzc0Vycm9yLCB7b2JqZWN0fSByZXNvdXJjZVN0YXR1cylcbiAgICogICAgICAtIGlzQWNjZXNzRXJyb3IgLSBpcyB0cnVlIGlmIHRoaXMgd2FzIGFuIGVycm9yIHRyeWluZyB0byBhY2Nlc3MgZmlsZVxuICAgKiAgICAgIC0gcmVzb3VyY2VTdGF0dXMgLSBpcyBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHByb2JsZW1zIGZldGNoaW5nIHJlc291cmNlICovXG4gIG9uUmVzb3VyY2VFcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBodHRwIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBmZXRjaGluZyByZXNvdXJjZXMsIGRlZmF1bHQgaXMgMCAodmVyeSBsb25nIHdhaXQpICovXG4gIGh0dHBDb25maWc6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGdyZWVrIHJlcG8gKi9cbiAgZ3JlZWtSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBoZWJyZXcgcmVwbyAqL1xuICBoZWJyZXdSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogZnVuY3Rpb24gdG8gZ2V0IGxhdGVzdCBsZXhpY29uIGRhdGEgKi9cbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogZnVuY3Rpb24gdG8gcHJlLWxvYWQgbGV4aWNvbiBkYXRhIGZvciB2ZXJzZSAqL1xuICBmZXRjaEdsb3NzZXNGb3JWZXJzZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBmdW5jdGlvbiBmb3IgbG9jYWxpemF0aW9uICovXG4gIHRyYW5zbGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBtaW5pbWl6ZSB0aGUgY2FyZCAob3B0aW9uYWwpICovXG4gIG9uTWluaW1pemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogdXNlci1uYW1lICovXG4gIGxvZ2dlZEluVXNlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGF1dGhlbnRpY2F0aW9uIGluZm8gKi9cbiAgYXV0aGVudGljYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBmdW5jdGlvbiB0byBzZXQgc3RhdGUgaW4gYXBwIHRoYXQgdGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICBzZXRTYXZlZENoYW5nZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogaW5kZXggZm9yIGN1cnJlbnQgYm9vayAoZS5nLiAnMDEnIGZvciAnZ2VuJykqL1xuICBib29rSW5kZXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBjYWxsYmFjayB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSB1c2luZyBhIHZlcnNlIHJhbmdlIGhlcmUgKi9cbiAgYWRkVmVyc2VSYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG59XG4iXX0=
|
|
866
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwidXNmbWpzIiwidXNlRWRpdCIsIkNhcmQiLCJ1c2VDYXJkU3RhdGUiLCJ1c2VVc2VyQnJhbmNoIiwiRVJST1JfU1RBVEUiLCJNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SIiwiQWxpZ25tZW50SGVscGVycyIsIlVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMiLCJpc0VxdWFsIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJnZXRSZXNvdXJjZUxpbmsiLCJnZXRSZXNvdXJjZU1lc3NhZ2UiLCJnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3MiLCJpc09yaWdpbmFsQmlibGUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsIktFWV9GT05UX1NJWkVfQkFTRSIsImxhYmVsIiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3aWR0aCIsIlNjcmlwdHVyZUNhcmQiLCJpZCIsImlzTlQiLCJ0aXRsZSIsInNlcnZlciIsImFwcFJlZiIsImNhcmROdW0iLCJjbGFzc2VzIiwicmVzb3VyY2UiLCJvd25lciIsImxhbmd1YWdlSWQiLCJyZXNvdXJjZUlkIiwib3JpZ2luYWxMYW5ndWFnZU93bmVyIiwiZ2V0TGFuZ3VhZ2UiLCJyZWZlcmVuY2UiLCJ2ZXJzZSIsImNoYXB0ZXIiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJyZXNvdXJjZUxpbmsiLCJ1c2VVc2VyTG9jYWxTdG9yYWdlIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwib25SZXNvdXJjZUVycm9yIiwiaHR0cENvbmZpZyIsImdyZWVrUmVwb1VybCIsImhlYnJld1JlcG9VcmwiLCJnZXRMZXhpY29uRGF0YSIsImZldGNoR2xvc3Nlc0ZvclZlcnNlIiwidHJhbnNsYXRlIiwib25NaW5pbWl6ZSIsImxvZ2dlZEluVXNlciIsImF1dGhlbnRpY2F0aW9uIiwic2V0U2F2ZWRDaGFuZ2VzIiwiYm9va0luZGV4IiwiYWRkVmVyc2VSYW5nZSIsInNldFdvcmRBbGlnbmVyU3RhdHVzIiwidXNlU3RhdGUiLCJoYXZlVW5zYXZlZENoYW5nZXMiLCJyZWYiLCJzYXZlQ29udGVudCIsInNoYSIsInN0YXJ0U2F2ZSIsInVybEVycm9yIiwidXNpbmdVc2VyQnJhbmNoIiwidW5zYXZlZENoYW5nZXNMaXN0IiwidmVyc2VzRm9yUmVmIiwic3RhdGUiLCJzZXRTdGF0ZV8iLCJmb250U2l6ZSIsInNldEZvbnRTaXplIiwiaXNOVF8iLCJzZXRTdGF0ZSIsIm5ld1N0YXRlIiwicHJldlN0YXRlIiwiY2FjaGUiLCJtYXhBZ2UiLCJzZXRVcmxFcnJvciIsImVycm9yIiwid2hvbGVCb29rIiwiaXNOZXdUZXN0YW1lbnQiLCJzY3JpcHR1cmVDb25maWciLCJzZXRTY3JpcHR1cmUiLCJzY3JpcHR1cmVTZXR0aW5ncyIsInNjcmlwdHVyZVZlcnNpb25IaXN0IiwiZmV0Y2hSZXNwXyIsImZldGNoUmVzcG9uc2UiLCJyZXBvIiwicmVmZXJlbmNlXyIsInVzZUVmZmVjdCIsIl9zaGEiLCJkYXRhIiwiY29uc29sZSIsImxvZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjYXJkUmVzb3VyY2VJZCIsInJlZl8iLCJjYW5Vc2VFZGl0QnJhbmNoIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiY2FyZElkIiwid29ya2luZ1Jlc291cmNlQnJhbmNoIiwidXNpbmdVc2VyQnJhbmNoXyIsInN0YXJ0RWRpdEJyYW5jaCIsImFjdGlvbnMiLCJzdGFydEVkaXQiLCJ3b3JraW5nUmVmIiwic2NyaXB0dXJlVGl0bGUiLCJ3b3JraW5nUmVmXyIsInJlc291cmNlU3RhdHVzIiwibWVzc2FnZSIsImlzQWNjZXNzRXJyb3IiLCJ2ZXJzaW9uIiwidXBkYXRlVGl0bGUiLCJnZXRTY3JpcHR1cmVTZWxlY3RvciIsInNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyIsIm9uTWVudUNsb3NlIiwibGFuZ3VhZ2VJZF8iLCJsYW5ndWFnZSIsImRpcmVjdGlvbiIsImlzSGVicmV3IiwiZm9udEZhY3RvciIsInNjYWxlZEZvbnRTaXplIiwiaXRlbXMiLCJoZWFkZXJzIiwiZmlsdGVycyIsIml0ZW1JbmRleCIsIm1hcmtkb3duVmlldyIsInNldEZpbHRlcnMiLCJzZXRJdGVtSW5kZXgiLCJzZXRNYXJrZG93blZpZXciLCJyZWZTdHlsZSIsInVzZU1lbW8iLCJmb250RmFtaWx5IiwiTWF0aCIsInJvdW5kIiwiY29udGVudFN0eWxlIiwic2NyaXB0dXJlTGFiZWwiLCJkaXNhYmxlV29yZFBvcG92ZXJfIiwidXNpbmdPcmlnaW5hbEJpYmxlIiwidW5kZWZpbmVkIiwiZmV0Y2hHbG9zc0RhdGFGb3JWZXJzZSIsInZlcnNlT2JqZWN0cyIsInZlcnNlUmVmIiwiX3ZlcnNlT2JqZWN0cyIsInZlcnNlRGF0YSIsImNvbmNhdCIsImVuYWJsZUVkaXQiLCJlbmFibGVBbGlnbm1lbnQiLCJvcmlnaW5hbFJlcG9VcmwiLCJzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnIiwiY3VycmVudFZlcnNlUmVmIiwiX3NldFNhdmVkQ2hhbmdlcyIsInNvdXJjZUxhbmd1YWdlIiwidGFyZ2V0TGFuZ3VhZ2UiLCJjdXJyZW50SW5kZXgiLCJzYXZlZCIsImdldENoYW5nZXMiLCJjbGVhckNoYW5nZXMiLCJfdW5zYXZlZENoYW5nZXNMaXN0IiwiaGFzT3duUHJvcGVydHkiLCJfaGF2ZVVuc2F2ZWRDaGFuZ2VzIiwiT2JqZWN0Iiwia2V5cyIsImZpbmRSZWZJbkFycmF5IiwiZmluZEl0ZW0iLCJjaHVua3MiLCJyZWZMZW4iLCJpbmRleCIsImZpbmRJbmRleCIsImNodW5rIiwiaWR4IiwibmV4dENoYXIiLCJnZXRCb29rTmFtZSIsImJvb2tDYXBzIiwidG9VcHBlckNhc2UiLCJmaWxlcGF0aCIsImNvbnRlbnQiLCJjb25maWciLCJ0b2tlbiIsInRpbWVvdXQiLCJzZXJ2ZXJUaW1lT3V0IiwiYXV0aG9yIiwiYnJhbmNoIiwib25TYXZlRWRpdCIsIl9zYXZlRWRpdCIsInRoZW4iLCJzdWNjZXNzIiwidW5zYXZlZENhcmRJbmRpY2VzIiwiY2FyZEluZGV4IiwiaW5mbyIsInJlbG9hZFJlc291cmNlIiwic2F2ZUNoYW5nZXNUb0Nsb3VkIiwib3JpZ2luYWxVc2ZtIiwiZ2V0UmVzcG9uc2VEYXRhIiwidXBkYXRlZEJpYmxlVXNmbSIsIm5ld1VzZm0iLCJuZXdWZXJzZVRleHQiLCJ1cGRhdGVkVmVyc2VPYmplY3RzIiwiY2hhcHRlckNodW5rcyIsInNwbGl0IiwiY2hhcHRlckluZGV4IiwiY3VycmVudENoYXB0ZXIiLCJ2ZXJzZUNodW5rcyIsInZlcnNlSW5kZXgiLCJuZXdWZXJzZVVzZm0iLCJjb252ZXJ0VmVyc2VEYXRhVG9VU0ZNIiwib2xkVmVyc2UiLCJ2ZXJzZU51bUxlbiIsIm5ld0NoYXB0ZXIiLCJqb2luIiwidGFyZ2V0VmVyc2VPYmplY3RzXyIsInVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlIiwidGFyZ2V0VmVyc2VPYmplY3RzIiwibmV3Qm9va0pzb24iLCJ1cGRhdGVWZXJzZSIsInRvVVNGTSIsImZvcmNlZE5ld0xpbmVzIiwiX3ZlcnNlIiwiaW5jbHVkZXMiLCJyZW5kZXJlZFNjcmlwdHVyZVBhbmVzIiwibWFwIiwiX2N1cnJlbnRWZXJzZURhdGEiLCJpbml0aWFsVmVyc2VPYmplY3RzIiwiX3JlZmVyZW5jZSIsIl9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJudW1iZXIiLCJzaGFwZSIsIm9uZU9mVHlwZSIsImJvb2wiLCJvYmplY3QiLCJhbnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsT0FBTyxLQUFLQyxTQUFaLE1BQTJCLFlBQTNCO0FBQ0EsU0FB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Q29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgY29yZSB9IGZyb20gJ3NjcmlwdHVyZS1yZXNvdXJjZXMtcmNsJ1xuaW1wb3J0IHVzZm1qcyBmcm9tICd1c2ZtLWpzJ1xuaW1wb3J0IHsgdXNlRWRpdCB9IGZyb20gJ2dpdGVhLXJlYWN0LXRvb2xraXQnXG5pbXBvcnQge1xuICBDYXJkLFxuICB1c2VDYXJkU3RhdGUsXG4gIHVzZVVzZXJCcmFuY2gsXG4gIEVSUk9SX1NUQVRFLFxuICBNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG5pbXBvcnQgeyBBbGlnbm1lbnRIZWxwZXJzLCBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIH0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgZ2V0UmVzb3VyY2VMaW5rLFxuICBnZXRSZXNvdXJjZU1lc3NhZ2UsXG4gIGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyxcbiAgaXNPcmlnaW5hbEJpYmxlLFxufSBmcm9tICcuLi8uLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vU2NyaXB0dXJlUGFuZS9zdHlsZWQnXG5pbXBvcnQge1xuICBOVF9PUklHX0xBTkcsXG4gIE9SSUdJTkFMX1NPVVJDRSxcbiAgT1RfT1JJR19MQU5HLFxufSBmcm9tICcuLi8uLi91dGlscydcblxuY29uc3QgS0VZX0ZPTlRfU0laRV9CQVNFID0gJ3NjcmlwdHVyZVBhbmVGb250U2l6ZV8nXG5jb25zdCBsYWJlbCA9ICdWZXJzaW9uJ1xuY29uc3Qgc3R5bGUgPSB7IG1hcmdpblRvcDogJzE2cHgnLCB3aWR0aDogJzUwMHB4JyB9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjcmlwdHVyZUNhcmQoe1xuICBpZCxcbiAgaXNOVCxcbiAgdGl0bGUsXG4gIHNlcnZlcixcbiAgYXBwUmVmLFxuICBjYXJkTnVtLFxuICBjbGFzc2VzLFxuICByZXNvdXJjZToge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIH0sXG4gIGdldExhbmd1YWdlLFxuICByZWZlcmVuY2U6IHtcbiAgICB2ZXJzZSxcbiAgICBjaGFwdGVyLFxuICAgIHByb2plY3RJZDogYm9va0lkLFxuICB9LFxuICByZXNvdXJjZUxpbmssXG4gIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgb25SZXNvdXJjZUVycm9yLFxuICBodHRwQ29uZmlnLFxuICBncmVla1JlcG9VcmwsXG4gIGhlYnJld1JlcG9VcmwsXG4gIGdldExleGljb25EYXRhLFxuICBmZXRjaEdsb3NzZXNGb3JWZXJzZSxcbiAgdHJhbnNsYXRlLFxuICBvbk1pbmltaXplLFxuICBsb2dnZWRJblVzZXIsXG4gIGF1dGhlbnRpY2F0aW9uLFxuICBzZXRTYXZlZENoYW5nZXMsXG4gIGJvb2tJbmRleCxcbiAgYWRkVmVyc2VSYW5nZSxcbiAgc2V0V29yZEFsaWduZXJTdGF0dXMsXG59KSB7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVfXSA9IFJlYWN0LnVzZVN0YXRlKHtcbiAgICBoYXZlVW5zYXZlZENoYW5nZXM6IGZhbHNlLFxuICAgIHJlZjogYXBwUmVmLFxuICAgIHNhdmVDb250ZW50OiBudWxsLFxuICAgIHNoYTogbnVsbCxcbiAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgIHVybEVycm9yOiBudWxsLFxuICAgIHVzaW5nVXNlckJyYW5jaDogZmFsc2UsXG4gICAgdW5zYXZlZENoYW5nZXNMaXN0OiB7fSxcbiAgICB2ZXJzZXNGb3JSZWY6IG51bGwsXG4gIH0pXG4gIGNvbnN0IHtcbiAgICByZWYsXG4gICAgc2F2ZUNvbnRlbnQsXG4gICAgc2hhLFxuICAgIHN0YXJ0U2F2ZSxcbiAgICB1cmxFcnJvcixcbiAgICB1c2luZ1VzZXJCcmFuY2gsXG4gICAgdW5zYXZlZENoYW5nZXNMaXN0LFxuICAgIGhhdmVVbnNhdmVkQ2hhbmdlcyxcbiAgICB2ZXJzZXNGb3JSZWYsXG4gIH0gPSBzdGF0ZVxuXG4gIGNvbnN0IFtmb250U2l6ZSwgc2V0Rm9udFNpemVdID0gdXNlVXNlckxvY2FsU3RvcmFnZShLRVlfRk9OVF9TSVpFX0JBU0UgKyBjYXJkTnVtLCAxMDApXG4gIGNvbnN0IGlzTlRfID0gaXNOVChib29rSWQpXG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBzZXRTdGF0ZV8ocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICBpZiAodXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgaHR0cENvbmZpZyA9IHsgLi4uaHR0cENvbmZpZywgY2FjaGU6IHsgbWF4QWdlOiAwIH0gfSAvLyBkaXNhYmxlIGh0dHAgY2FjaGluZ1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzZXRTY3JpcHR1cmUsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gIH0gPSB1c2VTY3JpcHR1cmVTZXR0aW5ncyh7XG4gICAgaXNOVCxcbiAgICB0aXRsZSxcbiAgICB2ZXJzZSxcbiAgICBvd25lcixcbiAgICBib29rSWQsXG4gICAgYXBwUmVmOiByZWYsXG4gICAgc2VydmVyLFxuICAgIGNhcmROdW0sXG4gICAgY2hhcHRlcixcbiAgICBsYW5ndWFnZUlkLFxuICAgIHJlc291cmNlSWQsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICBzZXRVcmxFcnJvcjogKGVycm9yKSA9PiBzZXRTdGF0ZSh7IHVybEVycm9yOiBlcnJvciB9KSxcbiAgICBodHRwQ29uZmlnLFxuICAgIGdyZWVrUmVwb1VybCxcbiAgICBoZWJyZXdSZXBvVXJsLFxuICAgIHdob2xlQm9vazogdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlc3BfID0gc2NyaXB0dXJlQ29uZmlnPy5mZXRjaFJlc3BvbnNlXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcmVwbyA9IGAke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/Lmxhbmd1YWdlSWR9XyR7c2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkfWBcbiAgY29uc3QgcmVmZXJlbmNlXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlIHx8IG51bGxcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBnZXQgdGhlIF9zaGEgZnJvbSBsYXN0IHNjcmlwdHVyZSBkb3dubG9hZFxuICAgIGNvbnN0IF9zaGEgPSBmZXRjaFJlc3BfPy5kYXRhPy5zaGEgfHwgbnVsbFxuICAgIGNvbnNvbGUubG9nKGBmb3IgJHtKU09OLnN0cmluZ2lmeShyZWZlcmVuY2VfKX0gbmV3IHNoYSBpcyAke19zaGF9YClcblxuICAgIGlmIChfc2hhICE9PSBzaGEpIHtcbiAgICAgIHNldFN0YXRlKHsgc2hhOiBfc2hhIH0pXG4gICAgfVxuICB9LCBbZmV0Y2hSZXNwX10pXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBjYXJkUmVzb3VyY2VJZCA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZCB8fCByZXNvdXJjZUlkXG4gIC8vIEB0cy1pZ25vcmVcbiAgbGV0IHJlZl8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5yZWYgfHwgYXBwUmVmXG4gIGNvbnN0IGNhblVzZUVkaXRCcmFuY2ggPSBsb2dnZWRJblVzZXIgJiYgYXV0aGVudGljYXRpb24gJiZcbiAgICAocmVzb3VyY2VJZCAhPT0gT1JJR0lOQUxfU09VUkNFKSAmJlxuICAgICgocmVmXyA9PT0gJ21hc3RlcicpIHx8IChyZWZfLnN1YnN0cmluZygwLCBsb2dnZWRJblVzZXIubGVuZ3RoKSA9PT0gbG9nZ2VkSW5Vc2VyKSApIC8vIG5vdCB0YWdcblxuICBjb25zdCB7XG4gICAgc3RhdGU6IHsgd29ya2luZ1Jlc291cmNlQnJhbmNoLCB1c2luZ1VzZXJCcmFuY2g6IHVzaW5nVXNlckJyYW5jaF8gfSxcbiAgICBhY3Rpb25zOiB7IHN0YXJ0RWRpdDogc3RhcnRFZGl0QnJhbmNoIH0sXG4gIH0gPSB1c2VVc2VyQnJhbmNoKHtcbiAgICBvd25lcixcbiAgICBzZXJ2ZXIsXG4gICAgYXBwUmVmLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgY2FyZElkOiBpZCxcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgIG9uUmVzb3VyY2VFcnJvcixcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICB9KVxuXG4gIGNvbnN0IHdvcmtpbmdSZWYgPSBjYW5Vc2VFZGl0QnJhbmNoID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogYXBwUmVmXG4gIGxldCBzY3JpcHR1cmVUaXRsZVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHNlbGVjdCBjb3JyZWN0IHdvcmtpbmcgcmVmIC0gY291bGQgYmUgbWFzdGVyLCB1c2VyIGJyYW5jaCwgb3IgcmVsZWFzZVxuICAgIGlmICh1c2luZ1VzZXJCcmFuY2hfICE9PSB1c2luZ1VzZXJCcmFuY2gpIHtcbiAgICAgIHNldFN0YXRlKHsgdXNpbmdVc2VyQnJhbmNoOiB1c2luZ1VzZXJCcmFuY2hfIH0pXG4gICAgfVxuICB9LCBbdXNpbmdVc2VyQnJhbmNoXywgdXNpbmdVc2VyQnJhbmNoXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZWxlY3QgY29ycmVjdCB3b3JraW5nIHJlZiAtIGNvdWxkIGJlIG1hc3RlciwgdXNlciBicmFuY2gsIG9yIHJlbGVhc2VcbiAgICBsZXQgd29ya2luZ1JlZl8gPSB3b3JraW5nUmVmIHx8IGFwcFJlZlxuXG4gICAgaWYgKHJlZiAhPT0gd29ya2luZ1JlZl8pIHtcbiAgICAgIHNldFN0YXRlKHsgcmVmOiB3b3JraW5nUmVmXyB9KVxuICAgIH1cbiAgfSwgW3dvcmtpbmdSZWYsIHJlZiwgYXBwUmVmXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyB1cGRhdGUgZGlzcGxheSBzdGF0dXMgaWYgZXJyb3JcbiAgICBjb25zdCBlcnJvciA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1cblxuICAgIGlmIChlcnJvcikgeyAvLyBpZiBlcnJvciB3YXMgZm91bmQgZG8gY2FsbGJhY2tcbiAgICAgIGNvbnN0IHJlc291cmNlU3RhdHVzID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1c1xuICAgICAgY29uc3QgcmVzb3VyY2VMaW5rID0gZ2V0UmVzb3VyY2VMaW5rKHNjcmlwdHVyZUNvbmZpZylcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBnZXRSZXNvdXJjZU1lc3NhZ2UocmVzb3VyY2VTdGF0dXMsIHNlcnZlciwgcmVzb3VyY2VMaW5rLCBpc05UXylcbiAgICAgIGNvbnN0IGlzQWNjZXNzRXJyb3IgPSByZXNvdXJjZVN0YXR1c1tNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SXVxuICAgICAgb25SZXNvdXJjZUVycm9yICYmIG9uUmVzb3VyY2VFcnJvcihtZXNzYWdlLCBpc0FjY2Vzc0Vycm9yLCByZXNvdXJjZVN0YXR1cylcbiAgICB9XG4gIH0sIFtzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdXSlcblxuICBpZiAoc2NyaXB0dXJlQ29uZmlnLnRpdGxlICYmIHNjcmlwdHVyZUNvbmZpZy52ZXJzaW9uKSB7XG4gICAgc2NyaXB0dXJlVGl0bGUgPSBgJHtzY3JpcHR1cmVDb25maWcudGl0bGV9IHYke3NjcmlwdHVyZUNvbmZpZy52ZXJzaW9ufWBcbiAgICBzY3JpcHR1cmVWZXJzaW9uSGlzdC51cGRhdGVUaXRsZShzY3JpcHR1cmVDb25maWcucmVzb3VyY2VMaW5rLCBzY3JpcHR1cmVUaXRsZSlcbiAgfSBlbHNlIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGBUaXRsZSBtaXNzaW5nIGZyb20gcHJvamVjdCBtYW5pZmVzdGBcbiAgfVxuXG4gIC8qKiBEeW5hbWljYWxseSBjcmVhdGVzIHRoZSBzY3JpcHR1cmUgc2VsZWN0aW9uIGRyb3Bkb3duIHRvIGJlIGluc2VydGVkIGludG8gY2FyZCBzZXR0aW5ncyAqL1xuICBmdW5jdGlvbiBnZXRTY3JpcHR1cmVTZWxlY3RvcigpIHtcbiAgICBjb25zdCBzY3JpcHR1cmVTZWxlY3Rpb25Db25maWcgPSBnZXRTY3JpcHR1cmVWZXJzaW9uU2V0dGluZ3Moe1xuICAgICAgbGFiZWwsXG4gICAgICByZXNvdXJjZUxpbms6IHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssXG4gICAgICBzZXRTY3JpcHR1cmUsXG4gICAgICBzY3JpcHR1cmVWZXJzaW9uSGlzdCxcbiAgICB9KVxuXG4gICAgcmV0dXJuIDxTY3JpcHR1cmVTZWxlY3RvciB7Li4uc2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnfSBzdHlsZT17c3R5bGV9IGVycm9yTWVzc2FnZT17dXJsRXJyb3J9IC8+XG4gIH1cblxuICBmdW5jdGlvbiBvbk1lbnVDbG9zZSgpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhgb25NZW51Q2xvc2UoKWApXG4gICAgc2V0U3RhdGUoeyB1cmxFcnJvcjogbnVsbCB9KVxuICB9XG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBsYW5ndWFnZUlkXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/Lmxhbmd1YWdlSWRcbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZSh7IGxhbmd1YWdlSWQ6IGxhbmd1YWdlSWRfIH0pXG4gIGNvbnN0IGRpcmVjdGlvbiA9IChsYW5ndWFnZT8uZGlyZWN0aW9uKSB8fCAnbHRyJ1xuICBjb25zdCByZWZlcmVuY2UgPSB7IC4uLnNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UgfVxuXG4gIGNvbnN0IGlzSGVicmV3ID0gKGxhbmd1YWdlSWRfID09PSAnaGJvJylcbiAgY29uc3QgZm9udEZhY3RvciA9IGlzSGVicmV3ID8gMS40IDogMSAvLyB3ZSBhdXRvbWF0aWNhbGx5IHNjYWxlIHVwIGZvbnQgc2l6ZSBmb3IgSGVicmV3XG4gIGNvbnN0IHNjYWxlZEZvbnRTaXplID0gZm9udFNpemUgKiBmb250RmFjdG9yXG5cbiAgY29uc3QgaXRlbXMgPSBudWxsXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgaGVhZGVycywgZmlsdGVycywgaXRlbUluZGV4LCBtYXJrZG93blZpZXcsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZXRGaWx0ZXJzLCBzZXRJdGVtSW5kZXgsIHNldE1hcmtkb3duVmlldyxcbiAgICB9LFxuICB9ID0gdXNlQ2FyZFN0YXRlKHsgaXRlbXMgfSlcblxuICBjb25zdCByZWZTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7TWF0aC5yb3VuZChzY2FsZWRGb250U2l6ZSAqIDAuOSl9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IGNvbnRlbnRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7c2NhbGVkRm9udFNpemV9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZUxhYmVsID0gPFRpdGxlPntzY3JpcHR1cmVUaXRsZX08L1RpdGxlPlxuICBsZXQgZGlzYWJsZVdvcmRQb3BvdmVyXyA9IGRpc2FibGVXb3JkUG9wb3ZlclxuICBjb25zdCB1c2luZ09yaWdpbmFsQmlibGUgPSBpc09yaWdpbmFsQmlibGUoc2NyaXB0dXJlQ29uZmlnWydyZXNvdXJjZSddPy5wcm9qZWN0SWQpXG5cbiAgaWYgKGRpc2FibGVXb3JkUG9wb3ZlciA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBzcGVjaWZpZWQsIHRoZW4gZGV0ZXJtaW5lIGlmIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyXyA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHByZS1jYWNoZSBnbG9zc2VzIG9uIHZlcnNlIGNoYW5nZVxuICAgIGNvbnN0IGZldGNoR2xvc3NEYXRhRm9yVmVyc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgdmVyc2VPYmplY3RzID0gW11cblxuICAgICAgLy8gZ2V0IHZlcnNlIG9iamVjdHMgb2YgYWxsIHRoZSB2ZXJzZXNcbiAgICAgIGZvciAoY29uc3QgdmVyc2VSZWYgb2Ygc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWYgfHwgW10pIHtcbiAgICAgICAgY29uc3QgX3ZlcnNlT2JqZWN0cyA9IHZlcnNlUmVmPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0c1xuICAgICAgICB2ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHMuY29uY2F0KF92ZXJzZU9iamVjdHMpXG4gICAgICB9XG5cbiAgICAgIGlmICghZGlzYWJsZVdvcmRQb3BvdmVyICYmIHZlcnNlT2JqZWN0cz8ubGVuZ3RoICYmIGZldGNoR2xvc3Nlc0ZvclZlcnNlKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgIGF3YWl0IGZldGNoR2xvc3Nlc0ZvclZlcnNlKHZlcnNlT2JqZWN0cywgbGFuZ3VhZ2VJZF8pXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVzaW5nT3JpZ2luYWxCaWJsZSkge1xuICAgICAgZmV0Y2hHbG9zc0RhdGFGb3JWZXJzZSgpXG4gICAgfVxuICB9LCBbIHZlcnNlc0ZvclJlZiwgbGFuZ3VhZ2VJZF8gXSlcblxuICBjb25zdCBlbmFibGVFZGl0ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBlbmFibGVBbGlnbm1lbnQgPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIGNvbnN0IG9yaWdpbmFsUmVwb1VybCA9IGlzTmV3VGVzdGFtZW50ID8gZ3JlZWtSZXBvVXJsIDogaGVicmV3UmVwb1VybFxuICBjb25zdCBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnID0ge1xuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGJvb2tJbmRleCxcbiAgICBjdXJyZW50VmVyc2VSZWY6IHJlZmVyZW5jZSxcbiAgICBlbmFibGVFZGl0LFxuICAgIGVuYWJsZUFsaWdubWVudCxcbiAgICBodHRwQ29uZmlnLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpc05ld1Rlc3RhbWVudCxcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3JpZ2luYWxSZXBvVXJsLFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzdGFydEVkaXRCcmFuY2gsXG4gICAgc2V0U2F2ZWRDaGFuZ2VzOiBfc2V0U2F2ZWRDaGFuZ2VzLFxuICAgIHNvdXJjZUxhbmd1YWdlOiBpc05UXyA/IE5UX09SSUdfTEFORyA6IE9UX09SSUdfTEFORyxcbiAgICB0YXJnZXRMYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgdGl0bGU6IHNjcmlwdHVyZVRpdGxlLFxuICAgIHdvcmtpbmdSZXNvdXJjZUJyYW5jaDogcmVmLFxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYSBzY3JpcHR1cmUgcGFuZSBoYXMgYSBjaGFuZ2UgaW4gc2F2ZSBzdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudEluZGV4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2F2ZWRcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZ2V0Q2hhbmdlcyAtIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHVzZXIgY2xpY2tzIHNhdmUgYnV0dG9uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNsZWFyQ2hhbmdlcyAtIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHNhdmUgaGFzIGNvbXBsZXRlZFxuICAgKi9cbiAgZnVuY3Rpb24gX3NldFNhdmVkQ2hhbmdlcyhjdXJyZW50SW5kZXgsIHNhdmVkLCBnZXRDaGFuZ2VzID0gbnVsbCwgY2xlYXJDaGFuZ2VzID0gbnVsbCkge1xuICAgIGNvbnN0IF91bnNhdmVkQ2hhbmdlc0xpc3QgPSB7IC4uLnVuc2F2ZWRDaGFuZ2VzTGlzdCB9XG5cbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGlmIChfdW5zYXZlZENoYW5nZXNMaXN0Lmhhc093blByb3BlcnR5KGN1cnJlbnRJbmRleCkpIHtcbiAgICAgICAgZGVsZXRlIF91bnNhdmVkQ2hhbmdlc0xpc3RbY3VycmVudEluZGV4XVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIV91bnNhdmVkQ2hhbmdlc0xpc3QuaGFzT3duUHJvcGVydHkoY3VycmVudEluZGV4KSkge1xuICAgICAgICBfdW5zYXZlZENoYW5nZXNMaXN0W2N1cnJlbnRJbmRleF0gPSB7IGdldENoYW5nZXMsIGNsZWFyQ2hhbmdlcyB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgX2hhdmVVbnNhdmVkQ2hhbmdlcyA9ICEhT2JqZWN0LmtleXMoX3Vuc2F2ZWRDaGFuZ2VzTGlzdCkubGVuZ3RoXG5cbiAgICBpZiAoaGF2ZVVuc2F2ZWRDaGFuZ2VzICE9IF9oYXZlVW5zYXZlZENoYW5nZXMpIHtcbiAgICAgIHNldFNhdmVkQ2hhbmdlcyAmJiBzZXRTYXZlZENoYW5nZXMocmVzb3VyY2VJZCwgIV9oYXZlVW5zYXZlZENoYW5nZXMpXG4gICAgICBzZXRTdGF0ZSh7IGhhdmVVbnNhdmVkQ2hhbmdlczogX2hhdmVVbnNhdmVkQ2hhbmdlcyB9KVxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChfdW5zYXZlZENoYW5nZXNMaXN0LCB1bnNhdmVkQ2hhbmdlc0xpc3QpKSB7XG4gICAgICBzZXRTdGF0ZSh7IHVuc2F2ZWRDaGFuZ2VzTGlzdDogX3Vuc2F2ZWRDaGFuZ2VzTGlzdCB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZWFyY2ggY2hhcHRlciBvciB2ZXJzZSBjaHVuayB0byBsaW5lIHRoYXQgc3RhcnRzIHdpdGggZmluZEl0ZW1cbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBmaW5kSXRlbVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBjaHVua3NcbiAgICovXG4gIGZ1bmN0aW9uIGZpbmRSZWZJbkFycmF5KGZpbmRJdGVtLCBjaHVua3MpIHtcbiAgICBjb25zdCByZWZfID0gZmluZEl0ZW0gKyAnJ1xuICAgIGNvbnN0IHJlZkxlbiA9IHJlZl8ubGVuZ3RoXG4gICAgY29uc3QgaW5kZXggPSBjaHVua3MuZmluZEluZGV4KChjaHVuaywgaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4ID4gMCkge1xuICAgICAgICBpZiAoY2h1bmsuc3Vic3RyaW5nKDAsIHJlZkxlbikgPT09IHJlZl8pIHtcbiAgICAgICAgICBjb25zdCBuZXh0Q2hhciA9IGNodW5rW3JlZl9dXG5cbiAgICAgICAgICBpZiAoKG5leHRDaGFyID4gJzknKSB8fCAobmV4dENoYXIgPCAnMCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaW5kZXhcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJvb2tOYW1lKCkge1xuICAgIGNvbnN0IGJvb2tDYXBzID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LnByb2plY3RJZCA/IHNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UucHJvamVjdElkLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIHJldHVybiBgJHtib29rSW5kZXh9LSR7Ym9va0NhcHN9LnVzZm1gXG4gIH1cblxuICBjb25zdCBmaWxlcGF0aCA9IGdldEJvb2tOYW1lKClcblxuICAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIGVkaXQgc3RhdGVcbiAgY29uc3QgeyBvblNhdmVFZGl0IH0gPSB1c2VFZGl0KHtcbiAgICBzaGEsXG4gICAgb3duZXIsXG4gICAgY29udGVudDogc2F2ZUNvbnRlbnQsXG4gICAgY29uZmlnOiB7XG4gICAgICBjYWNoZTogeyBtYXhBZ2U6IDAgfSxcbiAgICAgIC4uLmF1dGhlbnRpY2F0aW9uPy5jb25maWcsXG4gICAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGltZW91dDogaHR0cENvbmZpZz8uc2VydmVyVGltZU91dCB8fCBodHRwQ29uZmlnPy50aW1lb3V0IHx8IDUwMDAsXG4gICAgfSxcbiAgICBhdXRob3I6IGxvZ2dlZEluVXNlcixcbiAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgIGJyYW5jaDogd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIGZpbGVwYXRoLFxuICAgIHJlcG8sXG4gIH0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiBzdGFydFNhdmUgZ29lcyB0cnVlLCBzYXZlIGVkaXRzIHRvIHVzZXIgYnJhbmNoIGFuZCB0aGVuIGNsZWFyIHN0YXJ0U2F2ZVxuICAgIGNvbnN0IF9zYXZlRWRpdCA9IGFzeW5jICgpID0+IHsgLy8gYmVnaW4gdXBsb2FkaW5nIG5ldyBVU0ZNXG4gICAgICBsZXQgYnJhbmNoID0gKHdvcmtpbmdSZXNvdXJjZUJyYW5jaCAhPT0gJ21hc3RlcicpID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICghYnJhbmNoKSB7XG4gICAgICAgIGJyYW5jaCA9IGF3YWl0IHN0YXJ0RWRpdEJyYW5jaCgpIC8vIG1ha2Ugc3VyZSB1c2VyIGJyYW5jaCBleGlzdHMgYW5kIGdldCBuYW1lXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG9uU2F2ZUVkaXQoYnJhbmNoKS50aGVuKChzdWNjZXNzKSA9PiB7IC8vIHB1c2ggY2hhbmdlZCB0byBzZXJ2ZXJcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZlIHNjcmlwdHVyZSBlZGl0cyBzdWNjZXNzYClcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCB1bnNhdmVkQ2FyZEluZGljZXMgPSBPYmplY3Qua2V5cyh1bnNhdmVkQ2hhbmdlc0xpc3QpXG5cbiAgICAgICAgICBpZiAodW5zYXZlZENhcmRJbmRpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgICBjb25zdCB7IGNsZWFyQ2hhbmdlcyB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmRJbmRleF1cbiAgICAgICAgICAgICAgY2xlYXJDaGFuZ2VzICYmIGNsZWFyQ2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5pbmZvKCdzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIFJlbG9hZGluZyByZXNvdXJjZScpXG4gICAgICAgICAgc2NyaXB0dXJlQ29uZmlnPy5yZWxvYWRSZXNvdXJjZSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgY2hhbmdlZCBzY3JpcHR1cmUgZmFpbGVkJylcbiAgICAgICAgICBzZXRTdGF0ZSh7IHN0YXJ0U2F2ZTogZmFsc2UgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRTYXZlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gY2FsbGluZyBfc2F2ZUVkaXQoKWApXG4gICAgICBfc2F2ZUVkaXQoKVxuICAgIH1cbiAgfSwgW3N0YXJ0U2F2ZV0pXG5cblxuICAvKipcbiAgICogZm9yIGVhY2ggdW5zYXZlZCBjaGFuZ2UsIGNhbGwgaW50byB2ZXJzZVBhbmUgdG8gZ2V0IGxhdGVzdCBjaGFuZ2VzIGZvciB2ZXJzZSB0byBzYXZlXG4gICAqL1xuICBmdW5jdGlvbiBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSB7XG4gICAgY29uc3QgdW5zYXZlZENhcmRJbmRpY2VzID0gT2JqZWN0LmtleXModW5zYXZlZENoYW5nZXNMaXN0KVxuXG4gICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFVzZm0gPSBjb3JlLmdldFJlc3BvbnNlRGF0YShzY3JpcHR1cmVDb25maWc/LmZldGNoUmVzcG9uc2UpXG4gICAgICBsZXQgdXBkYXRlZEJpYmxlVXNmbSA9IG9yaWdpbmFsVXNmbVxuXG4gICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgY29uc3QgeyBnZXRDaGFuZ2VzIH0gPSB1bnNhdmVkQ2hhbmdlc0xpc3RbY2FyZEluZGV4XVxuXG4gICAgICAgIGlmIChnZXRDaGFuZ2VzKSB7XG4gICAgICAgICAgbGV0IG5ld1VzZm1cbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgICAgICByZWYsXG4gICAgICAgICAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKClcblxuICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmIHVwZGF0ZWRCaWJsZVVzZm0pIHsgLy8ganVzdCByZXBsYWNlIHZlcnNlXG4gICAgICAgICAgICBjb25zdCBjaGFwdGVyQ2h1bmtzID0gdXBkYXRlZEJpYmxlVXNmbT8uc3BsaXQoJ1xcXFxjICcpXG4gICAgICAgICAgICBjb25zdCBjaGFwdGVySW5kZXggPSBmaW5kUmVmSW5BcnJheShyZWY/LmNoYXB0ZXIsIGNoYXB0ZXJDaHVua3MpXG5cbiAgICAgICAgICAgIGlmIChjaGFwdGVySW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q2hhcHRlciA9IGNoYXB0ZXJDaHVua3NbY2hhcHRlckluZGV4XVxuICAgICAgICAgICAgICBjb25zdCB2ZXJzZUNodW5rcyA9IGN1cnJlbnRDaGFwdGVyLnNwbGl0KCdcXFxcdiAnKVxuICAgICAgICAgICAgICBjb25zdCB2ZXJzZUluZGV4ID0gZmluZFJlZkluQXJyYXkocmVmPy52ZXJzZSwgdmVyc2VDaHVua3MpXG5cbiAgICAgICAgICAgICAgaWYgKHZlcnNlSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZlcnNlVXNmbSA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTSh1cGRhdGVkVmVyc2VPYmplY3RzKVxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZFZlcnNlID0gdmVyc2VDaHVua3NbdmVyc2VJbmRleF1cbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzZU51bUxlbiA9IChyZWY/LnZlcnNlICsgJycpLmxlbmd0aFxuICAgICAgICAgICAgICAgIHZlcnNlQ2h1bmtzW3ZlcnNlSW5kZXhdID0gb2xkVmVyc2Uuc3Vic3RyaW5nKDAsIHZlcnNlTnVtTGVuICsgMSkgKyBuZXdWZXJzZVVzZm1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDaGFwdGVyID0gdmVyc2VDaHVua3Muam9pbignXFxcXHYgJylcbiAgICAgICAgICAgICAgICBjaGFwdGVyQ2h1bmtzW2NoYXB0ZXJJbmRleF0gPSBuZXdDaGFwdGVyXG4gICAgICAgICAgICAgICAgbmV3VXNmbSA9IGNoYXB0ZXJDaHVua3Muam9pbignXFxcXGMgJylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmICFuZXdVc2ZtKSB7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IG51bGxcblxuICAgICAgICAgICAgaWYgKHJlZikge1xuICAgICAgICAgICAgICBpZiAobmV3VmVyc2VUZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0YXJnZXRWZXJzZU9iamVjdHMgfSA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UodXBkYXRlZFZlcnNlT2JqZWN0cywgbmV3VmVyc2VUZXh0KVxuICAgICAgICAgICAgICAgIHRhcmdldFZlcnNlT2JqZWN0c18gPSB0YXJnZXRWZXJzZU9iamVjdHNcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0Jvb2tKc29uID0gdGFyZ2V0VmVyc2VPYmplY3RzXyAmJiBzY3JpcHR1cmVDb25maWc/LnVwZGF0ZVZlcnNlKHJlZi5jaGFwdGVyLCByZWYudmVyc2UsIHsgdmVyc2VPYmplY3RzOiB0YXJnZXRWZXJzZU9iamVjdHNfIH0pXG4gICAgICAgICAgICB1cGRhdGVkQmlibGVVc2ZtID0gdXNmbWpzLnRvVVNGTShuZXdCb29rSnNvbiwgeyBmb3JjZWROZXdMaW5lczogdHJ1ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgbmV3IFVTRk06ICR7dXBkYXRlZEJpYmxlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKVxuICAgICAgc2V0U3RhdGUoeyBzYXZlQ29udGVudDogdXBkYXRlZEJpYmxlVXNmbSwgc3RhcnRTYXZlOiB0cnVlIH0pXG4gICAgfVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBjaGVjayBmb3IgdmVyc2UgcmFuZ2VcbiAgICBjb25zdCBfdmVyc2UgPSByZWZlcmVuY2UudmVyc2VcblxuICAgIGlmIChhZGRWZXJzZVJhbmdlICYmICh0eXBlb2YgX3ZlcnNlID09PSAnc3RyaW5nJykpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmIChfdmVyc2UuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICBhZGRWZXJzZVJhbmdlKGAke3NjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlPy5jaGFwdGVyfToke192ZXJzZX1gKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZS52ZXJzZV0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXF1YWwodmVyc2VzRm9yUmVmLCBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZikpIHtcbiAgICAgIHNldFN0YXRlKHsgdmVyc2VzRm9yUmVmOiBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZiB9KVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXSlcblxuICBjb25zdCByZW5kZXJlZFNjcmlwdHVyZVBhbmVzID0gdmVyc2VzRm9yUmVmPy5tYXAoKF9jdXJyZW50VmVyc2VEYXRhLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxWZXJzZU9iamVjdHMgPSBfY3VycmVudFZlcnNlRGF0YT8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHMgfHwgbnVsbFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7IGNoYXB0ZXIsIHZlcnNlIH0gPSBfY3VycmVudFZlcnNlRGF0YSB8fCB7fVxuICAgIGNvbnN0IF9yZWZlcmVuY2UgPSB7XG4gICAgICAuLi5yZWZlcmVuY2UsXG4gICAgICBjaGFwdGVyLFxuICAgICAgdmVyc2UsXG4gICAgfVxuICAgIGNvbnN0IF9zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnID0ge1xuICAgICAgLi4uc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyxcbiAgICAgIGN1cnJlbnRJbmRleDogaW5kZXgsXG4gICAgICBpbml0aWFsVmVyc2VPYmplY3RzLFxuICAgICAgcmVmZXJlbmNlOiBfcmVmZXJlbmNlLFxuICAgIH1cblxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTY3JpcHR1cmVQYW5lXG4gICAgICAgIHsuLi5zY3JpcHR1cmVDb25maWd9XG4gICAgICAgIGNvbnRlbnRTdHlsZT17Y29udGVudFN0eWxlfVxuICAgICAgICBjdXJyZW50SW5kZXg9e2luZGV4fVxuICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgZGlzYWJsZVdvcmRQb3BvdmVyPXtkaXNhYmxlV29yZFBvcG92ZXJffVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgaXNOVD17aXNOVF99XG4gICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgIHJlZlN0eWxlPXtyZWZTdHlsZX1cbiAgICAgICAgcmVmZXJlbmNlPXtfcmVmZXJlbmNlfVxuICAgICAgICBzYXZpbmc9e3N0YXJ0U2F2ZX1cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnPXtfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZ31cbiAgICAgICAgc2V0V29yZEFsaWduZXJTdGF0dXM9e3NldFdvcmRBbGlnbmVyU3RhdHVzfVxuICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAvPlxuICAgIClcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxDYXJkXG4gICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgdGl0bGU9e3NjcmlwdHVyZUxhYmVsfVxuICAgICAgc2V0dGluZ3NUaXRsZT17c2NyaXB0dXJlVGl0bGUgKyAnIFNldHRpbmdzJ31cbiAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgIGNsYXNzZXM9e2NsYXNzZXN9XG4gICAgICBoZWFkZXJzPXtoZWFkZXJzfVxuICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgIGZvbnRTaXplPXtmb250U2l6ZX1cbiAgICAgIGl0ZW1JbmRleD17aXRlbUluZGV4fVxuICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgIHNldEZvbnRTaXplPXtzZXRGb250U2l6ZX1cbiAgICAgIHNldEl0ZW1JbmRleD17c2V0SXRlbUluZGV4fVxuICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICBzZXRNYXJrZG93blZpZXc9e3NldE1hcmtkb3duVmlld31cbiAgICAgIGdldEN1c3RvbUNvbXBvbmVudD17Z2V0U2NyaXB0dXJlU2VsZWN0b3J9XG4gICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgIG9uTWluaW1pemU9e29uTWluaW1pemUgPyAoKSA9PiBvbk1pbmltaXplKGlkKSA6IG51bGx9XG4gICAgICBlZGl0YWJsZT17ZW5hYmxlRWRpdCB8fCBlbmFibGVBbGlnbm1lbnR9XG4gICAgICBzYXZlZD17c3RhcnRTYXZlIHx8ICFoYXZlVW5zYXZlZENoYW5nZXN9XG4gICAgICBvblNhdmVFZGl0PXtzYXZlQ2hhbmdlc1RvQ2xvdWR9XG4gICAgPlxuICAgICAgPGRpdiBpZD1cInNjcmlwdHVyZS1wYW5lLWxpc3RcIj5cbiAgICAgICAge3JlbmRlcmVkU2NyaXB0dXJlUGFuZXN9XG4gICAgICA8L2Rpdj5cbiAgICA8L0NhcmQ+XG4gIClcbn1cblxuU2NyaXB0dXJlQ2FyZC5wcm9wVHlwZXMgPSB7XG4gIC8qKiBodG1sIGlkZW50aWZpZXIgdG8gdXNlIGZvciBjYXJkICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogbWV0aG9kIHRvIGRldGVybWluZSBpZiBOVCBvciBPVCAqL1xuICBpc05UOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogdGl0bGUgZm9yIHNjcmlwdHVyZSBjYXJkICovXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBnZXQgbGFuZ3VhZ2UgZGV0YWlscyAqL1xuICBnZXRMYW5ndWFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHNjcmlwdHVyZSBjYXJkIG51bWJlciAoMCB0byAyIGZvciBleGFtcGxlKSAqL1xuICBjYXJkTnVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKiByZXNvdXJjZSBvYmplY3QgKi9cbiAgcmVzb3VyY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHJlc291cmNlIGxhbmd1YWdlIHRvIHVzZSAqL1xuICAgIGxhbmd1YWdlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXNvdXJjZUlkIHRvIHVzZSAoZS5nLiB1Z250KSAqL1xuICAgIHJlc291cmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBmb3Igb3JpZ2luYWwgbGFuZ3VhZ2VzIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KSxcbiAgcmVmZXJlbmNlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIC8qKiBwcm9qZWN0SWQgKGJvb2tJRCkgdG8gdXNlICovXG4gICAgcHJvamVjdElkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIGN1cnJlbnQgY2hhcHRlciBudW1iZXIgKi9cbiAgICBjaGFwdGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCB2ZXJzZSBudW1iZXIgKi9cbiAgICB2ZXJzZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLmlzUmVxdWlyZWQsXG4gIH0pLFxuICAvKiogc2VydmVyIChlLmcuICdodHRwczovL2dpdC5kb29yNDMub3JnJykgKi9cbiAgc2VydmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiByZXBvIGJyYW5jaCBvciB0YWcgc3VjaCBhcyBtYXN0ZXIgKi9cbiAgYXBwUmVmOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIC8qKiBpZiB0cnVlIHRoZW4gd29yZCBkYXRhIGhvdmVyIGlzIHNob3duICovXG4gIGRpc2FibGVXb3JkUG9wb3ZlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBDU1MgY2xhc3NlcyAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogcmVzb3VyY2VMaW5rICovXG4gIHJlc291cmNlTGluazogUHJvcFR5cGVzLmFueSxcbiAgLyoqIHVzZSBtZXRob2QgZm9yIHVzaW5nIGxvY2FsIHN0b3JhZ2Ugc3BlY2lmaWMgZm9yIHVzZXIgKi9cbiAgdXNlVXNlckxvY2FsU3RvcmFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIG9wdGlvbmFsIGNhbGxiYWNrIGlmIGVycm9yIGxvYWRpbmcgcmVzb3VyY2UsIHBhcmFtZXRlciByZXR1cm5lZCBhcmU6XG4gICAqICAgICh7c3RyaW5nfSBlcnJvck1lc3NhZ2UsIHtib29sZWFufSBpc0FjY2Vzc0Vycm9yLCB7b2JqZWN0fSByZXNvdXJjZVN0YXR1cylcbiAgICogICAgICAtIGlzQWNjZXNzRXJyb3IgLSBpcyB0cnVlIGlmIHRoaXMgd2FzIGFuIGVycm9yIHRyeWluZyB0byBhY2Nlc3MgZmlsZVxuICAgKiAgICAgIC0gcmVzb3VyY2VTdGF0dXMgLSBpcyBvYmplY3QgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHByb2JsZW1zIGZldGNoaW5nIHJlc291cmNlICovXG4gIG9uUmVzb3VyY2VFcnJvcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBodHRwIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciBmZXRjaGluZyByZXNvdXJjZXMsIGRlZmF1bHQgaXMgMCAodmVyeSBsb25nIHdhaXQpICovXG4gIGh0dHBDb25maWc6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGdyZWVrIHJlcG8gKi9cbiAgZ3JlZWtSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBoZWJyZXcgcmVwbyAqL1xuICBoZWJyZXdSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogZnVuY3Rpb24gdG8gZ2V0IGxhdGVzdCBsZXhpY29uIGRhdGEgKi9cbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogZnVuY3Rpb24gdG8gcHJlLWxvYWQgbGV4aWNvbiBkYXRhIGZvciB2ZXJzZSAqL1xuICBmZXRjaEdsb3NzZXNGb3JWZXJzZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCBmdW5jdGlvbiBmb3IgbG9jYWxpemF0aW9uICovXG4gIHRyYW5zbGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBtaW5pbWl6ZSB0aGUgY2FyZCAob3B0aW9uYWwpICovXG4gIG9uTWluaW1pemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogdXNlci1uYW1lICovXG4gIGxvZ2dlZEluVXNlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGF1dGhlbnRpY2F0aW9uIGluZm8gKi9cbiAgYXV0aGVudGljYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBmdW5jdGlvbiB0byBzZXQgc3RhdGUgaW4gYXBwIHRoYXQgdGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICBzZXRTYXZlZENoYW5nZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogaW5kZXggZm9yIGN1cnJlbnQgYm9vayAoZS5nLiAnMDEnIGZvciAnZ2VuJykqL1xuICBib29rSW5kZXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBjYWxsYmFjayB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSB1c2luZyBhIHZlcnNlIHJhbmdlIGhlcmUgKi9cbiAgYWRkVmVyc2VSYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBjYWxsYmFjayB0byB1cGRhdGUgd29yZCBhbGlnbmVyIHN0YXRlICovXG4gIHNldFdvcmRBbGlnbmVyU3RhdHVzOiBQcm9wVHlwZXMuZnVuYyxcbn1cbiJdfQ==
|