@kepler.gl/reducers 3.3.0-alpha.17 → 3.3.0-alpha.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/column-edit-updaters.spec.js +116 -3
- package/dist/cjs/combined-updaters.js +28 -9
- package/dist/cjs/dataset-ops-updaters.spec.js +832 -2
- package/dist/cjs/ui-state-updaters.js +44 -9
- package/dist/cjs/vis-state-merger.js +24 -4
- package/dist/cjs/vis-state-updaters.js +444 -263
- package/dist/cjs/vis-state.js +2 -2
- package/dist/combined-updaters.d.ts +14 -4
- package/dist/composers.d.ts +13 -2
- package/dist/esm/column-edit-updaters.spec.js +114 -3
- package/dist/esm/combined-updaters.js +29 -10
- package/dist/esm/dataset-ops-updaters.spec.js +830 -1
- package/dist/esm/ui-state-updaters.js +44 -9
- package/dist/esm/vis-state-merger.js +26 -6
- package/dist/esm/vis-state-updaters.js +445 -265
- package/dist/esm/vis-state.js +2 -2
- package/dist/ui-state-updaters.d.ts +1 -1
- package/dist/vis-state-updaters.d.ts +8 -9
- package/dist/vis-state.d.ts +8 -0
- package/package.json +16 -16
- package/dist/column-edit-updaters.spec.d.ts +0 -1
- package/dist/dataset-ops-updaters.spec.d.ts +0 -1
- package/dist/vis-state-merger-text-label.spec.d.ts +0 -1
|
@@ -19,11 +19,11 @@ import uniq from 'es-toolkit/compat/uniq';
|
|
|
19
19
|
import pick from 'es-toolkit/compat/pick';
|
|
20
20
|
import flattenDeep from 'es-toolkit/compat/flattenDeep';
|
|
21
21
|
import deepmerge from 'deepmerge';
|
|
22
|
-
import { arrayInsert, combineSplitMapsByIndex, getInitialMapLayersForSplitMap, applyFiltersToDatasets, validateFiltersUpdateDatasets, findById, aggregate, isPlainObject } from '@kepler.gl/utils';
|
|
22
|
+
import { arrayInsert, normalizeCameraBookmarks, normalizeCameraTour, combineSplitMapsByIndex, getInitialMapLayersForSplitMap, applyFiltersToDatasets, validateFiltersUpdateDatasets, findById, aggregate, isPlainObject } from '@kepler.gl/utils';
|
|
23
23
|
import { AGGREGATION_COUNT_LAYER_TYPES, createPointCountLabelField, migrateLegacyScenegraphVisConfig, POINT_COUNT_FIELD_NAME } from '@kepler.gl/layers';
|
|
24
24
|
import { createEffect } from '@kepler.gl/effects';
|
|
25
25
|
import { notNullorUndefined } from '@kepler.gl/common-utils';
|
|
26
|
-
import { AGGREGATION_TYPES, DEFAULT_TEXT_LABEL, LAYER_BLENDINGS, OVERLAY_BLENDINGS, isAnnotationKind, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_LINE_WIDTH } from '@kepler.gl/constants';
|
|
26
|
+
import { AGGREGATION_TYPES, DEFAULT_TEXT_LABEL, LAYER_BLENDINGS, OVERLAY_BLENDINGS, AnnotationKind, isAnnotationKind, INITIAL_ANNOTATION_LINE_COLOR, INITIAL_ANNOTATION_LINE_WIDTH } from '@kepler.gl/constants';
|
|
27
27
|
import { CURRENT_VERSION } from '@kepler.gl/schemas';
|
|
28
28
|
import { assignGpuChannels, resetFilterGpuMode } from '@kepler.gl/table';
|
|
29
29
|
import { getLayerOrderFromLayers } from './layer-utils';
|
|
@@ -787,9 +787,12 @@ export function mergeAnnotations(state, annotations) {
|
|
|
787
787
|
var validAnnotations = annotations.filter(function (a) {
|
|
788
788
|
return a && a.id && !existingIds.has(a.id) && isAnnotationKind(a.kind) && Array.isArray(a.anchorPoint) && (a.anchorPoint.length === 2 || a.anchorPoint.length === 3) && a.anchorPoint.every(function (value) {
|
|
789
789
|
return Number.isFinite(value);
|
|
790
|
-
})
|
|
790
|
+
}) && (a.kind !== AnnotationKind.RULER || Array.isArray(a.endPoint) && (a.endPoint.length === 2 || a.endPoint.length === 3) && a.endPoint.every(function (value) {
|
|
791
|
+
return Number.isFinite(value);
|
|
792
|
+
}));
|
|
791
793
|
}).map(function (a) {
|
|
792
|
-
|
|
794
|
+
var _a$showCustomText, _a$showDistance;
|
|
795
|
+
return _objectSpread(_objectSpread({
|
|
793
796
|
isVisible: true,
|
|
794
797
|
autoSize: true,
|
|
795
798
|
autoSizeY: true,
|
|
@@ -798,7 +801,10 @@ export function mergeAnnotations(state, annotations) {
|
|
|
798
801
|
lineWidth: INITIAL_ANNOTATION_LINE_WIDTH,
|
|
799
802
|
textWidth: 0,
|
|
800
803
|
textHeight: 0
|
|
801
|
-
}, a)
|
|
804
|
+
}, a), a.kind === AnnotationKind.RULER ? {
|
|
805
|
+
showCustomText: (_a$showCustomText = a.showCustomText) !== null && _a$showCustomText !== void 0 ? _a$showCustomText : true,
|
|
806
|
+
showDistance: (_a$showDistance = a.showDistance) !== null && _a$showDistance !== void 0 ? _a$showDistance : true
|
|
807
|
+
} : {});
|
|
802
808
|
});
|
|
803
809
|
if (!validAnnotations.length) {
|
|
804
810
|
return state;
|
|
@@ -1310,6 +1316,20 @@ function getValueWithHighestOccurrence(arr) {
|
|
|
1310
1316
|
})[0];
|
|
1311
1317
|
}
|
|
1312
1318
|
export var VIS_STATE_MERGERS = [{
|
|
1319
|
+
prop: 'cameraTour',
|
|
1320
|
+
merge: function merge(state, tour) {
|
|
1321
|
+
return state.cameraTour ? state : _objectSpread(_objectSpread({}, state), {}, {
|
|
1322
|
+
cameraTour: normalizeCameraTour(tour)
|
|
1323
|
+
});
|
|
1324
|
+
}
|
|
1325
|
+
}, {
|
|
1326
|
+
prop: 'cameraBookmarks',
|
|
1327
|
+
merge: function merge(state, bookmarks) {
|
|
1328
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
1329
|
+
cameraBookmarks: normalizeCameraBookmarks([].concat(_toConsumableArray(state.cameraBookmarks || []), _toConsumableArray(normalizeCameraBookmarks(bookmarks))))
|
|
1330
|
+
});
|
|
1331
|
+
}
|
|
1332
|
+
}, {
|
|
1313
1333
|
merge: mergeLayers,
|
|
1314
1334
|
prop: 'layers',
|
|
1315
1335
|
toMergeProp: 'layerToBeMerged',
|
|
@@ -1363,4 +1383,4 @@ export var VIS_STATE_MERGERS = [{
|
|
|
1363
1383
|
prop: 'editor',
|
|
1364
1384
|
combineConfigs: combineEditorConfigs
|
|
1365
1385
|
}];
|
|
1366
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmlxIiwicGljayIsImZsYXR0ZW5EZWVwIiwiZGVlcG1lcmdlIiwiYXJyYXlJbnNlcnQiLCJjb21iaW5lU3BsaXRNYXBzQnlJbmRleCIsImdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcCIsImFwcGx5RmlsdGVyc1RvRGF0YXNldHMiLCJ2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyIsImZpbmRCeUlkIiwiYWdncmVnYXRlIiwiaXNQbGFpbk9iamVjdCIsIkFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTIiwiY3JlYXRlUG9pbnRDb3VudExhYmVsRmllbGQiLCJtaWdyYXRlTGVnYWN5U2NlbmVncmFwaFZpc0NvbmZpZyIsIlBPSU5UX0NPVU5UX0ZJRUxEX05BTUUiLCJjcmVhdGVFZmZlY3QiLCJub3ROdWxsb3JVbmRlZmluZWQiLCJBR0dSRUdBVElPTl9UWVBFUyIsIkRFRkFVTFRfVEVYVF9MQUJFTCIsIkxBWUVSX0JMRU5ESU5HUyIsIk9WRVJMQVlfQkxFTkRJTkdTIiwiaXNBbm5vdGF0aW9uS2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJDVVJSRU5UX1ZFUlNJT04iLCJhc3NpZ25HcHVDaGFubmVscyIsInJlc2V0RmlsdGVyR3B1TW9kZSIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiY29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnMiLCJtZXJnZUZpbHRlcnMiLCJzdGF0ZSIsImZpbHRlcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsInByZXNlcnZlRmlsdGVyT3JkZXIiLCJtYXAiLCJsIiwiaWQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwiZGF0YXNldHNUb0ZpbHRlciIsImYiLCJkYXRhSWQiLCJmaWx0ZXJlZCIsImxheWVycyIsIl9vYmplY3RTcHJlYWQiLCJkYXRhc2V0cyIsImZpbHRlclRvQmVNZXJnZWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZXBsYWNlRmlsdGVyRGF0YXNldElkcyIsInNhdmVkRmlsdGVyIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlZCIsImZvckVhY2giLCJmaWx0ZXIiLCJpbmNsdWRlcyIsIl9maWx0ZXIkcGxvdFR5cGUiLCJuZXdEYXRhSWQiLCJkIiwicGxvdFR5cGUiLCJjb2xvcnNCeURhdGFJZCIsIl9maWx0ZXIkcGxvdFR5cGUyIiwiX3JlZiIsImNvbG9yIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwiX2RlZmluZVByb3BlcnR5IiwicHVzaCIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwibGF5ZXJDb25maWciLCJ2aXN1YWxDaGFubmVscyIsInBhcnNlTGF5ZXJDb25maWciLCJzY2hlbWEiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24iLCJzYXZlZENvbmZpZyIsInZlcnNpb24iLCJjb25maWciLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJwYXJzZVNhdmVkQ29uZmlnIiwiY3VycmVudEl0ZW1zIiwiaXRlbXMiLCJwcmVzZXJ2ZWRPcmRlciIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImRlZmF1bHRTdGFydCIsIm5ld0l0ZW1zIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsIml0ZW0iLCJ2YWx1ZSIsImV4cGVjdGVkSWR4IiwiaW5kZXhPZiIsImluc2VydEF0IiwiaSIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJlcnIiLCJlIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwic2F2ZWRMYXllckNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsImtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbCIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsImFwcGx5IiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsIl9leGNsdWRlZCIsImNvbmZpZ1RvTWVyZ2UiLCJzYXZlZFRvb2x0aXBDb25maWciLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0aW1lem9uZSIsInRvb2x0aXAiLCJuZXh0U3RhdGUiLCJzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24iLCJjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzIiwiY29uZmlncyIsImNvbWJpbmVkIiwibGVnZW5kIiwid2l0aExlZ2VuZCIsImZpbmQiLCJjIiwiem9vbU9wYWNpdHkiLCJ3aXRoWm9vbU9wYWNpdHkiLCJfbG9vcDIiLCJ0b0JlQ29tYmluZWRQcm9wcyIsInAiLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UiLCJoYXNUaW1lem9uZSIsInJlZHVjZSIsImFjYyIsIm5leHRGaWVsZHNUb1Nob3ciLCJfbG9vcDMiLCJuZXh0RGF0YUlkS2V5IiwibmV4dFRvb2x0aXBGaWVsZHMiLCJuZXh0VEYiLCJfcmVmMyIsIm5hbWUiLCJfYWdncmVnYXRlIiwic2l6ZSIsIm1heGltdW0iLCJfdG9CZUNvbWJpbmVkUHJvcHMkZmkiLCJsaW1pdFNlYXJjaCIsImhpZGVJbnZpc2libGVMYXllcnMiLCJjb250cm9sbGVycyIsIl91bm1lcmdlZCR0b29sdGlwIiwiX3VubWVyZ2VkJHRvb2x0aXAyIiwiX3N0YXRlJGludGVyYWN0aW9uVG9CIiwiX3VubWVyZ2VkJHRvb2x0aXAzIiwicmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0byIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0bzIiLCJtZXJnZVNwbGl0TWFwcyIsInNwbGl0TWFwcyIsImxheWVyRXhpc3RzIiwiY3JlYXRlUGFuZWxzIiwic20iLCJpZHMiLCJlbnRyaWVzIiwicGFuZWwiLCJmcm9tRW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWY2IiwiX3JlZjciLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwibWVyZ2VDaGFydHMiLCJjaGFydHMiLCJpbmNvbWluZ0lkcyIsImNoYXJ0IiwiZXhpc3RpbmdJZHMiLCJuZXh0Q2hhcnRzIiwibm9ybWFsaXplZCIsInBpbm5lZCIsImRpc3BsYXkiLCJpc0NvbmZpZ0FjdGl2ZSIsImlzSnNvbkVkaXRvckFjdGl2ZSIsImNoYXJ0c1RvQmVNZXJnZWQiLCJyZXBsYWNlQ2hhcnREYXRhc2V0SWRzIiwic2F2ZWRDaGFydHMiLCJtZXJnZUVmZmVjdHMiLCJuZXdFZmZlY3RzIiwiZWZmZWN0IiwiYWxsIiwiaXNWYWxpZFRvU2F2ZSIsIm1lcmdlQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsImEiLCJ2YWxpZEFubm90YXRpb25zIiwia2luZCIsImFuY2hvclBvaW50IiwiZXZlcnkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImlzVmlzaWJsZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwibGFiZWwiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0IiwidG9vbHRpcENvbmZpZyIsIl9sb29wNCIsImFsbEZpZWxkcyIsImZpZWxkcyIsImZvdW5kRmllbGRzVG9TaG93IiwiZmllbGQiLCJtZXJnZUxheWVyQmxlbmRpbmciLCJsYXllckJsZW5kaW5nIiwiY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzIiwibWVyZ2VPdmVybGF5QmxlbmRpbmciLCJvdmVybGF5QmxlbmRpbmciLCJjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyIsIm1lcmdlQW5pbWF0aW9uQ29uZmlnIiwiYW5pbWF0aW9uIiwiY3VycmVudFRpbWUiLCJhbmltYXRpb25Db25maWciLCJkb21haW4iLCJjb21iaW5lQW5pbWF0aW9uQ29uZmlncyIsIl9hZ2dyZWdhdGUyIiwiX2FnZ3JlZ2F0ZTMiLCJtaW5pbXVtIiwic3BlZWQiLCJ0aW1lRm9ybWF0IiwidmFsaWRhdGVTYXZlZExheWVyQ29sdW1ucyIsInNhdmVkQ29scyIsImVtcHR5Q29scyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiX2xvb3A1IiwiX09iamVjdCRrZXlzIiwiX2kiLCJzYXZlZCIsImZpZWxkSWR4IiwiX3JlZjgiLCJhbGxDb2xGb3VuZCIsInZhbGlkYXRlQ29sdW1uIiwicnYiLCJ0aHJvd09uRXJyb3IiLCJyZXF1aXJlZENvbHVtbnMiLCJrIiwib3B0aW9uYWwiLCJtaXNzaW5nQ29sdW1ucyIsIkVycm9yIiwiam9pbiIsImNvbmZpZ0NvbHVtbnMiLCJpbnZhbGlkQ29sdW1ucyIsIl9jb2x1bW5zJGsiLCJjb2x1bW4iLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0ZVNhdmVkVGV4dExhYmVsIiwibGF5ZXJUZXh0TGFiZWxzIiwic2F2ZWRUZXh0TGFiZWwiLCJsYXllclRleHRMYWJlbCIsInNhdmVkVGV4dExhYmVscyIsImNvdW50TGFiZWxMYXllciIsImxheWVyVHlwZSIsInRleHRMYWJlbCIsImZkIiwiSlNPTiIsInN0cmluZ2lmeSIsImFjY3UiLCJfdGV4dExhYmVsJGtleSIsImZhbGxiYWNrVGV4dExhYmVsRm9yTG9hZGVkTGF5ZXIiLCJuZXdMYXllclRleHRMYWJlbCIsImdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlIiwic2F2ZWRMYXllciIsImNoYW5uZWxzIiwiX3R5cGVvZiIsInZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyIsInZhbHVlcyIsIl9yZWY5Iiwic2NhbGUiLCJzYXZlZEZpZWxkIiwic2F2ZWRTY2FsZSIsImZvdW5kRmllbGQiLCJmb3VuZENoYW5uZWwiLCJ1cGRhdGVMYXllckNvbmZpZyIsInZhbGlkYXRlVmlzdWFsQ2hhbm5lbCIsIl9uZXdMYXllciRjb25maWckZmllbCIsImZpZWxkTmFtZSIsIl9sYXllciRjb25maWciLCJ2YWxpZGF0ZUxheWVyIiwidmFsaWRhdGVMYXllcldpdGhEYXRhIiwiX2dldENvbHVtbkNvbmZpZ0ZvclZhbGlkYXRpb24iLCJjb2x1bW5Db25maWciLCJnZXRMYXllckNvbHVtbnMiLCJjb2xNb2RlQ29uZmlnIiwiY29sdW1uTW9kZSIsInN1cHBvcnRlZENvbHVtbk1vZGVzIiwiY29sTW9kZSIsImdyb3VwQ29sdW1ucyIsImNvbHVtbkdyb3VwcyIsImZsYXRNYXAiLCJyZXF1aXJlZEtleXMiLCJvcHRpb25hbENvbHVtbnMiLCJjb2wiLCJfb3B0aW9uYWwiLCJyZXF1aXJlZENvbCIsIl9leGNsdWRlZDIiLCJkYXRhc2V0IiwidHlwZSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImhpZGRlbiIsImlzSW5jbHVkZWRJbkxlZ2VuZCIsImhpZ2hsaWdodENvbG9yIiwic2F2ZWRWaXNDb25maWciLCJ2aXNDb25maWciLCJjb3BpZWRWaXNDb25maWciLCJjb3B5TGF5ZXJDb25maWciLCJzaGFsbG93Q29weSIsInZhbGlkYXRlVmlzQ29uZmlnIiwibWVyZ2VFZGl0b3IiLCJzYXZlZEVkaXRvciIsIl9zYXZlZEVkaXRvciR2aXNpYmxlIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJ2aXNpYmxlIiwiY29tYmluZUVkaXRvckNvbmZpZ3MiLCJuZXh0Q29uZmlnIiwibWVyZ2VEYXRhc2V0c0J5T3JkZXIiLCJuZXdEYXRhRW50cmllcyIsInByZXNlcnZlRGF0YXNldE9yZGVyIiwibmV3RGF0YXNldElkcyIsIl9zdGF0ZSRwcmVzZXJ2ZURhdGFzZSIsImFyciIsIl9yZWYxMSIsInRhbGx5cyIsIk1hcCIsInNldCIsImdldCIsIm5leHQiLCJWSVNfU1RBVEVfTUVSR0VSUyIsIm1lcmdlIiwicHJvcCIsInRvTWVyZ2VQcm9wIiwicHJlc2VydmVPcmRlciIsInJlcGxhY2VQYXJlbnREYXRhc2V0SWRzIiwic2F2ZVVubWVyZ2VkIiwiY29tYmluZUNvbmZpZ3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdmlzLXN0YXRlLW1lcmdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgdW5pcSBmcm9tICdlcy10b29sa2l0L2NvbXBhdC91bmlxJztcbmltcG9ydCBwaWNrIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L3BpY2snO1xuaW1wb3J0IGZsYXR0ZW5EZWVwIGZyb20gJ2VzLXRvb2xraXQvY29tcGF0L2ZsYXR0ZW5EZWVwJztcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGFycmF5SW5zZXJ0LFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyxcbiAgZmluZEJ5SWQsXG4gIGFnZ3JlZ2F0ZSxcbiAgaXNQbGFpbk9iamVjdFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fQ09VTlRfTEFZRVJfVFlQRVMsXG4gIExheWVyLFxuICBjcmVhdGVQb2ludENvdW50TGFiZWxGaWVsZCxcbiAgbWlncmF0ZUxlZ2FjeVNjZW5lZ3JhcGhWaXNDb25maWcsXG4gIFBPSU5UX0NPVU5UX0ZJRUxEX05BTUVcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgTEFZRVJfQkxFTkRJTkdTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgaXNBbm5vdGF0aW9uS2luZCxcbiAgSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRIXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Q1VSUkVOVF9WRVJTSU9OLCBWaXNTdGF0ZSwgVmlzU3RhdGVNZXJnZXJzLCBLZXBsZXJHTFNjaGVtYUNsYXNzfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge1xuICBQYXJzZWRMYXllcixcbiAgUGFyc2VkVmlzU3RhdGUsXG4gIFNhdmVkSW50ZXJhY3Rpb25Db25maWcsXG4gIFRvb2x0aXBJbmZvLFxuICBTYXZlZEVkaXRvcixcbiAgUGFyc2VkQ29uZmlnLFxuICBGaWx0ZXIsXG4gIEVmZmVjdCBhcyBFZmZlY3RUeXBlLFxuICBQYXJzZWRFZmZlY3QsXG4gIExheWVyQ29sdW1ucyxcbiAgTGF5ZXJDb2x1bW4sXG4gIFBhcnNlZEZpbHRlcixcbiAgTmVzdGVkUGFydGlhbCxcbiAgU2F2ZWRBbmltYXRpb25Db25maWcsXG4gIExheWVyT3JkZXIsXG4gIExheWVyT3JkZXJHcm91cCxcbiAgQ2hhcnRDb25maWdcbn0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlLCBEYXRhc2V0cywgYXNzaWduR3B1Q2hhbm5lbHMsIHJlc2V0RmlsdGVyR3B1TW9kZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7Z2V0TGF5ZXJPcmRlckZyb21MYXllcnN9IGZyb20gJy4vbGF5ZXItdXRpbHMnO1xuaW1wb3J0IHtjb21iaW5lWm9vbU9wYWNpdHlDb250cm9sbGVyc30gZnJvbSAnLi9pbnRlcmFjdGlvbi11dGlscyc7XG5cbi8qKlxuICogTWVyZ2UgbG9hZGVkIGZpbHRlcnMgd2l0aCBjdXJyZW50IHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRmlsdGVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgZmlsdGVyc1RvTWVyZ2U6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2ZpbHRlcnMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUZpbHRlck9yZGVyID0gZnJvbUNvbmZpZ1xuICAgID8gZmlsdGVyc1RvTWVyZ2U/Lm1hcChsID0+IGwuaWQpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUZpbHRlck9yZGVyO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzVG9NZXJnZSkgfHwgIWZpbHRlcnNUb01lcmdlLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZCwgdXBkYXRlZERhdGFzZXRzfSA9IHZhbGlkYXRlRmlsdGVyc1VwZGF0ZURhdGFzZXRzKHN0YXRlLCBmaWx0ZXJzVG9NZXJnZSk7XG4gIGxldCB1cGRhdGVkRmlsdGVycyA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgc3RhdGUuZmlsdGVycyxcbiAgICB2YWxpZGF0ZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlclxuICApO1xuXG4gIC8vIG1lcmdlIGZpbHRlciB3aXRoIGV4aXN0aW5nXG4gIHVwZGF0ZWRGaWx0ZXJzID0gcmVzZXRGaWx0ZXJHcHVNb2RlKHVwZGF0ZWRGaWx0ZXJzKTtcbiAgdXBkYXRlZEZpbHRlcnMgPSBhc3NpZ25HcHVDaGFubmVscyh1cGRhdGVkRmlsdGVycyk7XG4gIC8vIGZpbHRlciBkYXRhXG4gIGNvbnN0IGRhdGFzZXRzVG9GaWx0ZXIgPSB1bmlxKGZsYXR0ZW5EZWVwKHZhbGlkYXRlZC5tYXAoZiA9PiBmLmRhdGFJZCkpKTtcblxuICBjb25zdCBmaWx0ZXJlZCA9IGFwcGx5RmlsdGVyc1RvRGF0YXNldHMoXG4gICAgZGF0YXNldHNUb0ZpbHRlcixcbiAgICB1cGRhdGVkRGF0YXNldHMsXG4gICAgdXBkYXRlZEZpbHRlcnMsXG4gICAgc3RhdGUubGF5ZXJzXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBmaWx0ZXJzOiB1cGRhdGVkRmlsdGVycyxcbiAgICBkYXRhc2V0czogZmlsdGVyZWQsXG4gICAgcHJlc2VydmVGaWx0ZXJPcmRlcixcbiAgICBmaWx0ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUuZmlsdGVyVG9CZU1lcmdlZCwgLi4uZmFpbGVkXVxuICB9O1xufVxuXG4vLyByZXBsYWNlIGRhdGFJZCBpbiBzYXZlZCBGaWx0ZXJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlRmlsdGVyRGF0YXNldElkcyhcbiAgc2F2ZWRGaWx0ZXI6IEZpbHRlcltdLFxuICBkYXRhSWQ6IHN0cmluZyxcbiAgZGF0YUlkVG9Vc2U6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHJlcGxhY2VkOiBGaWx0ZXJbXSA9IFtdO1xuICBzYXZlZEZpbHRlci5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgaWYgKGZpbHRlci5kYXRhSWQuaW5jbHVkZXMoZGF0YUlkKSkge1xuICAgICAgY29uc3QgbmV3RGF0YUlkID0gZmlsdGVyLmRhdGFJZC5tYXAoZCA9PiAoZCA9PT0gZGF0YUlkID8gZGF0YUlkVG9Vc2UgOiBkKSk7XG4gICAgICBsZXQgcGxvdFR5cGU7XG4gICAgICAvLyBUT0RPOiBtb3JlIGdlbmVyaWMgYXBwcm9hY2ggdG8gc2F2ZSBwbG90VHlwZS5jb2xvcnNCeURhdGFJZFxuICAgICAgaWYgKGZpbHRlci5wbG90VHlwZT8uY29sb3JzQnlEYXRhSWQ/LltkYXRhSWRdKSB7XG4gICAgICAgIC8vIHJlcGxhY2UgY29sb3JCeURhdGFJZCBpbiBmaWx0ZXIucGxvdFR5cGVcbiAgICAgICAgY29uc3Qge1tkYXRhSWRdOiBjb2xvciwgLi4ucmVzdH0gPSBmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkIHx8IHt9O1xuICAgICAgICBwbG90VHlwZSA9IHtcbiAgICAgICAgICAuLi5maWx0ZXIucGxvdFR5cGUsXG4gICAgICAgICAgY29sb3JzQnlEYXRhSWQ6IHtcbiAgICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgICAgICBbZGF0YUlkVG9Vc2VdOiBjb2xvclxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJlcGxhY2VkLnB1c2goe1xuICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgIGRhdGFJZDogbmV3RGF0YUlkLFxuICAgICAgICAuLi4ocGxvdFR5cGUgPyB7cGxvdFR5cGV9IDoge30pXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZWQubGVuZ3RoID8gcmVwbGFjZWQgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWc6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBleHBvcnRlZCBsYXllciBjb25maWd1cmF0aW9uIGNvbnRhaW5zIHZpc3VhbENoYW5uZWxzIHByb3BlcnR5XG4gIHJldHVybiBsYXllckNvbmZpZz8udmlzdWFsQ2hhbm5lbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxheWVyQ29uZmlnKFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3MsXG4gIGxheWVyQ29uZmlnOiBhbnlcbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgLy8gYXNzdW1lIHRoZSBsYXllciBjb25maWcgaXMgY3VycmVudCB2ZXJzaW9uXG4gIGNvbnN0IHNhdmVkQ29uZmlnID0ge1xuICAgIHZlcnNpb246IENVUlJFTlRfVkVSU0lPTixcbiAgICBjb25maWc6IHtcbiAgICAgIHZpc1N0YXRlOiB7bGF5ZXJzOiBbbGF5ZXJDb25maWddLCBsYXllck9yZGVyOiBbbGF5ZXJDb25maWcuaWRdfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRDb25maWcpPy52aXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbmZ1bmN0aW9uIGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gIGN1cnJlbnRJdGVtczogRmlsdGVyW10sXG4gIGl0ZW1zOiBGaWx0ZXJbXSxcbiAgcHJlc2VydmVkT3JkZXI6IGFueVtdID0gW10sXG4gIGRlZmF1bHRTdGFydD86IGJvb2xlYW5cbikge1xuICBsZXQgbmV3SXRlbXMgPSBbLi4uY3VycmVudEl0ZW1zXTtcblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBleHBlY3RlZElkeCA9IHByZXNlcnZlZE9yZGVyLmluZGV4T2YoaXRlbS5pZCk7XG4gICAgLy8gaW5zZXJ0QXQgdGhlIGVuZCBieSBkZWZhdWx0XG4gICAgbGV0IGluc2VydEF0ID0gZGVmYXVsdFN0YXJ0ID8gMCA6IG5ld0l0ZW1zLmxlbmd0aDtcbiAgICBpZiAoZXhwZWN0ZWRJZHggPiAwKSB7XG4gICAgICAvLyBsb29rIGZvciBsYXllciB0byBpbnNlcnQgYWZ0ZXJcbiAgICAgIGxldCBpID0gZXhwZWN0ZWRJZHggKyAxO1xuICAgICAgbGV0IHByZWNlZWRJZHggPSAtMTtcbiAgICAgIHdoaWxlIChpLS0gPiAwICYmIHByZWNlZWRJZHggPCAwKSB7XG4gICAgICAgIC8vIGtlZXAgbG9va2luZyBmb3IgcHJlY2VlZCBsYXllciB0aGF0IGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIGNvbnN0IHByZWNlZWRJdGVtSWQgPSBwcmVzZXJ2ZWRPcmRlcltpIC0gMV07XG4gICAgICAgIHByZWNlZWRJZHggPSBuZXdJdGVtcy5maW5kSW5kZXgoZCA9PiBkLmlkID09PSBwcmVjZWVkSXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVjZWVkSWR4ID4gLTEpIHtcbiAgICAgICAgLy8gaWYgZm91bmRcbiAgICAgICAgaW5zZXJ0QXQgPSBwcmVjZWVkSWR4ICsgMTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmV3SXRlbXMgPSBhcnJheUluc2VydChuZXdJdGVtcywgaW5zZXJ0QXQsIGl0ZW0pO1xuICB9XG4gIHJldHVybiBuZXdJdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxheWVyRnJvbUNvbmZpZyhzdGF0ZTogVmlzU3RhdGUsIGxheWVyQ29uZmlnOiBhbnkpOiBMYXllciB8IG51bGwge1xuICAvLyBjaGVjayBpZiB0aGUgbGF5ZXIgY29uZmlnIGlzIHBhcnNlZFxuICBjb25zdCBzYXZlZExheWVyQ29uZmlnID0gaXNTYXZlZExheWVyQ29uZmlnVjEobGF5ZXJDb25maWcpO1xuICBjb25zdCBwYXJzZWRMYXllckNvbmZpZyA9IHNhdmVkTGF5ZXJDb25maWdcbiAgICA/IHBhcnNlTGF5ZXJDb25maWcoc3RhdGUuc2NoZW1hLCBsYXllckNvbmZpZylcbiAgICA6IGxheWVyQ29uZmlnO1xuXG4gIGlmICghcGFyc2VkTGF5ZXJDb25maWcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBmaXJzdCB2YWxpZGF0ZSBjb25maWcgYWdhaW5zdCBkYXRhc2V0XG4gIGNvbnN0IHt2YWxpZGF0ZWQsIGZhaWxlZH0gPSB2YWxpZGF0ZUxheWVyc0J5RGF0YXNldHMoXG4gICAgc3RhdGUuZGF0YXNldHMsXG4gICAgc3RhdGUubGF5ZXJDbGFzc2VzLFxuICAgIFtwYXJzZWRMYXllckNvbmZpZ10sXG4gICAge2FsbG93RW1wdHlDb2x1bW46IHRydWUsIGtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbDogc2F2ZWRMYXllckNvbmZpZ31cbiAgKTtcblxuICBpZiAoZmFpbGVkPy5sZW5ndGggfHwgIXZhbGlkYXRlZC5sZW5ndGgpIHtcbiAgICAvLyBmYWlsZWRcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5ld0xheWVyID0gdmFsaWRhdGVkWzBdO1xuICBuZXdMYXllci51cGRhdGVMYXllckRvbWFpbihzdGF0ZS5kYXRhc2V0cyk7XG4gIHJldHVybiBuZXdMYXllcjtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGZpbHRlciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVGaWx0ZXIoXG4gIG5ld0ZpbHRlcjogRmlsdGVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKHtmaWx0ZXJzOiBbbmV3RmlsdGVyXX0sIHNjaGVtYSk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmZpbHRlcnM/LlswXTtcbn1cblxuLyoqXG4gKiBHZXQgbG9hZGVkIGxheWVyIGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUxheWVyKFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkTGF5ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZShcbiAgICB7bGF5ZXJzOiBbbmV3TGF5ZXJdLCBsYXllck9yZGVyOiBbbmV3TGF5ZXIuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8ubGF5ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBlZmZlY3QgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRWZmZWN0KFxuICBuZXdFZmZlY3Q6IEVmZmVjdFR5cGUsXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkRWZmZWN0IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2VmZmVjdHM6IFtuZXdFZmZlY3RdLCBlZmZlY3RPcmRlcjogW25ld0VmZmVjdC5pZF19LFxuICAgIHNjaGVtYVxuICApO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5lZmZlY3RzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IHZpcyBzdGF0ZSBjb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVZpc1N0YXRlKFxuICB2aXNTdGF0ZTogUGFydGlhbDxWaXNTdGF0ZT4sXG4gIHNjaGVtYTogS2VwbGVyR0xTY2hlbWFDbGFzc1xuKTogUGFyc2VkVmlzU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBzYXZlZFN0YXRlID0gc2NoZW1hLmdldENvbmZpZ1RvU2F2ZSh7XG4gICAgdmlzU3RhdGVcbiAgfSk7XG4gIHJldHVybiBzYXZlZFN0YXRlID8gc2NoZW1hLnBhcnNlU2F2ZWRDb25maWcoc2F2ZWRTdGF0ZSk/LnZpc1N0YXRlIDogdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBNZXJnZSBsYXllcnMgZnJvbSBkZS1zZXJpYWxpemVkIHN0YXRlLCBpZiBubyBmaWVsZHMgb3IgZGF0YSBhcmUgbG9hZGVkXG4gKiBzYXZlIGl0IGZvciBsYXRlclxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTGF5ZXJzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBsYXllcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydsYXllcnMnXSA9IFtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGNvbnN0IHByZXNlcnZlTGF5ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGdldExheWVyT3JkZXJGcm9tTGF5ZXJzKGxheWVyc1RvTWVyZ2UpXG4gICAgOiBzdGF0ZS5wcmVzZXJ2ZUxheWVyT3JkZXI7XG4gIGlmICghQXJyYXkuaXNBcnJheShsYXllcnNUb01lcmdlKSB8fCAhbGF5ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgLy8gZG9uJ3QgbWVyZ2UgbGF5ZXIgaWYgZGF0YXNldCBpcyBiZWluZyBtZXJnZWRcbiAgY29uc3QgdW5tZXJnZWQ6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgY29uc3QgdG9NZXJnZTogUGFyc2VkTGF5ZXJbXSA9IFtdO1xuICBsYXllcnNUb01lcmdlLmZvckVhY2goKGw6IFBhcnNlZExheWVyKSA9PiB7XG4gICAgaWYgKGw/LmNvbmZpZz8uZGF0YUlkICYmIHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW2wuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgIHVubWVyZ2VkLnB1c2gobCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvTWVyZ2UucHVzaChsKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHt2YWxpZGF0ZWQ6IG1lcmdlZExheWVyLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICB0b01lcmdlLFxuICAgIHtrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw6IHRydWV9XG4gICk7XG4gIHVubWVyZ2VkLnB1c2goLi4uZmFpbGVkKTtcbiAgLy8gcHV0IG5ldyBsYXllcnMgaW4gZnJvbnQgb2YgY3VycmVudCBsYXllcnNcbiAgY29uc3Qge25ld0xheWVyT3JkZXIsIG5ld0xheWVyc30gPSBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgICBzdGF0ZS5sYXllcnMsXG4gICAgbWVyZ2VkTGF5ZXIsXG4gICAgc3RhdGUubGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgKTtcblxuICBsZXQgbWVyZ2VkU3RhdGU6IFMgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJzOiBuZXdMYXllcnMsXG4gICAgbGF5ZXJPcmRlcjogbmV3TGF5ZXJPcmRlcixcbiAgICBwcmVzZXJ2ZUxheWVyT3JkZXIsXG4gICAgbGF5ZXJUb0JlTWVyZ2VkOiBbLi4uc3RhdGUubGF5ZXJUb0JlTWVyZ2VkLCAuLi51bm1lcmdlZF1cbiAgfTtcblxuICAvLyBBcHBseSBwZW5kaW5nIGxheWVyT3JkZXIgd2l0aCBncm91cHMgaWYgbGF5ZXJzIGFyZSBub3cgYXZhaWxhYmxlXG4gIGlmIChtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZCAmJiBtZXJnZWRTdGF0ZS5sYXllcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHNhdmVkT3JkZXIgPSBtZXJnZWRTdGF0ZS5sYXllck9yZGVyVG9CZU1lcmdlZDtcbiAgICBtZXJnZWRTdGF0ZSA9IG1lcmdlTGF5ZXJPcmRlcihtZXJnZWRTdGF0ZSwgc2F2ZWRPcmRlcik7XG4gICAgLy8gS2VlcCBzYXZlZExheWVyT3JkZXIgYXZhaWxhYmxlIGZvciBmdXR1cmUgZGVmZXJyZWQgbGF5ZXJzXG4gICAgaWYgKG1lcmdlZFN0YXRlLmxheWVyVG9CZU1lcmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICBtZXJnZWRTdGF0ZSA9IHsuLi5tZXJnZWRTdGF0ZSwgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IHNhdmVkT3JkZXJ9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXJnZWRTdGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExheWVyQXRSaWdodE9yZGVyKFxuICBjdXJyZW50TGF5ZXJzLFxuICBsYXllcnNUb0luc2VydCxcbiAgY3VycmVudE9yZGVyLFxuICBwcmVzZXJ2ZWRPcmRlcjogc3RyaW5nW10gPSBbXVxuKSB7XG4gIGlmICghbGF5ZXJzVG9JbnNlcnQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiB7bmV3TGF5ZXJzOiBjdXJyZW50TGF5ZXJzLCBuZXdMYXllck9yZGVyOiBjdXJyZW50T3JkZXJ9O1xuICB9XG5cbiAgY29uc3QgY3VycmVudExheWVyUXVldWUgPSBjdXJyZW50T3JkZXJcbiAgICAuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpXG4gICAgLm1hcChpZCA9PiBmaW5kQnlJZChpZCkoY3VycmVudExheWVycykpXG4gICAgLmZpbHRlcihsYXllciA9PiBCb29sZWFuKGxheWVyKSk7XG4gIGNvbnN0IG5ld0xheWVycyA9IGN1cnJlbnRMYXllcnMuY29uY2F0KGxheWVyc1RvSW5zZXJ0KTtcbiAgY29uc3QgbmV3TGF5ZXJPcmRlclF1ZXVlID0gaW5zZXJ0SXRlbUJhc2VkT25QcmVzZXJ2ZWRPcmRlcihcbiAgICBjdXJyZW50TGF5ZXJRdWV1ZSxcbiAgICBsYXllcnNUb0luc2VydCxcbiAgICBwcmVzZXJ2ZWRPcmRlcixcbiAgICB0cnVlXG4gICk7XG5cbiAgY29uc3QgbmV3RmxhdExheWVyT3JkZXIgPSBnZXRMYXllck9yZGVyRnJvbUxheWVycyhuZXdMYXllck9yZGVyUXVldWUpO1xuXG4gIC8vIElmIG5vIGdyb3VwcyBleGlzdCBpbiBjdXJyZW50IG9yZGVyLCBqdXN0IHVzZSB0aGUgbmV3IGZsYXQgb3JkZXJcbiAgY29uc3QgaGFzR3JvdXBzID0gY3VycmVudE9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIHJldHVybiB7XG4gICAgICBuZXdMYXllck9yZGVyOiBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgICAgIG5ld0xheWVyc1xuICAgIH07XG4gIH1cblxuICAvLyBSZWJ1aWxkIGxheWVyT3JkZXIgcHJlc2VydmluZyBncm91cHMgaW4gdGhlaXIgcmVsYXRpdmUgcG9zaXRpb25zLlxuICAvLyBSZXBsYWNlIGVhY2ggc3RyaW5nIGVudHJ5IHdpdGggaXRzIHVwZGF0ZWQgcG9zaXRpb24gZnJvbSBuZXdGbGF0TGF5ZXJPcmRlcixcbiAgLy8gYW5kIGtlZXAgZ3JvdXBzIGFzLWlzLlxuICBjb25zdCBleGlzdGluZ0ZsYXRJZHMgPSBuZXcgU2V0KFxuICAgIGN1cnJlbnRPcmRlci5maWx0ZXIoZW50cnkgPT4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykgYXMgc3RyaW5nW11cbiAgKTtcbiAgY29uc3QgbmV3SW5zZXJ0ZWRJZHMgPSBuZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gIWV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKTtcblxuICAvLyBSZWJ1aWxkOiB3YWxrIHRocm91Z2ggY3VycmVudE9yZGVyLCByZXBsYWNlIHN0cmluZyBlbnRyaWVzIHdpdGggdGhlaXJcbiAgLy8gbmV3IHBvc2l0aW9uIGVxdWl2YWxlbnRzIGZyb20gbmV3RmxhdExheWVyT3JkZXIsIHRoZW4gYXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnNcbiAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gIGNvbnN0IGZsYXRRdWV1ZSA9IFsuLi5uZXdGbGF0TGF5ZXJPcmRlci5maWx0ZXIoaWQgPT4gZXhpc3RpbmdGbGF0SWRzLmhhcyhpZCkpXTtcbiAgbGV0IGZsYXRJZHggPSAwO1xuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgY3VycmVudE9yZGVyKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICByZXN1bHQucHVzaChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZXBsYWNlIHdpdGggY29ycmVzcG9uZGluZyBlbnRyeSBmcm9tIHJlb3JkZXJlZCBmbGF0IGxpc3RcbiAgICAgIGlmIChmbGF0SWR4IDwgZmxhdFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHVzaChmbGF0UXVldWVbZmxhdElkeF0pO1xuICAgICAgICBmbGF0SWR4Kys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQXBwZW5kIGFueSBuZXdseSBpbnNlcnRlZCBsYXllcnMgYXQgdGhlIGZyb250ICh0aGV5IGFyZSBuZXcpXG4gIHJldHVybiB7XG4gICAgbmV3TGF5ZXJPcmRlcjogWy4uLm5ld0luc2VydGVkSWRzLCAuLi5yZXN1bHRdLFxuICAgIG5ld0xheWVyc1xuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIHNhdmVkIGxheWVyT3JkZXIgd2l0aCBjdXJyZW50IHN0YXRlIHRvIHJlc3RvcmUgbGF5ZXIgZ3JvdXBzLlxuICogQ2FsbGVkIGFmdGVyIGxheWVycyBoYXZlIGJlZW4gbWVyZ2VkLiBJZiB0aGUgc2F2ZWQgY29uZmlnIGNvbnRhaW5zIGEgbGF5ZXJPcmRlclxuICogd2l0aCBncm91cHMsIHRoaXMgcmVwbGFjZXMgdGhlIGZsYXQgbGF5ZXJPcmRlciB3aXRoIHRoZSBzYXZlZCBoaWVyYXJjaGljYWwgb25lLFxuICogZmlsdGVyaW5nIG91dCBhbnkgbGF5ZXIgSURzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyT3JkZXI8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHNhdmVkTGF5ZXJPcmRlcj86IGFueVtdLFxuICBmcm9tQ29uZmlnPzogYm9vbGVhblxuKTogUyB7XG4gIGlmICghc2F2ZWRMYXllck9yZGVyIHx8ICFBcnJheS5pc0FycmF5KHNhdmVkTGF5ZXJPcmRlcikgfHwgc2F2ZWRMYXllck9yZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBzYXZlZCBsYXllck9yZGVyIGNvbnRhaW5zIGFueSBncm91cHNcbiAgY29uc3QgaGFzR3JvdXBzID0gc2F2ZWRMYXllck9yZGVyLnNvbWUoZW50cnkgPT4gaXNQbGFpbk9iamVjdChlbnRyeSkpO1xuICBpZiAoIWhhc0dyb3Vwcykge1xuICAgIC8vIE5vIGdyb3VwcyAtIHRoZSBsYXllciBtZXJnZXIgYWxyZWFkeSBoYW5kbGVkIG9yZGVyaW5nIHZpYSBwcmVzZXJ2ZUxheWVyT3JkZXJcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBJZiBsYXllcnMgaGF2ZW4ndCBiZWVuIG1lcmdlZCB5ZXQsIHN0b3JlIGZvciBsYXRlclxuICBpZiAoc3RhdGUubGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZExheWVyT3JkZXJcbiAgICB9O1xuICB9XG5cbiAgLy8gQnVpbGQgYSBzZXQgb2YgdmFsaWQgbGF5ZXIgSURzIGZyb20gY3VycmVudCBzdGF0ZVxuICBjb25zdCB2YWxpZExheWVySWRzID0gbmV3IFNldChzdGF0ZS5sYXllcnMubWFwKGwgPT4gbC5pZCkpO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IGZpbHRlciB0aGUgc2F2ZWQgbGF5ZXJPcmRlciB0byBvbmx5IGluY2x1ZGUgdmFsaWQgbGF5ZXJzXG4gIGZ1bmN0aW9uIGZpbHRlckxheWVyT3JkZXIob3JkZXI6IGFueVtdKTogTGF5ZXJPcmRlciB7XG4gICAgY29uc3QgcmVzdWx0OiBMYXllck9yZGVyID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBvcmRlcikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZW50cnkpKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEdyb3VwT3JkZXIgPSBmaWx0ZXJMYXllck9yZGVyKGdyb3VwLmxheWVyT3JkZXIpO1xuICAgICAgICAvLyBLZWVwIHRoZSBncm91cCBldmVuIGlmIGVtcHR5ICh1c2VyIG1heSB3YW50IHRoZSBlbXB0eSBncm91cClcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgIGxheWVyT3JkZXI6IGZpbHRlcmVkR3JvdXBPcmRlclxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyAmJiB2YWxpZExheWVySWRzLmhhcyhlbnRyeSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uc3QgcmVzdG9yZWRMYXllck9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihzYXZlZExheWVyT3JkZXIpO1xuXG4gIC8vIEZpbmQgYW55IGxheWVycyBpbiB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IGFyZW4ndCBpbiB0aGUgcmVzdG9yZWQgb3JkZXJcbiAgLy8gKGNvdWxkIGhhcHBlbiBpZiBsYXllcnMgd2VyZSBhZGRlZCBiZXR3ZWVuIHNhdmUgYW5kIGxvYWQpXG4gIGNvbnN0IGxheWVySWRzSW5SZXN0b3JlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmdW5jdGlvbiBjb2xsZWN0SWRzKG9yZGVyOiBhbnlbXSkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb2xsZWN0SWRzKChlbnRyeSBhcyBMYXllck9yZGVyR3JvdXApLmxheWVyT3JkZXIpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxheWVySWRzSW5SZXN0b3JlZC5hZGQoZW50cnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb2xsZWN0SWRzKHJlc3RvcmVkTGF5ZXJPcmRlcik7XG5cbiAgLy8gQWRkIGFueSBtaXNzaW5nIGxheWVycyBhdCB0aGUgdG9wXG4gIGNvbnN0IG1pc3NpbmdMYXllcnMgPSBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIWxheWVySWRzSW5SZXN0b3JlZC5oYXMobC5pZCkpLm1hcChsID0+IGwuaWQpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbGF5ZXJPcmRlcjogWy4uLm1pc3NpbmdMYXllcnMsIC4uLnJlc3RvcmVkTGF5ZXJPcmRlcl0sXG4gICAgbGF5ZXJPcmRlclRvQmVNZXJnZWQ6IG51bGxcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbnMgd2l0aCBzYXZlZCBjb25maWdcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUludGVyYWN0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+IHwgdW5kZWZpbmVkXG4pOiBTIHtcbiAgY29uc3QgbWVyZ2VkOiBOZXN0ZWRQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+ID0ge307XG5cbiAgaWYgKGludGVyYWN0aW9uVG9CZU1lcmdlZCkge1xuICAgIChPYmplY3Qua2V5cyhpbnRlcmFjdGlvblRvQmVNZXJnZWQpIGFzIEFycmF5PGtleW9mIFNhdmVkSW50ZXJhY3Rpb25Db25maWc+KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50Q29uZmlnID1cbiAgICAgICAga2V5ID09PSAndG9vbHRpcCcgfHxcbiAgICAgICAga2V5ID09PSAnYnJ1c2gnIHx8XG4gICAgICAgIGtleSA9PT0gJ2dlb2NvZGVyJyB8fFxuICAgICAgICBrZXkgPT09ICdsZWdlbmQnIHx8XG4gICAgICAgIGtleSA9PT0gJ3pvb21PcGFjaXR5J1xuICAgICAgICAgID8gc3RhdGUuaW50ZXJhY3Rpb25Db25maWdba2V5XS5jb25maWdcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIGNvbnN0IHtlbmFibGVkLCAuLi5jb25maWdTYXZlZH0gPSBpbnRlcmFjdGlvblRvQmVNZXJnZWRba2V5XSB8fCB7fTtcblxuICAgICAgbGV0IGNvbmZpZ1RvTWVyZ2UgPSBjb25maWdTYXZlZDtcblxuICAgICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAgIGNvbnN0IHNhdmVkVG9vbHRpcENvbmZpZyA9IGNvbmZpZ1NhdmVkIGFzIFNhdmVkSW50ZXJhY3Rpb25Db25maWdbJ3Rvb2x0aXAnXTtcbiAgICAgICAgY29uc3Qge21lcmdlZFRvb2x0aXAsIHVubWVyZ2VkVG9vbHRpcH0gPSBtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyhcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBzYXZlZFRvb2x0aXBDb25maWdcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBtZXJnZSBuZXcgZGF0YXNldCB0b29sdGlwcyB3aXRoIG9yaWdpbmFsIGRhdGFzZXQgdG9vbHRpcHNcbiAgICAgICAgY29uZmlnVG9NZXJnZSA9IHtcbiAgICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICAgIC4uLihjdXJyZW50Q29uZmlnIGFzIFRvb2x0aXBJbmZvWydjb25maWcnXSkuZmllbGRzVG9TaG93LFxuICAgICAgICAgICAgLi4ubWVyZ2VkVG9vbHRpcFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uKHNhdmVkVG9vbHRpcENvbmZpZy50aW1lem9uZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHt0aW1lem9uZTogc2F2ZWRUb29sdGlwQ29uZmlnLnRpbWV6b25lfVxuICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModW5tZXJnZWRUb29sdGlwKS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgdW5tZXJnZWQudG9vbHRpcCA9IHtmaWVsZHNUb1Nob3c6IHVubWVyZ2VkVG9vbHRpcCwgZW5hYmxlZDogQm9vbGVhbihlbmFibGVkKX07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVyZ2VkW2tleV0gPSB7XG4gICAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0sXG4gICAgICAgIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCksXG4gICAgICAgIC4uLihjdXJyZW50Q29uZmlnXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmZpZzogcGljayhcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5jdXJyZW50Q29uZmlnLFxuICAgICAgICAgICAgICAgICAgLi4uY29uZmlnVG9NZXJnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY3VycmVudENvbmZpZylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV4dFN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGludGVyYWN0aW9uQ29uZmlnOiB7XG4gICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgIC4uLm1lcmdlZFxuICAgIH0sXG4gICAgaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkOiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24oc3RhdGUsIHVubWVyZ2VkKVxuICB9O1xuICByZXR1cm4gbmV4dFN0YXRlO1xufVxuXG5mdW5jdGlvbiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzKGNvbmZpZ3M6IFNhdmVkSW50ZXJhY3Rpb25Db25maWdbXSk6IFNhdmVkSW50ZXJhY3Rpb25Db25maWcge1xuICBjb25zdCBjb21iaW5lZCA9IHsuLi5jb25maWdzWzBdfTtcbiAgLy8gYGxlZ2VuZGAgaXMgb3B0aW9uYWwgb24gb2xkZXIgc2F2ZWQgbWFwczsgc2VlZCBpdCBzbyBhIGxhdGVyIGNvbmZpZyBpcyBub3QgZHJvcHBlZC5cbiAgaWYgKCFjb21iaW5lZC5sZWdlbmQpIHtcbiAgICBjb25zdCB3aXRoTGVnZW5kID0gY29uZmlncy5maW5kKGMgPT4gYy5sZWdlbmQpO1xuICAgIGlmICh3aXRoTGVnZW5kPy5sZWdlbmQpIHtcbiAgICAgIGNvbWJpbmVkLmxlZ2VuZCA9IHdpdGhMZWdlbmQubGVnZW5kO1xuICAgIH1cbiAgfVxuICAvLyBTYW1lIGZvciBmYWRlLW9uLXpvb206IGFuIG9sZGVyIGNvbmZpZyBpbiBmcm9udCBtdXN0IG5vdCBkcm9wIGNvbnRyb2xsZXJzIGZyb20gYSBsYXRlciBvbmUuXG4gIGlmICghY29tYmluZWQuem9vbU9wYWNpdHkpIHtcbiAgICBjb25zdCB3aXRoWm9vbU9wYWNpdHkgPSBjb25maWdzLmZpbmQoYyA9PiBjLnpvb21PcGFjaXR5KTtcbiAgICBpZiAod2l0aFpvb21PcGFjaXR5Py56b29tT3BhY2l0eSkge1xuICAgICAgY29tYmluZWQuem9vbU9wYWNpdHkgPSB3aXRoWm9vbU9wYWNpdHkuem9vbU9wYWNpdHk7XG4gICAgfVxuICB9XG4gIC8vIGhhbmRsZSBlYWNoIHByb3BlcnR5IGtleSBvZiBhbiBgSW50ZXJhY3Rpb25Db25maWdgLCBlLmcuIHRvb2x0aXAsIGdlb2NvZGVyLCBicnVzaCwgY29vcmRpbmF0ZVxuICAvLyBieSBjb21iaW5pbmcgdmFsdWVzIGZvciBlYWNoIGFtb25nIGFsbCBwYXNzZWQgaW4gY29uZmlnc1xuXG4gIGZvciAoY29uc3Qga2V5IGluIGNvbWJpbmVkKSB7XG4gICAgY29uc3QgdG9CZUNvbWJpbmVkUHJvcHMgPSBjb25maWdzLm1hcChjID0+IGNba2V5XSk7XG5cbiAgICAvLyBhbGwgb2YgdGhlc2UgaGF2ZSBhbiBlbmFibGVkIGJvb2xlYW5cbiAgICBjb21iaW5lZFtrZXldID0ge1xuICAgICAgLy8gYXJlIGFueSBvZiB0aGUgY29uZmlncycgZW5hYmxlZCB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGVuYWJsZWQ6IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5lbmFibGVkKVxuICAgIH07XG5cbiAgICBpZiAoa2V5ID09PSAndG9vbHRpcCcpIHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGNvbXBhcmVNb2RlIHZhbHVlcyB0cnVlP1xuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlTW9kZSA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5jb21wYXJlTW9kZSk7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgY29tcGFyZSB0eXBlIG1vZGUsIGl0IHdpbGwgYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlXG4gICAgICBjb21iaW5lZFtrZXldLmNvbXBhcmVUeXBlID0gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoXG4gICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHAuY29tcGFyZVR5cGUpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBoYXNUaW1lem9uZSA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy50aW1lem9uZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgIGlmIChoYXNUaW1lem9uZSkge1xuICAgICAgICBjb21iaW5lZFtrZXldLnRpbWV6b25lID0gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoXG4gICAgICAgICAgdG9CZUNvbWJpbmVkUHJvcHMubWFwKHAgPT4gcD8udGltZXpvbmUpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbWJpbmUgZmllbGRzVG9TaG93IGFtb25nIGFsbCBkYXRhc2V0IGlkc1xuICAgICAgY29tYmluZWRba2V5XS5maWVsZHNUb1Nob3cgPSB0b0JlQ29tYmluZWRQcm9wc1xuICAgICAgICAubWFwKHAgPT4gcC5maWVsZHNUb1Nob3cpXG4gICAgICAgIC5yZWR1Y2UoKGFjYywgbmV4dEZpZWxkc1RvU2hvdykgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgbmV4dERhdGFJZEtleSBpbiBuZXh0RmllbGRzVG9TaG93KSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VG9vbHRpcEZpZWxkcyA9IG5leHRGaWVsZHNUb1Nob3dbbmV4dERhdGFJZEtleV07XG4gICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XSkge1xuICAgICAgICAgICAgICAvLyBpZiB0aGUgZGF0YXNldCBpZCBpcyBub3QgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gdGhlbiBhZGQgaXQgd2l0aCBpdHMgdG9vbHRpcCBmaWVsZHNcbiAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldID0gbmV4dFRvb2x0aXBGaWVsZHM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGRhdGFzZXQgaWQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAgICAgICAgICAvLyBzbyBvbmx5IGFkZCB0aGUgbmV4dCB0b29sdGlwIGZpZWxkcyBmb3IgdGhpcyBkYXRhc2V0J3MgYXJyYXkgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgcHJlc2VudCxcbiAgICAgICAgICAgICAgLy8gdXNpbmcgdGhlIHRvb2x0aXBGaWVsZC5uYW1lIHByb3BlcnR5IGZvciB1bmlxdWVuZXNzXG4gICAgICAgICAgICAgIG5leHRUb29sdGlwRmllbGRzLmZvckVhY2gobmV4dFRGID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjY1tuZXh0RGF0YUlkS2V5XS5maW5kKCh7bmFtZX0pID0+IG5leHRURi5uYW1lID09PSBuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgYWNjW25leHREYXRhSWRLZXldLnB1c2gobmV4dFRGKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2JydXNoJykge1xuICAgICAgLy8ga2VlcCB0aGUgYmlnZ2VzdCBicnVzaCBzaXplXG4gICAgICBjb21iaW5lZFtrZXldLnNpemUgPVxuICAgICAgICBhZ2dyZWdhdGUodG9CZUNvbWJpbmVkUHJvcHMsIEFHR1JFR0FUSU9OX1RZUEVTLm1heGltdW0sIHAgPT4gcC5zaXplKSA/PyBudWxsO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdnZW9jb2RlcicpIHtcbiAgICAgIGNvbWJpbmVkW2tleV0ubGltaXRTZWFyY2ggPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8ubGltaXRTZWFyY2gpO1xuICAgICAgY29uc3QgY29sb3IgPSB0b0JlQ29tYmluZWRQcm9wcy5maW5kKHAgPT4gcD8uY29sb3IpPy5jb2xvcjtcbiAgICAgIGlmIChjb2xvcikge1xuICAgICAgICBjb21iaW5lZFtrZXldLmNvbG9yID0gY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ2xlZ2VuZCcpIHtcbiAgICAgIGNvbWJpbmVkW2tleV0uaGlkZUludmlzaWJsZUxheWVycyA9IHRvQmVDb21iaW5lZFByb3BzLnNvbWUocCA9PiBwPy5oaWRlSW52aXNpYmxlTGF5ZXJzKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnem9vbU9wYWNpdHknICYmIGNvbWJpbmVkLnpvb21PcGFjaXR5KSB7XG4gICAgICBjb21iaW5lZC56b29tT3BhY2l0eS5jb250cm9sbGVycyA9IGNvbWJpbmVab29tT3BhY2l0eUNvbnRyb2xsZXJzKHRvQmVDb21iaW5lZFByb3BzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tYmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbjxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgdW5tZXJnZWQ6IFBhcnRpYWw8U2F2ZWRJbnRlcmFjdGlvbkNvbmZpZz5cbikge1xuICBpZiAoIXVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3cpIHtcbiAgICByZXR1cm4gc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkO1xuICB9XG4gIHJldHVybiB7XG4gICAgdG9vbHRpcDoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkLnRvb2x0aXAsXG4gICAgICAuLi4odHlwZW9mIHVubWVyZ2VkPy50b29sdGlwPy5lbmFibGVkID09PSAnYm9vbGVhbidcbiAgICAgICAgPyB7ZW5hYmxlZDogdW5tZXJnZWQudG9vbHRpcC5lbmFibGVkfVxuICAgICAgICA6IHt9KSxcbiAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvblRvQmVNZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvdyxcbiAgICAgICAgLi4udW5tZXJnZWQ/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyhpbnRlcmFjdGlvbkNvbmZpZywgZGF0YUlkOiBzdHJpbmcsIGRhdGFJZFRvUmVwbGFjZTogc3RyaW5nKSB7XG4gIGlmIChpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICB0b29sdGlwOiB7XG4gICAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLnRvb2x0aXAsXG4gICAgICAgIGZpZWxkc1RvU2hvdzoge1xuICAgICAgICAgIFtkYXRhSWRUb1JlcGxhY2VdOiBpbnRlcmFjdGlvbkNvbmZpZz8udG9vbHRpcD8uZmllbGRzVG9TaG93W2RhdGFJZF1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogTWVyZ2Ugc3BsaXRNYXBzIGNvbmZpZyB3aXRoIGN1cnJlbnQgdmlzU3RldGUuXG4gKiBQYW5lbHMgYXJlIG1hdGNoZWQgYnkgaW5kZXg6IGluZGV4IGkgb2YgYHNwbGl0TWFwc2AsIGBzdGF0ZS5zcGxpdE1hcHNgIGFuZFxuICogYHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWRgIGlzIHRoZSBzYW1lIG1hcCBwYW5lbC5cbiAqIDEuIGlmIGN1cnJlbnQgbWFwIGlzIHNwbGl0LCBidXQgc3BsaXRNYXAgRE9FU05PVCBjb250YWluIG1hcHNcbiAqICAgIDogZG9uJ3QgbWVyZ2UgYW55dGhpbmdcbiAqIDIuIGlmIGN1cnJlbnQgbWFwIGlzIE5PVCBzcGxpdCwgYnV0IHNwbGl0TWFwcyBjb250YWluIG1hcHNcbiAqICAgIDogYWRkIHRvIHNwbGl0TWFwcywgYW5kIGFkZCBjdXJyZW50IGxheWVycyB0byBzcGxpdE1hcHMuXG4gKiAgICAgIFBhbmVscyBhcmUgY3JlYXRlZCBvbmNlIG9uZSBvZiB0aGVtIGNhbiBiZSBtZXJnZWQ6IGl0IGhhcyBubyBsYXllcnMsIG9yIG9uZSBvZiBpdHMgbGF5ZXJzIGV4aXN0c1xuICogMy4gbGF5ZXJzIHRoYXQgZG9uJ3QgZXhpc3QgeWV0XG4gKiAgICA6IHNhdmUgdG8gc3BsaXRNYXBzVG9CZU1lcmdlZCwgaW4gdGhlIHBhbmVsIGF0IHRoZSBzYW1lIGluZGV4XG4gKiBBIGxheWVyIGxpc3RlZCBpbiBzcGxpdE1hcHMgb25seSBzaG93cyBpbiB0aGUgcGFuZWxzIHRoYXQgbGlzdCBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU3BsaXRNYXBzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzcGxpdE1hcHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ3NwbGl0TWFwcyddID0gW11cbik6IFMge1xuICBjb25zdCBsYXllckV4aXN0cyA9IChpZDogc3RyaW5nKSA9PiBzdGF0ZS5sYXllcnMuc29tZShsID0+IGwuaWQgPT09IGlkKTtcbiAgY29uc3QgY3JlYXRlUGFuZWxzID1cbiAgICBzdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMCB8fFxuICAgIHNwbGl0TWFwcy5zb21lKHNtID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IE9iamVjdC5rZXlzKHNtLmxheWVycyk7XG4gICAgICByZXR1cm4gIWlkcy5sZW5ndGggfHwgaWRzLnNvbWUobGF5ZXJFeGlzdHMpO1xuICAgIH0pO1xuICBjb25zdCBjdXJyZW50TGF5ZXJzID0gZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwKFxuICAgIHN0YXRlLmxheWVycy5maWx0ZXIobCA9PiAhc3BsaXRNYXBzLnNvbWUoc20gPT4gbC5pZCBpbiBzbS5sYXllcnMpKVxuICApO1xuXG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5zdGF0ZS5zcGxpdE1hcHNdO1xuICBjb25zdCB1bm1lcmdlZDogdHlwZW9mIHNwbGl0TWFwcyA9IFtdO1xuICBzcGxpdE1hcHMuZm9yRWFjaCgoc20sIGkpID0+IHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc20ubGF5ZXJzKTtcbiAgICBpZiAoY3JlYXRlUGFuZWxzKSB7XG4gICAgICAvLyBjcmVhdGUgbWFwIHBhbmVsIGlmIGN1cnJlbnQgbWFwIGlzIG5vdCBzcGxpdCwga2VlcCBpZFxuICAgICAgY29uc3QgcGFuZWwgPSBtZXJnZWRbaV0gfHwgey4uLnNtLCBsYXllcnM6IGN1cnJlbnRMYXllcnN9O1xuICAgICAgbWVyZ2VkW2ldID0ge1xuICAgICAgICAuLi5wYW5lbCxcbiAgICAgICAgbGF5ZXJzOiB7Li4ucGFuZWwubGF5ZXJzLCAuLi5PYmplY3QuZnJvbUVudHJpZXMoZW50cmllcy5maWx0ZXIoKFtpZF0pID0+IGxheWVyRXhpc3RzKGlkKSkpfVxuICAgICAgfTtcbiAgICB9XG4gICAgdW5tZXJnZWRbaV0gPSB7Li4uc20sIGxheWVyczogT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuZmlsdGVyKChbaWRdKSA9PiAhbGF5ZXJFeGlzdHMoaWQpKSl9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNwbGl0TWFwczogbWVyZ2VkLFxuICAgIHNwbGl0TWFwc1RvQmVNZXJnZWQ6IHVubWVyZ2VkLnNvbWUoc20gPT4gT2JqZWN0LmtleXMoc20ubGF5ZXJzKS5sZW5ndGgpXG4gICAgICA/IGNvbWJpbmVTcGxpdE1hcHNCeUluZGV4KHN0YXRlLnNwbGl0TWFwc1RvQmVNZXJnZWQsIHVubWVyZ2VkKVxuICAgICAgOiBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgY2hhcnRzIHdpdGggc2F2ZWQgY29uZmlnLiBDaGFydHMgd2hvc2UgZGF0YXNldCBpcyBub3QgbG9hZGVkIHlldCBhcmVcbiAqIHBhcmtlZCBvbiBgY2hhcnRzVG9CZU1lcmdlZGAgKHNhbWUgYXMgZmlsdGVycykgc28gZGF0YXNldCByZXBsYWNlIGNhbiByZW1hcFxuICogYGRhdGFJZGAgYW5kIHJlc3RvcmUgdGhlbSBhZnRlciB0aGUgbmV3IHRhYmxlIGxhbmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGFydHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGNoYXJ0czogQ2hhcnRDb25maWdbXSB8IHVuZGVmaW5lZCxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY2hhcnRzKSB8fCAhY2hhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICBjb25zdCBpbmNvbWluZ0lkcyA9IG5ldyBTZXQoXG4gICAgY2hhcnRzLm1hcChjaGFydCA9PiBjaGFydD8uaWQpLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZCkpXG4gICk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldCgoc3RhdGUuY2hhcnRzIHx8IFtdKS5tYXAoY2hhcnQgPT4gY2hhcnQuaWQpKTtcbiAgY29uc3QgbmV4dENoYXJ0czogQ2hhcnRDb25maWdbXSA9IFtdO1xuICBjb25zdCBmYWlsZWQ6IENoYXJ0Q29uZmlnW10gPSBbXTtcbiAgY2hhcnRzLmZvckVhY2goY2hhcnQgPT4ge1xuICAgIGlmICghY2hhcnQgfHwgIWNoYXJ0LmlkIHx8IGV4aXN0aW5nSWRzLmhhcyhjaGFydC5pZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZDogQ2hhcnRDb25maWcgPSBmcm9tQ29uZmlnXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5jaGFydCxcbiAgICAgICAgICAvLyBPbGRlciBjb25maWdzIG9taXQgYHBpbm5lZGA7IGtlZXAgY2hhcnRzIHZpc2libGUgbGlrZSB0aGUgbGVnZW5kLlxuICAgICAgICAgIHBpbm5lZDogY2hhcnQucGlubmVkICE9PSBmYWxzZSxcbiAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAuLi5jaGFydC5kaXNwbGF5LFxuICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgaXNKc29uRWRpdG9yQWN0aXZlOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiBjaGFydDtcbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkLmRhdGFJZCAmJlxuICAgICAgKCFzdGF0ZS5kYXRhc2V0c1tub3JtYWxpemVkLmRhdGFJZF0gfHwgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbbm9ybWFsaXplZC5kYXRhSWRdKVxuICAgICkge1xuICAgICAgZmFpbGVkLnB1c2gobm9ybWFsaXplZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV4aXN0aW5nSWRzLmFkZChub3JtYWxpemVkLmlkKTtcbiAgICBuZXh0Q2hhcnRzLnB1c2gobm9ybWFsaXplZCk7XG4gIH0pO1xuICBpZiAoIW5leHRDaGFydHMubGVuZ3RoICYmICFmYWlsZWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgY2hhcnRzOiBuZXh0Q2hhcnRzLmxlbmd0aCA/IFsuLi4oc3RhdGUuY2hhcnRzIHx8IFtdKSwgLi4ubmV4dENoYXJ0c10gOiBzdGF0ZS5jaGFydHMsXG4gICAgY2hhcnRzVG9CZU1lcmdlZDogW1xuICAgICAgLi4uKHN0YXRlLmNoYXJ0c1RvQmVNZXJnZWQgfHwgW10pLmZpbHRlcihjaGFydCA9PiAhaW5jb21pbmdJZHMuaGFzKGNoYXJ0LmlkKSksXG4gICAgICAuLi5mYWlsZWRcbiAgICBdXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQ2hhcnREYXRhc2V0SWRzKFxuICBzYXZlZENoYXJ0czogQ2hhcnRDb25maWdbXSB8IHVuZGVmaW5lZCxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbik6IENoYXJ0Q29uZmlnW10gfCBudWxsIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHNhdmVkQ2hhcnRzKSB8fCAhc2F2ZWRDaGFydHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVwbGFjZWQgPSBzYXZlZENoYXJ0c1xuICAgIC5maWx0ZXIoY2hhcnQgPT4gY2hhcnQ/LmRhdGFJZCA9PT0gZGF0YUlkKVxuICAgIC5tYXAoY2hhcnQgPT4gKHsuLi5jaGFydCwgZGF0YUlkOiBkYXRhSWRUb1VzZX0pKTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVmZmVjdHM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGVmZmVjdHM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2VmZmVjdHMnXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBuZXdFZmZlY3RzID0gW1xuICAgIC4uLnN0YXRlLmVmZmVjdHMsXG4gICAgLi4uKGVmZmVjdHMgfHwgW10pXG4gICAgICAubWFwKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBmcm9tQ29uZmlnXG4gICAgICAgICAgPyBjcmVhdGVFZmZlY3QoXG4gICAgICAgICAgICAgIGRlZXBtZXJnZS5hbGwoW1xuICAgICAgICAgICAgICAgIGVmZmVjdCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAvLyBjb2xsYXBzZSBhbGwgcGFuZWxzIHdoZW4gbG9hZGluZyBlZmZlY3RzXG4gICAgICAgICAgICAgICAgICBpc0NvbmZpZ0FjdGl2ZTogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAoZWZmZWN0IGFzIEVmZmVjdFR5cGUpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWZmZWN0ICYmIGVmZmVjdC5pc1ZhbGlkVG9TYXZlKCkpO1xuICAgICAgfSlcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZmZlY3RzOiBuZXdFZmZlY3RzLFxuICAgIGVmZmVjdE9yZGVyOiBuZXdFZmZlY3RzLm1hcChlZmZlY3QgPT4gZWZmZWN0LmlkKVxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGFubm90YXRpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFubm90YXRpb25zPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oc3RhdGU6IFMsIGFubm90YXRpb25zOiBhbnlbXSk6IFMge1xuICBpZiAoIWFubm90YXRpb25zIHx8ICFhbm5vdGF0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHN0YXRlLmFubm90YXRpb25zLm1hcChhID0+IGEuaWQpKTtcbiAgY29uc3QgdmFsaWRBbm5vdGF0aW9ucyA9IGFubm90YXRpb25zXG4gICAgLmZpbHRlcihcbiAgICAgIGEgPT5cbiAgICAgICAgYSAmJlxuICAgICAgICBhLmlkICYmXG4gICAgICAgICFleGlzdGluZ0lkcy5oYXMoYS5pZCkgJiZcbiAgICAgICAgaXNBbm5vdGF0aW9uS2luZChhLmtpbmQpICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoYS5hbmNob3JQb2ludCkgJiZcbiAgICAgICAgKGEuYW5jaG9yUG9pbnQubGVuZ3RoID09PSAyIHx8IGEuYW5jaG9yUG9pbnQubGVuZ3RoID09PSAzKSAmJlxuICAgICAgICBhLmFuY2hvclBvaW50LmV2ZXJ5KHZhbHVlID0+IE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpXG4gICAgKVxuICAgIC5tYXAoYSA9PiAoe1xuICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgYXV0b1NpemU6IHRydWUsXG4gICAgICBhdXRvU2l6ZVk6IHRydWUsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBsaW5lQ29sb3I6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICAgICAgbGluZVdpZHRoOiBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSCxcbiAgICAgIHRleHRXaWR0aDogMCxcbiAgICAgIHRleHRIZWlnaHQ6IDAsXG4gICAgICAuLi5hXG4gICAgfSkpO1xuICBpZiAoIXZhbGlkQW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFsuLi5zdGF0ZS5hbm5vdGF0aW9ucywgLi4udmFsaWRBbm5vdGF0aW9uc11cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwIHdpdGggc2F2ZWQgY29uZmlnLFxuICogdmFsaWRhdGUgZmllbGRzVG9TaG93XG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcGFyYW0gdG9vbHRpcENvbmZpZ1xuICogQHJldHVybiAtIHttZXJnZWRUb29sdGlwOiB7fSwgdW5tZXJnZWRUb29sdGlwOiB7fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHRvb2x0aXBDb25maWc6IFBpY2s8VG9vbHRpcEluZm9bJ2NvbmZpZyddLCAnZmllbGRzVG9TaG93Jz4gfCBudWxsID0gbnVsbFxuKSB7XG4gIGNvbnN0IHVubWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuICBjb25zdCBtZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG5cbiAgaWYgKFxuICAgICF0b29sdGlwQ29uZmlnIHx8XG4gICAgIXRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93IHx8XG4gICAgIU9iamVjdC5rZXlzKHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KS5sZW5ndGhcbiAgKSB7XG4gICAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBkYXRhSWQgaW4gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpIHtcbiAgICBpZiAoIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gfHwgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbZGF0YUlkXSkge1xuICAgICAgLy8gaXMgbm90IHlldCBsb2FkZWRcbiAgICAgIHVubWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgZGF0YXNldCBpcyBsb2FkZWRcbiAgICAgIGNvbnN0IGFsbEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzLm1hcChkID0+IGQubmFtZSk7XG4gICAgICBjb25zdCBmb3VuZEZpZWxkc1RvU2hvdyA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF0uZmlsdGVyKGZpZWxkID0+XG4gICAgICAgIGFsbEZpZWxkcy5pbmNsdWRlcyhmaWVsZC5uYW1lKVxuICAgICAgKTtcblxuICAgICAgbWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gZm91bmRGaWVsZHNUb1Nob3c7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xufVxuLyoqXG4gKiBNZXJnZSBsYXllckJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyQmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyQmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVyQmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChsYXllckJsZW5kaW5nICYmIExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyQmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIGxheWVyIGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICovXG5mdW5jdGlvbiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBsYXllciBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBvdmVybGF5QmxlbmRpbmcgd2l0aCBzYXZlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPdmVybGF5QmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIG92ZXJsYXlCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnb3ZlcmxheUJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAob3ZlcmxheUJsZW5kaW5nICYmIE9WRVJMQVlfQkxFTkRJTkdTW292ZXJsYXlCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIG92ZXJsYXkgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKiovXG5mdW5jdGlvbiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIG92ZXJsYXkgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2UgYW5pbWF0aW9uIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbmltYXRpb25Db25maWc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFuaW1hdGlvbjogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnYW5pbWF0aW9uQ29uZmlnJ11cbik6IFMge1xuICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5jdXJyZW50VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmFuaW1hdGlvbixcbiAgICAgICAgZG9tYWluOiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MoY29uZmlnczogU2F2ZWRBbmltYXRpb25Db25maWdbXSk6IFNhdmVkQW5pbWF0aW9uQ29uZmlnIHtcbiAgLy8gZ2V0IHRoZSBzbWFsbGVzdCB2YWx1ZXMgb2YgY3VycmVudFRpbWUgYW5kIHNwZWVkIGFtb25nIGFsbCBjb25maWdzXG4gIHJldHVybiB7XG4gICAgY3VycmVudFRpbWU6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuY3VycmVudFRpbWUpID8/IG51bGwsXG4gICAgc3BlZWQ6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuc3BlZWQpID8/IG51bGwsXG4gICAgLy8gYW5kIHRoZSBtb3N0IGNvbW1vbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmUgYW1vbmcgdGhlIGNvbmZpZ3MgdGhhdCBzZXQgb25lXG4gICAgdGltZUZvcm1hdDogZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncy5tYXAoYyA9PiBjLnRpbWVGb3JtYXQpKSxcbiAgICB0aW1lem9uZTogZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncy5tYXAoYyA9PiBjLnRpbWV6b25lKSlcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb2x1bW5zIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICpcbiAqIEBwYXJhbSBmaWVsZHNcbiAqIEBwYXJhbSBzYXZlZENvbHNcbiAqIEBwYXJhbSBlbXB0eUNvbHNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuIC0gdmFsaWRhdGVkIGNvbHVtbnMgb3IgbnVsbFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgc2F2ZWRDb2xzOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9ID0ge30sXG4gIGVtcHR5Q29sczogTGF5ZXJDb2x1bW5zLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIC8vIFByZXBhcmUgY29sdW1ucyBmb3IgdGhlIHZhbGlkYXRvclxuICBjb25zdCBjb2x1bW5zOiB0eXBlb2YgZW1wdHlDb2xzID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVtcHR5Q29scykpIHtcbiAgICBjb2x1bW5zW2tleV0gPSB7Li4uZW1wdHlDb2xzW2tleV19O1xuXG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZENvbHNba2V5XTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gZmllbGRzLmZpbmRJbmRleCgoe25hbWV9KSA9PiBuYW1lID09PSBzYXZlZCk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmb3VuZCBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnNba2V5XS5maWVsZElkeCA9IGZpZWxkSWR4O1xuICAgICAgICBjb2x1bW5zW2tleV0udmFsdWUgPSBzYXZlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGFjdHVhbCBjb2x1bW4gZmllbGRJZHgsIGluIGNhc2UgaXQgaGFzIGNoYW5nZWRcbiAgY29uc3QgYWxsQ29sRm91bmQgPSBPYmplY3Qua2V5cyhjb2x1bW5zKS5ldmVyeShrZXkgPT5cbiAgICB2YWxpZGF0ZUNvbHVtbihjb2x1bW5zW2tleV0sIGNvbHVtbnMsIGZpZWxkcylcbiAgKTtcblxuICBjb25zdCBydiA9IGFsbENvbEZvdW5kID8gY29sdW1ucyA6IG51bGw7XG4gIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgIGNvbnN0IHJlcXVpcmVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKGVtcHR5Q29scykuZmlsdGVyKGsgPT4gIWVtcHR5Q29sc1trXS5vcHRpb25hbCk7XG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSByZXF1aXJlZENvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXS52YWx1ZSk7XG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgbWlzc2luZyBvciBpbnZhbGlkIGNvbHVtbnM6ICR7bWlzc2luZ0NvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnQ29sdW1ucyA9IE9iamVjdC5rZXlzKHNhdmVkQ29scyk7XG4gICAgY29uc3QgaW52YWxpZENvbHVtbnMgPSBjb25maWdDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10/LnZhbHVlKTtcbiAgICBpZiAoaW52YWxpZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIGNvbHVtbnM6ICR7aW52YWxpZENvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcnY7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgbGF5ZXIgY29sdW1uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbHVtbihcbiAgY29sdW1uOiBMYXllckNvbHVtbiAmIHt2YWxpZGF0b3I/OiB0eXBlb2YgdmFsaWRhdGVDb2x1bW59LFxuICBjb2x1bW5zOiBMYXllckNvbHVtbnMsXG4gIGFsbEZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbHVtbi5vcHRpb25hbCB8fCBjb2x1bW4udmFsdWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY29sdW1uLnZhbGlkYXRvcikge1xuICAgIHJldHVybiBjb2x1bW4udmFsaWRhdG9yKGNvbHVtbiwgY29sdW1ucywgYWxsRmllbGRzKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdGV4dCBsYWJlbCBjb25maWcgd2l0aCBuZXcgZGF0YVxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBUZXh0TGFiZWxTY2hlbWFWMVxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZmllbGRzXG4gKiBAcGFyYW0ge09iamVjdH0gc2F2ZWRUZXh0TGFiZWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gdmFsaWRhdGVkIHRleHRsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgZmllbGRzLFxuICBsYXllclRleHRMYWJlbHM6IGFueVtdLFxuICBzYXZlZFRleHRMYWJlbCxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW47IGxheWVyVHlwZT86IHN0cmluZyB8IG51bGx9ID0ge31cbik6IGFueVtdIHtcbiAgY29uc3QgbGF5ZXJUZXh0TGFiZWwgPSBsYXllclRleHRMYWJlbHNbMF07XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuICBjb25zdCBjb3VudExhYmVsTGF5ZXIgPSBCb29sZWFuKFxuICAgIG9wdGlvbnMubGF5ZXJUeXBlICYmIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLmhhcyhvcHRpb25zLmxheWVyVHlwZSlcbiAgKTtcblxuICAvLyB2YWxpZGF0ZSBmaWVsZFxuICByZXR1cm4gc2F2ZWRUZXh0TGFiZWxzLm1hcCh0ZXh0TGFiZWwgPT4ge1xuICAgIGxldCBmaWVsZCA9IG51bGw7XG4gICAgaWYgKHRleHRMYWJlbC5maWVsZCkge1xuICAgICAgLy8gQ2x1c3RlciwgaGV4YmluLCBhbmQgZ3JpZCBwZXJzaXN0IGEgc3ludGhldGljIHBvaW50LWNvdW50IGZpZWxkIHRoYXRcbiAgICAgIC8vIGlzIG5vdCBvbmUgb2YgdGhlIGRhdGFzZXQgY29sdW1ucy5cbiAgICAgIGZpZWxkID1cbiAgICAgICAgY291bnRMYWJlbExheWVyICYmIHRleHRMYWJlbC5maWVsZC5uYW1lID09PSBQT0lOVF9DT1VOVF9GSUVMRF9OQU1FXG4gICAgICAgICAgPyBjcmVhdGVQb2ludENvdW50TGFiZWxGaWVsZCgpXG4gICAgICAgICAgOiBmaWVsZHMuZmluZChmZCA9PlxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLy8gS2VlcCBleHBsaWNpdCBmYWxzZSAvIDAuIGB8fGAgd291bGQgcmVwbGFjZSBhIHNhdmVkIGNvbGxpc2lvbkVuYWJsZWRcbiAgICAgICAgLy8gb2YgZmFsc2Ugd2l0aCB0aGUgYWdncmVnYXRpb24gZGVmYXVsdCBvZiB0cnVlLlxuICAgICAgICBba2V5XToga2V5ID09PSAnZmllbGQnID8gZmllbGQgOiB0ZXh0TGFiZWxba2V5XSA/PyBsYXllclRleHRMYWJlbFtrZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogTWFwcyBzYXZlZCBiZWZvcmUgY291bnQgbGFiZWxzIG9taXQgYHRleHRMYWJlbGAuIFRob3NlIGNsdXN0ZXIsIGhleGJpbiwgYW5kXG4gKiBncmlkIGxheWVycyBzdGF5IHVubGFiZWxlZC4gTmV3IGxheWVycyBzdGlsbCBnZXQgdGhlIHBvaW50LWNvdW50IGRlZmF1bHRcbiAqIGZyb20gYGdldERlZmF1bHRMYXllckNvbmZpZ2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWxsYmFja1RleHRMYWJlbEZvckxvYWRlZExheWVyKFxuICBsYXllclR5cGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG5ld0xheWVyVGV4dExhYmVsOiBhbnlbXVxuKTogYW55W10ge1xuICBpZiAobGF5ZXJUeXBlICYmIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLmhhcyhsYXllclR5cGUpKSB7XG4gICAgcmV0dXJuIFt7Li4uREVGQVVMVF9URVhUX0xBQkVMfV07XG4gIH1cbiAgcmV0dXJuIG5ld0xheWVyVGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFNhdmVkIHZpc3VhbCBjaGFubmVsIGZpZWxkL3NjYWxlIG1heSBsaXZlIGluIGFueSBvZjpcbiAqIC0gYGNvbmZpZ1trZXldYCBhZnRlciBzY2hlbWEgcGFyc2UgKFZpc3VhbENoYW5uZWxTY2hlbWFWMSBmb2xkcyBjaGFubmVscyBpbnRvIGNvbmZpZylcbiAqIC0gYHZpc3VhbENoYW5uZWxzW2tleV1gIGFzIGEgc2libGluZyBvZiBgY29uZmlnYCAodW5wYXJzZWQgYWRkRGF0YVRvTWFwIHBheWxvYWQpXG4gKiAtIGBjb25maWcudmlzdWFsQ2hhbm5lbHNba2V5XWAgKGNvbW1vbiBtaXN0YWtlIG9mIG5lc3RpbmcgdmlzdWFsQ2hhbm5lbHMgaW5zaWRlIGNvbmZpZylcbiAqXG4gKiBXaXRob3V0IHRoaXMgbG9va3VwLCBwcm9ncmFtbWF0aWMgR2VvSlNPTiBzdHJva2VDb2xvckZpZWxkIG5ldmVyIGJpbmRzIGFuZFxuICogc3Ryb2tlQ29sb3JEb21haW4gc3RheXMgYXQgdGhlIGRlZmF1bHQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLCBrZXk6IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IGNvbmZpZyA9IHNhdmVkTGF5ZXIuY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gIGlmIChjb25maWcgJiYgY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjb25maWdba2V5XTtcbiAgfVxuICBjb25zdCBjaGFubmVscyA9XG4gICAgKHNhdmVkTGF5ZXIgYXMge3Zpc3VhbENoYW5uZWxzPzogUmVjb3JkPHN0cmluZywgYW55Pn0pLnZpc3VhbENoYW5uZWxzIHx8XG4gICAgKGNvbmZpZyAmJiBjb25maWcudmlzdWFsQ2hhbm5lbHMpO1xuICBpZiAoY2hhbm5lbHMgJiYgdHlwZW9mIGNoYW5uZWxzID09PSAnb2JqZWN0JyAmJiBjaGFubmVsc1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2hhbm5lbHNba2V5XTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGNvbnN0IHNhdmVkRmllbGQgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBmaWVsZCk7XG4gICAgY29uc3Qgc2F2ZWRTY2FsZSA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIHNjYWxlKTtcbiAgICBsZXQgZm91bmRGaWVsZDtcbiAgICBpZiAoc2F2ZWRGaWVsZD8ubmFtZSkge1xuICAgICAgZm91bmRGaWVsZCA9IGZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IHNhdmVkRmllbGQubmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgLi4uKGZvdW5kRmllbGQgPyB7W2ZpZWxkXTogZm91bmRGaWVsZH0gOiB7fSksXG4gICAgICAuLi4oc2F2ZWRTY2FsZSA/IHtbc2NhbGVdOiBzYXZlZFNjYWxlfSA6IHt9KVxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhmb3VuZENoYW5uZWwpO1xuICAgIH1cblxuICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gc2F2ZWRGaWVsZD8ubmFtZTtcbiAgICAgIGlmIChmaWVsZE5hbWUgJiYgZmllbGROYW1lICE9PSBuZXdMYXllci5jb25maWdbZmllbGRdPy5uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG50eXBlIFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7XG4gIGFsbG93RW1wdHlDb2x1bW4/OiBib29sZWFuO1xuICB0aHJvd09uRXJyb3I/OiBib29sZWFuO1xuICAvLyBTYXZlZCBtYXBzIHRoYXQgb21pdCB0ZXh0TGFiZWwgcHJlZGF0ZSBjb3VudCBsYWJlbHMgYW5kIHN0YXkgdW5sYWJlbGVkLlxuICAvLyBBIG5ldyBsYXllciBjb25maWcgb21pdHMgaXQgdG9vLCBhbmQgc2hvdWxkIGtlZXAgdGhlIGxheWVyIGRlZmF1bHQuXG4gIGtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cblxuLyoqXG4gKiBHZXQgcmVxdWlyZWQgY29sdW1ucyBmb3IgdmFsaWRhdGlvbiBiYXNlZCBvbiBjb2x1bW4gbW9kZVxuICovXG5mdW5jdGlvbiBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcikge1xuICAvLyBmaW5kIGNvbHVtbiBmaWVsZElkeFxuICBsZXQgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIC8vIGlmIGNvbHVtbk1vZGUgaXMgZGVmaW5lZCwgZmluZCBjb2x1bW4gbW9kZSBjb25maWdcbiAgY29uc3QgY29sTW9kZUNvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgPyAobmV3TGF5ZXIuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChjb2xNb2RlQ29uZmlnKSB7XG4gICAgLy8gb25seSB2YWxpZGF0ZSBjb2x1bW5zIGluIGNvbHVtbiBtb2RlIChpbmNsdWRpbmcgdGFiYmVkIGNvbHVtbkdyb3VwcylcbiAgICBjb25zdCBncm91cENvbHVtbnMgPSAoY29sTW9kZUNvbmZpZy5jb2x1bW5Hcm91cHMgfHwgW10pLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAuY29sdW1ucyB8fCBbXSk7XG4gICAgY29uc3QgcmVxdWlyZWRLZXlzID0gbmV3IFNldChjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSk7XG4gICAgY29sdW1uQ29uZmlnID0gW1xuICAgICAgLi4uKGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLm9wdGlvbmFsQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi5ncm91cENvbHVtbnNcbiAgICBdLnJlZHVjZSgoYWNjdSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5Db25maWdba2V5XTtcbiAgICAgIGlmICghY29sKSB7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfVxuICAgICAgLy8gT3B0aW9uYWxpdHkgbXVzdCBmb2xsb3cgdGhlIGFjdGl2ZSBtb2RlOiBhIGZpZWxkIG9wdGlvbmFsIGluIGFub3RoZXIgbW9kZVxuICAgICAgLy8gKGUuZy4gYWx0aXR1ZGUgaW4gVVYpIGlzIHN0aWxsIHJlcXVpcmVkIHdoZW4gdGhpcyBtb2RlIGxpc3RzIGl0IGluIHJlcXVpcmVkQ29sdW1ucy5cbiAgICAgIGlmIChyZXF1aXJlZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc3Qge29wdGlvbmFsOiBfb3B0aW9uYWwsIC4uLnJlcXVpcmVkQ29sfSA9IGNvbDtcbiAgICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogcmVxdWlyZWRDb2x9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogey4uLmNvbCwgb3B0aW9uYWw6IHRydWV9fTtcbiAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gY29sdW1uQ29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge2ZpZWxkcywgaWQ6IGRhdGFJZH0gPSBkYXRhc2V0O1xuICBjb25zdCB7dHlwZX0gPSBzYXZlZExheWVyO1xuICBjb25zdCB7dGhyb3dPbkVycm9yfSA9IG9wdGlvbnM7XG4gIC8vIGxheWVyIGRvZXNudCBoYXZlIGEgdmFsaWQgdHlwZVxuICBpZiAoIXR5cGUgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllckNsYXNzZXMsIHR5cGUpIHx8ICFzYXZlZExheWVyLmNvbmZpZykge1xuICAgIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdHlwZSBcIiR7dHlwZX1cIiBvciBjb25maWcgaXMgbWlzc2luZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbdHlwZV0oe1xuICAgIGlkOiBzYXZlZExheWVyLmlkLFxuICAgIGRhdGFJZCxcbiAgICBsYWJlbDogc2F2ZWRMYXllci5jb25maWcubGFiZWwsXG4gICAgY29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgIGlzVmlzaWJsZTogc2F2ZWRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGhpZGRlbjogc2F2ZWRMYXllci5jb25maWcuaGlkZGVuLFxuICAgIGlzSW5jbHVkZWRJbkxlZ2VuZDogc2F2ZWRMYXllci5jb25maWcuaXNJbmNsdWRlZEluTGVnZW5kLFxuICAgIGNvbHVtbk1vZGU6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbk1vZGUsXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKTtcblxuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgICAgICAuLi5jb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKGZpZWxkcywgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbCwgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBsYXllclR5cGU6IHNhdmVkTGF5ZXIudHlwZVxuICAgICAgICB9KVxuICAgICAgOiBvcHRpb25zLmtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbFxuICAgICAgPyBmYWxsYmFja1RleHRMYWJlbEZvckxvYWRlZExheWVyKHNhdmVkTGF5ZXIudHlwZSwgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbClcbiAgICAgIDogbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbDtcblxuICAvLyBjb3B5IHZpc0NvbmZpZyBvdmVyIHRvIGVtcHR5TGF5ZXIgdG8gbWFrZSBzdXJlIGl0IGhhcyBhbGwgdGhlIHByb3BzXG4gIGNvbnN0IHNhdmVkVmlzQ29uZmlnID1cbiAgICBzYXZlZExheWVyLnR5cGUgPT09ICczRCdcbiAgICAgID8gbWlncmF0ZUxlZ2FjeVNjZW5lZ3JhcGhWaXNDb25maWcoc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnKVxuICAgICAgOiBzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWc7XG4gIGNvbnN0IGNvcGllZFZpc0NvbmZpZyA9IG5ld0xheWVyLmNvcHlMYXllckNvbmZpZyhcbiAgICBuZXdMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIHNhdmVkVmlzQ29uZmlnIHx8IHt9LFxuICAgIHtcbiAgICAgIHNoYWxsb3dDb3B5OiBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddXG4gICAgfVxuICApO1xuXG4gIC8vIGNhbGwgbGF5ZXIgbWV0aG9kcyB0byB2YWxpZGF0ZSB2aXNDb25maWcgd2hlbiBzd2l0Y2hpbmcgZGF0YXNldFxuICBjb25zdCB2aXNDb25maWcgPSBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZ1xuICAgID8gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWcoZGF0YXNldCwgY29waWVkVmlzQ29uZmlnKVxuICAgIDogY29waWVkVmlzQ29uZmlnO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICB2aXNDb25maWcsXG4gICAgdGV4dExhYmVsXG4gIH0pO1xuXG4gIC8vIHZpc3VhbCBjaGFubmVsIGZpZWxkIGlzIHNhdmVkIHRvIGJlIHtuYW1lLCB0eXBlfVxuICAvLyBmaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkIGJ5IG1hdGNoaW5nIGJvdGggbmFtZSBhbmQgdHlwZVxuICAvLyByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICBuZXdMYXllciA9IHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhmaWVsZHMsIG5ld0xheWVyLCBzYXZlZExheWVyLCBvcHRpb25zKTtcblxuICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgaWYgKCFuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmU6ICR7bmV3TGF5ZXIuaWR9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZGl0b3I8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgc2F2ZWRFZGl0b3I6IFNhdmVkRWRpdG9yKSB7XG4gIGlmICghc2F2ZWRFZGl0b3IpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCAuLi4oc2F2ZWRFZGl0b3IuZmVhdHVyZXMgfHwgW10pXSxcbiAgICAgIC8vIGlmIHNhdmVkRWRpdG9yLnZpc2libGUgaXMgdW5kZWZpbmVkIGtlZXAgc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICAgIHZpc2libGU6IHNhdmVkRWRpdG9yLnZpc2libGUgPz8gc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVFZGl0b3JDb25maWdzKGNvbmZpZ3M6IFNhdmVkRWRpdG9yW10pOiBTYXZlZEVkaXRvciB7XG4gIHJldHVybiBjb25maWdzLnJlZHVjZShcbiAgICAoYWNjLCBuZXh0Q29uZmlnKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIGZlYXR1cmVzOiBbLi4uYWNjLmZlYXR1cmVzLCAuLi4obmV4dENvbmZpZy5mZWF0dXJlcyB8fCBbXSldXG4gICAgICB9O1xuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3RhcnQgd2l0aDpcbiAgICAgIC8vIC0gZW1wdHkgYXJyYXkgZm9yIGZlYXR1cmVzIGFjY3VtdWxhdGlvblxuICAgICAgLy8gLSBhbmQgYXJlIGFueSBvZiB0aGUgY29uZmlncycgdmlzaWJsZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHZpc2libGU6IGNvbmZpZ3Muc29tZShjID0+IGM/LnZpc2libGUpXG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlOiBWaXNTdGF0ZSwgbmV3RGF0YUVudHJpZXM6IERhdGFzZXRzKTogRGF0YXNldHMge1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgLi4ubmV3RGF0YUVudHJpZXNcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcikpIHtcbiAgICAvLyBwcmVzZXJ2ZURhdGFzZXRPcmRlciAgbWlnaHQgbm90IGluY2x1ZGUgdGhlICBuZXcgZGF0YXNldHNcbiAgICBjb25zdCBuZXdEYXRhc2V0SWRzID0gT2JqZWN0LmtleXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgICBpZCA9PiAhc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXI/LmluY2x1ZGVzKGlkKVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5zdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciwgLi4ubmV3RGF0YXNldElkc10ucmVkdWNlKFxuICAgICAgKGFjY3UsIGRhdGFJZCkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4uKG1lcmdlZFtkYXRhSWRdID8ge1tkYXRhSWRdOiBtZXJnZWRbZGF0YUlkXX0gOiB7fSlcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuLyoqXG4gKiBTaW1saWFyIHB1cnBvc2UgdG8gYWdncmVnYXRpb24gdXRpbHMgYGdldE1vZGVgIGZ1bmN0aW9uLFxuICogYnV0IHJldHVybnMgdGhlIG1vZGUgaW4gdGhlIHNhbWUgdmFsdWUgdHlwZSB3aXRob3V0IGNvZXJjaW5nIHRvIGEgc3RyaW5nLlxuICogSXQgaWdub3JlcyBgdW5kZWZpbmVkYCBvciBgbnVsbGAgdmFsdWVzLCBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm8gbW9kZSBjb3VsZCBiZSBjYWxjdWxhdGVkLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZTxUPihhcnI6IFRbXSk6IFQgfCBudWxsIHtcbiAgY29uc3QgdGFsbHlzID0gbmV3IE1hcCgpO1xuICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIGlmICghdGFsbHlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCB0YWxseXMuZ2V0KHZhbHVlKSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJldHVybiB0aGUgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdCB0b3RhbCBvY2N1cnJlbmNlIGNvdW50XG4gIGlmICh0YWxseXMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBbLi4udGFsbHlzLmVudHJpZXMoKV0/LnJlZHVjZSgoYWNjLCBuZXh0KSA9PiAobmV4dFsxXSA+IGFjY1sxXSA/IG5leHQgOiBhY2MpKVswXTtcbn1cblxuZXhwb3J0IGNvbnN0IFZJU19TVEFURV9NRVJHRVJTOiBWaXNTdGF0ZU1lcmdlcnM8YW55PiA9IFtcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVycyxcbiAgICBwcm9wOiAnbGF5ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2xheWVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlTGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUxheWVyT3JkZXIsXG4gICAgcHJvcDogJ2xheWVyT3JkZXInXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VGaWx0ZXJzLFxuICAgIHByb3A6ICdmaWx0ZXJzJyxcbiAgICB0b01lcmdlUHJvcDogJ2ZpbHRlclRvQmVNZXJnZWQnLFxuICAgIHByZXNlcnZlT3JkZXI6ICdwcmVzZXJ2ZUZpbHRlck9yZGVyJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUZpbHRlckRhdGFzZXRJZHNcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUVmZmVjdHMsXG4gICAgcHJvcDogJ2VmZmVjdHMnXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VDaGFydHMsXG4gICAgcHJvcDogJ2NoYXJ0cycsXG4gICAgdG9NZXJnZVByb3A6ICdjaGFydHNUb0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUNoYXJ0RGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgcHJvcDogJ2Fubm90YXRpb25zJyxcbiAgICB0b01lcmdlUHJvcDogJ2Fubm90YXRpb25zVG9CZU1lcmdlZCdcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUludGVyYWN0aW9ucyxcbiAgICBwcm9wOiAnaW50ZXJhY3Rpb25Db25maWcnLFxuICAgIHRvTWVyZ2VQcm9wOiAnaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkJyxcbiAgICByZXBsYWNlUGFyZW50RGF0YXNldElkczogcmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyxcbiAgICBzYXZlVW5tZXJnZWQ6IHNhdmVkVW5tZXJnZWRJbnRlcmFjdGlvbixcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZUludGVyYWN0aW9uQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlTGF5ZXJCbGVuZGluZywgcHJvcDogJ2xheWVyQmxlbmRpbmcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUxheWVyQmxlbmRpbmdDb25maWdzfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZU92ZXJsYXlCbGVuZGluZyxcbiAgICBwcm9wOiAnb3ZlcmxheUJsZW5kaW5nJyxcbiAgICBjb21iaW5lQ29uZmlnczogY29tYmluZU92ZXJsYXlCbGVuZGluZ0NvbmZpZ3NcbiAgfSxcbiAge21lcmdlOiBtZXJnZVNwbGl0TWFwcywgcHJvcDogJ3NwbGl0TWFwcycsIHRvTWVyZ2VQcm9wOiAnc3BsaXRNYXBzVG9CZU1lcmdlZCd9LFxuICB7bWVyZ2U6IG1lcmdlQW5pbWF0aW9uQ29uZmlnLCBwcm9wOiAnYW5pbWF0aW9uQ29uZmlnJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVBbmltYXRpb25Db25maWdzfSxcbiAge21lcmdlOiBtZXJnZUVkaXRvciwgcHJvcDogJ2VkaXRvcicsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lRWRpdG9yQ29uZmlnc31cbl07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQSxPQUFPQSxJQUFJLE1B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
|
|
1386
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1bmlxIiwicGljayIsImZsYXR0ZW5EZWVwIiwiZGVlcG1lcmdlIiwiYXJyYXlJbnNlcnQiLCJub3JtYWxpemVDYW1lcmFCb29rbWFya3MiLCJub3JtYWxpemVDYW1lcmFUb3VyIiwiY29tYmluZVNwbGl0TWFwc0J5SW5kZXgiLCJnZXRJbml0aWFsTWFwTGF5ZXJzRm9yU3BsaXRNYXAiLCJhcHBseUZpbHRlcnNUb0RhdGFzZXRzIiwidmFsaWRhdGVGaWx0ZXJzVXBkYXRlRGF0YXNldHMiLCJmaW5kQnlJZCIsImFnZ3JlZ2F0ZSIsImlzUGxhaW5PYmplY3QiLCJBR0dSRUdBVElPTl9DT1VOVF9MQVlFUl9UWVBFUyIsImNyZWF0ZVBvaW50Q291bnRMYWJlbEZpZWxkIiwibWlncmF0ZUxlZ2FjeVNjZW5lZ3JhcGhWaXNDb25maWciLCJQT0lOVF9DT1VOVF9GSUVMRF9OQU1FIiwiY3JlYXRlRWZmZWN0Iiwibm90TnVsbG9yVW5kZWZpbmVkIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJERUZBVUxUX1RFWFRfTEFCRUwiLCJMQVlFUl9CTEVORElOR1MiLCJPVkVSTEFZX0JMRU5ESU5HUyIsIkFubm90YXRpb25LaW5kIiwiaXNBbm5vdGF0aW9uS2luZCIsIklOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SIiwiSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfV0lEVEgiLCJDVVJSRU5UX1ZFUlNJT04iLCJhc3NpZ25HcHVDaGFubmVscyIsInJlc2V0RmlsdGVyR3B1TW9kZSIsImdldExheWVyT3JkZXJGcm9tTGF5ZXJzIiwiY29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnMiLCJtZXJnZUZpbHRlcnMiLCJzdGF0ZSIsImZpbHRlcnNUb01lcmdlIiwiZnJvbUNvbmZpZyIsInByZXNlcnZlRmlsdGVyT3JkZXIiLCJtYXAiLCJsIiwiaWQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJfdmFsaWRhdGVGaWx0ZXJzVXBkYXQiLCJ2YWxpZGF0ZWQiLCJmYWlsZWQiLCJ1cGRhdGVkRGF0YXNldHMiLCJ1cGRhdGVkRmlsdGVycyIsImluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIiLCJmaWx0ZXJzIiwiZGF0YXNldHNUb0ZpbHRlciIsImYiLCJkYXRhSWQiLCJmaWx0ZXJlZCIsImxheWVycyIsIl9vYmplY3RTcHJlYWQiLCJkYXRhc2V0cyIsImZpbHRlclRvQmVNZXJnZWQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZXBsYWNlRmlsdGVyRGF0YXNldElkcyIsInNhdmVkRmlsdGVyIiwiZGF0YUlkVG9Vc2UiLCJyZXBsYWNlZCIsImZvckVhY2giLCJmaWx0ZXIiLCJpbmNsdWRlcyIsIl9maWx0ZXIkcGxvdFR5cGUiLCJuZXdEYXRhSWQiLCJkIiwicGxvdFR5cGUiLCJjb2xvcnNCeURhdGFJZCIsIl9maWx0ZXIkcGxvdFR5cGUyIiwiX3JlZiIsImNvbG9yIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwiX2RlZmluZVByb3BlcnR5IiwicHVzaCIsImlzU2F2ZWRMYXllckNvbmZpZ1YxIiwibGF5ZXJDb25maWciLCJ2aXN1YWxDaGFubmVscyIsInBhcnNlTGF5ZXJDb25maWciLCJzY2hlbWEiLCJfc2NoZW1hJHBhcnNlU2F2ZWRDb24iLCJzYXZlZENvbmZpZyIsInZlcnNpb24iLCJjb25maWciLCJ2aXNTdGF0ZSIsImxheWVyT3JkZXIiLCJwYXJzZVNhdmVkQ29uZmlnIiwiY3VycmVudEl0ZW1zIiwiaXRlbXMiLCJwcmVzZXJ2ZWRPcmRlciIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImRlZmF1bHRTdGFydCIsIm5ld0l0ZW1zIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsIml0ZW0iLCJ2YWx1ZSIsImV4cGVjdGVkSWR4IiwiaW5kZXhPZiIsImluc2VydEF0IiwiaSIsInByZWNlZWRJZHgiLCJfbG9vcCIsInByZWNlZWRJdGVtSWQiLCJmaW5kSW5kZXgiLCJlcnIiLCJlIiwiY3JlYXRlTGF5ZXJGcm9tQ29uZmlnIiwic2F2ZWRMYXllckNvbmZpZyIsInBhcnNlZExheWVyQ29uZmlnIiwiX3ZhbGlkYXRlTGF5ZXJzQnlEYXRhIiwidmFsaWRhdGVMYXllcnNCeURhdGFzZXRzIiwibGF5ZXJDbGFzc2VzIiwiYWxsb3dFbXB0eUNvbHVtbiIsImtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbCIsIm5ld0xheWVyIiwidXBkYXRlTGF5ZXJEb21haW4iLCJzZXJpYWxpemVGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJfc2VyaWFsaXplZFZpc1N0YXRlJGYiLCJzZXJpYWxpemVkVmlzU3RhdGUiLCJzZXJpYWxpemVWaXNTdGF0ZSIsInNlcmlhbGl6ZUxheWVyIiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRsIiwic2VyaWFsaXplRWZmZWN0IiwibmV3RWZmZWN0IiwiX3NlcmlhbGl6ZWRWaXNTdGF0ZSRlIiwiZWZmZWN0cyIsImVmZmVjdE9yZGVyIiwiX3NjaGVtYSRwYXJzZVNhdmVkQ29uMiIsInNhdmVkU3RhdGUiLCJnZXRDb25maWdUb1NhdmUiLCJtZXJnZUxheWVycyIsImxheWVyc1RvTWVyZ2UiLCJwcmVzZXJ2ZUxheWVyT3JkZXIiLCJ1bm1lcmdlZCIsInRvTWVyZ2UiLCJfbCRjb25maWciLCJpc01lcmdpbmdEYXRhc2V0cyIsIl92YWxpZGF0ZUxheWVyc0J5RGF0YTIiLCJtZXJnZWRMYXllciIsImFwcGx5IiwiX2luc2VydExheWVyQXRSaWdodE9yIiwiaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIiLCJuZXdMYXllck9yZGVyIiwibmV3TGF5ZXJzIiwibWVyZ2VkU3RhdGUiLCJsYXllclRvQmVNZXJnZWQiLCJsYXllck9yZGVyVG9CZU1lcmdlZCIsInNhdmVkT3JkZXIiLCJtZXJnZUxheWVyT3JkZXIiLCJjdXJyZW50TGF5ZXJzIiwibGF5ZXJzVG9JbnNlcnQiLCJjdXJyZW50T3JkZXIiLCJjdXJyZW50TGF5ZXJRdWV1ZSIsImVudHJ5IiwibGF5ZXIiLCJCb29sZWFuIiwibmV3TGF5ZXJPcmRlclF1ZXVlIiwibmV3RmxhdExheWVyT3JkZXIiLCJoYXNHcm91cHMiLCJzb21lIiwiZXhpc3RpbmdGbGF0SWRzIiwiU2V0IiwibmV3SW5zZXJ0ZWRJZHMiLCJoYXMiLCJyZXN1bHQiLCJmbGF0UXVldWUiLCJmbGF0SWR4IiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInNhdmVkTGF5ZXJPcmRlciIsInZhbGlkTGF5ZXJJZHMiLCJmaWx0ZXJMYXllck9yZGVyIiwib3JkZXIiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZ3JvdXAiLCJmaWx0ZXJlZEdyb3VwT3JkZXIiLCJyZXN0b3JlZExheWVyT3JkZXIiLCJsYXllcklkc0luUmVzdG9yZWQiLCJjb2xsZWN0SWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImFkZCIsIm1pc3NpbmdMYXllcnMiLCJtZXJnZUludGVyYWN0aW9ucyIsImludGVyYWN0aW9uVG9CZU1lcmdlZCIsIm1lcmdlZCIsIk9iamVjdCIsImtleXMiLCJrZXkiLCJpbnRlcmFjdGlvbkNvbmZpZyIsImN1cnJlbnRDb25maWciLCJfcmVmMiIsImVuYWJsZWQiLCJjb25maWdTYXZlZCIsIl9leGNsdWRlZCIsImNvbmZpZ1RvTWVyZ2UiLCJzYXZlZFRvb2x0aXBDb25maWciLCJfbWVyZ2VJbnRlcmFjdGlvblRvb2wiLCJtZXJnZUludGVyYWN0aW9uVG9vbHRpcENvbmZpZyIsIm1lcmdlZFRvb2x0aXAiLCJ1bm1lcmdlZFRvb2x0aXAiLCJmaWVsZHNUb1Nob3ciLCJ0aW1lem9uZSIsInRvb2x0aXAiLCJuZXh0U3RhdGUiLCJzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb24iLCJjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzIiwiY29uZmlncyIsImNvbWJpbmVkIiwibGVnZW5kIiwid2l0aExlZ2VuZCIsImZpbmQiLCJjIiwiem9vbU9wYWNpdHkiLCJ3aXRoWm9vbU9wYWNpdHkiLCJfbG9vcDIiLCJ0b0JlQ29tYmluZWRQcm9wcyIsInAiLCJjb21wYXJlTW9kZSIsImNvbXBhcmVUeXBlIiwiZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UiLCJoYXNUaW1lem9uZSIsInJlZHVjZSIsImFjYyIsIm5leHRGaWVsZHNUb1Nob3ciLCJfbG9vcDMiLCJuZXh0RGF0YUlkS2V5IiwibmV4dFRvb2x0aXBGaWVsZHMiLCJuZXh0VEYiLCJfcmVmMyIsIm5hbWUiLCJfYWdncmVnYXRlIiwic2l6ZSIsIm1heGltdW0iLCJfdG9CZUNvbWJpbmVkUHJvcHMkZmkiLCJsaW1pdFNlYXJjaCIsImhpZGVJbnZpc2libGVMYXllcnMiLCJjb250cm9sbGVycyIsIl91bm1lcmdlZCR0b29sdGlwIiwiX3VubWVyZ2VkJHRvb2x0aXAyIiwiX3N0YXRlJGludGVyYWN0aW9uVG9CIiwiX3VubWVyZ2VkJHRvb2x0aXAzIiwicmVwbGFjZUludGVyYWN0aW9uRGF0YXNldElkcyIsImRhdGFJZFRvUmVwbGFjZSIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0byIsIl9pbnRlcmFjdGlvbkNvbmZpZyR0bzIiLCJtZXJnZVNwbGl0TWFwcyIsInNwbGl0TWFwcyIsImxheWVyRXhpc3RzIiwiY3JlYXRlUGFuZWxzIiwic20iLCJpZHMiLCJlbnRyaWVzIiwicGFuZWwiLCJmcm9tRW50cmllcyIsIl9yZWY0IiwiX3JlZjUiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWY2IiwiX3JlZjciLCJzcGxpdE1hcHNUb0JlTWVyZ2VkIiwibWVyZ2VDaGFydHMiLCJjaGFydHMiLCJpbmNvbWluZ0lkcyIsImNoYXJ0IiwiZXhpc3RpbmdJZHMiLCJuZXh0Q2hhcnRzIiwibm9ybWFsaXplZCIsInBpbm5lZCIsImRpc3BsYXkiLCJpc0NvbmZpZ0FjdGl2ZSIsImlzSnNvbkVkaXRvckFjdGl2ZSIsImNoYXJ0c1RvQmVNZXJnZWQiLCJyZXBsYWNlQ2hhcnREYXRhc2V0SWRzIiwic2F2ZWRDaGFydHMiLCJtZXJnZUVmZmVjdHMiLCJuZXdFZmZlY3RzIiwiZWZmZWN0IiwiYWxsIiwiaXNWYWxpZFRvU2F2ZSIsIm1lcmdlQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsImEiLCJ2YWxpZEFubm90YXRpb25zIiwia2luZCIsImFuY2hvclBvaW50IiwiZXZlcnkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIlJVTEVSIiwiZW5kUG9pbnQiLCJfYSRzaG93Q3VzdG9tVGV4dCIsIl9hJHNob3dEaXN0YW5jZSIsImlzVmlzaWJsZSIsImF1dG9TaXplIiwiYXV0b1NpemVZIiwibGFiZWwiLCJsaW5lQ29sb3IiLCJsaW5lV2lkdGgiLCJ0ZXh0V2lkdGgiLCJ0ZXh0SGVpZ2h0Iiwic2hvd0N1c3RvbVRleHQiLCJzaG93RGlzdGFuY2UiLCJ0b29sdGlwQ29uZmlnIiwiX2xvb3A0IiwiYWxsRmllbGRzIiwiZmllbGRzIiwiZm91bmRGaWVsZHNUb1Nob3ciLCJmaWVsZCIsIm1lcmdlTGF5ZXJCbGVuZGluZyIsImxheWVyQmxlbmRpbmciLCJjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MiLCJtZXJnZU92ZXJsYXlCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImNvbWJpbmVPdmVybGF5QmxlbmRpbmdDb25maWdzIiwibWVyZ2VBbmltYXRpb25Db25maWciLCJhbmltYXRpb24iLCJjdXJyZW50VGltZSIsImFuaW1hdGlvbkNvbmZpZyIsImRvbWFpbiIsImNvbWJpbmVBbmltYXRpb25Db25maWdzIiwiX2FnZ3JlZ2F0ZTIiLCJfYWdncmVnYXRlMyIsIm1pbmltdW0iLCJzcGVlZCIsInRpbWVGb3JtYXQiLCJ2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zIiwic2F2ZWRDb2xzIiwiZW1wdHlDb2xzIiwib3B0aW9ucyIsImNvbHVtbnMiLCJfbG9vcDUiLCJfT2JqZWN0JGtleXMiLCJfaSIsInNhdmVkIiwiZmllbGRJZHgiLCJfcmVmOCIsImFsbENvbEZvdW5kIiwidmFsaWRhdGVDb2x1bW4iLCJydiIsInRocm93T25FcnJvciIsInJlcXVpcmVkQ29sdW1ucyIsImsiLCJvcHRpb25hbCIsIm1pc3NpbmdDb2x1bW5zIiwiRXJyb3IiLCJqb2luIiwiY29uZmlnQ29sdW1ucyIsImludmFsaWRDb2x1bW5zIiwiX2NvbHVtbnMkayIsImNvbHVtbiIsInZhbGlkYXRvciIsInZhbGlkYXRlU2F2ZWRUZXh0TGFiZWwiLCJsYXllclRleHRMYWJlbHMiLCJzYXZlZFRleHRMYWJlbCIsImxheWVyVGV4dExhYmVsIiwic2F2ZWRUZXh0TGFiZWxzIiwiY291bnRMYWJlbExheWVyIiwibGF5ZXJUeXBlIiwidGV4dExhYmVsIiwiZmQiLCJKU09OIiwic3RyaW5naWZ5IiwiYWNjdSIsIl90ZXh0TGFiZWwka2V5IiwiZmFsbGJhY2tUZXh0TGFiZWxGb3JMb2FkZWRMYXllciIsIm5ld0xheWVyVGV4dExhYmVsIiwiZ2V0U2F2ZWRWaXN1YWxDaGFubmVsVmFsdWUiLCJzYXZlZExheWVyIiwiY2hhbm5lbHMiLCJfdHlwZW9mIiwidmFsaWRhdGVTYXZlZFZpc3VhbENoYW5uZWxzIiwidmFsdWVzIiwiX3JlZjkiLCJzY2FsZSIsInNhdmVkRmllbGQiLCJzYXZlZFNjYWxlIiwiZm91bmRGaWVsZCIsImZvdW5kQ2hhbm5lbCIsInVwZGF0ZUxheWVyQ29uZmlnIiwidmFsaWRhdGVWaXN1YWxDaGFubmVsIiwiX25ld0xheWVyJGNvbmZpZyRmaWVsIiwiZmllbGROYW1lIiwiX2xheWVyJGNvbmZpZyIsInZhbGlkYXRlTGF5ZXIiLCJ2YWxpZGF0ZUxheWVyV2l0aERhdGEiLCJfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbiIsImNvbHVtbkNvbmZpZyIsImdldExheWVyQ29sdW1ucyIsImNvbE1vZGVDb25maWciLCJjb2x1bW5Nb2RlIiwic3VwcG9ydGVkQ29sdW1uTW9kZXMiLCJjb2xNb2RlIiwiZ3JvdXBDb2x1bW5zIiwiY29sdW1uR3JvdXBzIiwiZmxhdE1hcCIsInJlcXVpcmVkS2V5cyIsIm9wdGlvbmFsQ29sdW1ucyIsImNvbCIsIl9vcHRpb25hbCIsInJlcXVpcmVkQ29sIiwiX2V4Y2x1ZGVkMiIsImRhdGFzZXQiLCJ0eXBlIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaGlkZGVuIiwiaXNJbmNsdWRlZEluTGVnZW5kIiwiaGlnaGxpZ2h0Q29sb3IiLCJzYXZlZFZpc0NvbmZpZyIsInZpc0NvbmZpZyIsImNvcGllZFZpc0NvbmZpZyIsImNvcHlMYXllckNvbmZpZyIsInNoYWxsb3dDb3B5IiwidmFsaWRhdGVWaXNDb25maWciLCJtZXJnZUVkaXRvciIsInNhdmVkRWRpdG9yIiwiX3NhdmVkRWRpdG9yJHZpc2libGUiLCJlZGl0b3IiLCJmZWF0dXJlcyIsInZpc2libGUiLCJjb21iaW5lRWRpdG9yQ29uZmlncyIsIm5leHRDb25maWciLCJtZXJnZURhdGFzZXRzQnlPcmRlciIsIm5ld0RhdGFFbnRyaWVzIiwicHJlc2VydmVEYXRhc2V0T3JkZXIiLCJuZXdEYXRhc2V0SWRzIiwiX3N0YXRlJHByZXNlcnZlRGF0YXNlIiwiYXJyIiwiX3JlZjExIiwidGFsbHlzIiwiTWFwIiwic2V0IiwiZ2V0IiwibmV4dCIsIlZJU19TVEFURV9NRVJHRVJTIiwicHJvcCIsIm1lcmdlIiwidG91ciIsImNhbWVyYVRvdXIiLCJib29rbWFya3MiLCJjYW1lcmFCb29rbWFya3MiLCJ0b01lcmdlUHJvcCIsInByZXNlcnZlT3JkZXIiLCJyZXBsYWNlUGFyZW50RGF0YXNldElkcyIsInNhdmVVbm1lcmdlZCIsImNvbWJpbmVDb25maWdzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Zpcy1zdGF0ZS1tZXJnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHVuaXEgZnJvbSAnZXMtdG9vbGtpdC9jb21wYXQvdW5pcSc7XG5pbXBvcnQgcGljayBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9waWNrJztcbmltcG9ydCBmbGF0dGVuRGVlcCBmcm9tICdlcy10b29sa2l0L2NvbXBhdC9mbGF0dGVuRGVlcCc7XG5pbXBvcnQgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQge1xuICBhcnJheUluc2VydCxcbiAgbm9ybWFsaXplQ2FtZXJhQm9va21hcmtzLFxuICBub3JtYWxpemVDYW1lcmFUb3VyLFxuICBjb21iaW5lU3BsaXRNYXBzQnlJbmRleCxcbiAgZ2V0SW5pdGlhbE1hcExheWVyc0ZvclNwbGl0TWFwLFxuICBhcHBseUZpbHRlcnNUb0RhdGFzZXRzLFxuICB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyxcbiAgZmluZEJ5SWQsXG4gIGFnZ3JlZ2F0ZSxcbiAgaXNQbGFpbk9iamVjdFxufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fQ09VTlRfTEFZRVJfVFlQRVMsXG4gIExheWVyLFxuICBjcmVhdGVQb2ludENvdW50TGFiZWxGaWVsZCxcbiAgbWlncmF0ZUxlZ2FjeVNjZW5lZ3JhcGhWaXNDb25maWcsXG4gIFBPSU5UX0NPVU5UX0ZJRUxEX05BTUVcbn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHtjcmVhdGVFZmZlY3R9IGZyb20gJ0BrZXBsZXIuZ2wvZWZmZWN0cyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVFlQRVMsXG4gIERFRkFVTFRfVEVYVF9MQUJFTCxcbiAgTEFZRVJfQkxFTkRJTkdTLFxuICBPVkVSTEFZX0JMRU5ESU5HUyxcbiAgQW5ub3RhdGlvbktpbmQsXG4gIGlzQW5ub3RhdGlvbktpbmQsXG4gIElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX0NPTE9SLFxuICBJTklUSUFMX0FOTk9UQVRJT05fTElORV9XSURUSFxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0NVUlJFTlRfVkVSU0lPTiwgVmlzU3RhdGUsIFZpc1N0YXRlTWVyZ2VycywgS2VwbGVyR0xTY2hlbWFDbGFzc30gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtcbiAgUGFyc2VkTGF5ZXIsXG4gIFBhcnNlZFZpc1N0YXRlLFxuICBTYXZlZEludGVyYWN0aW9uQ29uZmlnLFxuICBUb29sdGlwSW5mbyxcbiAgU2F2ZWRFZGl0b3IsXG4gIFBhcnNlZENvbmZpZyxcbiAgRmlsdGVyLFxuICBFZmZlY3QgYXMgRWZmZWN0VHlwZSxcbiAgUGFyc2VkRWZmZWN0LFxuICBMYXllckNvbHVtbnMsXG4gIExheWVyQ29sdW1uLFxuICBQYXJzZWRGaWx0ZXIsXG4gIE5lc3RlZFBhcnRpYWwsXG4gIFNhdmVkQW5pbWF0aW9uQ29uZmlnLFxuICBMYXllck9yZGVyLFxuICBMYXllck9yZGVyR3JvdXAsXG4gIENoYXJ0Q29uZmlnXG59IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZSwgRGF0YXNldHMsIGFzc2lnbkdwdUNoYW5uZWxzLCByZXNldEZpbHRlckdwdU1vZGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge2dldExheWVyT3JkZXJGcm9tTGF5ZXJzfSBmcm9tICcuL2xheWVyLXV0aWxzJztcbmltcG9ydCB7Y29tYmluZVpvb21PcGFjaXR5Q29udHJvbGxlcnN9IGZyb20gJy4vaW50ZXJhY3Rpb24tdXRpbHMnO1xuXG4vKipcbiAqIE1lcmdlIGxvYWRlZCBmaWx0ZXJzIHdpdGggY3VycmVudCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGZpbHRlcnNUb01lcmdlOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydmaWx0ZXJzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgcHJlc2VydmVGaWx0ZXJPcmRlciA9IGZyb21Db25maWdcbiAgICA/IGZpbHRlcnNUb01lcmdlPy5tYXAobCA9PiBsLmlkKVxuICAgIDogc3RhdGUucHJlc2VydmVGaWx0ZXJPcmRlcjtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyc1RvTWVyZ2UpIHx8ICFmaWx0ZXJzVG9NZXJnZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWQsIHVwZGF0ZWREYXRhc2V0c30gPSB2YWxpZGF0ZUZpbHRlcnNVcGRhdGVEYXRhc2V0cyhzdGF0ZSwgZmlsdGVyc1RvTWVyZ2UpO1xuICBsZXQgdXBkYXRlZEZpbHRlcnMgPSBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICAgIHN0YXRlLmZpbHRlcnMsXG4gICAgdmFsaWRhdGVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXJcbiAgKTtcblxuICAvLyBtZXJnZSBmaWx0ZXIgd2l0aCBleGlzdGluZ1xuICB1cGRhdGVkRmlsdGVycyA9IHJlc2V0RmlsdGVyR3B1TW9kZSh1cGRhdGVkRmlsdGVycyk7XG4gIHVwZGF0ZWRGaWx0ZXJzID0gYXNzaWduR3B1Q2hhbm5lbHModXBkYXRlZEZpbHRlcnMpO1xuICAvLyBmaWx0ZXIgZGF0YVxuICBjb25zdCBkYXRhc2V0c1RvRmlsdGVyID0gdW5pcShmbGF0dGVuRGVlcCh2YWxpZGF0ZWQubWFwKGYgPT4gZi5kYXRhSWQpKSk7XG5cbiAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGFzZXRzKFxuICAgIGRhdGFzZXRzVG9GaWx0ZXIsXG4gICAgdXBkYXRlZERhdGFzZXRzLFxuICAgIHVwZGF0ZWRGaWx0ZXJzLFxuICAgIHN0YXRlLmxheWVyc1xuICApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZmlsdGVyczogdXBkYXRlZEZpbHRlcnMsXG4gICAgZGF0YXNldHM6IGZpbHRlcmVkLFxuICAgIHByZXNlcnZlRmlsdGVyT3JkZXIsXG4gICAgZmlsdGVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmZpbHRlclRvQmVNZXJnZWQsIC4uLmZhaWxlZF1cbiAgfTtcbn1cblxuLy8gcmVwbGFjZSBkYXRhSWQgaW4gc2F2ZWQgRmlsdGVyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUZpbHRlckRhdGFzZXRJZHMoXG4gIHNhdmVkRmlsdGVyOiBGaWx0ZXJbXSxcbiAgZGF0YUlkOiBzdHJpbmcsXG4gIGRhdGFJZFRvVXNlOiBzdHJpbmdcbikge1xuICBjb25zdCByZXBsYWNlZDogRmlsdGVyW10gPSBbXTtcbiAgc2F2ZWRGaWx0ZXIuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgIGlmIChmaWx0ZXIuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGFJZCA9IGZpbHRlci5kYXRhSWQubWFwKGQgPT4gKGQgPT09IGRhdGFJZCA/IGRhdGFJZFRvVXNlIDogZCkpO1xuICAgICAgbGV0IHBsb3RUeXBlO1xuICAgICAgLy8gVE9ETzogbW9yZSBnZW5lcmljIGFwcHJvYWNoIHRvIHNhdmUgcGxvdFR5cGUuY29sb3JzQnlEYXRhSWRcbiAgICAgIGlmIChmaWx0ZXIucGxvdFR5cGU/LmNvbG9yc0J5RGF0YUlkPy5bZGF0YUlkXSkge1xuICAgICAgICAvLyByZXBsYWNlIGNvbG9yQnlEYXRhSWQgaW4gZmlsdGVyLnBsb3RUeXBlXG4gICAgICAgIGNvbnN0IHtbZGF0YUlkXTogY29sb3IsIC4uLnJlc3R9ID0gZmlsdGVyLnBsb3RUeXBlPy5jb2xvcnNCeURhdGFJZCB8fCB7fTtcbiAgICAgICAgcGxvdFR5cGUgPSB7XG4gICAgICAgICAgLi4uZmlsdGVyLnBsb3RUeXBlLFxuICAgICAgICAgIGNvbG9yc0J5RGF0YUlkOiB7XG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgICAgW2RhdGFJZFRvVXNlXTogY29sb3JcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXBsYWNlZC5wdXNoKHtcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBkYXRhSWQ6IG5ld0RhdGFJZCxcbiAgICAgICAgLi4uKHBsb3RUeXBlID8ge3Bsb3RUeXBlfSA6IHt9KVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlcGxhY2VkLmxlbmd0aCA/IHJlcGxhY2VkIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gZXhwb3J0ZWQgbGF5ZXIgY29uZmlndXJhdGlvbiBjb250YWlucyB2aXN1YWxDaGFubmVscyBwcm9wZXJ0eVxuICByZXR1cm4gbGF5ZXJDb25maWc/LnZpc3VhbENoYW5uZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMYXllckNvbmZpZyhcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzLFxuICBsYXllckNvbmZpZzogYW55XG4pOiBQYXJzZWRMYXllciB8IHVuZGVmaW5lZCB7XG4gIC8vIGFzc3VtZSB0aGUgbGF5ZXIgY29uZmlnIGlzIGN1cnJlbnQgdmVyc2lvblxuICBjb25zdCBzYXZlZENvbmZpZyA9IHtcbiAgICB2ZXJzaW9uOiBDVVJSRU5UX1ZFUlNJT04sXG4gICAgY29uZmlnOiB7XG4gICAgICB2aXNTdGF0ZToge2xheWVyczogW2xheWVyQ29uZmlnXSwgbGF5ZXJPcmRlcjogW2xheWVyQ29uZmlnLmlkXX1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkQ29uZmlnKT8udmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRJdGVtQmFzZWRPblByZXNlcnZlZE9yZGVyKFxuICBjdXJyZW50SXRlbXM6IEZpbHRlcltdLFxuICBpdGVtczogRmlsdGVyW10sXG4gIHByZXNlcnZlZE9yZGVyOiBhbnlbXSA9IFtdLFxuICBkZWZhdWx0U3RhcnQ/OiBib29sZWFuXG4pIHtcbiAgbGV0IG5ld0l0ZW1zID0gWy4uLmN1cnJlbnRJdGVtc107XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgZXhwZWN0ZWRJZHggPSBwcmVzZXJ2ZWRPcmRlci5pbmRleE9mKGl0ZW0uaWQpO1xuICAgIC8vIGluc2VydEF0IHRoZSBlbmQgYnkgZGVmYXVsdFxuICAgIGxldCBpbnNlcnRBdCA9IGRlZmF1bHRTdGFydCA/IDAgOiBuZXdJdGVtcy5sZW5ndGg7XG4gICAgaWYgKGV4cGVjdGVkSWR4ID4gMCkge1xuICAgICAgLy8gbG9vayBmb3IgbGF5ZXIgdG8gaW5zZXJ0IGFmdGVyXG4gICAgICBsZXQgaSA9IGV4cGVjdGVkSWR4ICsgMTtcbiAgICAgIGxldCBwcmVjZWVkSWR4ID0gLTE7XG4gICAgICB3aGlsZSAoaS0tID4gMCAmJiBwcmVjZWVkSWR4IDwgMCkge1xuICAgICAgICAvLyBrZWVwIGxvb2tpbmcgZm9yIHByZWNlZWQgbGF5ZXIgdGhhdCBpcyBhbHJlYWR5IGxvYWRlZFxuICAgICAgICBjb25zdCBwcmVjZWVkSXRlbUlkID0gcHJlc2VydmVkT3JkZXJbaSAtIDFdO1xuICAgICAgICBwcmVjZWVkSWR4ID0gbmV3SXRlbXMuZmluZEluZGV4KGQgPT4gZC5pZCA9PT0gcHJlY2VlZEl0ZW1JZCk7XG4gICAgICB9XG4gICAgICBpZiAocHJlY2VlZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIGlmIGZvdW5kXG4gICAgICAgIGluc2VydEF0ID0gcHJlY2VlZElkeCArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIG5ld0l0ZW1zID0gYXJyYXlJbnNlcnQobmV3SXRlbXMsIGluc2VydEF0LCBpdGVtKTtcbiAgfVxuICByZXR1cm4gbmV3SXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYXllckZyb21Db25maWcoc3RhdGU6IFZpc1N0YXRlLCBsYXllckNvbmZpZzogYW55KTogTGF5ZXIgfCBudWxsIHtcbiAgLy8gY2hlY2sgaWYgdGhlIGxheWVyIGNvbmZpZyBpcyBwYXJzZWRcbiAgY29uc3Qgc2F2ZWRMYXllckNvbmZpZyA9IGlzU2F2ZWRMYXllckNvbmZpZ1YxKGxheWVyQ29uZmlnKTtcbiAgY29uc3QgcGFyc2VkTGF5ZXJDb25maWcgPSBzYXZlZExheWVyQ29uZmlnXG4gICAgPyBwYXJzZUxheWVyQ29uZmlnKHN0YXRlLnNjaGVtYSwgbGF5ZXJDb25maWcpXG4gICAgOiBsYXllckNvbmZpZztcblxuICBpZiAoIXBhcnNlZExheWVyQ29uZmlnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gZmlyc3QgdmFsaWRhdGUgY29uZmlnIGFnYWluc3QgZGF0YXNldFxuICBjb25zdCB7dmFsaWRhdGVkLCBmYWlsZWR9ID0gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICAgIHN0YXRlLmRhdGFzZXRzLFxuICAgIHN0YXRlLmxheWVyQ2xhc3NlcyxcbiAgICBbcGFyc2VkTGF5ZXJDb25maWddLFxuICAgIHthbGxvd0VtcHR5Q29sdW1uOiB0cnVlLCBrZWVwVW5sYWJlbGVkQWdncmVnYXRpb25UZXh0TGFiZWw6IHNhdmVkTGF5ZXJDb25maWd9XG4gICk7XG5cbiAgaWYgKGZhaWxlZD8ubGVuZ3RoIHx8ICF2YWxpZGF0ZWQubGVuZ3RoKSB7XG4gICAgLy8gZmFpbGVkXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBuZXdMYXllciA9IHZhbGlkYXRlZFswXTtcbiAgbmV3TGF5ZXIudXBkYXRlTGF5ZXJEb21haW4oc3RhdGUuZGF0YXNldHMpO1xuICByZXR1cm4gbmV3TGF5ZXI7XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBmaWx0ZXIgZnJvbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplRmlsdGVyKFxuICBuZXdGaWx0ZXI6IEZpbHRlcixcbiAgc2NoZW1hOiBLZXBsZXJHTFNjaGVtYUNsYXNzXG4pOiBQYXJzZWRGaWx0ZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZXJpYWxpemVkVmlzU3RhdGUgPSBzZXJpYWxpemVWaXNTdGF0ZSh7ZmlsdGVyczogW25ld0ZpbHRlcl19LCBzY2hlbWEpO1xuICByZXR1cm4gc2VyaWFsaXplZFZpc1N0YXRlPy5maWx0ZXJzPy5bMF07XG59XG5cbi8qKlxuICogR2V0IGxvYWRlZCBsYXllciBmcm9tIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVMYXllcihcbiAgbmV3TGF5ZXI6IExheWVyLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZExheWVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2VyaWFsaXplZFZpc1N0YXRlID0gc2VyaWFsaXplVmlzU3RhdGUoXG4gICAge2xheWVyczogW25ld0xheWVyXSwgbGF5ZXJPcmRlcjogW25ld0xheWVyLmlkXX0sXG4gICAgc2NoZW1hXG4gICk7XG4gIHJldHVybiBzZXJpYWxpemVkVmlzU3RhdGU/LmxheWVycz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCBsb2FkZWQgZWZmZWN0IGZyb20gc3RhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUVmZmVjdChcbiAgbmV3RWZmZWN0OiBFZmZlY3RUeXBlLFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZEVmZmVjdCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRWaXNTdGF0ZSA9IHNlcmlhbGl6ZVZpc1N0YXRlKFxuICAgIHtlZmZlY3RzOiBbbmV3RWZmZWN0XSwgZWZmZWN0T3JkZXI6IFtuZXdFZmZlY3QuaWRdfSxcbiAgICBzY2hlbWFcbiAgKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRWaXNTdGF0ZT8uZWZmZWN0cz8uWzBdO1xufVxuXG4vKipcbiAqIEdldCB2aXMgc3RhdGUgY29uZmlnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVWaXNTdGF0ZShcbiAgdmlzU3RhdGU6IFBhcnRpYWw8VmlzU3RhdGU+LFxuICBzY2hlbWE6IEtlcGxlckdMU2NoZW1hQ2xhc3Ncbik6IFBhcnNlZFZpc1N0YXRlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2F2ZWRTdGF0ZSA9IHNjaGVtYS5nZXRDb25maWdUb1NhdmUoe1xuICAgIHZpc1N0YXRlXG4gIH0pO1xuICByZXR1cm4gc2F2ZWRTdGF0ZSA/IHNjaGVtYS5wYXJzZVNhdmVkQ29uZmlnKHNhdmVkU3RhdGUpPy52aXNTdGF0ZSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogTWVyZ2UgbGF5ZXJzIGZyb20gZGUtc2VyaWFsaXplZCBzdGF0ZSwgaWYgbm8gZmllbGRzIG9yIGRhdGEgYXJlIGxvYWRlZFxuICogc2F2ZSBpdCBmb3IgbGF0ZXJcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgbGF5ZXJzVG9NZXJnZTogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBjb25zdCBwcmVzZXJ2ZUxheWVyT3JkZXIgPSBmcm9tQ29uZmlnXG4gICAgPyBnZXRMYXllck9yZGVyRnJvbUxheWVycyhsYXllcnNUb01lcmdlKVxuICAgIDogc3RhdGUucHJlc2VydmVMYXllck9yZGVyO1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGF5ZXJzVG9NZXJnZSkgfHwgIWxheWVyc1RvTWVyZ2UubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8vIGRvbid0IG1lcmdlIGxheWVyIGlmIGRhdGFzZXQgaXMgYmVpbmcgbWVyZ2VkXG4gIGNvbnN0IHVubWVyZ2VkOiBQYXJzZWRMYXllcltdID0gW107XG4gIGNvbnN0IHRvTWVyZ2U6IFBhcnNlZExheWVyW10gPSBbXTtcbiAgbGF5ZXJzVG9NZXJnZS5mb3JFYWNoKChsOiBQYXJzZWRMYXllcikgPT4ge1xuICAgIGlmIChsPy5jb25maWc/LmRhdGFJZCAmJiBzdGF0ZS5pc01lcmdpbmdEYXRhc2V0c1tsLmNvbmZpZy5kYXRhSWRdKSB7XG4gICAgICB1bm1lcmdlZC5wdXNoKGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b01lcmdlLnB1c2gobCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCB7dmFsaWRhdGVkOiBtZXJnZWRMYXllciwgZmFpbGVkfSA9IHZhbGlkYXRlTGF5ZXJzQnlEYXRhc2V0cyhcbiAgICBzdGF0ZS5kYXRhc2V0cyxcbiAgICBzdGF0ZS5sYXllckNsYXNzZXMsXG4gICAgdG9NZXJnZSxcbiAgICB7a2VlcFVubGFiZWxlZEFnZ3JlZ2F0aW9uVGV4dExhYmVsOiB0cnVlfVxuICApO1xuICB1bm1lcmdlZC5wdXNoKC4uLmZhaWxlZCk7XG4gIC8vIHB1dCBuZXcgbGF5ZXJzIGluIGZyb250IG9mIGN1cnJlbnQgbGF5ZXJzXG4gIGNvbnN0IHtuZXdMYXllck9yZGVyLCBuZXdMYXllcnN9ID0gaW5zZXJ0TGF5ZXJBdFJpZ2h0T3JkZXIoXG4gICAgc3RhdGUubGF5ZXJzLFxuICAgIG1lcmdlZExheWVyLFxuICAgIHN0YXRlLmxheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyXG4gICk7XG5cbiAgbGV0IG1lcmdlZFN0YXRlOiBTID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyczogbmV3TGF5ZXJzLFxuICAgIGxheWVyT3JkZXI6IG5ld0xheWVyT3JkZXIsXG4gICAgcHJlc2VydmVMYXllck9yZGVyLFxuICAgIGxheWVyVG9CZU1lcmdlZDogWy4uLnN0YXRlLmxheWVyVG9CZU1lcmdlZCwgLi4udW5tZXJnZWRdXG4gIH07XG5cbiAgLy8gQXBwbHkgcGVuZGluZyBsYXllck9yZGVyIHdpdGggZ3JvdXBzIGlmIGxheWVycyBhcmUgbm93IGF2YWlsYWJsZVxuICBpZiAobWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQgJiYgbWVyZ2VkU3RhdGUubGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBzYXZlZE9yZGVyID0gbWVyZ2VkU3RhdGUubGF5ZXJPcmRlclRvQmVNZXJnZWQ7XG4gICAgbWVyZ2VkU3RhdGUgPSBtZXJnZUxheWVyT3JkZXIobWVyZ2VkU3RhdGUsIHNhdmVkT3JkZXIpO1xuICAgIC8vIEtlZXAgc2F2ZWRMYXllck9yZGVyIGF2YWlsYWJsZSBmb3IgZnV0dXJlIGRlZmVycmVkIGxheWVyc1xuICAgIGlmIChtZXJnZWRTdGF0ZS5sYXllclRvQmVNZXJnZWQubGVuZ3RoID4gMCkge1xuICAgICAgbWVyZ2VkU3RhdGUgPSB7Li4ubWVyZ2VkU3RhdGUsIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBzYXZlZE9yZGVyfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWVyZ2VkU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMYXllckF0UmlnaHRPcmRlcihcbiAgY3VycmVudExheWVycyxcbiAgbGF5ZXJzVG9JbnNlcnQsXG4gIGN1cnJlbnRPcmRlcixcbiAgcHJlc2VydmVkT3JkZXI6IHN0cmluZ1tdID0gW11cbikge1xuICBpZiAoIWxheWVyc1RvSW5zZXJ0Py5sZW5ndGgpIHtcbiAgICByZXR1cm4ge25ld0xheWVyczogY3VycmVudExheWVycywgbmV3TGF5ZXJPcmRlcjogY3VycmVudE9yZGVyfTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRMYXllclF1ZXVlID0gY3VycmVudE9yZGVyXG4gICAgLmZpbHRlcihlbnRyeSA9PiB0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKVxuICAgIC5tYXAoaWQgPT4gZmluZEJ5SWQoaWQpKGN1cnJlbnRMYXllcnMpKVxuICAgIC5maWx0ZXIobGF5ZXIgPT4gQm9vbGVhbihsYXllcikpO1xuICBjb25zdCBuZXdMYXllcnMgPSBjdXJyZW50TGF5ZXJzLmNvbmNhdChsYXllcnNUb0luc2VydCk7XG4gIGNvbnN0IG5ld0xheWVyT3JkZXJRdWV1ZSA9IGluc2VydEl0ZW1CYXNlZE9uUHJlc2VydmVkT3JkZXIoXG4gICAgY3VycmVudExheWVyUXVldWUsXG4gICAgbGF5ZXJzVG9JbnNlcnQsXG4gICAgcHJlc2VydmVkT3JkZXIsXG4gICAgdHJ1ZVxuICApO1xuXG4gIGNvbnN0IG5ld0ZsYXRMYXllck9yZGVyID0gZ2V0TGF5ZXJPcmRlckZyb21MYXllcnMobmV3TGF5ZXJPcmRlclF1ZXVlKTtcblxuICAvLyBJZiBubyBncm91cHMgZXhpc3QgaW4gY3VycmVudCBvcmRlciwganVzdCB1c2UgdGhlIG5ldyBmbGF0IG9yZGVyXG4gIGNvbnN0IGhhc0dyb3VwcyA9IGN1cnJlbnRPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmV3TGF5ZXJPcmRlcjogbmV3RmxhdExheWVyT3JkZXIsXG4gICAgICBuZXdMYXllcnNcbiAgICB9O1xuICB9XG5cbiAgLy8gUmVidWlsZCBsYXllck9yZGVyIHByZXNlcnZpbmcgZ3JvdXBzIGluIHRoZWlyIHJlbGF0aXZlIHBvc2l0aW9ucy5cbiAgLy8gUmVwbGFjZSBlYWNoIHN0cmluZyBlbnRyeSB3aXRoIGl0cyB1cGRhdGVkIHBvc2l0aW9uIGZyb20gbmV3RmxhdExheWVyT3JkZXIsXG4gIC8vIGFuZCBrZWVwIGdyb3VwcyBhcy1pcy5cbiAgY29uc3QgZXhpc3RpbmdGbGF0SWRzID0gbmV3IFNldChcbiAgICBjdXJyZW50T3JkZXIuZmlsdGVyKGVudHJ5ID0+IHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIGFzIHN0cmluZ1tdXG4gICk7XG4gIGNvbnN0IG5ld0luc2VydGVkSWRzID0gbmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+ICFleGlzdGluZ0ZsYXRJZHMuaGFzKGlkKSk7XG5cbiAgLy8gUmVidWlsZDogd2FsayB0aHJvdWdoIGN1cnJlbnRPcmRlciwgcmVwbGFjZSBzdHJpbmcgZW50cmllcyB3aXRoIHRoZWlyXG4gIC8vIG5ldyBwb3NpdGlvbiBlcXVpdmFsZW50cyBmcm9tIG5ld0ZsYXRMYXllck9yZGVyLCB0aGVuIGFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzXG4gIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICBjb25zdCBmbGF0UXVldWUgPSBbLi4ubmV3RmxhdExheWVyT3JkZXIuZmlsdGVyKGlkID0+IGV4aXN0aW5nRmxhdElkcy5oYXMoaWQpKV07XG4gIGxldCBmbGF0SWR4ID0gMDtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN1cnJlbnRPcmRlcikge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgcmVzdWx0LnB1c2goZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVwbGFjZSB3aXRoIGNvcnJlc3BvbmRpbmcgZW50cnkgZnJvbSByZW9yZGVyZWQgZmxhdCBsaXN0XG4gICAgICBpZiAoZmxhdElkeCA8IGZsYXRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmxhdFF1ZXVlW2ZsYXRJZHhdKTtcbiAgICAgICAgZmxhdElkeCsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFwcGVuZCBhbnkgbmV3bHkgaW5zZXJ0ZWQgbGF5ZXJzIGF0IHRoZSBmcm9udCAodGhleSBhcmUgbmV3KVxuICByZXR1cm4ge1xuICAgIG5ld0xheWVyT3JkZXI6IFsuLi5uZXdJbnNlcnRlZElkcywgLi4ucmVzdWx0XSxcbiAgICBuZXdMYXllcnNcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBzYXZlZCBsYXllck9yZGVyIHdpdGggY3VycmVudCBzdGF0ZSB0byByZXN0b3JlIGxheWVyIGdyb3Vwcy5cbiAqIENhbGxlZCBhZnRlciBsYXllcnMgaGF2ZSBiZWVuIG1lcmdlZC4gSWYgdGhlIHNhdmVkIGNvbmZpZyBjb250YWlucyBhIGxheWVyT3JkZXJcbiAqIHdpdGggZ3JvdXBzLCB0aGlzIHJlcGxhY2VzIHRoZSBmbGF0IGxheWVyT3JkZXIgd2l0aCB0aGUgc2F2ZWQgaGllcmFyY2hpY2FsIG9uZSxcbiAqIGZpbHRlcmluZyBvdXQgYW55IGxheWVyIElEcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMYXllck9yZGVyPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBzYXZlZExheWVyT3JkZXI/OiBhbnlbXSxcbiAgZnJvbUNvbmZpZz86IGJvb2xlYW5cbik6IFMge1xuICBpZiAoIXNhdmVkTGF5ZXJPcmRlciB8fCAhQXJyYXkuaXNBcnJheShzYXZlZExheWVyT3JkZXIpIHx8IHNhdmVkTGF5ZXJPcmRlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgc2F2ZWQgbGF5ZXJPcmRlciBjb250YWlucyBhbnkgZ3JvdXBzXG4gIGNvbnN0IGhhc0dyb3VwcyA9IHNhdmVkTGF5ZXJPcmRlci5zb21lKGVudHJ5ID0+IGlzUGxhaW5PYmplY3QoZW50cnkpKTtcbiAgaWYgKCFoYXNHcm91cHMpIHtcbiAgICAvLyBObyBncm91cHMgLSB0aGUgbGF5ZXIgbWVyZ2VyIGFscmVhZHkgaGFuZGxlZCBvcmRlcmluZyB2aWEgcHJlc2VydmVMYXllck9yZGVyXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLy8gSWYgbGF5ZXJzIGhhdmVuJ3QgYmVlbiBtZXJnZWQgeWV0LCBzdG9yZSBmb3IgbGF0ZXJcbiAgaWYgKHN0YXRlLmxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBsYXllck9yZGVyVG9CZU1lcmdlZDogc2F2ZWRMYXllck9yZGVyXG4gICAgfTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgc2V0IG9mIHZhbGlkIGxheWVyIElEcyBmcm9tIGN1cnJlbnQgc3RhdGVcbiAgY29uc3QgdmFsaWRMYXllcklkcyA9IG5ldyBTZXQoc3RhdGUubGF5ZXJzLm1hcChsID0+IGwuaWQpKTtcblxuICAvLyBSZWN1cnNpdmVseSBmaWx0ZXIgdGhlIHNhdmVkIGxheWVyT3JkZXIgdG8gb25seSBpbmNsdWRlIHZhbGlkIGxheWVyc1xuICBmdW5jdGlvbiBmaWx0ZXJMYXllck9yZGVyKG9yZGVyOiBhbnlbXSk6IExheWVyT3JkZXIge1xuICAgIGNvbnN0IHJlc3VsdDogTGF5ZXJPcmRlciA9IFtdO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2Ygb3JkZXIpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGVudHJ5KSkge1xuICAgICAgICBjb25zdCBncm91cCA9IGVudHJ5IGFzIExheWVyT3JkZXJHcm91cDtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9yZGVyID0gZmlsdGVyTGF5ZXJPcmRlcihncm91cC5sYXllck9yZGVyKTtcbiAgICAgICAgLy8gS2VlcCB0aGUgZ3JvdXAgZXZlbiBpZiBlbXB0eSAodXNlciBtYXkgd2FudCB0aGUgZW1wdHkgZ3JvdXApXG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICBsYXllck9yZGVyOiBmaWx0ZXJlZEdyb3VwT3JkZXJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycgJiYgdmFsaWRMYXllcklkcy5oYXMoZW50cnkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGNvbnN0IHJlc3RvcmVkTGF5ZXJPcmRlciA9IGZpbHRlckxheWVyT3JkZXIoc2F2ZWRMYXllck9yZGVyKTtcblxuICAvLyBGaW5kIGFueSBsYXllcnMgaW4gdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBhcmVuJ3QgaW4gdGhlIHJlc3RvcmVkIG9yZGVyXG4gIC8vIChjb3VsZCBoYXBwZW4gaWYgbGF5ZXJzIHdlcmUgYWRkZWQgYmV0d2VlbiBzYXZlIGFuZCBsb2FkKVxuICBjb25zdCBsYXllcklkc0luUmVzdG9yZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZnVuY3Rpb24gY29sbGVjdElkcyhvcmRlcjogYW55W10pIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIG9yZGVyKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29sbGVjdElkcygoZW50cnkgYXMgTGF5ZXJPcmRlckdyb3VwKS5sYXllck9yZGVyKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBsYXllcklkc0luUmVzdG9yZWQuYWRkKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29sbGVjdElkcyhyZXN0b3JlZExheWVyT3JkZXIpO1xuXG4gIC8vIEFkZCBhbnkgbWlzc2luZyBsYXllcnMgYXQgdGhlIHRvcFxuICBjb25zdCBtaXNzaW5nTGF5ZXJzID0gc3RhdGUubGF5ZXJzLmZpbHRlcihsID0+ICFsYXllcklkc0luUmVzdG9yZWQuaGFzKGwuaWQpKS5tYXAobCA9PiBsLmlkKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGxheWVyT3JkZXI6IFsuLi5taXNzaW5nTGF5ZXJzLCAuLi5yZXN0b3JlZExheWVyT3JkZXJdLFxuICAgIGxheWVyT3JkZXJUb0JlTWVyZ2VkOiBudWxsXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2UgaW50ZXJhY3Rpb25zIHdpdGggc2F2ZWQgY29uZmlnXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcmFjdGlvbnM8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGludGVyYWN0aW9uVG9CZU1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiB8IHVuZGVmaW5lZFxuKTogUyB7XG4gIGNvbnN0IG1lcmdlZDogTmVzdGVkUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuICBjb25zdCB1bm1lcmdlZDogUGFydGlhbDxTYXZlZEludGVyYWN0aW9uQ29uZmlnPiA9IHt9O1xuXG4gIGlmIChpbnRlcmFjdGlvblRvQmVNZXJnZWQpIHtcbiAgICAoT2JqZWN0LmtleXMoaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkKSBhcyBBcnJheTxrZXlvZiBTYXZlZEludGVyYWN0aW9uQ29uZmlnPikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKCFzdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9XG4gICAgICAgIGtleSA9PT0gJ3Rvb2x0aXAnIHx8XG4gICAgICAgIGtleSA9PT0gJ2JydXNoJyB8fFxuICAgICAgICBrZXkgPT09ICdnZW9jb2RlcicgfHxcbiAgICAgICAga2V5ID09PSAnbGVnZW5kJyB8fFxuICAgICAgICBrZXkgPT09ICd6b29tT3BhY2l0eSdcbiAgICAgICAgICA/IHN0YXRlLmludGVyYWN0aW9uQ29uZmlnW2tleV0uY29uZmlnXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICBjb25zdCB7ZW5hYmxlZCwgLi4uY29uZmlnU2F2ZWR9ID0gaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkW2tleV0gfHwge307XG5cbiAgICAgIGxldCBjb25maWdUb01lcmdlID0gY29uZmlnU2F2ZWQ7XG5cbiAgICAgIGlmIChrZXkgPT09ICd0b29sdGlwJykge1xuICAgICAgICBjb25zdCBzYXZlZFRvb2x0aXBDb25maWcgPSBjb25maWdTYXZlZCBhcyBTYXZlZEludGVyYWN0aW9uQ29uZmlnWyd0b29sdGlwJ107XG4gICAgICAgIGNvbnN0IHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9ID0gbWVyZ2VJbnRlcmFjdGlvblRvb2x0aXBDb25maWcoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgc2F2ZWRUb29sdGlwQ29uZmlnXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbWVyZ2UgbmV3IGRhdGFzZXQgdG9vbHRpcHMgd2l0aCBvcmlnaW5hbCBkYXRhc2V0IHRvb2x0aXBzXG4gICAgICAgIGNvbmZpZ1RvTWVyZ2UgPSB7XG4gICAgICAgICAgZmllbGRzVG9TaG93OiB7XG4gICAgICAgICAgICAuLi4oY3VycmVudENvbmZpZyBhcyBUb29sdGlwSW5mb1snY29uZmlnJ10pLmZpZWxkc1RvU2hvdyxcbiAgICAgICAgICAgIC4uLm1lcmdlZFRvb2x0aXBcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLihzYXZlZFRvb2x0aXBDb25maWcudGltZXpvbmUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB7dGltZXpvbmU6IHNhdmVkVG9vbHRpcENvbmZpZy50aW1lem9uZX1cbiAgICAgICAgICAgIDoge30pXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHVubWVyZ2VkVG9vbHRpcCkubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIHVubWVyZ2VkLnRvb2x0aXAgPSB7ZmllbGRzVG9TaG93OiB1bm1lcmdlZFRvb2x0aXAsIGVuYWJsZWQ6IEJvb2xlYW4oZW5hYmxlZCl9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lcmdlZFtrZXldID0ge1xuICAgICAgICAuLi5zdGF0ZS5pbnRlcmFjdGlvbkNvbmZpZ1trZXldLFxuICAgICAgICBlbmFibGVkOiBCb29sZWFuKGVuYWJsZWQpLFxuICAgICAgICAuLi4oY3VycmVudENvbmZpZ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjb25maWc6IHBpY2soXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLi4uY3VycmVudENvbmZpZyxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbmZpZ1RvTWVyZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRDb25maWcpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHtcbiAgICAuLi5zdGF0ZSxcbiAgICBpbnRlcmFjdGlvbkNvbmZpZzoge1xuICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAuLi5tZXJnZWRcbiAgICB9LFxuICAgIGludGVyYWN0aW9uVG9CZU1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uKHN0YXRlLCB1bm1lcmdlZClcbiAgfTtcbiAgcmV0dXJuIG5leHRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUludGVyYWN0aW9uQ29uZmlncyhjb25maWdzOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnW10pOiBTYXZlZEludGVyYWN0aW9uQ29uZmlnIHtcbiAgY29uc3QgY29tYmluZWQgPSB7Li4uY29uZmlnc1swXX07XG4gIC8vIGBsZWdlbmRgIGlzIG9wdGlvbmFsIG9uIG9sZGVyIHNhdmVkIG1hcHM7IHNlZWQgaXQgc28gYSBsYXRlciBjb25maWcgaXMgbm90IGRyb3BwZWQuXG4gIGlmICghY29tYmluZWQubGVnZW5kKSB7XG4gICAgY29uc3Qgd2l0aExlZ2VuZCA9IGNvbmZpZ3MuZmluZChjID0+IGMubGVnZW5kKTtcbiAgICBpZiAod2l0aExlZ2VuZD8ubGVnZW5kKSB7XG4gICAgICBjb21iaW5lZC5sZWdlbmQgPSB3aXRoTGVnZW5kLmxlZ2VuZDtcbiAgICB9XG4gIH1cbiAgLy8gU2FtZSBmb3IgZmFkZS1vbi16b29tOiBhbiBvbGRlciBjb25maWcgaW4gZnJvbnQgbXVzdCBub3QgZHJvcCBjb250cm9sbGVycyBmcm9tIGEgbGF0ZXIgb25lLlxuICBpZiAoIWNvbWJpbmVkLnpvb21PcGFjaXR5KSB7XG4gICAgY29uc3Qgd2l0aFpvb21PcGFjaXR5ID0gY29uZmlncy5maW5kKGMgPT4gYy56b29tT3BhY2l0eSk7XG4gICAgaWYgKHdpdGhab29tT3BhY2l0eT8uem9vbU9wYWNpdHkpIHtcbiAgICAgIGNvbWJpbmVkLnpvb21PcGFjaXR5ID0gd2l0aFpvb21PcGFjaXR5Lnpvb21PcGFjaXR5O1xuICAgIH1cbiAgfVxuICAvLyBoYW5kbGUgZWFjaCBwcm9wZXJ0eSBrZXkgb2YgYW4gYEludGVyYWN0aW9uQ29uZmlnYCwgZS5nLiB0b29sdGlwLCBnZW9jb2RlciwgYnJ1c2gsIGNvb3JkaW5hdGVcbiAgLy8gYnkgY29tYmluaW5nIHZhbHVlcyBmb3IgZWFjaCBhbW9uZyBhbGwgcGFzc2VkIGluIGNvbmZpZ3NcblxuICBmb3IgKGNvbnN0IGtleSBpbiBjb21iaW5lZCkge1xuICAgIGNvbnN0IHRvQmVDb21iaW5lZFByb3BzID0gY29uZmlncy5tYXAoYyA9PiBjW2tleV0pO1xuXG4gICAgLy8gYWxsIG9mIHRoZXNlIGhhdmUgYW4gZW5hYmxlZCBib29sZWFuXG4gICAgY29tYmluZWRba2V5XSA9IHtcbiAgICAgIC8vIGFyZSBhbnkgb2YgdGhlIGNvbmZpZ3MnIGVuYWJsZWQgdmFsdWVzIHRydWU/XG4gICAgICBlbmFibGVkOiB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uZW5hYmxlZClcbiAgICB9O1xuXG4gICAgaWYgKGtleSA9PT0gJ3Rvb2x0aXAnKSB7XG4gICAgICAvLyBhcmUgYW55IG9mIHRoZSBjb25maWdzJyBjb21wYXJlTW9kZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGNvbWJpbmVkW2tleV0uY29tcGFyZU1vZGUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uY29tcGFyZU1vZGUpO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGNvbXBhcmUgdHlwZSBtb2RlLCBpdCB3aWxsIGJlIGVpdGhlciBhYnNvbHV0ZSBvciByZWxhdGl2ZVxuICAgICAgY29tYmluZWRba2V5XS5jb21wYXJlVHlwZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICB0b0JlQ29tYmluZWRQcm9wcy5tYXAocCA9PiBwLmNvbXBhcmVUeXBlKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaGFzVGltZXpvbmUgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8udGltZXpvbmUgIT09IHVuZGVmaW5lZCk7XG4gICAgICBpZiAoaGFzVGltZXpvbmUpIHtcbiAgICAgICAgY29tYmluZWRba2V5XS50aW1lem9uZSA9IGdldFZhbHVlV2l0aEhpZ2hlc3RPY2N1cnJlbmNlKFxuICAgICAgICAgIHRvQmVDb21iaW5lZFByb3BzLm1hcChwID0+IHA/LnRpbWV6b25lKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21iaW5lIGZpZWxkc1RvU2hvdyBhbW9uZyBhbGwgZGF0YXNldCBpZHNcbiAgICAgIGNvbWJpbmVkW2tleV0uZmllbGRzVG9TaG93ID0gdG9CZUNvbWJpbmVkUHJvcHNcbiAgICAgICAgLm1hcChwID0+IHAuZmllbGRzVG9TaG93KVxuICAgICAgICAucmVkdWNlKChhY2MsIG5leHRGaWVsZHNUb1Nob3cpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5leHREYXRhSWRLZXkgaW4gbmV4dEZpZWxkc1RvU2hvdykge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRvb2x0aXBGaWVsZHMgPSBuZXh0RmllbGRzVG9TaG93W25leHREYXRhSWRLZXldO1xuICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0pIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFzZXQgaWQgaXMgbm90IHByZXNlbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICAgICAgICAgIC8vIHRoZW4gYWRkIGl0IHdpdGggaXRzIHRvb2x0aXAgZmllbGRzXG4gICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XSA9IG5leHRUb29sdGlwRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBkYXRhc2V0IGlkIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgICAgICAgICAgLy8gc28gb25seSBhZGQgdGhlIG5leHQgdG9vbHRpcCBmaWVsZHMgZm9yIHRoaXMgZGF0YXNldCdzIGFycmF5IGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnQsXG4gICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSB0b29sdGlwRmllbGQubmFtZSBwcm9wZXJ0eSBmb3IgdW5pcXVlbmVzc1xuICAgICAgICAgICAgICBuZXh0VG9vbHRpcEZpZWxkcy5mb3JFYWNoKG5leHRURiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NbbmV4dERhdGFJZEtleV0uZmluZCgoe25hbWV9KSA9PiBuZXh0VEYubmFtZSA9PT0gbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGFjY1tuZXh0RGF0YUlkS2V5XS5wdXNoKG5leHRURik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdicnVzaCcpIHtcbiAgICAgIC8vIGtlZXAgdGhlIGJpZ2dlc3QgYnJ1c2ggc2l6ZVxuICAgICAgY29tYmluZWRba2V5XS5zaXplID1cbiAgICAgICAgYWdncmVnYXRlKHRvQmVDb21iaW5lZFByb3BzLCBBR0dSRUdBVElPTl9UWVBFUy5tYXhpbXVtLCBwID0+IHAuc2l6ZSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZ2VvY29kZXInKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmxpbWl0U2VhcmNoID0gdG9CZUNvbWJpbmVkUHJvcHMuc29tZShwID0+IHA/LmxpbWl0U2VhcmNoKTtcbiAgICAgIGNvbnN0IGNvbG9yID0gdG9CZUNvbWJpbmVkUHJvcHMuZmluZChwID0+IHA/LmNvbG9yKT8uY29sb3I7XG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgY29tYmluZWRba2V5XS5jb2xvciA9IGNvbG9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdsZWdlbmQnKSB7XG4gICAgICBjb21iaW5lZFtrZXldLmhpZGVJbnZpc2libGVMYXllcnMgPSB0b0JlQ29tYmluZWRQcm9wcy5zb21lKHAgPT4gcD8uaGlkZUludmlzaWJsZUxheWVycyk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3pvb21PcGFjaXR5JyAmJiBjb21iaW5lZC56b29tT3BhY2l0eSkge1xuICAgICAgY29tYmluZWQuem9vbU9wYWNpdHkuY29udHJvbGxlcnMgPSBjb21iaW5lWm9vbU9wYWNpdHlDb250cm9sbGVycyh0b0JlQ29tYmluZWRQcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkO1xufVxuXG5mdW5jdGlvbiBzYXZlZFVubWVyZ2VkSW50ZXJhY3Rpb248UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIHVubWVyZ2VkOiBQYXJ0aWFsPFNhdmVkSW50ZXJhY3Rpb25Db25maWc+XG4pIHtcbiAgaWYgKCF1bm1lcmdlZD8udG9vbHRpcD8uZmllbGRzVG9TaG93KSB7XG4gICAgcmV0dXJuIHN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRvb2x0aXA6IHtcbiAgICAgIC4uLnN0YXRlLmludGVyYWN0aW9uVG9CZU1lcmdlZC50b29sdGlwLFxuICAgICAgLi4uKHR5cGVvZiB1bm1lcmdlZD8udG9vbHRpcD8uZW5hYmxlZCA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8ge2VuYWJsZWQ6IHVubWVyZ2VkLnRvb2x0aXAuZW5hYmxlZH1cbiAgICAgICAgOiB7fSksXG4gICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgLi4uc3RhdGUuaW50ZXJhY3Rpb25Ub0JlTWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3csXG4gICAgICAgIC4uLnVubWVyZ2VkPy50b29sdGlwPy5maWVsZHNUb1Nob3dcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VJbnRlcmFjdGlvbkRhdGFzZXRJZHMoaW50ZXJhY3Rpb25Db25maWcsIGRhdGFJZDogc3RyaW5nLCBkYXRhSWRUb1JlcGxhY2U6IHN0cmluZykge1xuICBpZiAoaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgdG9vbHRpcDoge1xuICAgICAgICAuLi5pbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLFxuICAgICAgICBmaWVsZHNUb1Nob3c6IHtcbiAgICAgICAgICBbZGF0YUlkVG9SZXBsYWNlXTogaW50ZXJhY3Rpb25Db25maWc/LnRvb2x0aXA/LmZpZWxkc1RvU2hvd1tkYXRhSWRdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIE1lcmdlIHNwbGl0TWFwcyBjb25maWcgd2l0aCBjdXJyZW50IHZpc1N0ZXRlLlxuICogUGFuZWxzIGFyZSBtYXRjaGVkIGJ5IGluZGV4OiBpbmRleCBpIG9mIGBzcGxpdE1hcHNgLCBgc3RhdGUuc3BsaXRNYXBzYCBhbmRcbiAqIGBzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkYCBpcyB0aGUgc2FtZSBtYXAgcGFuZWwuXG4gKiAxLiBpZiBjdXJyZW50IG1hcCBpcyBzcGxpdCwgYnV0IHNwbGl0TWFwIERPRVNOT1QgY29udGFpbiBtYXBzXG4gKiAgICA6IGRvbid0IG1lcmdlIGFueXRoaW5nXG4gKiAyLiBpZiBjdXJyZW50IG1hcCBpcyBOT1Qgc3BsaXQsIGJ1dCBzcGxpdE1hcHMgY29udGFpbiBtYXBzXG4gKiAgICA6IGFkZCB0byBzcGxpdE1hcHMsIGFuZCBhZGQgY3VycmVudCBsYXllcnMgdG8gc3BsaXRNYXBzLlxuICogICAgICBQYW5lbHMgYXJlIGNyZWF0ZWQgb25jZSBvbmUgb2YgdGhlbSBjYW4gYmUgbWVyZ2VkOiBpdCBoYXMgbm8gbGF5ZXJzLCBvciBvbmUgb2YgaXRzIGxheWVycyBleGlzdHNcbiAqIDMuIGxheWVycyB0aGF0IGRvbid0IGV4aXN0IHlldFxuICogICAgOiBzYXZlIHRvIHNwbGl0TWFwc1RvQmVNZXJnZWQsIGluIHRoZSBwYW5lbCBhdCB0aGUgc2FtZSBpbmRleFxuICogQSBsYXllciBsaXN0ZWQgaW4gc3BsaXRNYXBzIG9ubHkgc2hvd3MgaW4gdGhlIHBhbmVscyB0aGF0IGxpc3QgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNwbGl0TWFwczxTIGV4dGVuZHMgVmlzU3RhdGU+KFxuICBzdGF0ZTogUyxcbiAgc3BsaXRNYXBzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydzcGxpdE1hcHMnXSA9IFtdXG4pOiBTIHtcbiAgY29uc3QgbGF5ZXJFeGlzdHMgPSAoaWQ6IHN0cmluZykgPT4gc3RhdGUubGF5ZXJzLnNvbWUobCA9PiBsLmlkID09PSBpZCk7XG4gIGNvbnN0IGNyZWF0ZVBhbmVscyA9XG4gICAgc3RhdGUuc3BsaXRNYXBzLmxlbmd0aCA+IDAgfHxcbiAgICBzcGxpdE1hcHMuc29tZShzbSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBPYmplY3Qua2V5cyhzbS5sYXllcnMpO1xuICAgICAgcmV0dXJuICFpZHMubGVuZ3RoIHx8IGlkcy5zb21lKGxheWVyRXhpc3RzKTtcbiAgICB9KTtcbiAgY29uc3QgY3VycmVudExheWVycyA9IGdldEluaXRpYWxNYXBMYXllcnNGb3JTcGxpdE1hcChcbiAgICBzdGF0ZS5sYXllcnMuZmlsdGVyKGwgPT4gIXNwbGl0TWFwcy5zb21lKHNtID0+IGwuaWQgaW4gc20ubGF5ZXJzKSlcbiAgKTtcblxuICBjb25zdCBtZXJnZWQgPSBbLi4uc3RhdGUuc3BsaXRNYXBzXTtcbiAgY29uc3QgdW5tZXJnZWQ6IHR5cGVvZiBzcGxpdE1hcHMgPSBbXTtcbiAgc3BsaXRNYXBzLmZvckVhY2goKHNtLCBpKSA9PiB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHNtLmxheWVycyk7XG4gICAgaWYgKGNyZWF0ZVBhbmVscykge1xuICAgICAgLy8gY3JlYXRlIG1hcCBwYW5lbCBpZiBjdXJyZW50IG1hcCBpcyBub3Qgc3BsaXQsIGtlZXAgaWRcbiAgICAgIGNvbnN0IHBhbmVsID0gbWVyZ2VkW2ldIHx8IHsuLi5zbSwgbGF5ZXJzOiBjdXJyZW50TGF5ZXJzfTtcbiAgICAgIG1lcmdlZFtpXSA9IHtcbiAgICAgICAgLi4ucGFuZWwsXG4gICAgICAgIGxheWVyczogey4uLnBhbmVsLmxheWVycywgLi4uT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMuZmlsdGVyKChbaWRdKSA9PiBsYXllckV4aXN0cyhpZCkpKX1cbiAgICAgIH07XG4gICAgfVxuICAgIHVubWVyZ2VkW2ldID0gey4uLnNtLCBsYXllcnM6IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzLmZpbHRlcigoW2lkXSkgPT4gIWxheWVyRXhpc3RzKGlkKSkpfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBzcGxpdE1hcHM6IG1lcmdlZCxcbiAgICBzcGxpdE1hcHNUb0JlTWVyZ2VkOiB1bm1lcmdlZC5zb21lKHNtID0+IE9iamVjdC5rZXlzKHNtLmxheWVycykubGVuZ3RoKVxuICAgICAgPyBjb21iaW5lU3BsaXRNYXBzQnlJbmRleChzdGF0ZS5zcGxpdE1hcHNUb0JlTWVyZ2VkLCB1bm1lcmdlZClcbiAgICAgIDogc3RhdGUuc3BsaXRNYXBzVG9CZU1lcmdlZFxuICB9O1xufVxuXG4vKipcbiAqIE1lcmdlIGNoYXJ0cyB3aXRoIHNhdmVkIGNvbmZpZy4gQ2hhcnRzIHdob3NlIGRhdGFzZXQgaXMgbm90IGxvYWRlZCB5ZXQgYXJlXG4gKiBwYXJrZWQgb24gYGNoYXJ0c1RvQmVNZXJnZWRgIChzYW1lIGFzIGZpbHRlcnMpIHNvIGRhdGFzZXQgcmVwbGFjZSBjYW4gcmVtYXBcbiAqIGBkYXRhSWRgIGFuZCByZXN0b3JlIHRoZW0gYWZ0ZXIgdGhlIG5ldyB0YWJsZSBsYW5kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2hhcnRzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBjaGFydHM6IENoYXJ0Q29uZmlnW10gfCB1bmRlZmluZWQsXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNoYXJ0cykgfHwgIWNoYXJ0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgY29uc3QgaW5jb21pbmdJZHMgPSBuZXcgU2V0KFxuICAgIGNoYXJ0cy5tYXAoY2hhcnQgPT4gY2hhcnQ/LmlkKS5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IEJvb2xlYW4oaWQpKVxuICApO1xuICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQoKHN0YXRlLmNoYXJ0cyB8fCBbXSkubWFwKGNoYXJ0ID0+IGNoYXJ0LmlkKSk7XG4gIGNvbnN0IG5leHRDaGFydHM6IENoYXJ0Q29uZmlnW10gPSBbXTtcbiAgY29uc3QgZmFpbGVkOiBDaGFydENvbmZpZ1tdID0gW107XG4gIGNoYXJ0cy5mb3JFYWNoKGNoYXJ0ID0+IHtcbiAgICBpZiAoIWNoYXJ0IHx8ICFjaGFydC5pZCB8fCBleGlzdGluZ0lkcy5oYXMoY2hhcnQuaWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQ6IENoYXJ0Q29uZmlnID0gZnJvbUNvbmZpZ1xuICAgICAgPyB7XG4gICAgICAgICAgLi4uY2hhcnQsXG4gICAgICAgICAgLy8gT2xkZXIgY29uZmlncyBvbWl0IGBwaW5uZWRgOyBrZWVwIGNoYXJ0cyB2aXNpYmxlIGxpa2UgdGhlIGxlZ2VuZC5cbiAgICAgICAgICBwaW5uZWQ6IGNoYXJ0LnBpbm5lZCAhPT0gZmFsc2UsXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uY2hhcnQuZGlzcGxheSxcbiAgICAgICAgICAgIGlzQ29uZmlnQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIGlzSnNvbkVkaXRvckFjdGl2ZTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogY2hhcnQ7XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZC5kYXRhSWQgJiZcbiAgICAgICghc3RhdGUuZGF0YXNldHNbbm9ybWFsaXplZC5kYXRhSWRdIHx8IHN0YXRlLmlzTWVyZ2luZ0RhdGFzZXRzW25vcm1hbGl6ZWQuZGF0YUlkXSlcbiAgICApIHtcbiAgICAgIGZhaWxlZC5wdXNoKG5vcm1hbGl6ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGlzdGluZ0lkcy5hZGQobm9ybWFsaXplZC5pZCk7XG4gICAgbmV4dENoYXJ0cy5wdXNoKG5vcm1hbGl6ZWQpO1xuICB9KTtcbiAgaWYgKCFuZXh0Q2hhcnRzLmxlbmd0aCAmJiAhZmFpbGVkLmxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGNoYXJ0czogbmV4dENoYXJ0cy5sZW5ndGggPyBbLi4uKHN0YXRlLmNoYXJ0cyB8fCBbXSksIC4uLm5leHRDaGFydHNdIDogc3RhdGUuY2hhcnRzLFxuICAgIGNoYXJ0c1RvQmVNZXJnZWQ6IFtcbiAgICAgIC4uLihzdGF0ZS5jaGFydHNUb0JlTWVyZ2VkIHx8IFtdKS5maWx0ZXIoY2hhcnQgPT4gIWluY29taW5nSWRzLmhhcyhjaGFydC5pZCkpLFxuICAgICAgLi4uZmFpbGVkXG4gICAgXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNoYXJ0RGF0YXNldElkcyhcbiAgc2F2ZWRDaGFydHM6IENoYXJ0Q29uZmlnW10gfCB1bmRlZmluZWQsXG4gIGRhdGFJZDogc3RyaW5nLFxuICBkYXRhSWRUb1VzZTogc3RyaW5nXG4pOiBDaGFydENvbmZpZ1tdIHwgbnVsbCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzYXZlZENoYXJ0cykgfHwgIXNhdmVkQ2hhcnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlcGxhY2VkID0gc2F2ZWRDaGFydHNcbiAgICAuZmlsdGVyKGNoYXJ0ID0+IGNoYXJ0Py5kYXRhSWQgPT09IGRhdGFJZClcbiAgICAubWFwKGNoYXJ0ID0+ICh7Li4uY2hhcnQsIGRhdGFJZDogZGF0YUlkVG9Vc2V9KSk7XG4gIHJldHVybiByZXBsYWNlZC5sZW5ndGggPyByZXBsYWNlZCA6IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZmZlY3RzPFMgZXh0ZW5kcyBWaXNTdGF0ZT4oXG4gIHN0YXRlOiBTLFxuICBlZmZlY3RzOiBOb25OdWxsYWJsZTxQYXJzZWRDb25maWdbJ3Zpc1N0YXRlJ10+WydlZmZlY3RzJ10sXG4gIGZyb21Db25maWc/OiBib29sZWFuXG4pOiBTIHtcbiAgY29uc3QgbmV3RWZmZWN0cyA9IFtcbiAgICAuLi5zdGF0ZS5lZmZlY3RzLFxuICAgIC4uLihlZmZlY3RzIHx8IFtdKVxuICAgICAgLm1hcChlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gZnJvbUNvbmZpZ1xuICAgICAgICAgID8gY3JlYXRlRWZmZWN0KFxuICAgICAgICAgICAgICBkZWVwbWVyZ2UuYWxsKFtcbiAgICAgICAgICAgICAgICBlZmZlY3QsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgLy8gY29sbGFwc2UgYWxsIHBhbmVscyB3aGVuIGxvYWRpbmcgZWZmZWN0c1xuICAgICAgICAgICAgICAgICAgaXNDb25maWdBY3RpdmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogKGVmZmVjdCBhcyBFZmZlY3RUeXBlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGVmZmVjdCAmJiBlZmZlY3QuaXNWYWxpZFRvU2F2ZSgpKTtcbiAgICAgIH0pXG4gIF07XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZWZmZWN0czogbmV3RWZmZWN0cyxcbiAgICBlZmZlY3RPcmRlcjogbmV3RWZmZWN0cy5tYXAoZWZmZWN0ID0+IGVmZmVjdC5pZClcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyB3aXRoIHNhdmVkIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9uczxTIGV4dGVuZHMgVmlzU3RhdGU+KHN0YXRlOiBTLCBhbm5vdGF0aW9uczogYW55W10pOiBTIHtcbiAgaWYgKCFhbm5vdGF0aW9ucyB8fCAhYW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChzdGF0ZS5hbm5vdGF0aW9ucy5tYXAoYSA9PiBhLmlkKSk7XG4gIGNvbnN0IHZhbGlkQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uc1xuICAgIC5maWx0ZXIoXG4gICAgICBhID0+XG4gICAgICAgIGEgJiZcbiAgICAgICAgYS5pZCAmJlxuICAgICAgICAhZXhpc3RpbmdJZHMuaGFzKGEuaWQpICYmXG4gICAgICAgIGlzQW5ub3RhdGlvbktpbmQoYS5raW5kKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KGEuYW5jaG9yUG9pbnQpICYmXG4gICAgICAgIChhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMiB8fCBhLmFuY2hvclBvaW50Lmxlbmd0aCA9PT0gMykgJiZcbiAgICAgICAgYS5hbmNob3JQb2ludC5ldmVyeSh2YWx1ZSA9PiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSAmJlxuICAgICAgICAoYS5raW5kICE9PSBBbm5vdGF0aW9uS2luZC5SVUxFUiB8fFxuICAgICAgICAgIChBcnJheS5pc0FycmF5KGEuZW5kUG9pbnQpICYmXG4gICAgICAgICAgICAoYS5lbmRQb2ludC5sZW5ndGggPT09IDIgfHwgYS5lbmRQb2ludC5sZW5ndGggPT09IDMpICYmXG4gICAgICAgICAgICBhLmVuZFBvaW50LmV2ZXJ5KHZhbHVlID0+IE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpKSlcbiAgICApXG4gICAgLm1hcChhID0+ICh7XG4gICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICBhdXRvU2l6ZTogdHJ1ZSxcbiAgICAgIGF1dG9TaXplWTogdHJ1ZSxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIGxpbmVDb2xvcjogSU5JVElBTF9BTk5PVEFUSU9OX0xJTkVfQ09MT1IsXG4gICAgICBsaW5lV2lkdGg6IElOSVRJQUxfQU5OT1RBVElPTl9MSU5FX1dJRFRILFxuICAgICAgdGV4dFdpZHRoOiAwLFxuICAgICAgdGV4dEhlaWdodDogMCxcbiAgICAgIC4uLmEsXG4gICAgICAuLi4oYS5raW5kID09PSBBbm5vdGF0aW9uS2luZC5SVUxFUlxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHNob3dDdXN0b21UZXh0OiBhLnNob3dDdXN0b21UZXh0ID8/IHRydWUsXG4gICAgICAgICAgICBzaG93RGlzdGFuY2U6IGEuc2hvd0Rpc3RhbmNlID8/IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pXG4gICAgfSkpO1xuICBpZiAoIXZhbGlkQW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgYW5ub3RhdGlvbnM6IFsuLi5zdGF0ZS5hbm5vdGF0aW9ucywgLi4udmFsaWRBbm5vdGF0aW9uc11cbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZSBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwIHdpdGggc2F2ZWQgY29uZmlnLFxuICogdmFsaWRhdGUgZmllbGRzVG9TaG93XG4gKlxuICogQHBhcmFtIHN0YXRlXG4gKiBAcGFyYW0gdG9vbHRpcENvbmZpZ1xuICogQHJldHVybiAtIHttZXJnZWRUb29sdGlwOiB7fSwgdW5tZXJnZWRUb29sdGlwOiB7fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlSW50ZXJhY3Rpb25Ub29sdGlwQ29uZmlnKFxuICBzdGF0ZTogVmlzU3RhdGUsXG4gIHRvb2x0aXBDb25maWc6IFBpY2s8VG9vbHRpcEluZm9bJ2NvbmZpZyddLCAnZmllbGRzVG9TaG93Jz4gfCBudWxsID0gbnVsbFxuKSB7XG4gIGNvbnN0IHVubWVyZ2VkVG9vbHRpcDogVG9vbHRpcEluZm9bJ2NvbmZpZyddWydmaWVsZHNUb1Nob3cnXSA9IHt9O1xuICBjb25zdCBtZXJnZWRUb29sdGlwOiBUb29sdGlwSW5mb1snY29uZmlnJ11bJ2ZpZWxkc1RvU2hvdyddID0ge307XG5cbiAgaWYgKFxuICAgICF0b29sdGlwQ29uZmlnIHx8XG4gICAgIXRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93IHx8XG4gICAgIU9iamVjdC5rZXlzKHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93KS5sZW5ndGhcbiAgKSB7XG4gICAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xuICB9XG5cbiAgZm9yIChjb25zdCBkYXRhSWQgaW4gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3cpIHtcbiAgICBpZiAoIXN0YXRlLmRhdGFzZXRzW2RhdGFJZF0gfHwgc3RhdGUuaXNNZXJnaW5nRGF0YXNldHNbZGF0YUlkXSkge1xuICAgICAgLy8gaXMgbm90IHlldCBsb2FkZWRcbiAgICAgIHVubWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gdG9vbHRpcENvbmZpZy5maWVsZHNUb1Nob3dbZGF0YUlkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgZGF0YXNldCBpcyBsb2FkZWRcbiAgICAgIGNvbnN0IGFsbEZpZWxkcyA9IHN0YXRlLmRhdGFzZXRzW2RhdGFJZF0uZmllbGRzLm1hcChkID0+IGQubmFtZSk7XG4gICAgICBjb25zdCBmb3VuZEZpZWxkc1RvU2hvdyA9IHRvb2x0aXBDb25maWcuZmllbGRzVG9TaG93W2RhdGFJZF0uZmlsdGVyKGZpZWxkID0+XG4gICAgICAgIGFsbEZpZWxkcy5pbmNsdWRlcyhmaWVsZC5uYW1lKVxuICAgICAgKTtcblxuICAgICAgbWVyZ2VkVG9vbHRpcFtkYXRhSWRdID0gZm91bmRGaWVsZHNUb1Nob3c7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHttZXJnZWRUb29sdGlwLCB1bm1lcmdlZFRvb2x0aXB9O1xufVxuLyoqXG4gKiBNZXJnZSBsYXllckJsZW5kaW5nIHdpdGggc2F2ZWRcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUxheWVyQmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGxheWVyQmxlbmRpbmc6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVyQmxlbmRpbmcnXVxuKTogUyB7XG4gIGlmIChsYXllckJsZW5kaW5nICYmIExBWUVSX0JMRU5ESU5HU1tsYXllckJsZW5kaW5nXSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGxheWVyQmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIGxheWVyIGJsZW5kaW5nIGNvbmZpZ3MgaW50byBhIHNpbmdsZSBzdHJpbmdcbiAqIGJ5IHJldHVybmluZyB0aGUgb25lIHdpdGggdGhlIGhpZ2hlc3Qgb2NjdXJyZW5jZVxuICovXG5mdW5jdGlvbiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3MoY29uZmlnczogc3RyaW5nW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gcmV0dXJuIHRoZSBtb2RlIG9mIHRoZSBsYXllciBibGVuZGluZyB0eXBlXG4gIHJldHVybiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZShjb25maWdzKTtcbn1cblxuLyoqXG4gKiBNZXJnZSBvdmVybGF5QmxlbmRpbmcgd2l0aCBzYXZlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VPdmVybGF5QmxlbmRpbmc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIG92ZXJsYXlCbGVuZGluZzogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnb3ZlcmxheUJsZW5kaW5nJ11cbik6IFMge1xuICBpZiAob3ZlcmxheUJsZW5kaW5nICYmIE9WRVJMQVlfQkxFTkRJTkdTW292ZXJsYXlCbGVuZGluZ10pIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvdmVybGF5QmxlbmRpbmdcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIG11bHRpcGxlIG92ZXJsYXkgYmxlbmRpbmcgY29uZmlncyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICogYnkgcmV0dXJuaW5nIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdCBvY2N1cnJlbmNlXG4gKiovXG5mdW5jdGlvbiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlncyhjb25maWdzOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bGwge1xuICAvLyByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIG92ZXJsYXkgYmxlbmRpbmcgdHlwZVxuICByZXR1cm4gZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncyk7XG59XG5cbi8qKlxuICogTWVyZ2UgYW5pbWF0aW9uIGNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbmltYXRpb25Db25maWc8UyBleHRlbmRzIFZpc1N0YXRlPihcbiAgc3RhdGU6IFMsXG4gIGFuaW1hdGlvbjogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnYW5pbWF0aW9uQ29uZmlnJ11cbik6IFMge1xuICBpZiAoYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5jdXJyZW50VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGFuaW1hdGlvbkNvbmZpZzoge1xuICAgICAgICAuLi5zdGF0ZS5hbmltYXRpb25Db25maWcsXG4gICAgICAgIC4uLmFuaW1hdGlvbixcbiAgICAgICAgZG9tYWluOiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUFuaW1hdGlvbkNvbmZpZ3MoY29uZmlnczogU2F2ZWRBbmltYXRpb25Db25maWdbXSk6IFNhdmVkQW5pbWF0aW9uQ29uZmlnIHtcbiAgLy8gZ2V0IHRoZSBzbWFsbGVzdCB2YWx1ZXMgb2YgY3VycmVudFRpbWUgYW5kIHNwZWVkIGFtb25nIGFsbCBjb25maWdzXG4gIHJldHVybiB7XG4gICAgY3VycmVudFRpbWU6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuY3VycmVudFRpbWUpID8/IG51bGwsXG4gICAgc3BlZWQ6IGFnZ3JlZ2F0ZShjb25maWdzLCBBR0dSRUdBVElPTl9UWVBFUy5taW5pbXVtLCBjID0+IGMuc3BlZWQpID8/IG51bGwsXG4gICAgLy8gYW5kIHRoZSBtb3N0IGNvbW1vbiB0aW1lIGZvcm1hdCBhbmQgdGltZXpvbmUgYW1vbmcgdGhlIGNvbmZpZ3MgdGhhdCBzZXQgb25lXG4gICAgdGltZUZvcm1hdDogZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncy5tYXAoYyA9PiBjLnRpbWVGb3JtYXQpKSxcbiAgICB0aW1lem9uZTogZ2V0VmFsdWVXaXRoSGlnaGVzdE9jY3VycmVuY2UoY29uZmlncy5tYXAoYyA9PiBjLnRpbWV6b25lKSlcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzYXZlZCBsYXllciBjb2x1bW5zIHdpdGggbmV3IGRhdGEsXG4gKiB1cGRhdGUgZmllbGRJZHggYmFzZWQgb24gbmV3IGZpZWxkc1xuICpcbiAqIEBwYXJhbSBmaWVsZHNcbiAqIEBwYXJhbSBzYXZlZENvbHNcbiAqIEBwYXJhbSBlbXB0eUNvbHNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuIC0gdmFsaWRhdGVkIGNvbHVtbnMgb3IgbnVsbFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICBmaWVsZHM6IEtlcGxlclRhYmxlWydmaWVsZHMnXSxcbiAgc2F2ZWRDb2xzOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9ID0ge30sXG4gIGVtcHR5Q29sczogTGF5ZXJDb2x1bW5zLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKSB7XG4gIC8vIFByZXBhcmUgY29sdW1ucyBmb3IgdGhlIHZhbGlkYXRvclxuICBjb25zdCBjb2x1bW5zOiB0eXBlb2YgZW1wdHlDb2xzID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVtcHR5Q29scykpIHtcbiAgICBjb2x1bW5zW2tleV0gPSB7Li4uZW1wdHlDb2xzW2tleV19O1xuXG4gICAgY29uc3Qgc2F2ZWQgPSBzYXZlZENvbHNba2V5XTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkSWR4ID0gZmllbGRzLmZpbmRJbmRleCgoe25hbWV9KSA9PiBuYW1lID09PSBzYXZlZCk7XG5cbiAgICAgIGlmIChmaWVsZElkeCA+IC0xKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBmb3VuZCBjb2x1bW5zXG4gICAgICAgIGNvbHVtbnNba2V5XS5maWVsZElkeCA9IGZpZWxkSWR4O1xuICAgICAgICBjb2x1bW5zW2tleV0udmFsdWUgPSBzYXZlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBmaW5kIGFjdHVhbCBjb2x1bW4gZmllbGRJZHgsIGluIGNhc2UgaXQgaGFzIGNoYW5nZWRcbiAgY29uc3QgYWxsQ29sRm91bmQgPSBPYmplY3Qua2V5cyhjb2x1bW5zKS5ldmVyeShrZXkgPT5cbiAgICB2YWxpZGF0ZUNvbHVtbihjb2x1bW5zW2tleV0sIGNvbHVtbnMsIGZpZWxkcylcbiAgKTtcblxuICBjb25zdCBydiA9IGFsbENvbEZvdW5kID8gY29sdW1ucyA6IG51bGw7XG4gIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgIGNvbnN0IHJlcXVpcmVkQ29sdW1ucyA9IE9iamVjdC5rZXlzKGVtcHR5Q29scykuZmlsdGVyKGsgPT4gIWVtcHR5Q29sc1trXS5vcHRpb25hbCk7XG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSByZXF1aXJlZENvbHVtbnMuZmlsdGVyKGsgPT4gIWNvbHVtbnM/LltrXS52YWx1ZSk7XG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYXllciBoYXMgbWlzc2luZyBvciBpbnZhbGlkIGNvbHVtbnM6ICR7bWlzc2luZ0NvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnQ29sdW1ucyA9IE9iamVjdC5rZXlzKHNhdmVkQ29scyk7XG4gICAgY29uc3QgaW52YWxpZENvbHVtbnMgPSBjb25maWdDb2x1bW5zLmZpbHRlcihrID0+ICFjb2x1bW5zPy5ba10/LnZhbHVlKTtcbiAgICBpZiAoaW52YWxpZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExheWVyIGhhcyBpbnZhbGlkIGNvbHVtbnM6ICR7aW52YWxpZENvbHVtbnMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcnY7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgbGF5ZXIgY29sdW1uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbHVtbihcbiAgY29sdW1uOiBMYXllckNvbHVtbiAmIHt2YWxpZGF0b3I/OiB0eXBlb2YgdmFsaWRhdGVDb2x1bW59LFxuICBjb2x1bW5zOiBMYXllckNvbHVtbnMsXG4gIGFsbEZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddXG4pOiBib29sZWFuIHtcbiAgaWYgKGNvbHVtbi5vcHRpb25hbCB8fCBjb2x1bW4udmFsdWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoY29sdW1uLnZhbGlkYXRvcikge1xuICAgIHJldHVybiBjb2x1bW4udmFsaWRhdG9yKGNvbHVtbiwgY29sdW1ucywgYWxsRmllbGRzKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc2F2ZWQgdGV4dCBsYWJlbCBjb25maWcgd2l0aCBuZXcgZGF0YVxuICogcmVmZXIgdG8gdmlzLXN0YXRlLXNjaGVtYS5qcyBUZXh0TGFiZWxTY2hlbWFWMVxuICpcbiAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gZmllbGRzXG4gKiBAcGFyYW0ge09iamVjdH0gc2F2ZWRUZXh0TGFiZWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gdmFsaWRhdGVkIHRleHRsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTYXZlZFRleHRMYWJlbChcbiAgZmllbGRzLFxuICBsYXllclRleHRMYWJlbHM6IGFueVtdLFxuICBzYXZlZFRleHRMYWJlbCxcbiAgb3B0aW9uczoge3Rocm93T25FcnJvcj86IGJvb2xlYW47IGxheWVyVHlwZT86IHN0cmluZyB8IG51bGx9ID0ge31cbik6IGFueVtdIHtcbiAgY29uc3QgbGF5ZXJUZXh0TGFiZWwgPSBsYXllclRleHRMYWJlbHNbMF07XG4gIGNvbnN0IHNhdmVkVGV4dExhYmVscyA9IEFycmF5LmlzQXJyYXkoc2F2ZWRUZXh0TGFiZWwpID8gc2F2ZWRUZXh0TGFiZWwgOiBbc2F2ZWRUZXh0TGFiZWxdO1xuICBjb25zdCBjb3VudExhYmVsTGF5ZXIgPSBCb29sZWFuKFxuICAgIG9wdGlvbnMubGF5ZXJUeXBlICYmIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLmhhcyhvcHRpb25zLmxheWVyVHlwZSlcbiAgKTtcblxuICAvLyB2YWxpZGF0ZSBmaWVsZFxuICByZXR1cm4gc2F2ZWRUZXh0TGFiZWxzLm1hcCh0ZXh0TGFiZWwgPT4ge1xuICAgIGxldCBmaWVsZCA9IG51bGw7XG4gICAgaWYgKHRleHRMYWJlbC5maWVsZCkge1xuICAgICAgLy8gQ2x1c3RlciwgaGV4YmluLCBhbmQgZ3JpZCBwZXJzaXN0IGEgc3ludGhldGljIHBvaW50LWNvdW50IGZpZWxkIHRoYXRcbiAgICAgIC8vIGlzIG5vdCBvbmUgb2YgdGhlIGRhdGFzZXQgY29sdW1ucy5cbiAgICAgIGZpZWxkID1cbiAgICAgICAgY291bnRMYWJlbExheWVyICYmIHRleHRMYWJlbC5maWVsZC5uYW1lID09PSBQT0lOVF9DT1VOVF9GSUVMRF9OQU1FXG4gICAgICAgICAgPyBjcmVhdGVQb2ludENvdW50TGFiZWxGaWVsZCgpXG4gICAgICAgICAgOiBmaWVsZHMuZmluZChmZCA9PlxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0ZXh0TGFiZWwuZmllbGQpLmV2ZXJ5KGtleSA9PiB0ZXh0TGFiZWwuZmllbGRba2V5XSA9PT0gZmRba2V5XSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdGV4dCBsYWJlbCBmaWVsZDogJHtKU09OLnN0cmluZ2lmeSh0ZXh0TGFiZWwuZmllbGQpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXllclRleHRMYWJlbCkucmVkdWNlKFxuICAgICAgKGFjY3UsIGtleSkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLy8gS2VlcCBleHBsaWNpdCBmYWxzZSAvIDAuIGB8fGAgd291bGQgcmVwbGFjZSBhIHNhdmVkIGNvbGxpc2lvbkVuYWJsZWRcbiAgICAgICAgLy8gb2YgZmFsc2Ugd2l0aCB0aGUgYWdncmVnYXRpb24gZGVmYXVsdCBvZiB0cnVlLlxuICAgICAgICBba2V5XToga2V5ID09PSAnZmllbGQnID8gZmllbGQgOiB0ZXh0TGFiZWxba2V5XSA/PyBsYXllclRleHRMYWJlbFtrZXldXG4gICAgICB9KSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogTWFwcyBzYXZlZCBiZWZvcmUgY291bnQgbGFiZWxzIG9taXQgYHRleHRMYWJlbGAuIFRob3NlIGNsdXN0ZXIsIGhleGJpbiwgYW5kXG4gKiBncmlkIGxheWVycyBzdGF5IHVubGFiZWxlZC4gTmV3IGxheWVycyBzdGlsbCBnZXQgdGhlIHBvaW50LWNvdW50IGRlZmF1bHRcbiAqIGZyb20gYGdldERlZmF1bHRMYXllckNvbmZpZ2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWxsYmFja1RleHRMYWJlbEZvckxvYWRlZExheWVyKFxuICBsYXllclR5cGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG5ld0xheWVyVGV4dExhYmVsOiBhbnlbXVxuKTogYW55W10ge1xuICBpZiAobGF5ZXJUeXBlICYmIEFHR1JFR0FUSU9OX0NPVU5UX0xBWUVSX1RZUEVTLmhhcyhsYXllclR5cGUpKSB7XG4gICAgcmV0dXJuIFt7Li4uREVGQVVMVF9URVhUX0xBQkVMfV07XG4gIH1cbiAgcmV0dXJuIG5ld0xheWVyVGV4dExhYmVsO1xufVxuXG4vKipcbiAqIFNhdmVkIHZpc3VhbCBjaGFubmVsIGZpZWxkL3NjYWxlIG1heSBsaXZlIGluIGFueSBvZjpcbiAqIC0gYGNvbmZpZ1trZXldYCBhZnRlciBzY2hlbWEgcGFyc2UgKFZpc3VhbENoYW5uZWxTY2hlbWFWMSBmb2xkcyBjaGFubmVscyBpbnRvIGNvbmZpZylcbiAqIC0gYHZpc3VhbENoYW5uZWxzW2tleV1gIGFzIGEgc2libGluZyBvZiBgY29uZmlnYCAodW5wYXJzZWQgYWRkRGF0YVRvTWFwIHBheWxvYWQpXG4gKiAtIGBjb25maWcudmlzdWFsQ2hhbm5lbHNba2V5XWAgKGNvbW1vbiBtaXN0YWtlIG9mIG5lc3RpbmcgdmlzdWFsQ2hhbm5lbHMgaW5zaWRlIGNvbmZpZylcbiAqXG4gKiBXaXRob3V0IHRoaXMgbG9va3VwLCBwcm9ncmFtbWF0aWMgR2VvSlNPTiBzdHJva2VDb2xvckZpZWxkIG5ldmVyIGJpbmRzIGFuZFxuICogc3Ryb2tlQ29sb3JEb21haW4gc3RheXMgYXQgdGhlIGRlZmF1bHQgYFswLCAxXWAgKGtlcGxlci5nbCAjMzA2MSkuXG4gKi9cbmZ1bmN0aW9uIGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLCBrZXk6IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IGNvbmZpZyA9IHNhdmVkTGF5ZXIuY29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gIGlmIChjb25maWcgJiYgY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjb25maWdba2V5XTtcbiAgfVxuICBjb25zdCBjaGFubmVscyA9XG4gICAgKHNhdmVkTGF5ZXIgYXMge3Zpc3VhbENoYW5uZWxzPzogUmVjb3JkPHN0cmluZywgYW55Pn0pLnZpc3VhbENoYW5uZWxzIHx8XG4gICAgKGNvbmZpZyAmJiBjb25maWcudmlzdWFsQ2hhbm5lbHMpO1xuICBpZiAoY2hhbm5lbHMgJiYgdHlwZW9mIGNoYW5uZWxzID09PSAnb2JqZWN0JyAmJiBjaGFubmVsc1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2hhbm5lbHNba2V5XTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIHZpc3VhbCBjaGFubmVscyBjb25maWcgd2l0aCBuZXcgZGF0YSxcbiAqIHJlZmVyIHRvIHZpcy1zdGF0ZS1zY2hlbWEuanMgVmlzdWFsQ2hhbm5lbFNjaGVtYVYxXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNhdmVkVmlzdWFsQ2hhbm5lbHMoXG4gIGZpZWxkczogS2VwbGVyVGFibGVbJ2ZpZWxkcyddLFxuICBuZXdMYXllcjogTGF5ZXIsXG4gIHNhdmVkTGF5ZXI6IFBhcnNlZExheWVyLFxuICBvcHRpb25zOiB7dGhyb3dPbkVycm9yPzogYm9vbGVhbn0gPSB7fVxuKTogbnVsbCB8IExheWVyIHtcbiAgT2JqZWN0LnZhbHVlcyhuZXdMYXllci52aXN1YWxDaGFubmVscykuZm9yRWFjaCgoe2ZpZWxkLCBzY2FsZSwga2V5fSkgPT4ge1xuICAgIGNvbnN0IHNhdmVkRmllbGQgPSBnZXRTYXZlZFZpc3VhbENoYW5uZWxWYWx1ZShzYXZlZExheWVyLCBmaWVsZCk7XG4gICAgY29uc3Qgc2F2ZWRTY2FsZSA9IGdldFNhdmVkVmlzdWFsQ2hhbm5lbFZhbHVlKHNhdmVkTGF5ZXIsIHNjYWxlKTtcbiAgICBsZXQgZm91bmRGaWVsZDtcbiAgICBpZiAoc2F2ZWRGaWVsZD8ubmFtZSkge1xuICAgICAgZm91bmRGaWVsZCA9IGZpZWxkcy5maW5kKGZkID0+IGZkLm5hbWUgPT09IHNhdmVkRmllbGQubmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgZm91bmRDaGFubmVsID0ge1xuICAgICAgLi4uKGZvdW5kRmllbGQgPyB7W2ZpZWxkXTogZm91bmRGaWVsZH0gOiB7fSksXG4gICAgICAuLi4oc2F2ZWRTY2FsZSA/IHtbc2NhbGVdOiBzYXZlZFNjYWxlfSA6IHt9KVxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKGZvdW5kQ2hhbm5lbCkubGVuZ3RoKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyhmb3VuZENoYW5uZWwpO1xuICAgIH1cblxuICAgIG5ld0xheWVyLnZhbGlkYXRlVmlzdWFsQ2hhbm5lbChrZXkpO1xuICAgIGlmIChvcHRpb25zLnRocm93T25FcnJvcikge1xuICAgICAgY29uc3QgZmllbGROYW1lID0gc2F2ZWRGaWVsZD8ubmFtZTtcbiAgICAgIGlmIChmaWVsZE5hbWUgJiYgZmllbGROYW1lICE9PSBuZXdMYXllci5jb25maWdbZmllbGRdPy5uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdmlzdWFsIGNoYW5uZWwgZmllbGQ6ICR7ZmllbGR9YCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG50eXBlIFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7XG4gIGFsbG93RW1wdHlDb2x1bW4/OiBib29sZWFuO1xuICB0aHJvd09uRXJyb3I/OiBib29sZWFuO1xuICAvLyBTYXZlZCBtYXBzIHRoYXQgb21pdCB0ZXh0TGFiZWwgcHJlZGF0ZSBjb3VudCBsYWJlbHMgYW5kIHN0YXkgdW5sYWJlbGVkLlxuICAvLyBBIG5ldyBsYXllciBjb25maWcgb21pdHMgaXQgdG9vLCBhbmQgc2hvdWxkIGtlZXAgdGhlIGxheWVyIGRlZmF1bHQuXG4gIGtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVMYXllcnNCeURhdGFzZXRzKFxuICBkYXRhc2V0czogRGF0YXNldHMsXG4gIGxheWVyQ2xhc3NlczogVmlzU3RhdGVbJ2xheWVyQ2xhc3NlcyddLFxuICBsYXllcnM6IE5vbk51bGxhYmxlPFBhcnNlZENvbmZpZ1sndmlzU3RhdGUnXT5bJ2xheWVycyddID0gW10sXG4gIG9wdGlvbnM/OiBWYWxpZGF0ZUxheWVyT3B0aW9uXG4pIHtcbiAgY29uc3QgdmFsaWRhdGVkOiBMYXllcltdID0gW107XG4gIGNvbnN0IGZhaWxlZDogTm9uTnVsbGFibGU8UGFyc2VkQ29uZmlnWyd2aXNTdGF0ZSddPlsnbGF5ZXJzJ10gPSBbXTtcblxuICBsYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgbGV0IHZhbGlkYXRlTGF5ZXI6IExheWVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAobGF5ZXI/LmNvbmZpZz8uZGF0YUlkKSB7XG4gICAgICBpZiAoZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0pIHtcbiAgICAgICAgLy8gZGF0YXNldHMgYXJlIGFscmVhZHkgbG9hZGVkXG4gICAgICAgIHZhbGlkYXRlTGF5ZXIgPSB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gICAgICAgICAgZGF0YXNldHNbbGF5ZXIuY29uZmlnLmRhdGFJZF0sXG4gICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgbGF5ZXJDbGFzc2VzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVMYXllcikge1xuICAgICAgdmFsaWRhdGVkLnB1c2godmFsaWRhdGVMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRhdGFzZXRzIG5vdCB5ZXQgbG9hZGVkXG4gICAgICBmYWlsZWQucHVzaChsYXllcik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge3ZhbGlkYXRlZCwgZmFpbGVkfTtcbn1cblxuLyoqXG4gKiBHZXQgcmVxdWlyZWQgY29sdW1ucyBmb3IgdmFsaWRhdGlvbiBiYXNlZCBvbiBjb2x1bW4gbW9kZVxuICovXG5mdW5jdGlvbiBfZ2V0Q29sdW1uQ29uZmlnRm9yVmFsaWRhdGlvbihuZXdMYXllcikge1xuICAvLyBmaW5kIGNvbHVtbiBmaWVsZElkeFxuICBsZXQgY29sdW1uQ29uZmlnID0gbmV3TGF5ZXIuZ2V0TGF5ZXJDb2x1bW5zKCk7XG4gIC8vIGlmIGNvbHVtbk1vZGUgaXMgZGVmaW5lZCwgZmluZCBjb2x1bW4gbW9kZSBjb25maWdcbiAgY29uc3QgY29sTW9kZUNvbmZpZyA9IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgPyAobmV3TGF5ZXIuc3VwcG9ydGVkQ29sdW1uTW9kZXMgfHwgW10pLmZpbmQoXG4gICAgICAgIGNvbE1vZGUgPT4gY29sTW9kZS5rZXkgPT09IG5ld0xheWVyLmNvbmZpZy5jb2x1bW5Nb2RlXG4gICAgICApXG4gICAgOiBudWxsO1xuXG4gIGlmIChjb2xNb2RlQ29uZmlnKSB7XG4gICAgLy8gb25seSB2YWxpZGF0ZSBjb2x1bW5zIGluIGNvbHVtbiBtb2RlIChpbmNsdWRpbmcgdGFiYmVkIGNvbHVtbkdyb3VwcylcbiAgICBjb25zdCBncm91cENvbHVtbnMgPSAoY29sTW9kZUNvbmZpZy5jb2x1bW5Hcm91cHMgfHwgW10pLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAuY29sdW1ucyB8fCBbXSk7XG4gICAgY29uc3QgcmVxdWlyZWRLZXlzID0gbmV3IFNldChjb2xNb2RlQ29uZmlnLnJlcXVpcmVkQ29sdW1ucyB8fCBbXSk7XG4gICAgY29sdW1uQ29uZmlnID0gW1xuICAgICAgLi4uKGNvbE1vZGVDb25maWcucmVxdWlyZWRDb2x1bW5zIHx8IFtdKSxcbiAgICAgIC4uLihjb2xNb2RlQ29uZmlnLm9wdGlvbmFsQ29sdW1ucyB8fCBbXSksXG4gICAgICAuLi5ncm91cENvbHVtbnNcbiAgICBdLnJlZHVjZSgoYWNjdSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBjb2wgPSBjb2x1bW5Db25maWdba2V5XTtcbiAgICAgIGlmICghY29sKSB7XG4gICAgICAgIHJldHVybiBhY2N1O1xuICAgICAgfVxuICAgICAgLy8gT3B0aW9uYWxpdHkgbXVzdCBmb2xsb3cgdGhlIGFjdGl2ZSBtb2RlOiBhIGZpZWxkIG9wdGlvbmFsIGluIGFub3RoZXIgbW9kZVxuICAgICAgLy8gKGUuZy4gYWx0aXR1ZGUgaW4gVVYpIGlzIHN0aWxsIHJlcXVpcmVkIHdoZW4gdGhpcyBtb2RlIGxpc3RzIGl0IGluIHJlcXVpcmVkQ29sdW1ucy5cbiAgICAgIGlmIChyZXF1aXJlZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgY29uc3Qge29wdGlvbmFsOiBfb3B0aW9uYWwsIC4uLnJlcXVpcmVkQ29sfSA9IGNvbDtcbiAgICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogcmVxdWlyZWRDb2x9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsuLi5hY2N1LCBba2V5XTogey4uLmNvbCwgb3B0aW9uYWw6IHRydWV9fTtcbiAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gY29sdW1uQ29uZmlnO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyV2l0aERhdGEoXG4gIGRhdGFzZXQ6IEtlcGxlclRhYmxlLFxuICBzYXZlZExheWVyOiBQYXJzZWRMYXllcixcbiAgbGF5ZXJDbGFzc2VzOiBWaXNTdGF0ZVsnbGF5ZXJDbGFzc2VzJ10sXG4gIG9wdGlvbnM6IFZhbGlkYXRlTGF5ZXJPcHRpb24gPSB7fVxuKTogTGF5ZXIgfCBudWxsIHtcbiAgY29uc3Qge2ZpZWxkcywgaWQ6IGRhdGFJZH0gPSBkYXRhc2V0O1xuICBjb25zdCB7dHlwZX0gPSBzYXZlZExheWVyO1xuICBjb25zdCB7dGhyb3dPbkVycm9yfSA9IG9wdGlvbnM7XG4gIC8vIGxheWVyIGRvZXNudCBoYXZlIGEgdmFsaWQgdHlwZVxuICBpZiAoIXR5cGUgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsYXllckNsYXNzZXMsIHR5cGUpIHx8ICFzYXZlZExheWVyLmNvbmZpZykge1xuICAgIGlmICh0aHJvd09uRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaGFzIGludmFsaWQgdHlwZSBcIiR7dHlwZX1cIiBvciBjb25maWcgaXMgbWlzc2luZ2ApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBuZXdMYXllciA9IG5ldyBsYXllckNsYXNzZXNbdHlwZV0oe1xuICAgIGlkOiBzYXZlZExheWVyLmlkLFxuICAgIGRhdGFJZCxcbiAgICBsYWJlbDogc2F2ZWRMYXllci5jb25maWcubGFiZWwsXG4gICAgY29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbG9yLFxuICAgIGlzVmlzaWJsZTogc2F2ZWRMYXllci5jb25maWcuaXNWaXNpYmxlLFxuICAgIGhpZGRlbjogc2F2ZWRMYXllci5jb25maWcuaGlkZGVuLFxuICAgIGlzSW5jbHVkZWRJbkxlZ2VuZDogc2F2ZWRMYXllci5jb25maWcuaXNJbmNsdWRlZEluTGVnZW5kLFxuICAgIGNvbHVtbk1vZGU6IHNhdmVkTGF5ZXIuY29uZmlnLmNvbHVtbk1vZGUsXG4gICAgaGlnaGxpZ2h0Q29sb3I6IHNhdmVkTGF5ZXIuY29uZmlnLmhpZ2hsaWdodENvbG9yXG4gIH0pO1xuXG4gIGNvbnN0IGNvbHVtbkNvbmZpZyA9IF9nZXRDb2x1bW5Db25maWdGb3JWYWxpZGF0aW9uKG5ld0xheWVyKTtcblxuICBpZiAoT2JqZWN0LmtleXMoY29sdW1uQ29uZmlnKSkge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB2YWxpZGF0ZVNhdmVkTGF5ZXJDb2x1bW5zKFxuICAgICAgZmllbGRzLFxuICAgICAgc2F2ZWRMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgIGNvbHVtbkNvbmZpZyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBuZXdMYXllci51cGRhdGVMYXllckNvbmZpZyh7XG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAuLi5uZXdMYXllci5jb25maWcuY29sdW1ucyxcbiAgICAgICAgICAuLi5jb2x1bW5zXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuYWxsb3dFbXB0eUNvbHVtbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdGV4dExhYmVsID1cbiAgICBzYXZlZExheWVyLmNvbmZpZy50ZXh0TGFiZWwgJiYgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbFxuICAgICAgPyB2YWxpZGF0ZVNhdmVkVGV4dExhYmVsKGZpZWxkcywgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbCwgc2F2ZWRMYXllci5jb25maWcudGV4dExhYmVsLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBsYXllclR5cGU6IHNhdmVkTGF5ZXIudHlwZVxuICAgICAgICB9KVxuICAgICAgOiBvcHRpb25zLmtlZXBVbmxhYmVsZWRBZ2dyZWdhdGlvblRleHRMYWJlbFxuICAgICAgPyBmYWxsYmFja1RleHRMYWJlbEZvckxvYWRlZExheWVyKHNhdmVkTGF5ZXIudHlwZSwgbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbClcbiAgICAgIDogbmV3TGF5ZXIuY29uZmlnLnRleHRMYWJlbDtcblxuICAvLyBjb3B5IHZpc0NvbmZpZyBvdmVyIHRvIGVtcHR5TGF5ZXIgdG8gbWFrZSBzdXJlIGl0IGhhcyBhbGwgdGhlIHByb3BzXG4gIGNvbnN0IHNhdmVkVmlzQ29uZmlnID1cbiAgICBzYXZlZExheWVyLnR5cGUgPT09ICczRCdcbiAgICAgID8gbWlncmF0ZUxlZ2FjeVNjZW5lZ3JhcGhWaXNDb25maWcoc2F2ZWRMYXllci5jb25maWcudmlzQ29uZmlnKVxuICAgICAgOiBzYXZlZExheWVyLmNvbmZpZy52aXNDb25maWc7XG4gIGNvbnN0IGNvcGllZFZpc0NvbmZpZyA9IG5ld0xheWVyLmNvcHlMYXllckNvbmZpZyhcbiAgICBuZXdMYXllci5jb25maWcudmlzQ29uZmlnLFxuICAgIHNhdmVkVmlzQ29uZmlnIHx8IHt9LFxuICAgIHtcbiAgICAgIHNoYWxsb3dDb3B5OiBbJ2NvbG9yUmFuZ2UnLCAnc3Ryb2tlQ29sb3JSYW5nZSddXG4gICAgfVxuICApO1xuXG4gIC8vIGNhbGwgbGF5ZXIgbWV0aG9kcyB0byB2YWxpZGF0ZSB2aXNDb25maWcgd2hlbiBzd2l0Y2hpbmcgZGF0YXNldFxuICBjb25zdCB2aXNDb25maWcgPSBuZXdMYXllci52YWxpZGF0ZVZpc0NvbmZpZ1xuICAgID8gbmV3TGF5ZXIudmFsaWRhdGVWaXNDb25maWcoZGF0YXNldCwgY29waWVkVmlzQ29uZmlnKVxuICAgIDogY29waWVkVmlzQ29uZmlnO1xuXG4gIG5ld0xheWVyLnVwZGF0ZUxheWVyQ29uZmlnKHtcbiAgICB2aXNDb25maWcsXG4gICAgdGV4dExhYmVsXG4gIH0pO1xuXG4gIC8vIHZpc3VhbCBjaGFubmVsIGZpZWxkIGlzIHNhdmVkIHRvIGJlIHtuYW1lLCB0eXBlfVxuICAvLyBmaW5kIHZpc3VhbCBjaGFubmVsIGZpZWxkIGJ5IG1hdGNoaW5nIGJvdGggbmFtZSBhbmQgdHlwZVxuICAvLyByZWZlciB0byB2aXMtc3RhdGUtc2NoZW1hLmpzIFZpc3VhbENoYW5uZWxTY2hlbWFWMVxuICBuZXdMYXllciA9IHZhbGlkYXRlU2F2ZWRWaXN1YWxDaGFubmVscyhmaWVsZHMsIG5ld0xheWVyLCBzYXZlZExheWVyLCBvcHRpb25zKTtcblxuICBpZiAodGhyb3dPbkVycm9yKSB7XG4gICAgaWYgKCFuZXdMYXllci5pc1ZhbGlkVG9TYXZlKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGF5ZXIgaXMgbm90IHZhbGlkIHRvIHNhdmU6ICR7bmV3TGF5ZXIuaWR9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0xheWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFZGl0b3I8UyBleHRlbmRzIFZpc1N0YXRlPihzdGF0ZTogUywgc2F2ZWRFZGl0b3I6IFNhdmVkRWRpdG9yKSB7XG4gIGlmICghc2F2ZWRFZGl0b3IpIHtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBlZGl0b3I6IHtcbiAgICAgIC4uLnN0YXRlLmVkaXRvcixcbiAgICAgIGZlYXR1cmVzOiBbLi4uc3RhdGUuZWRpdG9yLmZlYXR1cmVzLCAuLi4oc2F2ZWRFZGl0b3IuZmVhdHVyZXMgfHwgW10pXSxcbiAgICAgIC8vIGlmIHNhdmVkRWRpdG9yLnZpc2libGUgaXMgdW5kZWZpbmVkIGtlZXAgc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICAgIHZpc2libGU6IHNhdmVkRWRpdG9yLnZpc2libGUgPz8gc3RhdGUuZWRpdG9yLnZpc2libGVcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVFZGl0b3JDb25maWdzKGNvbmZpZ3M6IFNhdmVkRWRpdG9yW10pOiBTYXZlZEVkaXRvciB7XG4gIHJldHVybiBjb25maWdzLnJlZHVjZShcbiAgICAoYWNjLCBuZXh0Q29uZmlnKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hY2MsXG4gICAgICAgIGZlYXR1cmVzOiBbLi4uYWNjLmZlYXR1cmVzLCAuLi4obmV4dENvbmZpZy5mZWF0dXJlcyB8fCBbXSldXG4gICAgICB9O1xuICAgIH0sXG4gICAge1xuICAgICAgLy8gc3RhcnQgd2l0aDpcbiAgICAgIC8vIC0gZW1wdHkgYXJyYXkgZm9yIGZlYXR1cmVzIGFjY3VtdWxhdGlvblxuICAgICAgLy8gLSBhbmQgYXJlIGFueSBvZiB0aGUgY29uZmlncycgdmlzaWJsZSB2YWx1ZXMgdHJ1ZT9cbiAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgIHZpc2libGU6IGNvbmZpZ3Muc29tZShjID0+IGM/LnZpc2libGUpXG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHNhdmVkIGxheWVyIGNvbmZpZyB3aXRoIG5ldyBkYXRhLFxuICogdXBkYXRlIGZpZWxkSWR4IGJhc2VkIG9uIG5ldyBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0YXNldHNCeU9yZGVyKHN0YXRlOiBWaXNTdGF0ZSwgbmV3RGF0YUVudHJpZXM6IERhdGFzZXRzKTogRGF0YXNldHMge1xuICBjb25zdCBtZXJnZWQgPSB7XG4gICAgLi4uc3RhdGUuZGF0YXNldHMsXG4gICAgLi4ubmV3RGF0YUVudHJpZXNcbiAgfTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlcikpIHtcbiAgICAvLyBwcmVzZXJ2ZURhdGFzZXRPcmRlciAgbWlnaHQgbm90IGluY2x1ZGUgdGhlICBuZXcgZGF0YXNldHNcbiAgICBjb25zdCBuZXdEYXRhc2V0SWRzID0gT2JqZWN0LmtleXMobWVyZ2VkKS5maWx0ZXIoXG4gICAgICBpZCA9PiAhc3RhdGUucHJlc2VydmVEYXRhc2V0T3JkZXI/LmluY2x1ZGVzKGlkKVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5zdGF0ZS5wcmVzZXJ2ZURhdGFzZXRPcmRlciwgLi4ubmV3RGF0YXNldElkc10ucmVkdWNlKFxuICAgICAgKGFjY3UsIGRhdGFJZCkgPT4gKHtcbiAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgLi4uKG1lcmdlZFtkYXRhSWRdID8ge1tkYXRhSWRdOiBtZXJnZWRbZGF0YUlkXX0gOiB7fSlcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuLyoqXG4gKiBTaW1saWFyIHB1cnBvc2UgdG8gYWdncmVnYXRpb24gdXRpbHMgYGdldE1vZGVgIGZ1bmN0aW9uLFxuICogYnV0IHJldHVybnMgdGhlIG1vZGUgaW4gdGhlIHNhbWUgdmFsdWUgdHlwZSB3aXRob3V0IGNvZXJjaW5nIHRvIGEgc3RyaW5nLlxuICogSXQgaWdub3JlcyBgdW5kZWZpbmVkYCBvciBgbnVsbGAgdmFsdWVzLCBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm8gbW9kZSBjb3VsZCBiZSBjYWxjdWxhdGVkLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZVdpdGhIaWdoZXN0T2NjdXJyZW5jZTxUPihhcnI6IFRbXSk6IFQgfCBudWxsIHtcbiAgY29uc3QgdGFsbHlzID0gbmV3IE1hcCgpO1xuICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgaWYgKG5vdE51bGxvclVuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIGlmICghdGFsbHlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgdGFsbHlzLnNldCh2YWx1ZSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWxseXMuc2V0KHZhbHVlLCB0YWxseXMuZ2V0KHZhbHVlKSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8vIHJldHVybiB0aGUgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdCB0b3RhbCBvY2N1cnJlbmNlIGNvdW50XG4gIGlmICh0YWxseXMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBbLi4udGFsbHlzLmVudHJpZXMoKV0/LnJlZHVjZSgoYWNjLCBuZXh0KSA9PiAobmV4dFsxXSA+IGFjY1sxXSA/IG5leHQgOiBhY2MpKVswXTtcbn1cblxuZXhwb3J0IGNvbnN0IFZJU19TVEFURV9NRVJHRVJTOiBWaXNTdGF0ZU1lcmdlcnM8YW55PiA9IFtcbiAge1xuICAgIHByb3A6ICdjYW1lcmFUb3VyJyxcbiAgICBtZXJnZTogKHN0YXRlLCB0b3VyKSA9PlxuICAgICAgc3RhdGUuY2FtZXJhVG91ciA/IHN0YXRlIDogey4uLnN0YXRlLCBjYW1lcmFUb3VyOiBub3JtYWxpemVDYW1lcmFUb3VyKHRvdXIpfVxuICB9LFxuICB7XG4gICAgcHJvcDogJ2NhbWVyYUJvb2ttYXJrcycsXG4gICAgbWVyZ2U6IChzdGF0ZSwgYm9va21hcmtzKSA9PiAoe1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBjYW1lcmFCb29rbWFya3M6IG5vcm1hbGl6ZUNhbWVyYUJvb2ttYXJrcyhbXG4gICAgICAgIC4uLihzdGF0ZS5jYW1lcmFCb29rbWFya3MgfHwgW10pLFxuICAgICAgICAuLi5ub3JtYWxpemVDYW1lcmFCb29rbWFya3MoYm9va21hcmtzKVxuICAgICAgXSlcbiAgICB9KVxuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJzLFxuICAgIHByb3A6ICdsYXllcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnbGF5ZXJUb0JlTWVyZ2VkJyxcbiAgICBwcmVzZXJ2ZU9yZGVyOiAncHJlc2VydmVMYXllck9yZGVyJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlTGF5ZXJPcmRlcixcbiAgICBwcm9wOiAnbGF5ZXJPcmRlcidcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUZpbHRlcnMsXG4gICAgcHJvcDogJ2ZpbHRlcnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnZmlsdGVyVG9CZU1lcmdlZCcsXG4gICAgcHJlc2VydmVPcmRlcjogJ3ByZXNlcnZlRmlsdGVyT3JkZXInLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlRmlsdGVyRGF0YXNldElkc1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlRWZmZWN0cyxcbiAgICBwcm9wOiAnZWZmZWN0cydcbiAgfSxcbiAge1xuICAgIG1lcmdlOiBtZXJnZUNoYXJ0cyxcbiAgICBwcm9wOiAnY2hhcnRzJyxcbiAgICB0b01lcmdlUHJvcDogJ2NoYXJ0c1RvQmVNZXJnZWQnLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlQ2hhcnREYXRhc2V0SWRzXG4gIH0sXG4gIHtcbiAgICBtZXJnZTogbWVyZ2VBbm5vdGF0aW9ucyxcbiAgICBwcm9wOiAnYW5ub3RhdGlvbnMnLFxuICAgIHRvTWVyZ2VQcm9wOiAnYW5ub3RhdGlvbnNUb0JlTWVyZ2VkJ1xuICB9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlSW50ZXJhY3Rpb25zLFxuICAgIHByb3A6ICdpbnRlcmFjdGlvbkNvbmZpZycsXG4gICAgdG9NZXJnZVByb3A6ICdpbnRlcmFjdGlvblRvQmVNZXJnZWQnLFxuICAgIHJlcGxhY2VQYXJlbnREYXRhc2V0SWRzOiByZXBsYWNlSW50ZXJhY3Rpb25EYXRhc2V0SWRzLFxuICAgIHNhdmVVbm1lcmdlZDogc2F2ZWRVbm1lcmdlZEludGVyYWN0aW9uLFxuICAgIGNvbWJpbmVDb25maWdzOiBjb21iaW5lSW50ZXJhY3Rpb25Db25maWdzXG4gIH0sXG4gIHttZXJnZTogbWVyZ2VMYXllckJsZW5kaW5nLCBwcm9wOiAnbGF5ZXJCbGVuZGluZycsIGNvbWJpbmVDb25maWdzOiBjb21iaW5lTGF5ZXJCbGVuZGluZ0NvbmZpZ3N9LFxuICB7XG4gICAgbWVyZ2U6IG1lcmdlT3ZlcmxheUJsZW5kaW5nLFxuICAgIHByb3A6ICdvdmVybGF5QmxlbmRpbmcnLFxuICAgIGNvbWJpbmVDb25maWdzOiBjb21iaW5lT3ZlcmxheUJsZW5kaW5nQ29uZmlnc1xuICB9LFxuICB7bWVyZ2U6IG1lcmdlU3BsaXRNYXBzLCBwcm9wOiAnc3BsaXRNYXBzJywgdG9NZXJnZVByb3A6ICdzcGxpdE1hcHNUb0JlTWVyZ2VkJ30sXG4gIHttZXJnZTogbWVyZ2VBbmltYXRpb25Db25maWcsIHByb3A6ICdhbmltYXRpb25Db25maWcnLCBjb21iaW5lQ29uZmlnczogY29tYmluZUFuaW1hdGlvbkNvbmZpZ3N9LFxuICB7bWVyZ2U6IG1lcmdlRWRpdG9yLCBwcm9wOiAnZWRpdG9yJywgY29tYmluZUNvbmZpZ3M6IGNvbWJpbmVFZGl0b3JDb25maWdzfVxuXTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBLE9BQU9BLElBQUksTUFBTSx3QkFBd0I7QUFDekMsT0FBT0MsSUFBSSxNQUFNLHdCQUF3QjtBQUN6QyxPQUFPQyxXQUFXLE1BQU0sK0JBQStCO0FBQ3ZELE9BQU9DLFNBQVMsTUFBTSxXQUFXO0FBQ2pDLFNBQ0VDLFdBQVcsRUFDWEMsd0JBQXdCLEVBQ3hCQyxtQkFBbUIsRUFDbkJDLHVCQUF1QixFQUN2QkMsOEJBQThCLEVBQzlCQyxzQkFBc0IsRUFDdEJDLDZCQUE2QixFQUM3QkMsUUFBUSxFQUNSQyxTQUFTLEVBQ1RDLGFBQWEsUUFDUixrQkFBa0I7QUFFekIsU0FDRUMsNkJBQTZCLEVBRTdCQywwQkFBMEIsRUFDMUJDLGdDQUFnQyxFQUNoQ0Msc0JBQXNCLFFBQ2pCLG1CQUFtQjtBQUMxQixTQUFRQyxZQUFZLFFBQU8sb0JBQW9CO0FBQy9DLFNBQVFDLGtCQUFrQixRQUFPLHlCQUF5QjtBQUMxRCxTQUNFQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLGNBQWMsRUFDZEMsZ0JBQWdCLEVBQ2hCQyw2QkFBNkIsRUFDN0JDLDZCQUE2QixRQUN4QixzQkFBc0I7QUFDN0IsU0FBUUMsZUFBZSxRQUF1RCxvQkFBb0I7QUFxQmxHLFNBQStCQyxpQkFBaUIsRUFBRUMsa0JBQWtCLFFBQU8sa0JBQWtCO0FBRTdGLFNBQVFDLHVCQUF1QixRQUFPLGVBQWU7QUFDckQsU0FBUUMsNkJBQTZCLFFBQU8scUJBQXFCOztBQUVqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxTQUFTQyxZQUFZQSxDQUMxQkMsS0FBUSxFQUNSQyxjQUFn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
|