@kepler.gl/components 3.3.0-alpha.6 → 3.3.0-alpha.7
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/common/data-table/cell-size.js +40 -23
- package/dist/cjs/common/data-table/column-statistics-categoric.js +40 -0
- package/dist/cjs/common/data-table/column-statistics-components.js +65 -0
- package/dist/cjs/common/data-table/column-statistics-numeric.js +87 -0
- package/dist/cjs/common/data-table/column-statistics-time.js +69 -0
- package/dist/cjs/common/data-table/header-cell.js +123 -44
- package/dist/cjs/common/data-table/index.js +102 -29
- package/dist/cjs/common/histogram-plot.js +1 -1
- package/dist/cjs/common/icons/{arrow-down-solid.js → draw-point.js} +21 -11
- package/dist/cjs/common/icons/index.js +15 -1
- package/dist/cjs/common/icons/line-string.js +60 -0
- package/dist/cjs/common/toolbar-item.js +24 -3
- package/dist/cjs/editor/editor.js +26 -8
- package/dist/cjs/editor/feature-action-panel.js +34 -12
- package/dist/cjs/editor/feature-properties-editor.js +215 -0
- package/dist/cjs/editor/filter-feature-badges.js +92 -0
- package/dist/cjs/index.js +33 -1
- package/dist/cjs/kepler-gl.js +20 -3
- package/dist/cjs/map/map-control-toolbar.js +2 -2
- package/dist/cjs/map/map-control.js +13 -7
- package/dist/cjs/map/map-draw-panel.js +65 -15
- package/dist/cjs/map/theme-toggle-button.js +64 -0
- package/dist/cjs/map-container.js +16 -5
- package/dist/cjs/modal-container.js +2 -1
- package/dist/cjs/modals/cloud-components/cloud-item.js +55 -7
- package/dist/cjs/modals/cloud-components/cloud-item.spec.js +75 -3
- package/dist/cjs/modals/cloud-components/cloud-maps.js +2 -1
- package/dist/cjs/modals/cloud-tile.js +52 -38
- package/dist/cjs/modals/data-table-modal.js +37 -25
- package/dist/cjs/modals/export-video-modal.js +28 -1
- package/dist/cjs/modals/export-video-modal.spec.js +56 -10
- package/dist/cjs/modals/globe-export-video-container.js +19 -3
- package/dist/cjs/modals/globe-export-video-preview.js +25 -7
- package/dist/cjs/modals/hubble-utils.js +8 -3
- package/dist/cjs/modals/swipe-composite-utils.js +9 -1
- package/dist/cjs/modals/swipe-composite-utils.spec.js +69 -0
- package/dist/cjs/modals/swipe-export-video-preview.js +9 -5
- package/dist/cjs/side-panel/layer-manager.js +11 -3
- package/dist/cjs/side-panel/layer-panel/dataset-layer-section.js +11 -3
- package/dist/cjs/side-panel/layer-panel/layer-configurator.js +74 -31
- package/dist/cjs/side-panel/map-style-panel/globe-config-panel.js +90 -25
- package/dist/common/data-table/column-statistics-categoric.d.ts +9 -0
- package/dist/common/data-table/column-statistics-components.d.ts +31 -0
- package/dist/common/data-table/column-statistics-numeric.d.ts +18 -0
- package/dist/common/data-table/column-statistics-time.d.ts +19 -0
- package/dist/common/data-table/header-cell.d.ts +7 -5
- package/dist/common/data-table/index.d.ts +7 -24
- package/dist/common/histogram-plot.d.ts +24 -1
- package/dist/common/icons/{arrow-down-solid.d.ts → draw-point.d.ts} +2 -1
- package/dist/common/icons/index.d.ts +2 -0
- package/dist/common/icons/line-string.d.ts +10 -0
- package/dist/common/toolbar-item.d.ts +2 -0
- package/dist/editor/editor.d.ts +1 -0
- package/dist/editor/feature-action-panel.d.ts +1 -0
- package/dist/editor/feature-properties-editor.d.ts +8 -0
- package/dist/editor/filter-feature-badges.d.ts +12 -0
- package/dist/esm/common/data-table/cell-size.js +40 -23
- package/dist/esm/common/data-table/column-statistics-categoric.js +33 -0
- package/dist/esm/common/data-table/column-statistics-components.js +59 -0
- package/dist/esm/common/data-table/column-statistics-numeric.js +78 -0
- package/dist/esm/common/data-table/column-statistics-time.js +60 -0
- package/dist/esm/common/data-table/header-cell.js +125 -46
- package/dist/esm/common/data-table/index.js +102 -29
- package/dist/esm/common/histogram-plot.js +1 -1
- package/dist/esm/common/icons/draw-point.js +44 -0
- package/dist/esm/common/icons/index.js +3 -1
- package/dist/esm/common/icons/line-string.js +54 -0
- package/dist/esm/common/toolbar-item.js +24 -3
- package/dist/esm/editor/editor.js +26 -8
- package/dist/esm/editor/feature-action-panel.js +37 -15
- package/dist/esm/editor/feature-properties-editor.js +208 -0
- package/dist/esm/editor/filter-feature-badges.js +85 -0
- package/dist/esm/index.js +5 -1
- package/dist/esm/kepler-gl.js +20 -3
- package/dist/esm/map/map-control-toolbar.js +2 -2
- package/dist/esm/map/map-control.js +13 -7
- package/dist/esm/map/map-draw-panel.js +63 -11
- package/dist/esm/map/theme-toggle-button.js +55 -0
- package/dist/esm/map-container.js +16 -5
- package/dist/esm/modal-container.js +2 -1
- package/dist/esm/modals/cloud-components/cloud-item.js +53 -7
- package/dist/esm/modals/cloud-components/cloud-item.spec.js +76 -4
- package/dist/esm/modals/cloud-components/cloud-maps.js +2 -1
- package/dist/esm/modals/cloud-tile.js +52 -38
- package/dist/esm/modals/data-table-modal.js +38 -26
- package/dist/esm/modals/export-video-modal.js +29 -2
- package/dist/esm/modals/export-video-modal.spec.js +56 -10
- package/dist/esm/modals/globe-export-video-container.js +20 -4
- package/dist/esm/modals/globe-export-video-preview.js +26 -8
- package/dist/esm/modals/hubble-utils.js +8 -3
- package/dist/esm/modals/swipe-composite-utils.js +9 -1
- package/dist/esm/modals/swipe-composite-utils.spec.js +67 -0
- package/dist/esm/modals/swipe-export-video-preview.js +8 -4
- package/dist/esm/side-panel/layer-manager.js +11 -3
- package/dist/esm/side-panel/layer-panel/dataset-layer-section.js +11 -3
- package/dist/esm/side-panel/layer-panel/layer-configurator.js +74 -31
- package/dist/esm/side-panel/map-style-panel/globe-config-panel.js +90 -25
- package/dist/index.d.ts +8 -0
- package/dist/kepler-gl.d.ts +3 -0
- package/dist/map/map-control.d.ts +6 -2
- package/dist/map/map-draw-panel.d.ts +1 -0
- package/dist/map/theme-toggle-button.d.ts +18 -0
- package/dist/map-container.d.ts +1 -0
- package/dist/modals/cloud-components/cloud-item.d.ts +2 -1
- package/dist/modals/data-table-modal.d.ts +1 -0
- package/dist/modals/globe-export-video-container.d.ts +2 -0
- package/dist/modals/globe-export-video-preview.d.ts +3 -0
- package/dist/modals/hubble-utils.d.ts +2 -1
- package/dist/modals/swipe-composite-utils.d.ts +1 -1
- package/dist/modals/swipe-composite-utils.spec.d.ts +1 -0
- package/package.json +20 -20
- package/dist/cjs/modals/cloud-components/provider-loading.js +0 -20
- package/dist/cjs/modals/storage-map-viewer.js +0 -98
- package/dist/cjs/side-panel/cloud-storage-dropdown.js +0 -40
- package/dist/esm/common/icons/arrow-down-solid.js +0 -34
- package/dist/esm/modals/cloud-components/provider-loading.js +0 -15
- package/dist/esm/modals/storage-map-viewer.js +0 -93
- package/dist/esm/side-panel/cloud-storage-dropdown.js +0 -33
- package/dist/modals/cloud-components/provider-loading.d.ts +0 -2
- package/dist/modals/storage-map-viewer.d.ts +0 -21
- package/dist/side-panel/cloud-storage-dropdown.d.ts +0 -6
|
@@ -56,6 +56,7 @@ var _mapScale = _interopRequireDefault(require("./map/map-scale"));
|
|
|
56
56
|
var _styledComponents2 = require("./common/styled-components");
|
|
57
57
|
var _attribution = require("./map/attribution");
|
|
58
58
|
var _editor = _interopRequireDefault(require("./editor/editor"));
|
|
59
|
+
var _filterFeatureBadges = _interopRequireDefault(require("./editor/filter-feature-badges"));
|
|
59
60
|
var _annotations = require("./annotations");
|
|
60
61
|
var _layers = require("@kepler.gl/layers");
|
|
61
62
|
var _utils = require("@kepler.gl/utils");
|
|
@@ -1090,7 +1091,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor, MapScale) {
|
|
|
1090
1091
|
key: "_renderMap",
|
|
1091
1092
|
value: /* eslint-disable complexity */
|
|
1092
1093
|
function _renderMap() {
|
|
1093
|
-
var _mapStyle$mapStyles2, _this$props$MapCompon, _this$context3, _mapState$maxPitch, _this$props$isExport, _mapState$globe2, _mapStyle$bottomMapSt, _mapControls$annotati, _mapState$
|
|
1094
|
+
var _mapStyle$mapStyles2, _this$props$MapCompon, _this$context3, _mapState$maxPitch, _this$props$isExport, _mapState$globe2, _mapStyle$bottomMapSt, _mapState$globe3, _mapControls$annotati, _mapState$globe4, _mapState$globe5, _theme$sidePanel$marg, _theme$sidePanel, _theme$sidePanel$marg2, _theme$sidePanel2;
|
|
1094
1095
|
var _this$props7 = this.props,
|
|
1095
1096
|
visState = _this$props7.visState,
|
|
1096
1097
|
mapState = _this$props7.mapState,
|
|
@@ -1100,6 +1101,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor, MapScale) {
|
|
|
1100
1101
|
mapControls = _this$props7.mapControls,
|
|
1101
1102
|
isExport = _this$props7.isExport,
|
|
1102
1103
|
locale = _this$props7.locale,
|
|
1104
|
+
uiTheme = _this$props7.uiTheme,
|
|
1103
1105
|
uiStateActions = _this$props7.uiStateActions,
|
|
1104
1106
|
visStateActions = _this$props7.visStateActions,
|
|
1105
1107
|
index = _this$props7.index,
|
|
@@ -1195,6 +1197,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor, MapScale) {
|
|
|
1195
1197
|
top: interactionConfig.geocoder && interactionConfig.geocoder.enabled ? theme.mapControlTop : 0,
|
|
1196
1198
|
editor: editor,
|
|
1197
1199
|
locale: locale,
|
|
1200
|
+
themeName: uiTheme,
|
|
1198
1201
|
onTogglePerspective: mapStateActions.togglePerspective,
|
|
1199
1202
|
onSetMapViewMode: mapStateActions.setMapViewMode,
|
|
1200
1203
|
mapViewMode: mapState.mapViewMode,
|
|
@@ -1204,7 +1207,9 @@ function MapContainerFactory(MapPopover, MapControl, Editor, MapScale) {
|
|
|
1204
1207
|
onToggleSplitMapViewport: mapStateActions.toggleSplitMapViewport,
|
|
1205
1208
|
onSetEditorMode: visStateActions.setEditorMode,
|
|
1206
1209
|
onSetLocale: uiStateActions.setLocale,
|
|
1210
|
+
onSetTheme: uiStateActions.setTheme,
|
|
1207
1211
|
onToggleEditorVisibility: visStateActions.toggleEditorVisibility,
|
|
1212
|
+
onConvertEditorFeaturesToLayer: visStateActions.convertEditorFeaturesToLayer,
|
|
1208
1213
|
onLayerVisConfigChange: visStateActions.layerVisConfigChange,
|
|
1209
1214
|
onToggleLayerVisibility: this._handleToggleLayerVisibility,
|
|
1210
1215
|
mapHeight: mapState.height,
|
|
@@ -1221,6 +1226,7 @@ function MapContainerFactory(MapPopover, MapControl, Editor, MapScale) {
|
|
|
1221
1226
|
filters: this.polygonFiltersSelector(this.props),
|
|
1222
1227
|
layers: layers,
|
|
1223
1228
|
onDeleteFeature: visStateActions.deleteFeature,
|
|
1229
|
+
onSetFeatureProperties: visStateActions.setEditorFeatureProperties,
|
|
1224
1230
|
onSelect: visStateActions.setSelectedFeature,
|
|
1225
1231
|
onTogglePolygonFilter: visStateActions.setPolygonFilterLayer,
|
|
1226
1232
|
onSetEditorMode: visStateActions.setEditorMode,
|
|
@@ -1229,17 +1235,22 @@ function MapContainerFactory(MapPopover, MapControl, Editor, MapScale) {
|
|
|
1229
1235
|
position: 'absolute',
|
|
1230
1236
|
display: editor.visible ? 'block' : 'none'
|
|
1231
1237
|
}
|
|
1232
|
-
}), /*#__PURE__*/_react["default"].createElement(
|
|
1238
|
+
}), editor.visible ? /*#__PURE__*/_react["default"].createElement(_filterFeatureBadges["default"], {
|
|
1239
|
+
filters: this.polygonFiltersSelector(this.props),
|
|
1240
|
+
viewport: this._getAnnotationViewport(mapState, internalViewState),
|
|
1241
|
+
isGlobeEnabled: Boolean((_mapState$globe3 = mapState.globe) === null || _mapState$globe3 === void 0 ? void 0 : _mapState$globe3.enabled),
|
|
1242
|
+
onSelect: visStateActions.setSelectedFeature
|
|
1243
|
+
}) : null, /*#__PURE__*/_react["default"].createElement(_annotations.AnnotationOverlay, {
|
|
1233
1244
|
annotations: visState.annotations,
|
|
1234
1245
|
selectedAnnotationId: visState.selectedAnnotationId,
|
|
1235
1246
|
isEditingAnnotationText: visState.isEditingAnnotationText,
|
|
1236
1247
|
isAnnotationMode: Boolean(mapControls === null || mapControls === void 0 || (_mapControls$annotati = mapControls.annotation) === null || _mapControls$annotati === void 0 ? void 0 : _mapControls$annotati.active),
|
|
1237
1248
|
mapIndex: index || 0,
|
|
1238
1249
|
viewport: this._getAnnotationViewport(mapState, internalViewState),
|
|
1239
|
-
isGlobeEnabled: Boolean((_mapState$
|
|
1250
|
+
isGlobeEnabled: Boolean((_mapState$globe4 = mapState.globe) === null || _mapState$globe4 === void 0 ? void 0 : _mapState$globe4.enabled),
|
|
1240
1251
|
updateAnnotation: visStateActions.updateAnnotation,
|
|
1241
1252
|
setSelectedAnnotation: visStateActions.setSelectedAnnotation
|
|
1242
|
-
}), this.props.children, mapStyle.topMapStyle && !((_mapState$
|
|
1253
|
+
}), this.props.children, mapStyle.topMapStyle && !((_mapState$globe5 = mapState.globe) !== null && _mapState$globe5 !== void 0 && _mapState$globe5.enabled) ? /*#__PURE__*/_react["default"].createElement(ResolvedMapComponent, (0, _extends2["default"])({
|
|
1243
1254
|
key: "top-".concat(baseMapLibraryName),
|
|
1244
1255
|
viewState: internalViewState,
|
|
1245
1256
|
maxPitch: effectiveMaxPitch,
|
|
@@ -1319,4 +1330,4 @@ function MapContainerFactory(MapPopover, MapControl, Editor, MapScale) {
|
|
|
1319
1330
|
});
|
|
1320
1331
|
return (0, _styledComponents.withTheme)(MapContainer);
|
|
1321
1332
|
}
|
|
1322
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9tYXBib3hMZWdhY3kiLCJfcmVhY3RNYXBsaWJyZSIsIl9jb3JlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVzZWxlY3QiLCJfY29yZTIiLCJfZGVib3VuY2UiLCJfbWFwUG9wb3ZlciIsIl9tYXBDb250cm9sIiwiX21hcFNjYWxlIiwiX3N0eWxlZENvbXBvbmVudHMyIiwiX2F0dHJpYnV0aW9uIiwiX2VkaXRvciIsIl9hbm5vdGF0aW9ucyIsIl9sYXllcnMiLCJfdXRpbHMiLCJfY29uc3RhbnRzIiwiX2RlY2tnbExheWVycyIsIl9kbmRMYXllckl0ZW1zIiwiX21hcFZpZXdTdGF0ZUNvbnRleHQiLCJfZXJyb3JCb3VuZGFyeSIsIl9sb2NhbGl6YXRpb24iLCJfcmVkdWNlcnMiLCJfbG9hZGluZ0luZGljYXRvciIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJERUJPVU5DRV9WSUVXUE9SVF9QUk9QQUdBVEUiLCJERUJPVU5DRV9NT1VTRV9NT1ZFX1BST1BBR0FURSIsIkRFQk9VTkNFX0xPQURJTkdfU1RBVEVfUFJPUEFHQVRFIiwiTUFQX1NUWUxFIiwiY29udGFpbmVyIiwiZGlzcGxheSIsInBvc2l0aW9uIiwid2lkdGgiLCJoZWlnaHQiLCJ0b3AiLCJwb2ludGVyRXZlbnRzIiwiTE9DQUxFX0NPREVTX0FSUkFZIiwiTE9DQUxFX0NPREVTIiwiU3R5bGVkTWFwIiwic3R5bGVkIiwiU3R5bGVkTWFwQ29udGFpbmVyIiwiX3JlZiIsIl9yZWYkJG1peEJsZW5kTW9kZSIsIiRtaXhCbGVuZE1vZGUiLCIkbWFwTGliQ3NzQ2xhc3MiLCJjb25jYXQiLCJNQVBCT1hHTF9TVFlMRV9VUERBVEUiLCJNQVBCT1hHTF9SRU5ERVIiLCJPU01fQVRUUklCVVRJT05fSFRNTCIsIlN0eWxlZERyb3BwYWJsZSIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCIkaXNPdmVyIiwidGhlbWUiLCJkbmRPdmVyQmFja2dyb3VuZENvbG9yIiwiU3R5bGVkTWFwU2NhbGVDb250YWluZXIiLCJzaWRlUGFuZWwiLCJtYXJnaW4iLCJsZWZ0IiwiJGJvdHRvbU9mZnNldCIsIiRsZWZ0IiwiaXNTcGxpdFNlbGVjdG9yIiwiZXhwb3J0cyIsInZpc1N0YXRlIiwic3BsaXRNYXBzIiwiRHJvcHBhYmxlIiwiX3JlZjIiLCJjb250YWluZXJJZCIsIl91c2VEcm9wcGFibGUiLCJ1c2VEcm9wcGFibGUiLCJpZCIsImRhdGEiLCJ0eXBlIiwiRFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRSIsImluZGV4IiwiZGlzYWJsZWQiLCJpc092ZXIiLCJzZXROb2RlUmVmIiwiY3JlYXRlRWxlbWVudCIsInJlZiIsIk1hcENvbnRhaW5lckZhY3RvcnkiLCJkZXBzIiwiTWFwUG9wb3ZlckZhY3RvcnkiLCJNYXBDb250cm9sRmFjdG9yeSIsIkVkaXRvckZhY3RvcnkiLCJNYXBTY2FsZUZhY3RvcnkiLCJNYXBQb3BvdmVyIiwiTWFwQ29udHJvbCIsIkVkaXRvciIsIk1hcFNjYWxlIiwiTWFwQ29udGFpbmVyIiwiX0NvbXBvbmVudCIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsInNob3dCYXNlTWFwTGliTG9nbyIsImJhc2VtYXBBdHRyaWJ1dGlvbnMiLCJjcmVhdGVSZWYiLCJvbk1hcFJlbmRlciIsIl9tYXAiLCJkaW1lbnNpb25zIiwiX3RoaXMkcHJvcHMiLCJwcmltYXJ5IiwibWFwU3RhdGVBY3Rpb25zIiwidXBkYXRlTWFwIiwibGF5ZXJzIiwibGF5ZXJEYXRhIiwiY3JlYXRlU2VsZWN0b3IiLCJzcGxpdE1hcFNlbGVjdG9yIiwic3BsaXRNYXBJbmRleFNlbGVjdG9yIiwiZ2V0TWFwTGF5ZXJzRnJvbVNwbGl0TWFwcyIsImxheWVyT3JkZXIiLCJsYXllcnNTZWxlY3RvciIsImxheWVyRGF0YVNlbGVjdG9yIiwibWFwTGF5ZXJzU2VsZWN0b3IiLCJwcmVwYXJlTGF5ZXJzVG9SZW5kZXIiLCJwcmVwYXJlTGF5ZXJzRm9yRGVjayIsImZpbHRlcnMiLCJmaWx0ZXJzU2VsZWN0b3IiLCJGSUxURVJfVFlQRVMiLCJwb2x5Z29uIiwiZW5hYmxlZCIsImVkaXRvciIsImZlYXR1cmVzIiwic2VsZWN0ZWRGZWF0dXJlIiwicG9seWdvbkZpbHRlcnNTZWxlY3RvciIsImZlYXR1cmVzU2VsZWN0b3IiLCJwb2x5Z29uRmlsdGVycyIsIm1hcCIsInZhbHVlIiwiZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvciIsInNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yIiwiY29sbGVjdGlvbiIsImZpbmRJbmRleCIsIl9wcm9wcyRnZW5lcmF0ZU1hcGJveCIsImdlbmVyYXRlTWFwYm94TGF5ZXJzIiwibGF5ZXJPcmRlclNlbGVjdG9yIiwibGF5ZXJzVG9SZW5kZXJTZWxlY3RvciIsImdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2RTZWxlY3RvciIsImxheWVyIiwibGF5ZXJzVG9SZW5kZXIiLCJnZW5lcmF0ZU1hcGJveExheWVyTWV0aG9kIiwibWFwU3R5bGUiLCJzdHlsZVR5cGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJfcHJvcHMkbWFwU3RhdGUiLCJtYXBTdGF0ZSIsImdsb2JlIiwiX3Byb3BzJG1hcFN0YXRlMiIsImNvbmZpZyIsIl9wcm9wcyRtYXBTdGF0ZTMiLCJzdGFycyIsIm1hcFN0eWxlVHlwZVNlbGVjdG9yIiwibWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciIsImdsb2JlTW9kZVNlbGVjdG9yIiwiZ2xvYmVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciIsImdsb2JlU3RhcnNTZWxlY3RvciIsImlzR2xvYmVNb2RlIiwiZ2xvYmVCYWNrZ3JvdW5kQ29sb3IiLCJnbG9iZVN0YXJzIiwiTk9fTUFQX0lEIiwicmdiVG9IZXgiLCJnZXRHbG9iZUNsZWFyQ29sb3IiLCJzbGljZSIsImJhY2tncm91bmRJbWFnZSIsImdldFN0YXJzQmFja2dyb3VuZEltYWdlIiwiYmFja2dyb3VuZFJlcGVhdCIsInZpc1N0YXRlQWN0aW9ucyIsIm9uTGF5ZXJDbGljayIsIl9pZHgiLCJpbmZvIiwib25MYXllckhvdmVyIiwiaWR4IiwiQXJyYXkiLCJpc0FycmF5IiwiY29sb3JEb21haW4iLCJkb21haW4iLCJhZ2dyZWdhdGVkQmlucyIsImxheWVyQ29uZmlnQ2hhbmdlIiwiX3RoaXMkcHJvcHMyIiwiYm91bmRzIiwiZml0Qm91bmRzIiwiZXZlbnQiLCJsYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UiLCJ3bXNGZWF0dXJlSW5mbyIsImZlYXR1cmVJbmZvIiwiY29vcmRpbmF0ZSIsImxheWVySWQiLCJfdGhpcyRwcm9wczMiLCJfdGhpcyRwcm9wczMkaW5kZXgiLCJtYXBJbmRleCIsInRvZ2dsZUxheWVyRm9yTWFwIiwidXBkYXRlIiwicHJldmlvdXNMYXllcnMiLCJfdXBkYXRlTWFwYm94TGF5ZXJzIiwiX3VwZGF0ZUF0dHJpYnV0aW9uIiwib25NYXBTdHlsZUxvYWRlZCIsIl90aGlzJHByb3BzJG1hcFN0eWxlIiwiX3RoaXMkcHJvcHMkbWFwU3R5bGUyIiwiX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycyIsInN0eWxlT2JqIiwic3R5bGUiLCJfdGhpcyRfbWFwJGlzU3R5bGVMb2EiLCJfdGhpcyRfbWFwIiwiX3RoaXMkX21hcCRnZXRTdHlsZSIsIl90aGlzJF9tYXAyIiwicmF3U3R5bGUiLCJpc1N0eWxlTG9hZGVkIiwiZ2V0U3R5bGUiLCJzdHlsZXNoZWV0IiwiX3VudXNlZCIsInVzZXNNYXBib3giLCJpc1N0eWxlVXNpbmdNYXBib3hUaWxlcyIsInVzZXNPc20iLCJpc1N0eWxlVXNpbmdPcGVuU3RyZWV0TWFwVGlsZXMiLCJnZXRCYXNlTWFwQXR0cmlidXRpb25zIiwiY3VycmVudFN0eWxlIiwibWFwU3R5bGVzIiwiaXNVc2VyQ3VzdG9tU3R5bGUiLCJjdXN0b20iLCJzZXRTdGF0ZSIsIl9jb2xsZWN0QmFzZW1hcEF0dHJpYnV0aW9ucyIsIl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyIiwib2ZmIiwiX2Jhc2VtYXBJZGxlTGlzdGVuZXIiLCJhdHRlbXB0cyIsIk1BWF9BVFRFTVBUUyIsInRyeUNvbGxlY3QiLCJvblNvdXJjZURhdGEiLCJpc1NvdXJjZUxvYWRlZCIsInNvdXJjZURhdGFUeXBlIiwib25JZGxlIiwib24iLCJtYXBSZWYiLCJnZXRNYXAiLCJfb25NYXBib3hTdHlsZVVwZGF0ZSIsIl9vbk1hcFJlbmRlciIsImdldE1hcGJveFJlZiIsImVycm9yIiwiZXJyb3JNZXNzYWdlIiwibWVzc2FnZSIsImxheWVyTWVzc2FnZSIsImVycm9yTWVzc2FnZUZ1bGwiLCJsYXN0U2hvd24iLCJfZGVja0dMRXJyb3JzRWxhcHNlZCIsIkRhdGUiLCJub3ciLCJUSFJPVFRMRV9OT1RJRklDQVRJT05fVElNRSIsImV4dHJhTGF5ZXJNZXNzYWdlIiwiX3RvcE1vc3RMYXllciRwcm9wcyIsInRvcE1vc3RMYXllciIsInBhcmVudCIsImxheWVyU2V0SXNWYWxpZCIsInVpU3RhdGVBY3Rpb25zIiwiYWRkTm90aWZpY2F0aW9uIiwiZXJyb3JOb3RpZmljYXRpb24iLCJkZWJvdW5jZSIsIl90aGlzJGNvbnRleHQiLCJ2aWV3U3RhdGUiLCJjb250ZXh0IiwiZ2V0SW50ZXJuYWxWaWV3U3RhdGUiLCJvblZpZXdQb3J0Q2hhbmdlIiwib25WaWV3U3RhdGVDaGFuZ2UiLCJ2aWV3cG9ydCIsIl90aGlzJHByb3BzJG1hcFN0YXRlIiwiaW50ZXJhY3Rpb25TdGF0ZSIsImlzRXhwb3J0Iiwic2V0SW50ZXJuYWxWaWV3U3RhdGUiLCJfd2FzSW50ZXJhY3RpbmciLCJfb25WaWV3cG9ydENoYW5nZVByb3BhZ2F0ZURlYm91bmNlZCIsImlzVXNlckludGVyYWN0aW9uIiwiaXNab29taW5nIiwiaXNQYW5uaW5nIiwiaXNSb3RhdGluZyIsImlzRHJhZ2dpbmciLCJpblRyYW5zaXRpb24iLCJpc0ludGVyYWN0aW9uU2V0dGxlIiwic2V0VGltZW91dCIsIm9uTW91c2VNb3ZlIiwibm9ybWFsaXplRXZlbnQiLCJzZXRMb2FkaW5nSW5kaWNhdG9yIiwiY2hhbmdlIiwiaXNWaXNpYmxlIiwicGFuZWxJZCIsIl90aGlzJHByb3BzNCIsInRvZ2dsZU1hcENvbnRyb2wiLCJOdW1iZXIiLCJwYXRjaERlY2tSZW5kZXJlckZvclBvc3RQcm9jZXNzaW5nIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJjb21wb25lbnREaWRNb3VudCIsImN1cnJlbnQiLCJvYnNlcnZlRGltZW5zaW9ucyIsIl9oYW5kbGVSZXNpemUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVub2JzZXJ2ZURpbWVuc2lvbnMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJfb25EZWNrSW5pdGlhbGl6ZWQiLCJkZXZpY2UiLCJvbkRlY2tJbml0aWFsaXplZCIsIl9kZWNrIiwiX2lzT0tUb1JlbmRlckVmZmVjdHMiLCJ2aWV3SW5kZXgiLCJfdGhpcyRfZGVjayIsInZpZXdNYW5hZ2VyIiwiX3ZpZXdwb3J0cyIsIl9nZXRBbm5vdGF0aW9uVmlld3BvcnQiLCJpbnRlcm5hbFZpZXdTdGF0ZSIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRsbyIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRsYSIsIl9pbnRlcm5hbFZpZXdTdGF0ZSR6byIsIl9yZWYzIiwiX2ludGVybmFsVmlld1N0YXRlJHBpIiwiX3JlZjQiLCJfaW50ZXJuYWxWaWV3U3RhdGUkYmUiLCJfdGhpcyRfYW5ub3RhdGlvblZpZXciLCJsb25naXR1ZGUiLCJsYXRpdHVkZSIsInpvb20iLCJwaXRjaCIsImJlYXJpbmciLCJfYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGUiLCJtZXJnZWRTdGF0ZSIsInZwIiwiZ2V0Vmlld3BvcnRGcm9tTWFwU3RhdGUiLCJwcm9qZWN0IiwibG5nTGF0IiwidW5wcm9qZWN0IiwieHkiLCJfcmVuZGVyTWFwUG9wb3ZlciIsIl90aGlzJHByb3BzJHZpc1N0YXRlJCIsImhvdmVySW5mbyIsIl90aGlzJHByb3BzNSIsIl90aGlzJHByb3BzNSR2aXNTdGF0ZSIsImNsaWNrZWQiLCJkYXRhc2V0cyIsImludGVyYWN0aW9uQ29uZmlnIiwiYW5pbWF0aW9uQ29uZmlnIiwiX3RoaXMkcHJvcHM1JHZpc1N0YXRlMiIsIm1vdXNlUG9zIiwibW91c2VQb3NpdGlvbiIsInBpbm5lZCIsInRvb2x0aXAiLCJsYXllckhvdmVyUHJvcCIsImdldExheWVySG92ZXJQcm9wIiwiY29tcGFyZU1vZGUiLCJwaW5uZWRQb3NpdGlvbiIsIngiLCJ5IiwibGF5ZXJQaW5uZWRQcm9wIiwiX2dldEhvdmVyWFkiLCJwcmltYXJ5RGF0YSIsImNvbXBhcmVUeXBlIiwiY29tbW9uUHJvcCIsIm9uQ2xvc2UiLCJfb25DbG9zZU1hcFBvcG92ZXIiLCJjYW52YXMiLCJ1bmRlZmluZWQiLCJfZXh0ZW5kczIiLCJmcm96ZW4iLCJpc0Jhc2UiLCJvblNldEZlYXR1cmVzIiwic2V0RmVhdHVyZXMiLCJzZXRTZWxlY3RlZEZlYXR1cmUiLCJmZWF0dXJlQ29sbGVjdGlvbiIsInNjcmVlbkNvb3JkIiwiX3JlbmRlckRlY2tPdmVybGF5IiwibGF5ZXJzRm9yRGVjayIsIl90aGlzJGNvbnRleHQyIiwiX21hcFN0YXRlJGdsb2JlIiwiX21hcFN0eWxlJG1hcFN0eWxlcyIsIl90aGlzMiIsIl90aGlzJHByb3BzJG1hcFN0YXRlJCIsIm9wdGlvbnMiLCJwcmltYXJ5TWFwIiwiX3RoaXMkcHJvcHM2IiwibWFwYm94QXBpQWNjZXNzVG9rZW4iLCJtYXBib3hBcGlVcmwiLCJkZWNrR2xQcm9wcyIsIm1hcENvbnRyb2xzIiwiZGVja1JlbmRlckNhbGxiYWNrcyIsImdlbmVyYXRlRGVja0dMTGF5ZXJzIiwiaXNJbnRlcmFjdGl2ZSIsImNoaWxkcmVuIiwibWFwRHJhdyIsIl9yZWY1IiwiX3JlZjUkYWN0aXZlIiwiYWN0aXZlIiwiZWRpdG9yTWVudUFjdGl2ZSIsImlzRWRpdG9yRHJhd2luZ01vZGUiLCJFZGl0b3JMYXllclV0aWxzIiwiaXNEcmF3aW5nQWN0aXZlIiwibW9kZSIsImludGVybmFsTWFwU3RhdGUiLCJlZGl0b3JGZWF0dXJlU2VsZWN0ZWRJbmRleCIsInNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IiLCJnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZCIsImNvbXB1dGVEZWNrTGF5ZXJzIiwiZXh0cmFEZWNrUGFyYW1zIiwiZ2V0VG9vbHRpcCIsImlzTmFOIiwiZ2V0Q3Vyc29yIiwiX3JlZjYiLCJlZGl0b3JDdXJzb3IiLCJlZmZlY3RzIiwiY29tcHV0ZURlY2tFZmZlY3RzIiwibGF5ZXJCbGVuZGluZ1BhcmFtcyIsImxheWVyQmxlbmRpbmciLCJnZXRMYXllckJsZW5kaW5nUGFyYW1ldGVycyIsImRlY2tMYXllcnNNYXBTdGF0ZSIsImxheWVyUGFyYW1ldGVycyIsImRlY2tHbExheWVycyIsImVkaXRvckluZm8iLCJvbkFwcGx5UG9seWdvbkZpbHRlckFsbCIsInNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnMiLCJzZWxlY3RlZEZlYXR1cmVJbmRleGVzIiwic2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yIiwiX29uTGF5ZXJIb3ZlciIsIm9uU2V0TGF5ZXJEb21haW4iLCJfb25MYXllclNldERvbWFpbiIsIm9uRmlsdGVyZWRJdGVtc0NoYW5nZSIsIl9vbkxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIm9uV01TRmVhdHVyZUluZm8iLCJfb25XTVNGZWF0dXJlSW5mbyIsIm9uUmVkcmF3TmVlZGVkIiwiX29uUmVkcmF3TmVlZGVkIiwib25GaXRCb3VuZHMiLCJfb25GaXRCb3VuZHMiLCJnbG9iZUJhc2VtYXBQcm92aWRlciIsInJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlciIsImdldEJhc2VNYXBMaWJyYXJ5IiwiZ2xvYmVCYXNlTGF5ZXJzIiwiZ2V0R2xvYmVCYXNlTGF5ZXJzIiwibWFwU3R5bGVUeXBlIiwiYmFzZW1hcFByb3ZpZGVyIiwiZ2xvYmVUb3BMYXllcnMiLCJnZXRHbG9iZVRvcExheWVycyIsImZpbmFsRGVja0dsTGF5ZXJzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInZpZXdzIiwiS2VwbGVyR2xvYmVWaWV3IiwicmVzb2x1dGlvbiIsImNsZWFyIiwiY2xlYXJDb2xvciIsIk1hcFZpZXciLCJmYXJaTXVsdGlwbGllciIsImFsbERlY2tHbFByb3BzIiwicGlja2luZ1JhZGl1cyIsIkRFRkFVTFRfUElDS0lOR19SQURJVVMiLCJwYXJhbWV0ZXJzIiwiY3VsbCIsIm9uRGVja1JlbmRlciIsIl9vbk1vdXNlTW92ZURlYm91bmNlZCIsIm9uTG9hZCIsIm9uRGVja0xvYWQiLCJjb250cm9sbGVyIiwiZG91YmxlQ2xpY2tab29tIiwiZHJhZ1JvdGF0ZSIsIm1heFBpdGNoIiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJtaW5ab29tIiwiR0xPQkVfTUlOX1pPT00iLCJtYXhab29tIiwiR0xPQkVfTUFYX1pPT00iLCJvbkJlZm9yZVJlbmRlciIsIl9vbkJlZm9yZVJlbmRlciIsIl9vblZpZXdwb3J0Q2hhbmdlIiwib25Ib3ZlciIsInJlcyIsIl9vbkxheWVySG92ZXJEZWJvdW5jZWQiLCJvbkNsaWNrIiwic3JjRXZlbnQiLCJhbGlnbmluZ0xheWVyIiwiZmluZCIsImwiLCJhbGlnbldhaXRpbmdGb3JNYXAiLCJvbkFsaWduTWFwQ2xpY2siLCJvbkVycm9yIiwiX29uRGVja0Vycm9yIiwiY29tcCIsImRlY2siLCJvbkRldmljZUluaXRpYWxpemVkIiwib25BZnRlclJlbmRlciIsIm9uRGVja0FmdGVyUmVuZGVyIiwiYW55QWN0aXZlTGF5ZXJMb2FkaW5nIiwiYXJlQW55RGVja0xheWVyc0xvYWRpbmciLCJfb25MYXllckxvYWRpbmdTdGF0ZUNoYW5nZSIsIm1hcGJveExheWVycyIsIm1hcGJveExheWVyc1NlbGVjdG9yIiwidXBkYXRlTWFwYm94TGF5ZXJzIiwiX3JlbmRlck1hcGJveE92ZXJsYXlzIiwiX3JlbmRlck1hcCIsIl9tYXBTdHlsZSRtYXBTdHlsZXMyIiwiX3RoaXMkcHJvcHMkTWFwQ29tcG9uIiwiX3RoaXMkY29udGV4dDMiLCJfbWFwU3RhdGUkbWF4UGl0Y2giLCJfdGhpcyRwcm9wcyRpc0V4cG9ydCIsIl9tYXBTdGF0ZSRnbG9iZTIiLCJfbWFwU3R5bGUkYm90dG9tTWFwU3QiLCJfbWFwQ29udHJvbHMkYW5ub3RhdGkiLCJfbWFwU3RhdGUkZ2xvYmUzIiwiX21hcFN0YXRlJGdsb2JlNCIsIl90aGVtZSRzaWRlUGFuZWwkbWFyZyIsIl90aGVtZSRzaWRlUGFuZWwiLCJfdGhlbWUkc2lkZVBhbmVsJG1hcmcyIiwiX3RoZW1lJHNpZGVQYW5lbDIiLCJfdGhpcyRwcm9wczciLCJsb2NhbGUiLCJib3R0b21NYXBDb250YWluZXJQcm9wcyIsInRvcE1hcENvbnRhaW5lclByb3BzIiwiX3RoaXMkcHJvcHM3JGRhdGFzZXRBIiwiZGF0YXNldEF0dHJpYnV0aW9ucyIsIl90aGlzJHByb3BzNyRhdHRyaWJ1dCIsImF0dHJpYnV0aW9uTG9nb3MiLCJfdGhpcyRwcm9wczckY29udGFpbmUiLCJpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlIiwiYWN0aXZlU2lkZVBhbmVsIiwic2lkZVBhbmVsV2lkdGgiLCJsYXllcnNGb3JEZWNrU2VsZWN0b3IiLCJiYXNlTWFwTGlicmFyeU5hbWUiLCJiYXNlTWFwTGlicmFyeUNvbmZpZyIsIlJlc29sdmVkTWFwQ29tcG9uZW50IiwiTWFwQ29tcG9uZW50IiwiTUFQX0xJQl9PUFRJT05TIiwiTUFQQk9YIiwiTWFwYm94TGVnYWN5TWFwIiwiTWFwbGlicmVNYXAiLCJ1c2VNYXBib3hBZGFwdGVyIiwiY29uZmlnTWF4UGl0Y2giLCJlZmZlY3RpdmVNYXhQaXRjaCIsIk1hdGgiLCJtaW4iLCJNQVBCT1hfTUFYX1BJVENIIiwibWFwUHJvcHMiLCJwcmVzZXJ2ZURyYXdpbmdCdWZmZXIiLCJtYXBib3hBY2Nlc3NUb2tlbiIsImFjY2Vzc1Rva2VuIiwidHJhbnNmb3JtUmVxdWVzdCIsIlJUTFRleHRQbHVnaW4iLCJtYXBib3hDb25maWciLCJtYXBMaWIiLCJnZXRNYXBMaWIiLCJoYXNHZW9jb2RlckxheWVyIiwiR0VPQ09ERVJfTEFZRVJfSUQiLCJpc1NwbGl0IiwiRU1QVFlfTUFQQk9YX1NUWUxFIiwiYm90dG9tTWFwU3R5bGUiLCJfc2V0TWFwUmVmIiwic2hvd01hcENvbnRyb2wiLCJGcmFnbWVudCIsImF2YWlsYWJsZUxvY2FsZXMiLCJyZWFkT25seSIsInNjYWxlIiwibG9nb0NvbXBvbmVudCIsImdlb2NvZGVyIiwibWFwQ29udHJvbFRvcCIsIm9uVG9nZ2xlUGVyc3BlY3RpdmUiLCJ0b2dnbGVQZXJzcGVjdGl2ZSIsIm9uU2V0TWFwVmlld01vZGUiLCJzZXRNYXBWaWV3TW9kZSIsIm1hcFZpZXdNb2RlIiwib25Ub2dnbGVTcGxpdE1hcCIsInRvZ2dsZVNwbGl0TWFwIiwib25NYXBUb2dnbGVMYXllciIsIl9oYW5kbGVNYXBUb2dnbGVMYXllciIsIm9uVG9nZ2xlTWFwQ29udHJvbCIsIl90b2dnbGVNYXBDb250cm9sIiwib25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0IiwidG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsIm9uU2V0RWRpdG9yTW9kZSIsInNldEVkaXRvck1vZGUiLCJvblNldExvY2FsZSIsInNldExvY2FsZSIsIm9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eSIsInRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJvbkxheWVyVmlzQ29uZmlnQ2hhbmdlIiwibGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJvblRvZ2dsZUxheWVyVmlzaWJpbGl0eSIsIl9oYW5kbGVUb2dnbGVMYXllclZpc2liaWxpdHkiLCJtYXBIZWlnaHQiLCJzZXRNYXBDb250cm9sU2V0dGluZ3MiLCJvblRvZ2dsZUxheWVyRm9yTWFwIiwib25EZWxldGVGZWF0dXJlIiwiZGVsZXRlRmVhdHVyZSIsIm9uU2VsZWN0Iiwib25Ub2dnbGVQb2x5Z29uRmlsdGVyIiwic2V0UG9seWdvbkZpbHRlckxheWVyIiwidmlzaWJsZSIsIkFubm90YXRpb25PdmVybGF5IiwiYW5ub3RhdGlvbnMiLCJzZWxlY3RlZEFubm90YXRpb25JZCIsImlzRWRpdGluZ0Fubm90YXRpb25UZXh0IiwiaXNBbm5vdGF0aW9uTW9kZSIsImFubm90YXRpb24iLCJpc0dsb2JlRW5hYmxlZCIsInVwZGF0ZUFubm90YXRpb24iLCJzZXRTZWxlY3RlZEFubm90YXRpb24iLCJ0b3BNYXBTdHlsZSIsImhhc0F0dHJpYnV0aW9uTG9nb3MiLCJoYXNNYXBTY2FsZSIsImVuYWJsZU1hcFNjYWxlIiwiQXR0cmlidXRpb24iLCJzdGF0ZSIsImdsb2JlQXR0cmlidXRpb25zIiwiZ2V0R2xvYmVCYXNlbWFwQXR0cmlidXRpb25zIiwiQXR0cmlidXRpb25Mb2dvcyIsImxvZ29zIiwicmVuZGVyIiwiX21hcFN0eWxlJG1hcFN0eWxlczMiLCJfdGhpcyRwcm9wczgiLCJtYXBDb250ZW50Iiwic3R5bGVTZWxlY3RvciIsIm9uQ29udGV4dE1lbnUiLCJwcmV2ZW50RGVmYXVsdCIsIm92ZXJsYXlCbGVuZGluZyIsIm1hcExpYkNzc0NsYXNzIiwiQ29tcG9uZW50IiwiTWFwVmlld1N0YXRlQ29udGV4dCIsIndpdGhUaGVtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXAtY29udGFpbmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vLyBsaWJyYXJpZXNcbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgY3JlYXRlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge01hcCBhcyBNYXBib3hMZWdhY3lNYXAsIE1hcFJlZn0gZnJvbSAncmVhY3QtbWFwLWdsL21hcGJveC1sZWdhY3knO1xuaW1wb3J0IHtNYXAgYXMgTWFwbGlicmVNYXB9IGZyb20gJ0B2aXMuZ2wvcmVhY3QtbWFwbGlicmUnO1xuaW1wb3J0IHtQaWNraW5nSW5mbywgTWFwVmlld30gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQgRGVja0dMIGZyb20gJ0BkZWNrLmdsL3JlYWN0JztcbmltcG9ydCB7Y3JlYXRlU2VsZWN0b3IsIFNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG5pbXBvcnQge3VzZURyb3BwYWJsZX0gZnJvbSAnQGRuZC1raXQvY29yZSc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnbG9kYXNoL2RlYm91bmNlJztcblxuaW1wb3J0IHtWaXNTdGF0ZUFjdGlvbnMsIE1hcFN0YXRlQWN0aW9ucywgVUlTdGF0ZUFjdGlvbnN9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbi8vIGNvbXBvbmVudHNcbmltcG9ydCBNYXBQb3BvdmVyRmFjdG9yeSBmcm9tICcuL21hcC9tYXAtcG9wb3Zlcic7XG5pbXBvcnQgTWFwQ29udHJvbEZhY3RvcnkgZnJvbSAnLi9tYXAvbWFwLWNvbnRyb2wnO1xuaW1wb3J0IE1hcFNjYWxlRmFjdG9yeSBmcm9tICcuL21hcC9tYXAtc2NhbGUnO1xuaW1wb3J0IHtTdHlsZWRNYXBDb250YWluZXJ9IGZyb20gJy4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0aW9uLFxuICBBdHRyaWJ1dGlvbkxvZ29zLFxuICByZW5kZXJCYXNlbWFwQXR0cmlidXRpb24sXG4gIGRlZHVwZUJhc2VtYXBBdHRyaWJ1dGlvbnNcbn0gZnJvbSAnLi9tYXAvYXR0cmlidXRpb24nO1xuXG5pbXBvcnQgRWRpdG9yRmFjdG9yeSBmcm9tICcuL2VkaXRvci9lZGl0b3InO1xuaW1wb3J0IHtBbm5vdGF0aW9uT3ZlcmxheX0gZnJvbSAnLi9hbm5vdGF0aW9ucyc7XG5cbi8vIHV0aWxzXG5pbXBvcnQge1xuICBnZW5lcmF0ZU1hcGJveExheWVycyxcbiAgdXBkYXRlTWFwYm94TGF5ZXJzLFxuICBMYXllcixcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICBWaXN1YWxDaGFubmVsRG9tYWluLFxuICBFZGl0b3JMYXllclV0aWxzLFxuICBBZ2dyZWdhdGVkQmluXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0aW9uV2l0aFN0eWxlLFxuICBEYXRhc2V0QXR0cmlidXRpb24sXG4gIE1hcFN0YXRlLFxuICBNYXBDb250cm9scyxcbiAgVmlld3BvcnQsXG4gIFNwbGl0TWFwLFxuICBTcGxpdE1hcExheWVyc1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBpc1N0eWxlVXNpbmdNYXBib3hUaWxlcyxcbiAgaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzLFxuICBnZXRCYXNlTWFwQXR0cmlidXRpb25zLFxuICBnZXRCYXNlTWFwTGlicmFyeSxcbiAgdHJhbnNmb3JtUmVxdWVzdCxcbiAgb2JzZXJ2ZURpbWVuc2lvbnMsXG4gIHVub2JzZXJ2ZURpbWVuc2lvbnMsXG4gIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsXG4gIG9uVmlld1BvcnRDaGFuZ2UsXG4gIGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlLFxuICBub3JtYWxpemVFdmVudCxcbiAgcmdiVG9IZXgsXG4gIGNvbXB1dGVEZWNrRWZmZWN0cyxcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIEdldE1hcFJlZixcbiAgZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnMsXG4gIHBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3Npbmdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbi8vIGRlZmF1bHQtc2V0dGluZ3NcbmltcG9ydCB7XG4gIEZJTFRFUl9UWVBFUyxcbiAgR0VPQ09ERVJfTEFZRVJfSUQsXG4gIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FLFxuICBERUZBVUxUX1BJQ0tJTkdfUkFESVVTLFxuICBOT19NQVBfSUQsXG4gIEVNUFRZX01BUEJPWF9TVFlMRSxcbiAgTUFQQk9YX01BWF9QSVRDSCxcbiAgTUFQX0xJQl9PUFRJT05TLFxuICBHTE9CRV9NSU5fWk9PTSxcbiAgR0xPQkVfTUFYX1pPT01cbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQge1xuICBnZXRHbG9iZUJhc2VMYXllcnMsXG4gIGdldEdsb2JlVG9wTGF5ZXJzLFxuICBnZXRHbG9iZUNsZWFyQ29sb3IsXG4gIGdldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyxcbiAgcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyLFxuICBnZXRTdGFyc0JhY2tncm91bmRJbWFnZSxcbiAgS2VwbGVyR2xvYmVWaWV3XG59IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5cbmltcG9ydCB7RFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRX0gZnJvbSAnLi9jb21tb24vZG5kLWxheWVyLWl0ZW1zJztcbi8vIENvbnRleHRzXG5pbXBvcnQge01hcFZpZXdTdGF0ZUNvbnRleHR9IGZyb20gJy4vbWFwLXZpZXctc3RhdGUtY29udGV4dCc7XG5cbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJy4vY29tbW9uL2Vycm9yLWJvdW5kYXJ5JztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1xuICBNYXBTdHlsZSxcbiAgYXJlQW55RGVja0xheWVyc0xvYWRpbmcsXG4gIGNvbXB1dGVEZWNrTGF5ZXJzLFxuICBnZXRMYXllckhvdmVyUHJvcCxcbiAgTGF5ZXJIb3ZlclByb3AsXG4gIHByZXBhcmVMYXllcnNGb3JEZWNrLFxuICBwcmVwYXJlTGF5ZXJzVG9SZW5kZXIsXG4gIExheWVyc1RvUmVuZGVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IExvYWRpbmdJbmRpY2F0b3IgZnJvbSAnLi9sb2FkaW5nLWluZGljYXRvcic7XG5cbi8vIERlYm91bmNlIHRoZSBwcm9wYWdhdGlvbiBvZiB2aWV3cG9ydCBjaGFuZ2UgYW5kIG1vdXNlIG1vdmVzIHRvIHJlZHV4IHN0b3JlLlxuLy8gVGhpcyBpcyB0byBhdm9pZCB0b28gbWFueSByZW5kZXJzIG9mIG90aGVyIGNvbXBvbmVudHMgd2hlbiB0aGUgbWFwIGlzXG4vLyBiZWluZyBwYW5uZWQvem9vbWVkIChsZWFkaW5nIHRvIGxhZ2d5IGJhc2VtYXAvZGVjayBzeW5jaW5nKS5cbmNvbnN0IERFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSA9IDEwO1xuY29uc3QgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUgPSAxMDtcblxuLy8gSG93IGxvbmcgc2hvdWxkIHdlIHdhaXQgYmV0d2VlbiBsYXllciBsb2FkaW5nIHN0YXRlIGNoYW5nZXMgYmVmb3JlIHRyaWdnZXJpbmcgYSBVSSB1cGRhdGVcbmNvbnN0IERFQk9VTkNFX0xPQURJTkdfU1RBVEVfUFJPUEFHQVRFID0gMTAwO1xuXG5jb25zdCBNQVBfU1RZTEU6IHtba2V5OiBzdHJpbmddOiBSZWFjdC5DU1NQcm9wZXJ0aWVzfSA9IHtcbiAgY29udGFpbmVyOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJ1xuICB9LFxuICB0b3A6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbiAgfVxufTtcblxuY29uc3QgTE9DQUxFX0NPREVTX0FSUkFZID0gT2JqZWN0LmtleXMoTE9DQUxFX0NPREVTKTtcblxuaW50ZXJmYWNlIFN0eWxlZE1hcENvbnRhaW5lclByb3BzIHtcbiAgJG1peEJsZW5kTW9kZT86IHN0cmluZztcbiAgJG1hcExpYkNzc0NsYXNzOiBzdHJpbmc7XG59XG5cbmNvbnN0IFN0eWxlZE1hcCA9IHN0eWxlZChTdHlsZWRNYXBDb250YWluZXIpPFN0eWxlZE1hcENvbnRhaW5lclByb3BzPihcbiAgKHskbWl4QmxlbmRNb2RlID0gJ25vcm1hbCcsICRtYXBMaWJDc3NDbGFzc30pID0+IGBcbiAgI2RlZmF1bHQtZGVja2dsLW92ZXJsYXkge1xuICAgIG1peC1ibGVuZC1tb2RlOiAkeyRtaXhCbGVuZE1vZGV9O1xuICB9O1xuICAqWyR7JG1hcExpYkNzc0NsYXNzfS1jaGlsZHJlbl0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuYFxuKTtcblxuY29uc3QgTUFQQk9YR0xfU1RZTEVfVVBEQVRFID0gJ3N0eWxlLmxvYWQnO1xuY29uc3QgTUFQQk9YR0xfUkVOREVSID0gJ3JlbmRlcic7XG5cbi8vIENhbm9uaWNhbCBPcGVuU3RyZWV0TWFwIGF0dHJpYnV0aW9uLCBpbmplY3RlZCBpbnRvIHRoZSBjb2xsZWN0ZWQgbGlzdCB3aGVuIGFcbi8vIHN0eWxlIGlzIGRldGVjdGVkIHRvIHVzZSBPU00gdGlsZXMgYnV0IHRoZSByZXNvbHZlZCBzb3VyY2VzIGhhdmVuJ3QgeWllbGRlZFxuLy8gYW4gYXR0cmlidXRpb24gc3RyaW5nIG9mIHRoZWlyIG93biAoZS5nLiByYXcgc3R5bGUgZGVjbGFyZXMgT1NNIGJ1dCB0aGVcbi8vIFRpbGVKU09OIGhhc24ndCBleHBvc2VkIGl0KS4gUmVuZGVyZWQgdGhyb3VnaCB0aGUgc2FtZSBzYWZlIGxpbmsgcGFyc2VyIGFzXG4vLyBldmVyeSBvdGhlciBjb2xsZWN0ZWQgYXR0cmlidXRpb24uXG5jb25zdCBPU01fQVRUUklCVVRJT05fSFRNTCA9XG4gICfCqSA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4nO1xuXG5pbnRlcmZhY2UgU3R5bGVkRHJvcHBhYmxlUHJvcHMge1xuICAkaXNPdmVyOiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWREcm9wcGFibGUgPSBzdHlsZWQuZGl2PFN0eWxlZERyb3BwYWJsZVByb3BzPmBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuJGlzT3ZlciA/IHByb3BzLnRoZW1lLmRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IgOiAnbm9uZScpfTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XG5cbmNvbnN0IFN0eWxlZE1hcFNjYWxlQ29udGFpbmVyID0gc3R5bGVkLmRpdjx7JGxlZnQ6IG51bWJlcjsgJGJvdHRvbU9mZnNldDogbnVtYmVyfT5gXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNpZGVQYW5lbC5tYXJnaW4ubGVmdCArIHByb3BzLiRib3R0b21PZmZzZXR9cHg7XG4gIGxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMuJGxlZnR9cHg7XG4gIHotaW5kZXg6IDE7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuYDtcblxuZXhwb3J0IGNvbnN0IGlzU3BsaXRTZWxlY3RvciA9IHByb3BzID0+XG4gIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcyAmJiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMTtcblxuZXhwb3J0IGNvbnN0IERyb3BwYWJsZSA9ICh7Y29udGFpbmVySWR9KSA9PiB7XG4gIGNvbnN0IHtpc092ZXIsIHNldE5vZGVSZWZ9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZDogY29udGFpbmVySWQsXG4gICAgZGF0YToge3R5cGU6IERST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEUsIGluZGV4OiBjb250YWluZXJJZH0sXG4gICAgZGlzYWJsZWQ6ICFjb250YWluZXJJZFxuICB9KTtcblxuICByZXR1cm4gPFN0eWxlZERyb3BwYWJsZSByZWY9e3NldE5vZGVSZWZ9ICRpc092ZXI9e2lzT3Zlcn0gLz47XG59O1xuXG4vLyBBdHRyaWJ1dGlvbiBVSSAocGFyc2VyICsgY29tcG9uZW50cykgbGl2ZXMgaW4gLi9tYXAvYXR0cmlidXRpb24gYW5kIGlzXG4vLyByZS1leHBvcnRlZCBoZXJlIHRvIHByZXNlcnZlIHRoZSBwdWJsaWMgaW1wb3J0IHBhdGggKEBrZXBsZXIuZ2wvY29tcG9uZW50cykuXG5leHBvcnQge0F0dHJpYnV0aW9uLCBBdHRyaWJ1dGlvbkxvZ29zLCByZW5kZXJCYXNlbWFwQXR0cmlidXRpb24sIGRlZHVwZUJhc2VtYXBBdHRyaWJ1dGlvbnN9O1xuXG5NYXBDb250YWluZXJGYWN0b3J5LmRlcHMgPSBbTWFwUG9wb3ZlckZhY3RvcnksIE1hcENvbnRyb2xGYWN0b3J5LCBFZGl0b3JGYWN0b3J5LCBNYXBTY2FsZUZhY3RvcnldO1xuXG50eXBlIE1hcGJveFN0eWxlID0gc3RyaW5nIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xudHlwZSBQcm9wU2VsZWN0b3I8Uj4gPSBTZWxlY3RvcjxNYXBDb250YWluZXJQcm9wcywgUj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwQ29udGFpbmVyUHJvcHMge1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgbWFwQ29udHJvbHM6IE1hcENvbnRyb2xzO1xuICBtYXBTdHlsZToge2JvdHRvbU1hcFN0eWxlPzogTWFwYm94U3R5bGU7IHRvcE1hcFN0eWxlPzogTWFwYm94U3R5bGV9ICYgTWFwU3R5bGU7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybDogc3RyaW5nO1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcblxuICAvLyBvcHRpb25hbFxuICBwcmltYXJ5PzogYm9vbGVhbjsgLy8gcHJpbWFyeSBvbmUgd2lsbCBiZSByZXBvcnRpbmcgaXRzIHNpemUgdG8gYXBwU3RhdGVcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpc0V4cG9ydD86IGJvb2xlYW47XG4gIC8vIG9uTWFwU3R5bGVMb2FkZWQ/OiAobWFwOiBtYXBsaWJyZWdsLk1hcCB8IFJldHVyblR5cGU8TWFwUmVmWydnZXRNYXAnXT4gfCBudWxsKSA9PiB2b2lkO1xuICBvbk1hcFN0eWxlTG9hZGVkPzogKG1hcDogR2V0TWFwUmVmIHwgbnVsbCkgPT4gdm9pZDtcbiAgb25NYXBSZW5kZXI/OiAobWFwOiBHZXRNYXBSZWYgfCBudWxsKSA9PiB2b2lkO1xuICBnZXRNYXBib3hSZWY/OiAobWFwYm94PzogTWFwUmVmIHwgbnVsbCwgaW5kZXg/OiBudW1iZXIpID0+IHZvaWQ7XG4gIGluZGV4PzogbnVtYmVyO1xuICBkZWxldGVNYXBMYWJlbHM/OiAoY29udGFpbmVySWQ6IHN0cmluZywgbGF5ZXJJZDogc3RyaW5nKSA9PiB2b2lkO1xuICBjb250YWluZXJJZD86IG51bWJlcjtcblxuICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlPzogYm9vbGVhbjtcbiAgYWN0aXZlU2lkZVBhbmVsOiBzdHJpbmcgfCBudWxsO1xuICBzaWRlUGFuZWxXaWR0aD86IG51bWJlcjtcblxuICBsb2NhbGU/OiBhbnk7XG4gIHRoZW1lPzogYW55O1xuICBlZGl0b3I/OiBhbnk7XG4gIE1hcENvbXBvbmVudD86IHR5cGVvZiBNYXBib3hMZWdhY3lNYXAgfCB0eXBlb2YgTWFwbGlicmVNYXA7XG4gIGRlY2tHbFByb3BzPzogYW55O1xuICBvbkRlY2tJbml0aWFsaXplZD86IChhOiBhbnksIGI6IGFueSkgPT4gdm9pZDtcbiAgb25WaWV3U3RhdGVDaGFuZ2U/OiAodmlld3BvcnQ6IFZpZXdwb3J0KSA9PiB2b2lkO1xuXG4gIHRvcE1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIHRyYW5zZm9ybVJlcXVlc3Q/OiAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IHN0cmluZykgPT4ge3VybDogc3RyaW5nfTtcblxuICAvKiogUGFzcyBgZmFsc2VgIHRvIGRpc2FibGUgdGhlIHJlbW90ZSBSVEwgdGV4dCBwbHVnaW4sIG9yIGEgVVJMIHN0cmluZyB0byBzZWxmLWhvc3QgaXQuICovXG4gIFJUTFRleHRQbHVnaW4/OiBzdHJpbmcgfCBmYWxzZTtcblxuICBkYXRhc2V0QXR0cmlidXRpb25zPzogRGF0YXNldEF0dHJpYnV0aW9uW107XG4gIGF0dHJpYnV0aW9uTG9nb3M/OiBBdHRyaWJ1dGlvbldpdGhTdHlsZVtdO1xuXG4gIGdlbmVyYXRlTWFwYm94TGF5ZXJzPzogdHlwZW9mIGdlbmVyYXRlTWFwYm94TGF5ZXJzO1xuICBnZW5lcmF0ZURlY2tHTExheWVycz86IHR5cGVvZiBjb21wdXRlRGVja0xheWVycztcblxuICBvbk1vdXNlTW92ZT86IChldmVudDogUmVhY3QuTW91c2VFdmVudCAmIHtsbmdMYXQ/OiBbbnVtYmVyLCBudW1iZXJdfSkgPT4gdm9pZDtcblxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZGVja1JlbmRlckNhbGxiYWNrcz86IHtcbiAgICBvbkRlY2tMb2FkPzogKCkgPT4gdm9pZDtcbiAgICBvbkRlY2tSZW5kZXI/OiAoZGVja1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsO1xuICAgIG9uRGVja0FmdGVyUmVuZGVyPzogKGRlY2tQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IGFueTtcbiAgfTtcblxuICAvLyBPcHRpb25hbDogb3ZlcnJpZGUgbGVnZW5kIGhlYWRlciBsb2dvIGluIG1hcCBjb250cm9scyAodXNlZCBieSBpbWFnZSBleHBvcnQpXG4gIGxvZ29Db21wb25lbnQ/OiBSZWFjdC5GQyB8IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWFwQ29udGFpbmVyRmFjdG9yeShcbiAgTWFwUG9wb3ZlcjogUmV0dXJuVHlwZTx0eXBlb2YgTWFwUG9wb3ZlckZhY3Rvcnk+LFxuICBNYXBDb250cm9sOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBDb250cm9sRmFjdG9yeT4sXG4gIEVkaXRvcjogUmV0dXJuVHlwZTx0eXBlb2YgRWRpdG9yRmFjdG9yeT4sXG4gIE1hcFNjYWxlOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBTY2FsZUZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPE1hcENvbnRhaW5lclByb3BzPiB7XG4gIGNsYXNzIE1hcENvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudDxNYXBDb250YWluZXJQcm9wcz4ge1xuICAgIGRpc3BsYXlOYW1lID0gJ01hcENvbnRhaW5lcic7XG5cbiAgICBwcml2YXRlIGFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgc3RhdGljIGNvbnRleHRUeXBlID0gTWFwVmlld1N0YXRlQ29udGV4dDtcblxuICAgIGRlY2xhcmUgY29udGV4dDogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE1hcFZpZXdTdGF0ZUNvbnRleHQ+O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGRlY2tHbFByb3BzOiB7fSxcbiAgICAgIGluZGV4OiAwLFxuICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgcGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZygpO1xuICAgIH1cblxuICAgIHN0YXRlID0ge1xuICAgICAgLy8gdHJ1ZSBmb3IgYnVpbHQtaW4ga2VwbGVyLmdsIHN0eWxlcyAoZGFyay1tYXR0ZXIsIHBvc2l0cm9uLCDigKYpIGFuZCB3aGVuIHRoZVxuICAgICAgLy8gYmFzZW1hcCB1c2VzIE1hcGJveC1ob3N0ZWQgdGlsZXMgKG1hcGJveDovLyBzb3VyY2VzKS5cbiAgICAgIC8vIEZvciB1c2VyLWFkZGVkIGN1c3RvbSBzdHlsZXMgKE9wZW5GcmVlTWFwLCBDQVJUTyBzZWxmLWhvc3RlZCwg4oCmKSBNYXBMaWJyZSBpc1xuICAgICAgLy8gbWVyZWx5IHRoZSByZW5kZXJpbmcgZW5naW5lLCBub3QgdGhlIHRpbGUgcHJvdmlkZXIsIHNvIHRoZSBsb2dvIGlzIGhpZGRlbiBhbmRcbiAgICAgIC8vIHRoZSBiYXNlbWFwJ3Mgb3duIFRpbGVKU09OIGF0dHJpYnV0aW9uIGlzIHNob3duIGluc3RlYWQuXG4gICAgICBzaG93QmFzZU1hcExpYkxvZ286IGZhbHNlLFxuICAgICAgLy8gYXR0cmlidXRpb24gc3RyaW5ncyBjb2xsZWN0ZWQgZnJvbSB0aGUgcmVzb2x2ZWQgbWFwIHNvdXJjZXMgKGUuZy4gQ0FSVE8sXG4gICAgICAvLyBPcGVuRnJlZU1hcCkuICBQb3B1bGF0ZWQgYWZ0ZXIgVGlsZUpTT04gcmVzb2x2ZXMuXG4gICAgICBiYXNlbWFwQXR0cmlidXRpb25zOiBbXSBhcyBzdHJpbmdbXVxuICAgIH07XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmICghdGhpcy5fcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgb2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQsIHRoaXMuX2hhbmRsZVJlc2l6ZSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCB0aGlzLl9vbk1hcGJveFN0eWxlVXBkYXRlKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9SRU5ERVIsIHRoaXMuX29uTWFwUmVuZGVyKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX3JlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVub2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlICE9PSB0aGlzLnByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZSkge1xuICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHNob3dCYXNlTWFwTGliTG9nbzogZmFsc2UsXG4gICAgICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zOiBbXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBfZGVjazogYW55ID0gbnVsbDtcbiAgICBfbWFwOiBHZXRNYXBSZWYgfCBudWxsID0gbnVsbDtcbiAgICBfcmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICAgIF9kZWNrR0xFcnJvcnNFbGFwc2VkOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9ID0ge307XG4gICAgX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXI6ICgoZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIF9iYXNlbWFwSWRsZUxpc3RlbmVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICAgIF9vbk1hcFJlbmRlciA9ICgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbk1hcFJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwUmVuZGVyKHRoaXMuX21hcCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHByZXZpb3VzTGF5ZXJzID0ge1xuICAgICAgLy8gW2xheWVycy5pZF06IG1hcGJveExheWVyQ29uZmlnXG4gICAgfTtcblxuICAgIF9oYW5kbGVSZXNpemUgPSBkaW1lbnNpb25zID0+IHtcbiAgICAgIGNvbnN0IHtwcmltYXJ5LCBpbmRleH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHByaW1hcnkpIHtcbiAgICAgICAgY29uc3Qge21hcFN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoZGltZW5zaW9ucyAmJiBkaW1lbnNpb25zLndpZHRoID4gMCAmJiBkaW1lbnNpb25zLmhlaWdodCA+IDApIHtcbiAgICAgICAgICBtYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKGRpbWVuc2lvbnMsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBsYXllcnNTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllcnMnXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllcnM7XG4gICAgbGF5ZXJEYXRhU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJzJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJEYXRhO1xuICAgIHNwbGl0TWFwU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxTcGxpdE1hcFtdPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcztcbiAgICBzcGxpdE1hcEluZGV4U2VsZWN0b3I6IFByb3BTZWxlY3RvcjxudW1iZXIgfCB1bmRlZmluZWQ+ID0gcHJvcHMgPT4gcHJvcHMuaW5kZXg7XG4gICAgbWFwTGF5ZXJzU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxTcGxpdE1hcExheWVycyB8IG51bGwgfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLnNwbGl0TWFwU2VsZWN0b3IsXG4gICAgICB0aGlzLnNwbGl0TWFwSW5kZXhTZWxlY3RvcixcbiAgICAgIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHNcbiAgICApO1xuICAgIGxheWVyT3JkZXJTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllck9yZGVyJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJPcmRlcjtcbiAgICBsYXllcnNUb1JlbmRlclNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8TGF5ZXJzVG9SZW5kZXI+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwTGF5ZXJzU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzVG9SZW5kZXJcbiAgICApO1xuICAgIGxheWVyc0ZvckRlY2tTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzRm9yRGVja1xuICAgICk7XG4gICAgZmlsdGVyc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZmlsdGVycztcbiAgICBwb2x5Z29uRmlsdGVyc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IodGhpcy5maWx0ZXJzU2VsZWN0b3IsIGZpbHRlcnMgPT5cbiAgICAgIGZpbHRlcnMuZmlsdGVyKGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlKVxuICAgICk7XG4gICAgZmVhdHVyZXNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgICBzZWxlY3RlZEZlYXR1cmVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5mZWF0dXJlc1NlbGVjdG9yLFxuICAgICAgKHBvbHlnb25GaWx0ZXJzLCBmZWF0dXJlcykgPT4gKHtcbiAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmNvbmNhdChwb2x5Z29uRmlsdGVycy5tYXAoZiA9PiBmLnZhbHVlKSlcbiAgICAgIH0pXG4gICAgKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gTm8gb3ZlcmxvYWQgbWF0Y2hlcyB0aGlzIGNhbGxcbiAgICBzZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IsXG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yLFxuICAgICAgKGNvbGxlY3Rpb24sIHNlbGVjdGVkRmVhdHVyZSkgPT5cbiAgICAgICAgY29sbGVjdGlvbi5mZWF0dXJlcy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmU/LmlkKVxuICAgICk7XG4gICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAodmFsdWU6IG51bWJlcikgPT4gdmFsdWUsXG4gICAgICB2YWx1ZSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA8IDAgPyBbXSA6IFt2YWx1ZV07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2RTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmdlbmVyYXRlTWFwYm94TGF5ZXJzID8/IGdlbmVyYXRlTWFwYm94TGF5ZXJzO1xuXG4gICAgbWFwYm94TGF5ZXJzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllck9yZGVyU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IsXG4gICAgICB0aGlzLmdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2RTZWxlY3RvcixcbiAgICAgIChsYXllciwgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBsYXllcnNUb1JlbmRlciwgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZCkgPT5cbiAgICAgICAgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZChsYXllciwgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBsYXllcnNUb1JlbmRlcilcbiAgICApO1xuXG4gICAgLy8gbWVyZ2UgaW4gYSBiYWNrZ3JvdW5kLWNvbG9yIHN0eWxlIGlmIHRoZSBiYXNlbWFwIGNob2ljZSBpcyBOT19NQVBfSURcbiAgICAvLyB1c2VkIGJ5IDxTdHlsZWRNYXA+IGlubGluZSBzdHlsZSBwcm9wXG4gICAgbWFwU3R5bGVUeXBlU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBTdHlsZS5zdHlsZVR5cGU7XG4gICAgbWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcFN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICBnbG9iZU1vZGVTZWxlY3RvciA9IHByb3BzID0+IEJvb2xlYW4ocHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5lbmFibGVkKTtcbiAgICBnbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5jb25maWc/LmJhY2tncm91bmRDb2xvcjtcbiAgICBnbG9iZVN0YXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBCb29sZWFuKHByb3BzLm1hcFN0YXRlPy5nbG9iZT8uY29uZmlnPy5zdGFycyk7XG4gICAgc3R5bGVTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5tYXBTdHlsZVR5cGVTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2xvYmVNb2RlU2VsZWN0b3IsXG4gICAgICB0aGlzLmdsb2JlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IsXG4gICAgICB0aGlzLmdsb2JlU3RhcnNTZWxlY3RvcixcbiAgICAgIChzdHlsZVR5cGUsIGJhY2tncm91bmRDb2xvciwgaXNHbG9iZU1vZGUsIGdsb2JlQmFja2dyb3VuZENvbG9yLCBnbG9iZVN0YXJzKSA9PiAoe1xuICAgICAgICAuLi5NQVBfU1RZTEUuY29udGFpbmVyLFxuICAgICAgICAuLi4oc3R5bGVUeXBlID09PSBOT19NQVBfSUQgPyB7YmFja2dyb3VuZENvbG9yOiByZ2JUb0hleChiYWNrZ3JvdW5kQ29sb3IpfSA6IHt9KSxcbiAgICAgICAgLy8gSW4gZ2xvYmUgbW9kZSB0aGUgZGVjay5nbCBjYW52YXMgaXMgdHJhbnNwYXJlbnQgKHRoZSBnbG9iZSBWaWV3IHVzZXNcbiAgICAgICAgLy8gYGNsZWFyQ29sb3I6IGZhbHNlYCB0byBhdm9pZCBjb3JydXB0aW5nIHRoZSBwaWNraW5nIGJ1ZmZlciksIHNvIHRoZVxuICAgICAgICAvLyBiYWNrZ3JvdW5kIGFyb3VuZCB0aGUgZ2xvYmUgaXMgcGFpbnRlZCBoZXJlIG9uIHRoZSBjb250YWluZXIgaW5zdGVhZC5cbiAgICAgICAgLi4uKGlzR2xvYmVNb2RlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBnbG9iZSBiYWNrZ3JvdW5kIHdoZW4gbm9uZSBpcyBjb25maWd1cmVkLlxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJnYlRvSGV4KFxuICAgICAgICAgICAgICAgIChnbG9iZUJhY2tncm91bmRDb2xvciBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHx8XG4gICAgICAgICAgICAgICAgICAoZ2V0R2xvYmVDbGVhckNvbG9yKCkuc2xpY2UoMCwgMykgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAvLyBPcHRpb25hbGx5IG92ZXJsYXkgYSB0aWxlYWJsZSBzdGFyLWZpZWxkIHBhdHRlcm4gb24gdGhlIGJhY2tncm91bmQuXG4gICAgICAgICAgICAgIC4uLihnbG9iZVN0YXJzXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgnJHtnZXRTdGFyc0JhY2tncm91bmRJbWFnZSgpfScpYCxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ3JlcGVhdCdcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvKiBjb21wb25lbnQgcHJpdmF0ZSBmdW5jdGlvbnMgKi9cbiAgICBfb25DbG9zZU1hcFBvcG92ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2sobnVsbCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXIgPSAoX2lkeDogbnVtYmVyLCBpbmZvOiBQaWNraW5nSW5mbzxhbnk+IHwgbnVsbCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckhvdmVyKGluZm8sIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgIH07XG5cbiAgICBfb25MYXllclNldERvbWFpbiA9IChcbiAgICAgIGlkeDogbnVtYmVyLFxuICAgICAgdmFsdWU6IG51bWJlcltdIHwge2RvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjsgYWdncmVnYXRlZEJpbnM6IFJlY29yZDxudW1iZXIsIEFnZ3JlZ2F0ZWRCaW4+fVxuICAgICkgPT4ge1xuICAgICAgLy8gZGVjay5nbCA5IG5hdGl2ZSBhZ2dyZWdhdGlvbiBsYXllcnMgKEdyaWQsIEhleGFnb24pIHBhc3NcbiAgICAgIC8vIHtkb21haW4sIGFnZ3JlZ2F0ZWRCaW5zfSB2aWEgb3VyIFNjYWxlRW5oYW5jZWQqIG92ZXJyaWRlcyxcbiAgICAgIC8vIHdoaWxlIENsdXN0ZXJMYXllcidzIENQVUFnZ3JlZ2F0b3IgYWxzbyBwYXNzZXMge2RvbWFpbiwgYWdncmVnYXRlZEJpbnN9LlxuICAgICAgLy8gUGxhaW4gW21pbiwgbWF4XSBpcyBhIGZhbGxiYWNrIGlmIHRoZSBvdmVycmlkZSBpcyBieXBhc3NlZC5cbiAgICAgIGNvbnN0IGNvbmZpZyA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgID8ge2NvbG9yRG9tYWluOiB2YWx1ZSBhcyBWaXN1YWxDaGFubmVsRG9tYWlufVxuICAgICAgICA6IHtjb2xvckRvbWFpbjogdmFsdWUuZG9tYWluLCBhZ2dyZWdhdGVkQmluczogdmFsdWUuYWdncmVnYXRlZEJpbnN9O1xuXG4gICAgICBjb25zdCBsYXllciA9IHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF07XG4gICAgICBpZiAoIWxheWVyKSByZXR1cm47XG5cbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCBjb25maWcgYXMgUGFydGlhbDxMYXllckJhc2VDb25maWc+KTtcbiAgICB9O1xuXG4gICAgX29uUmVkcmF3TmVlZGVkID0gKF9pZHg6IG51bWJlcikgPT4ge1xuICAgICAgLy8gdXBkYXRlTWFwVXBkYXRlciBhbHdheXMgcmV0dXJucyBhIG5ldyBzdGF0ZSBvYmplY3QgcmVmZXJlbmNlLCB3aGljaCB0cmlnZ2VycyByZS1yZW5kZXJcbiAgICAgIGNvbnN0IHttYXBTdGF0ZUFjdGlvbnMsIGluZGV4fSA9IHRoaXMucHJvcHM7XG4gICAgICBtYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKHt9LCBpbmRleCk7XG4gICAgfTtcblxuICAgIF9vbkZpdEJvdW5kcyA9IChfaWR4OiBudW1iZXIsIGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pID0+IHtcbiAgICAgIHRoaXMucHJvcHMubWFwU3RhdGVBY3Rpb25zLmZpdEJvdW5kcyhib3VuZHMpO1xuICAgIH07XG5cbiAgICBfb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UgPSAoaWR4LCBldmVudCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMubGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlKHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sIGV2ZW50KTtcbiAgICB9O1xuXG4gICAgX29uV01TRmVhdHVyZUluZm8gPSAoXG4gICAgICBpZHg6IG51bWJlcixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZmVhdHVyZUluZm86IEFycmF5PHtuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmd9PiB8IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGNvb3JkaW5hdGU/OiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbDtcbiAgICAgIH1cbiAgICApID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLndtc0ZlYXR1cmVJbmZvKFxuICAgICAgICB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdLFxuICAgICAgICBkYXRhLmZlYXR1cmVJbmZvLFxuICAgICAgICBkYXRhLmNvb3JkaW5hdGVcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9oYW5kbGVNYXBUb2dnbGVMYXllciA9IGxheWVySWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4OiBtYXBJbmRleCA9IDAsIHZpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKTtcbiAgICB9O1xuXG4gICAgX29uTWFwYm94U3R5bGVVcGRhdGUgPSB1cGRhdGUgPT4ge1xuICAgICAgLy8gZm9yY2UgcmVmcmVzaCBtYXBib3hnbCBsYXllcnNcbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSB7fTtcbiAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuXG4gICAgICB0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbih1cGRhdGUpO1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBTdHlsZUxvYWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQodGhpcy5fbWFwKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3VwZGF0ZUF0dHJpYnV0aW9uID0gKHVwZGF0ZT86IGFueSkgPT4ge1xuICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG5cbiAgICAgIGxldCBzdHlsZU9iaiA9IHVwZGF0ZT8uc3R5bGUgfHwgbnVsbDtcbiAgICAgIGlmICghc3R5bGVPYmogJiYgdGhpcy5fbWFwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmF3U3R5bGUgPSB0aGlzLl9tYXAuaXNTdHlsZUxvYWRlZD8uKCkgPyB0aGlzLl9tYXAuZ2V0U3R5bGU/LigpIDogbnVsbDtcbiAgICAgICAgICBpZiAocmF3U3R5bGUpIHtcbiAgICAgICAgICAgIHN0eWxlT2JqID0ge3N0eWxlc2hlZXQ6IHJhd1N0eWxlfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIG1hcCBzdHlsZSBub3QgcmVhZHkgeWV0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHVzZXNNYXBib3ggPSBzdHlsZU9iaiA/IGlzU3R5bGVVc2luZ01hcGJveFRpbGVzKHN0eWxlT2JqKSA6IGZhbHNlO1xuICAgICAgY29uc3QgdXNlc09zbSA9IHN0eWxlT2JqID8gaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzKHN0eWxlT2JqKSA6IGZhbHNlO1xuICAgICAgY29uc3QgYmFzZW1hcEF0dHJpYnV0aW9ucyA9IGdldEJhc2VNYXBBdHRyaWJ1dGlvbnModGhpcy5fbWFwKTtcblxuICAgICAgLy8gaWYgT1NNIHRpbGVzIGFyZSBkZXRlY3RlZCBpbiB0aGUgcmF3IHN0eWxlIGJ1dCBubyBzb3VyY2UtbGV2ZWwgYXR0cmlidXRpb25cbiAgICAgIC8vIHN0cmluZyB3YXMgY29sbGVjdGVkIHlldCwgZm9sZCBpbiB0aGUgY2Fub25pY2FsIE9TTSBhdHRyaWJ1dGlvbiBzbyB0aGVcbiAgICAgIC8vIHJlbmRlciBwYXRoIHN0YXlzIHVuaWZvcm0gKG5vIHNlcGFyYXRlIGhhcmRjb2RlZCBmYWxsYmFjayBsaW5rKVxuICAgICAgaWYgKHVzZXNPc20gJiYgIWJhc2VtYXBBdHRyaWJ1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnMucHVzaChPU01fQVRUUklCVVRJT05fSFRNTCk7XG4gICAgICB9XG5cbiAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRvIHNob3cgdGhlIFwiQmFzZW1hcCBieTogTWFwTGlicmUvTWFwYm94XCIgbG9nbzpcbiAgICAgIC8vICAtIEFsd2F5cyBzaG93IGZvciBidWlsdC1pbiBrZXBsZXIuZ2wgc3R5bGVzIChkYXJrLW1hdHRlciwgcG9zaXRyb24sIOKApik6XG4gICAgICAvLyAgICB0aGV5IGRvbid0IGNhcnJ5IHRoZWlyIG93biBcInByb3ZpZGVyXCIgYnJhbmRpbmcgc28gdGhlIHJlbmRlcmluZy1lbmdpbmVcbiAgICAgIC8vICAgIGxvZ28gYWN0cyBhcyB0aGUgYmFzZW1hcCBjcmVkaXQuXG4gICAgICAvLyAgLSBBbHdheXMgc2hvdyB3aGVuIE1hcGJveCB0aWxlcyBhcmUgaW4gdXNlIChtYXBib3g6Ly8gc291cmNlcyk6IE1hcGJveFxuICAgICAgLy8gICAgYXR0cmlidXRpb24gaXMgcmVxdWlyZWQuXG4gICAgICAvLyAgLSBIaWRlIGZvciBjdXN0b20gdXNlci1hZGRlZCBzdHlsZXMgKGN1c3RvbSA9PT0gJ0xPQ0FMJyB8ICdNQU5BR0VEJyk6XG4gICAgICAvLyAgICB0aG9zZSBzdHlsZXMgc3VwcGx5IHRoZWlyIG93biBUaWxlSlNPTiBhdHRyaWJ1dGlvbiAoZS5nLiBPcGVuRnJlZU1hcCksXG4gICAgICAvLyAgICBzbyBzaG93aW5nIFwiQmFzZW1hcCBieTogTWFwTGlicmVcIiB3b3VsZCBiZSBtaXNsZWFkaW5nLlxuICAgICAgY29uc3Qgc3R5bGVUeXBlID0gdGhpcy5wcm9wcy5tYXBTdHlsZT8uc3R5bGVUeXBlO1xuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gdGhpcy5wcm9wcy5tYXBTdHlsZT8ubWFwU3R5bGVzPy5bc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGlzVXNlckN1c3RvbVN0eWxlID0gQm9vbGVhbihjdXJyZW50U3R5bGU/LmN1c3RvbSk7XG4gICAgICBjb25zdCBzaG93QmFzZU1hcExpYkxvZ28gPSB1c2VzTWFwYm94IHx8ICFpc1VzZXJDdXN0b21TdHlsZTtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNob3dCYXNlTWFwTGliTG9nbyxcbiAgICAgICAgYmFzZW1hcEF0dHJpYnV0aW9uc1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEZvciBub24tTWFwYm94IHN0eWxlcywgVGlsZUpTT04gYXR0cmlidXRpb24gcmVzb2x2ZXMgYXN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGFmdGVyIHN0eWxlLmxvYWQuICBTdGFydCBhIGxpc3RlbmVyIHNvIHdlIGNhbiB1cGRhdGUgYmFzZW1hcEF0dHJpYnV0aW9uc1xuICAgICAgLy8gYXMgc29vbiBhcyB0aGUgc291cmNlcyByZXNvbHZlIHRoZWlyIFRpbGVKU09OLlxuICAgICAgaWYgKCF1c2VzTWFwYm94KSB7XG4gICAgICAgIHRoaXMuX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciAmJiB0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignc291cmNlZGF0YScsIHRoaXMuX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIpO1xuICAgICAgICB0aGlzLl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9iYXNlbWFwSWRsZUxpc3RlbmVyICYmIHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdpZGxlJywgdGhpcy5fYmFzZW1hcElkbGVMaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfY29sbGVjdEJhc2VtYXBBdHRyaWJ1dGlvbnMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX21hcCkgcmV0dXJuO1xuICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgICAgLy8gQ2FwIHJldHJpZXMgc28gYSBzdHlsZSB0aGF0IG5ldmVyIHlpZWxkcyBhdHRyaWJ1dGlvbnMgZG9lc24ndCBsZWF2ZSBhXG4gICAgICAvLyBwZXJtYW5lbnQgc291cmNlZGF0YSBsaXN0ZW5lciBhdHRhY2hlZC5cbiAgICAgIGNvbnN0IE1BWF9BVFRFTVBUUyA9IDUwO1xuXG4gICAgICBjb25zdCB0cnlDb2xsZWN0ID0gKCkgPT4ge1xuICAgICAgICAvLyBUaWxlSlNPTiByZXNvbHZlcyBhc3luY2hyb25vdXNseTsgcmUtY29sbGVjdCBhdHRyaWJ1dGlvbnMgb25jZSBhXG4gICAgICAgIC8vIHNvdXJjZSdzIG1ldGFkYXRhIGlzIGF2YWlsYWJsZSBzbyBjdXN0b20gYmFzZW1hcCBhdHRyaWJ1dGlvbnMgYXJlIG5vdCBsb3N0LlxuICAgICAgICBjb25zdCBiYXNlbWFwQXR0cmlidXRpb25zID0gZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyh0aGlzLl9tYXApO1xuICAgICAgICBpZiAoYmFzZW1hcEF0dHJpYnV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgICAvLyBEb24ndCBjaGFuZ2Ugc2hvd0Jhc2VNYXBMaWJMb2dvIGhlcmUg4oCUIGl0IGlzIGZpeGVkIGF0IHN0eWxlLmxvYWQgdGltZVxuICAgICAgICAgIC8vIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHN0eWxlIHVzZXMgTWFwYm94IHRpbGVzLiAgV2Ugb25seSB1cGRhdGUgdGhlXG4gICAgICAgICAgLy8gcHJvdmlkZXIgYXR0cmlidXRpb25zIGNvbGxlY3RlZCBmcm9tIHRoZSByZXNvbHZlZCBUaWxlSlNPTi5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtiYXNlbWFwQXR0cmlidXRpb25zfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25Tb3VyY2VEYXRhID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAvLyBDb2xsZWN0IGF0dHJpYnV0aW9ucyB3aGVuOlxuICAgICAgICAvLyAgIChhKSBhIHNvdXJjZSdzIFRpbGVKU09OIGhhcyBqdXN0IGJlZW4gZmV0Y2hlZCAoc291cmNlRGF0YVR5cGUgPT09ICdtZXRhZGF0YScpIOKAlFxuICAgICAgICAvLyAgICAgICB0aGlzIGlzIHRoZSBlYXJsaWVzdCBtb21lbnQgdGhlIGBhdHRyaWJ1dGlvbmAgcHJvcGVydHkgaXMgYXZhaWxhYmxlIG9uIHRoZVxuICAgICAgICAvLyAgICAgICByZXNvbHZlZCBzb3VyY2Ugb2JqZWN0LCBvclxuICAgICAgICAvLyAgIChiKSBhIHNvdXJjZSBpcyBmdWxseSBsb2FkZWQgKGlzU291cmNlTG9hZGVkID09PSB0cnVlKSDigJQgZmFsbGJhY2sgZm9yIHJhc3RlclxuICAgICAgICAvLyAgICAgICBzb3VyY2VzIG9yIHN0eWxlcyB0aGF0IHNldCBhdHRyaWJ1dGlvbiBpbmxpbmUgcmF0aGVyIHRoYW4gdmlhIFRpbGVKU09OLlxuICAgICAgICBpZiAoIWU/LmlzU291cmNlTG9hZGVkICYmIGU/LnNvdXJjZURhdGFUeXBlICE9PSAnbWV0YWRhdGEnKSByZXR1cm47XG4gICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgIHRyeUNvbGxlY3QoKTtcbiAgICAgICAgaWYgKGF0dGVtcHRzID49IE1BWF9BVFRFTVBUUykge1xuICAgICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBUaGUgYGlkbGVgIGV2ZW50IGZpcmVzIHdoZW4gdGhlIG1hcCBoYXMgZmluaXNoZWQgbG9hZGluZyBhbGwgcGVuZGluZ1xuICAgICAgLy8gcmVzb3VyY2VzICh0aWxlcywgVGlsZUpTT04sIHNwcml0ZXMpLiBBdCB0aGF0IHBvaW50IGF0dHJpYnV0aW9ucyBmcm9tXG4gICAgICAvLyBhbGwgc291cmNlcyBhcmUgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCwgc28gdGhpcyBpcyBhIHJlbGlhYmxlXG4gICAgICAvLyBvbmUtc2hvdCBmYWxsYmFjayB0aGF0IGNhdGNoZXMgY2FzZXMgd2hlcmUgdGhlIHNvdXJjZWRhdGEgbWV0YWRhdGFcbiAgICAgIC8vIGV2ZW50cyBhcmUgbWlzc2VkIG9yIHRoZSBzb3VyY2UgbmV2ZXIgcmVhY2hlcyBpc1NvdXJjZUxvYWRlZC5cbiAgICAgIGNvbnN0IG9uSWRsZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgIGNvbnN0IGJhc2VtYXBBdHRyaWJ1dGlvbnMgPSBnZXRCYXNlTWFwQXR0cmlidXRpb25zKHRoaXMuX21hcCk7XG4gICAgICAgIGlmIChiYXNlbWFwQXR0cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Jhc2VtYXBBdHRyaWJ1dGlvbnN9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciA9IG9uU291cmNlRGF0YTtcbiAgICAgIHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIgPSBvbklkbGU7XG4gICAgICB0aGlzLl9tYXAub24oJ3NvdXJjZWRhdGEnLCBvblNvdXJjZURhdGEpO1xuICAgICAgdGhpcy5fbWFwLm9uKCdpZGxlJywgb25JZGxlKTtcbiAgICB9O1xuXG4gICAgX3NldE1hcFJlZiA9IG1hcFJlZiA9PiB7XG4gICAgICAvLyBIYW5kbGUgY2hhbmdlIG9mIHRoZSBtYXAgbGlicmFyeVxuICAgICAgaWYgKHRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgY29uc3QgbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICBpZiAobWFwICYmIHRoaXMuX21hcCAhPT0gbWFwKSB7XG4gICAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIHRoaXMuX29uTWFwYm94U3R5bGVVcGRhdGUpO1xuICAgICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfUkVOREVSLCB0aGlzLl9vbk1hcFJlbmRlcik7XG4gICAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICAvLyBpIG5vdGljZWQgaW4gY2VydGFpbiBjb250ZXh0IHdlIGRvbid0IGFjY2VzcyB0aGUgYWN0dWFsIG1hcCBlbGVtZW50XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJpbmQgbWFwYm94Z2wgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgdGhpcy5fbWFwLm9uKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgdGhpcy5fb25NYXBib3hTdHlsZVVwZGF0ZSk7XG4gICAgICAgIHRoaXMuX21hcC5vbihNQVBCT1hHTF9SRU5ERVIsIHRoaXMuX29uTWFwUmVuZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuZ2V0TWFwYm94UmVmKSB7XG4gICAgICAgIC8vIFRoZSBwYXJlbnQgY29tcG9uZW50IGNhbiBnYWluIGFjY2VzcyB0byBvdXIgTWFwYm94R2xNYXAgYnlcbiAgICAgICAgLy8gcHJvdmlkaW5nIHRoaXMgY2FsbGJhY2suIE5vdGUgdGhhdCAnbWFwYm94JyB3aWxsIGJlIG51bGwgd2hlbiB0aGVcbiAgICAgICAgLy8gcmVmIGlzIHVuc2V0IChlLmcuIHdoZW4gYSBzcGxpdCBtYXAgaXMgY2xvc2VkKS5cbiAgICAgICAgdGhpcy5wcm9wcy5nZXRNYXBib3hSZWYobWFwUmVmLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX29uRGVja0luaXRpYWxpemVkKGRldmljZSkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkRlY2tJbml0aWFsaXplZCh0aGlzLl9kZWNrLCBkZXZpY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDEpIEFsbG93IGVmZmVjdHMgb25seSBmb3IgdGhlIGZpcnN0IHZpZXcuXG4gICAgICogMikgUHJldmVudCBlZmZlY3Q6cHJlUmVuZGVyIGNhbGwgd2l0aG91dCB2YWxpZCBnZW5lcmF0ZWQgdmlld3BvcnRzLlxuICAgICAqIEBwYXJhbSB2aWV3SW5kZXggVmlldyBpbmRleC5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZWZmZWN0cyBjYW4gYmUgdXNlZC5cbiAgICAgKi9cbiAgICBfaXNPS1RvUmVuZGVyRWZmZWN0cyh2aWV3SW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhdmlld0luZGV4ICYmIEJvb2xlYW4odGhpcy5fZGVjaz8udmlld01hbmFnZXI/Ll92aWV3cG9ydHM/Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgX29uQmVmb3JlUmVuZGVyID0gKCkgPT4ge1xuICAgICAgLy8gbm8tb3BcbiAgICB9O1xuXG4gICAgX2Fubm90YXRpb25WaWV3cG9ydENhY2hlOiB7a2V5OiBzdHJpbmc7IHZpZXdwb3J0OiBhbnl9IHwgbnVsbCA9IG51bGw7XG5cbiAgICBfd2FzSW50ZXJhY3RpbmcgPSBmYWxzZTtcblxuICAgIF9nZXRBbm5vdGF0aW9uVmlld3BvcnQobWFwU3RhdGU6IGFueSwgaW50ZXJuYWxWaWV3U3RhdGU6IGFueSkge1xuICAgICAgY29uc3QgbG9uZ2l0dWRlID0gaW50ZXJuYWxWaWV3U3RhdGU/LmxvbmdpdHVkZSA/PyBtYXBTdGF0ZS5sb25naXR1ZGU7XG4gICAgICBjb25zdCBsYXRpdHVkZSA9IGludGVybmFsVmlld1N0YXRlPy5sYXRpdHVkZSA/PyBtYXBTdGF0ZS5sYXRpdHVkZTtcbiAgICAgIGNvbnN0IHpvb20gPSBpbnRlcm5hbFZpZXdTdGF0ZT8uem9vbSA/PyBtYXBTdGF0ZS56b29tO1xuICAgICAgY29uc3QgcGl0Y2ggPSBpbnRlcm5hbFZpZXdTdGF0ZT8ucGl0Y2ggPz8gbWFwU3RhdGUucGl0Y2ggPz8gMDtcbiAgICAgIGNvbnN0IGJlYXJpbmcgPSBpbnRlcm5hbFZpZXdTdGF0ZT8uYmVhcmluZyA/PyBtYXBTdGF0ZS5iZWFyaW5nID8/IDA7XG4gICAgICBjb25zdCB3aWR0aCA9IG1hcFN0YXRlLndpZHRoIHx8IDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSBtYXBTdGF0ZS5oZWlnaHQgfHwgMDtcbiAgICAgIGNvbnN0IGtleSA9IGAke2xvbmdpdHVkZX0sJHtsYXRpdHVkZX0sJHt6b29tfSwke3BpdGNofSwke2JlYXJpbmd9LCR7d2lkdGh9LCR7aGVpZ2h0fWA7XG5cbiAgICAgIGlmICh0aGlzLl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZT8ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fubm90YXRpb25WaWV3cG9ydENhY2hlLnZpZXdwb3J0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXJnZWRTdGF0ZSA9IHsuLi5tYXBTdGF0ZSwgLi4uaW50ZXJuYWxWaWV3U3RhdGUsIHdpZHRoLCBoZWlnaHR9O1xuICAgICAgY29uc3QgdnAgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShtZXJnZWRTdGF0ZSkgYXMgYW55O1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSB7XG4gICAgICAgIHByb2plY3Q6IChsbmdMYXQ6IFtudW1iZXIsIG51bWJlcl0pID0+IHZwLnByb2plY3QobG5nTGF0KSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICB1bnByb2plY3Q6ICh4eTogW251bWJlciwgbnVtYmVyXSkgPT4gdnAudW5wcm9qZWN0KHh5KSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICBsb25naXR1ZGUsXG4gICAgICAgIGxhdGl0dWRlLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICB6b29tXG4gICAgICB9O1xuICAgICAgdGhpcy5fYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGUgPSB7a2V5LCB2aWV3cG9ydH07XG4gICAgICByZXR1cm4gdmlld3BvcnQ7XG4gICAgfVxuXG4gICAgX29uRGVja0Vycm9yID0gKGVycm9yLCBsYXllcikgPT4ge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/Lm1lc3NhZ2UgfHwgJ3Vua25vd24tZXJyb3InO1xuICAgICAgY29uc3QgbGF5ZXJNZXNzYWdlID0gbGF5ZXI/LmlkID8gYCBpbiAke2xheWVyLmlkfSBsYXllcmAgOiAnJztcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZUZ1bGwgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09ICdXZWJHTCBjb250ZXh0IGlzIGxvc3QnXG4gICAgICAgICAgPyAnWW91ciBHUFUgd2FzIGRpc2Nvbm5lY3RlZC4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdXIgY29tcHV0ZXIgZ29lcyB0byBzbGVlcC4gSXQgY2FuIGFsc28gb2NjdXIgZm9yIG90aGVyIHJlYXNvbnMsIHN1Y2ggYXMgaWYgeW91IGFyZSBydW5uaW5nIHRvbyBtYW55IEdQVSBhcHBsaWNhdGlvbnMuJ1xuICAgICAgICAgIDogYEFuIGVycm9yIGluIGRlY2suZ2w6ICR7ZXJyb3JNZXNzYWdlfSR7bGF5ZXJNZXNzYWdlfS5gO1xuXG4gICAgICAvLyBUaHJvdHRsZSBlcnJvciBub3RpZmljYXRpb25zLCBhcyBSZWFjdCBkb2Vzbid0IGxpa2UgdG9vIG1hbnkgc3RhdGUgY2hhbmdlcyBmcm9tIGhlcmUuXG4gICAgICBjb25zdCBsYXN0U2hvd24gPSB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkW2Vycm9yTWVzc2FnZUZ1bGxdO1xuICAgICAgaWYgKCFsYXN0U2hvd24gfHwgbGFzdFNob3duIDwgRGF0ZS5ub3coKSAtIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FKSB7XG4gICAgICAgIHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbZXJyb3JNZXNzYWdlRnVsbF0gPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIE1hcmsgbGF5ZXIgYXMgaW52YWxpZFxuICAgICAgICBsZXQgZXh0cmFMYXllck1lc3NhZ2UgPSAnJztcbiAgICAgICAgY29uc3Qge3Zpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAobGF5ZXIpIHtcbiAgICAgICAgICBsZXQgdG9wTW9zdExheWVyID0gbGF5ZXI7XG4gICAgICAgICAgd2hpbGUgKHRvcE1vc3RMYXllci5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRvcE1vc3RMYXllciA9IHRvcE1vc3RMYXllci5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0b3BNb3N0TGF5ZXIucHJvcHM/LmlkKSB7XG4gICAgICAgICAgICB2aXNTdGF0ZUFjdGlvbnMubGF5ZXJTZXRJc1ZhbGlkKHRvcE1vc3RMYXllciwgZmFsc2UpO1xuICAgICAgICAgICAgZXh0cmFMYXllck1lc3NhZ2UgPSAnVGhlIGxheWVyIGhhcyBiZWVuIGRpc2FibGVkIGFuZCBoaWdobGlnaHRlZC4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgZXJyb3Igbm90aWZpY2F0aW9uIG9yIHVwZGF0ZSBleGlzdGluZyBvbmUgd2l0aCBzYW1lIGlkLlxuICAgICAgICAvLyBVcGRhdGUgaXMgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIG5vdGlmaWNhdGlvbnMgYXMgdGhleSBwcm9iYWJseSBhcmUgZ29pbmcgdG8gXCJqdW1wXCIgYmFzZWQgb24gb3JkZXIgb2YgZXJyb3JzLlxuICAgICAgICBjb25zdCB7dWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMuYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke2Vycm9yTWVzc2FnZUZ1bGx9ICR7ZXh0cmFMYXllck1lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiBlcnJvck1lc3NhZ2VGdWxsIC8vIHRyZWF0IHRoZSBlcnJvciBtZXNzYWdlIGFzIGlkXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyogY29tcG9uZW50IHJlbmRlciBmdW5jdGlvbnMgKi9cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbiAgICBfcmVuZGVyTWFwUG9wb3ZlcigpIHtcbiAgICAgIC8vIHRoaXMgY2hlY2sgaXMgZm9yIGxpbWl0aW5nIHRoZSBkaXNwbGF5IG9mIHRoZSBgPE1hcFBvcG92ZXI+YCB0byB0aGUgYDxNYXBDb250YWluZXI+YCB0aGUgdXNlciBpcyBpbnRlcmFjdGluZyB3aXRoXG4gICAgICAvLyB0aGUgRGVja0dMIG9uSG92ZXIgZXZlbnQgaGFuZGxlciBhZGRzIGEgYG1hcEluZGV4YCBwcm9wZXJ0eSB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIGBob3ZlckluZm9gIG9iamVjdCBvZiBgdmlzU3RhdGVgXG4gICAgICBpZiAodGhpcy5wcm9wcy5pbmRleCAhPT0gdGhpcy5wcm9wcy52aXNTdGF0ZS5ob3ZlckluZm8/Lm1hcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgaW50byByZWR1Y2VyIHNvIGl0IGNhbiBiZSB0ZXN0ZWRcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIHZpc1N0YXRlOiB7XG4gICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICBtb3VzZVBvczoge21vdXNlUG9zaXRpb24sIGNvb3JkaW5hdGUsIHBpbm5lZH1cbiAgICAgICAgfVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBsYXllcnNUb1JlbmRlciA9IHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgaWYgKCFtb3VzZVBvc2l0aW9uIHx8ICFpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXllckhvdmVyUHJvcCA9IGdldExheWVySG92ZXJQcm9wKHtcbiAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICBsYXllcnMsXG4gICAgICAgIGxheWVyc1RvUmVuZGVyLFxuICAgICAgICBkYXRhc2V0c1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbXBhcmVNb2RlID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWdcbiAgICAgICAgPyBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5jb21wYXJlTW9kZVxuICAgICAgICA6IGZhbHNlO1xuXG4gICAgICBsZXQgcGlubmVkUG9zaXRpb24gPSB7eDogMCwgeTogMH07XG4gICAgICBsZXQgbGF5ZXJQaW5uZWRQcm9wOiBMYXllckhvdmVyUHJvcCB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKHBpbm5lZCB8fCBjbGlja2VkKSB7XG4gICAgICAgIC8vIHByb2plY3QgbG5nbGF0IHRvIHNjcmVlbiBzbyB0aGF0IHRvb2x0aXAgZm9sbG93cyB0aGUgb2JqZWN0IG9uIHpvb21cbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShtYXBTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGxuZ0xhdCA9IGNsaWNrZWQgPyBjbGlja2VkLmNvb3JkaW5hdGUgOiBwaW5uZWQuY29vcmRpbmF0ZTtcbiAgICAgICAgcGlubmVkUG9zaXRpb24gPSB0aGlzLl9nZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpO1xuICAgICAgICBsYXllclBpbm5lZFByb3AgPSBnZXRMYXllckhvdmVyUHJvcCh7XG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgIGhvdmVySW5mbzogY2xpY2tlZCxcbiAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgbGF5ZXJzVG9SZW5kZXIsXG4gICAgICAgICAgZGF0YXNldHNcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChsYXllckhvdmVyUHJvcCAmJiBsYXllclBpbm5lZFByb3ApIHtcbiAgICAgICAgICBsYXllckhvdmVyUHJvcC5wcmltYXJ5RGF0YSA9IGxheWVyUGlubmVkUHJvcC5kYXRhO1xuICAgICAgICAgIGxheWVySG92ZXJQcm9wLmNvbXBhcmVUeXBlID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuY29tcGFyZVR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tbW9uUHJvcCA9IHtcbiAgICAgICAgb25DbG9zZTogdGhpcy5fb25DbG9zZU1hcFBvcG92ZXIsXG4gICAgICAgIHpvb206IG1hcFN0YXRlLnpvb20sXG4gICAgICAgIGNvbnRhaW5lcjogdGhpcy5fZGVjayA/IHRoaXMuX2RlY2suY2FudmFzIDogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXJyb3JCb3VuZGFyeT5cbiAgICAgICAgICB7bGF5ZXJQaW5uZWRQcm9wICYmIChcbiAgICAgICAgICAgIDxNYXBQb3BvdmVyXG4gICAgICAgICAgICAgIHsuLi5waW5uZWRQb3NpdGlvbn1cbiAgICAgICAgICAgICAgey4uLmNvbW1vblByb3B9XG4gICAgICAgICAgICAgIGxheWVySG92ZXJQcm9wPXtsYXllclBpbm5lZFByb3B9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGU9e2ludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZCAmJiAocGlubmVkIHx8IHt9KS5jb29yZGluYXRlfVxuICAgICAgICAgICAgICBmcm96ZW49e3RydWV9XG4gICAgICAgICAgICAgIGlzQmFzZT17Y29tcGFyZU1vZGV9XG4gICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldEZlYXR1cmVzfVxuICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmU9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb249e3RoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7bGF5ZXJIb3ZlclByb3AgJiYgKCFsYXllclBpbm5lZFByb3AgfHwgY29tcGFyZU1vZGUpICYmIChcbiAgICAgICAgICAgIDxNYXBQb3BvdmVyXG4gICAgICAgICAgICAgIHg9e21vdXNlUG9zaXRpb25bMF19XG4gICAgICAgICAgICAgIHk9e21vdXNlUG9zaXRpb25bMV19XG4gICAgICAgICAgICAgIHsuLi5jb21tb25Qcm9wfVxuICAgICAgICAgICAgICBsYXllckhvdmVyUHJvcD17bGF5ZXJIb3ZlclByb3B9XG4gICAgICAgICAgICAgIGZyb3plbj17ZmFsc2V9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGU9e2ludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZCAmJiBjb29yZGluYXRlfVxuICAgICAgICAgICAgICBvblNldEZlYXR1cmVzPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRGZWF0dXJlc31cbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAnUmVhZG9ubHk8TWFwQ29udGFpbmVyUHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uPXt0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRXJyb3JCb3VuZGFyeT5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbiAgICBfZ2V0SG92ZXJYWSh2aWV3cG9ydCwgbG5nTGF0KSB7XG4gICAgICBjb25zdCBzY3JlZW5Db29yZCA9ICF2aWV3cG9ydCB8fCAhbG5nTGF0ID8gbnVsbCA6IHZpZXdwb3J0LnByb2plY3QobG5nTGF0KTtcbiAgICAgIHJldHVybiBzY3JlZW5Db29yZCAmJiB7eDogc2NyZWVuQ29vcmRbMF0sIHk6IHNjcmVlbkNvb3JkWzFdfTtcbiAgICB9XG5cbiAgICBfcmVuZGVyRGVja092ZXJsYXkoXG4gICAgICBsYXllcnNGb3JEZWNrLFxuICAgICAgb3B0aW9uczoge3ByaW1hcnlNYXA6IGJvb2xlYW47IGlzSW50ZXJhY3RpdmU/OiBib29sZWFuOyBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZX0gPSB7XG4gICAgICAgIHByaW1hcnlNYXA6IGZhbHNlXG4gICAgICB9XG4gICAgKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0eWxlLFxuICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgZGVja0dsUHJvcHMsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcyxcbiAgICAgICAgdGhlbWUsXG4gICAgICAgIGdlbmVyYXRlRGVja0dMTGF5ZXJzLFxuICAgICAgICBvbk1vdXNlTW92ZVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IHtob3ZlckluZm8sIGVkaXRvcn0gPSB2aXNTdGF0ZTtcbiAgICAgIGNvbnN0IHtwcmltYXJ5TWFwLCBpc0ludGVyYWN0aXZlLCBjaGlsZHJlbn0gPSBvcHRpb25zO1xuXG4gICAgICAvLyBkaXNhYmxlIGRvdWJsZSBjbGljayB6b29tIHdoZW4gZWRpdG9yIGlzIGluIGFueSBkcmF3IG1vZGVcbiAgICAgIGNvbnN0IHttYXBEcmF3fSA9IG1hcENvbnRyb2xzO1xuICAgICAgY29uc3Qge2FjdGl2ZTogZWRpdG9yTWVudUFjdGl2ZSA9IGZhbHNlfSA9IG1hcERyYXcgfHwge307XG4gICAgICBjb25zdCBpc0VkaXRvckRyYXdpbmdNb2RlID0gRWRpdG9yTGF5ZXJVdGlscy5pc0RyYXdpbmdBY3RpdmUoZWRpdG9yTWVudUFjdGl2ZSwgZWRpdG9yLm1vZGUpO1xuXG4gICAgICBjb25zdCBpbnRlcm5hbFZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUoaW5kZXgpO1xuICAgICAgY29uc3QgaW50ZXJuYWxNYXBTdGF0ZSA9IHsuLi5tYXBTdGF0ZSwgLi4uaW50ZXJuYWxWaWV3U3RhdGV9O1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShpbnRlcm5hbE1hcFN0YXRlKTtcblxuICAgICAgY29uc3QgZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IHtzZXRGZWF0dXJlcywgb25MYXllckNsaWNrLCBzZXRTZWxlY3RlZEZlYXR1cmV9ID0gdmlzU3RhdGVBY3Rpb25zO1xuXG4gICAgICBjb25zdCBnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZCA9IGdlbmVyYXRlRGVja0dMTGF5ZXJzID8/IGNvbXB1dGVEZWNrTGF5ZXJzO1xuXG4gICAgICBjb25zdCBleHRyYURlY2tQYXJhbXM6IHtcbiAgICAgICAgZ2V0VG9vbHRpcD86IChpbmZvOiBhbnkpID0+IG9iamVjdCB8IG51bGw7XG4gICAgICAgIGdldEN1cnNvcj86ICh7aXNEcmFnZ2luZ306IHtpc0RyYWdnaW5nOiBib29sZWFufSkgPT4gc3RyaW5nO1xuICAgICAgfSA9IHt9O1xuICAgICAgaWYgKHByaW1hcnlNYXApIHtcbiAgICAgICAgLy8gT21pdCBob3ZlciB1cGRhdGVzIHdoZW4gdGhlIHBvaW50ZXIgcG9zaXRpb24gaXMgaW52YWxpZCwgaWUuIG92ZXIgVUkgb3ZlcmxheXMgb3JcbiAgICAgICAgLy8gb3V0c2lkZSB0aGUgbWFwIGNvbnRhaW5lci4gSW4gdGhvc2UgY2FzZXMgeC95IG1heSBiZSA8IDBcbiAgICAgICAgZXh0cmFEZWNrUGFyYW1zLmdldFRvb2x0aXAgPSBpbmZvID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gTnVtYmVyKGluZm8/LngpO1xuICAgICAgICAgIGNvbnN0IHkgPSBOdW1iZXIoaW5mbz8ueSk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih4KSB8fCBOdW1iZXIuaXNOYU4oeSkgfHwgeCA8IDAgfHwgeSA8IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuIEVkaXRvckxheWVyVXRpbHMuZ2V0VG9vbHRpcChpbmZvLCB7XG4gICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBleHRyYURlY2tQYXJhbXMuZ2V0Q3Vyc29yID0gKHtpc0RyYWdnaW5nfToge2lzRHJhZ2dpbmc6IGJvb2xlYW59KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yQ3Vyc29yID0gRWRpdG9yTGF5ZXJVdGlscy5nZXRDdXJzb3Ioe1xuICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIGhvdmVySW5mb1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChlZGl0b3JDdXJzb3IpIHJldHVybiBlZGl0b3JDdXJzb3I7XG5cbiAgICAgICAgICBpZiAoaXNEcmFnZ2luZykgcmV0dXJuICdncmFiYmluZyc7XG4gICAgICAgICAgaWYgKGhvdmVySW5mbz8ubGF5ZXIpIHJldHVybiAncG9pbnRlcic7XG4gICAgICAgICAgcmV0dXJuICdncmFiJztcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWZmZWN0cyA9IHRoaXMuX2lzT0tUb1JlbmRlckVmZmVjdHMoaW5kZXgpXG4gICAgICAgID8gY29tcHV0ZURlY2tFZmZlY3RzKHt2aXNTdGF0ZSwgbWFwU3RhdGUsIGlzRXhwb3J0OiB0aGlzLnByb3BzLmlzRXhwb3J0fSlcbiAgICAgICAgOiBbXTtcblxuICAgICAgY29uc3QgaXNHbG9iZU1vZGUgPSBtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZDtcblxuICAgICAgLy8gSW4gZ2xvYmUgbW9kZSB3aXRoIGEgbm9uLWRlZmF1bHQgYmxlbmQgbW9kZSwgZm9yd2FyZCBwcmUtY29tcHV0ZWQgbGF5ZXJcbiAgICAgIC8vIHJlbmRlcmluZyBwYXJhbWV0ZXJzIGludG8gbWFwU3RhdGUgc28gaW5kaXZpZHVhbCBsYXllcnMgY2FuIG1lcmdlIHRoZW0gaW50b1xuICAgICAgLy8gdGhlaXIgb3duIHBhcmFtZXRlcnMgb2JqZWN0cy4gVGhlIGdsb2JhbCBEZWNrR0wgcGFyYW1ldGVycyBjYW5ub3QgYmUgdXNlZCBpblxuICAgICAgLy8gZ2xvYmUgbW9kZSBiZWNhdXNlIHRoZXkgYXJlIG1lcmdlZCBpbnRvIGdsb2JlIHN5c3RlbSBsYXllcnMgKGF0bW9zcGhlcmUsXG4gICAgICAvLyBzdXJmYWNlLCBldGMuKSBhbmQgYWx0ZXIgdGhlaXIgY2FyZWZ1bGx5IHR1bmVkIGJsZW5kL2RlcHRoIHN0YXRlLlxuICAgICAgLy8gJ25vcm1hbCcgaXMgb21pdHRlZCDigJQgaXQgaXMgdGhlIFdlYkdMIGRlZmF1bHQgYW5kIGluamVjdGluZyBpdCB3b3VsZFxuICAgICAgLy8gb3ZlcnJpZGUgaW50ZW50aW9uYWwgYmxlbmQ6ZmFsc2Ugc2V0dGluZ3Mgb24gbGF5ZXJzIGxpa2UgdHJpcC9zY2VuZWdyYXBoLlxuICAgICAgY29uc3QgbGF5ZXJCbGVuZGluZ1BhcmFtcyA9XG4gICAgICAgIGlzR2xvYmVNb2RlICYmIHZpc1N0YXRlLmxheWVyQmxlbmRpbmcgJiYgdmlzU3RhdGUubGF5ZXJCbGVuZGluZyAhPT0gJ25vcm1hbCdcbiAgICAgICAgICA/IGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzKHZpc1N0YXRlLmxheWVyQmxlbmRpbmcpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBkZWNrTGF5ZXJzTWFwU3RhdGUgPSBsYXllckJsZW5kaW5nUGFyYW1zXG4gICAgICAgID8gey4uLmludGVybmFsTWFwU3RhdGUsIGxheWVyUGFyYW1ldGVyczogbGF5ZXJCbGVuZGluZ1BhcmFtc31cbiAgICAgICAgOiBpbnRlcm5hbE1hcFN0YXRlO1xuXG4gICAgICBjb25zdCBkZWNrR2xMYXllcnMgPSBnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZChcbiAgICAgICAge1xuICAgICAgICAgIHZpc1N0YXRlLFxuICAgICAgICAgIG1hcFN0YXRlOiBkZWNrTGF5ZXJzTWFwU3RhdGUsXG4gICAgICAgICAgbWFwU3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1hcEluZGV4OiBpbmRleCxcbiAgICAgICAgICBwcmltYXJ5TWFwLFxuICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgICBsYXllcnNGb3JEZWNrLFxuICAgICAgICAgIGVkaXRvckluZm86IHByaW1hcnlNYXBcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM6IHNldEZlYXR1cmVzLFxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICBvbkFwcGx5UG9seWdvbkZpbHRlckFsbDogdmlzU3RhdGVBY3Rpb25zLnNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnMsXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbjogdGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4ZXM6IHRoaXMuc2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICd1bmtub3duJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbnVtYmVyJy5cbiAgICAgICAgICAgICAgICAgIGVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25MYXllckhvdmVyOiB0aGlzLl9vbkxheWVySG92ZXIsXG4gICAgICAgICAgb25TZXRMYXllckRvbWFpbjogdGhpcy5fb25MYXllclNldERvbWFpbixcbiAgICAgICAgICBvbkZpbHRlcmVkSXRlbXNDaGFuZ2U6IHRoaXMuX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlLFxuICAgICAgICAgIG9uV01TRmVhdHVyZUluZm86IHRoaXMuX29uV01TRmVhdHVyZUluZm8sXG4gICAgICAgICAgb25SZWRyYXdOZWVkZWQ6IHRoaXMuX29uUmVkcmF3TmVlZGVkLFxuICAgICAgICAgIG9uRml0Qm91bmRzOiB0aGlzLl9vbkZpdEJvdW5kc1xuICAgICAgICB9LFxuICAgICAgICBkZWNrR2xQcm9wc1xuICAgICAgKTtcblxuICAgICAgLy8gRm9sbG93IHRoZSBzZWxlY3RlZCBiYXNlbWFwIHN0eWxlJ3MgbGlicmFyeSBzbyB0aGUgZ2xvYmUgdXNlcyB0aGUgc2FtZVxuICAgICAgLy8gcHJvdmlkZXIgYXMgdGhlIGZsYXQgMkQgbWFwIChDQVJUTyB0aWxlcyBmb3IgTWFwTGlicmUgc3R5bGVzLCBNYXBib3hcbiAgICAgIC8vIHRpbGVzIGZvciBNYXBib3ggc3R5bGVzKS5cbiAgICAgIGNvbnN0IGdsb2JlQmFzZW1hcFByb3ZpZGVyID0gcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyKFxuICAgICAgICBnZXRCYXNlTWFwTGlicmFyeShtYXBTdHlsZT8ubWFwU3R5bGVzPy5bbWFwU3R5bGU/LnN0eWxlVHlwZV0pLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbiB8fCAnJ1xuICAgICAgKTtcblxuICAgICAgLy8gSW4gZ2xvYmUgbW9kZSwgcHJlcGVuZCBnbG9iZSBiYXNlIGxheWVycyBhbmQgYXBwZW5kIHRvcCBsYXllcnNcbiAgICAgIGNvbnN0IGdsb2JlQmFzZUxheWVycyA9XG4gICAgICAgIGlzR2xvYmVNb2RlICYmIG1hcFN0YXRlLmdsb2JlXG4gICAgICAgICAgPyBnZXRHbG9iZUJhc2VMYXllcnMoe1xuICAgICAgICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogbWFwYm94QXBpQWNjZXNzVG9rZW4gfHwgJycsXG4gICAgICAgICAgICAgIGdsb2JlOiBtYXBTdGF0ZS5nbG9iZSxcbiAgICAgICAgICAgICAgbWFwU3R5bGVUeXBlOiBtYXBTdHlsZT8uc3R5bGVUeXBlLFxuICAgICAgICAgICAgICBiYXNlbWFwUHJvdmlkZXI6IGdsb2JlQmFzZW1hcFByb3ZpZGVyLFxuICAgICAgICAgICAgICAvLyBVc2UgdGhlIGxpdmUgKGludGVybmFsKSBsYXRpdHVkZSBzbyB0aGUgdGlsZSBMT0QgY29tcGVuc2F0aW9uXG4gICAgICAgICAgICAgIC8vIHN0YXlzIGluIHN5bmMgd2l0aCB0aGUgZGVjayB2aWV3cG9ydCBkdXJpbmcgYSBkcmFnOyBtYXBTdGF0ZVxuICAgICAgICAgICAgICAvLyBsYXRpdHVkZSBsYWdzIGJlaGluZCB3aGlsZSByb3RhdGluZy5cbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGludGVybmFsTWFwU3RhdGUubGF0aXR1ZGUsXG4gICAgICAgICAgICAgIHpvb206IGludGVybmFsTWFwU3RhdGUuem9vbVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgZ2xvYmVUb3BMYXllcnMgPVxuICAgICAgICBpc0dsb2JlTW9kZSAmJiBtYXBTdGF0ZS5nbG9iZVxuICAgICAgICAgID8gZ2V0R2xvYmVUb3BMYXllcnMoe2dsb2JlOiBtYXBTdGF0ZS5nbG9iZSwgem9vbTogaW50ZXJuYWxNYXBTdGF0ZS56b29tfSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgZmluYWxEZWNrR2xMYXllcnMgPSBpc0dsb2JlTW9kZVxuICAgICAgICA/IFsuLi5nbG9iZUJhc2VMYXllcnMsIC4uLmRlY2tHbExheWVycywgLi4uZ2xvYmVUb3BMYXllcnNdXG4gICAgICAgIDogZGVja0dsTGF5ZXJzO1xuXG4gICAgICBjb25zdCB2aWV3cyA9IGRlY2tHbFByb3BzPy52aWV3c1xuICAgICAgICA/IGRlY2tHbFByb3BzPy52aWV3cygpXG4gICAgICAgIDogaXNHbG9iZU1vZGVcbiAgICAgICAgPyBuZXcgS2VwbGVyR2xvYmVWaWV3KHtcbiAgICAgICAgICAgIHJlc29sdXRpb246IDUsXG4gICAgICAgICAgICAvLyBUaGUgdmlzaWJsZSBiYWNrZ3JvdW5kIGFyb3VuZCB0aGUgZ2xvYmUgaXMgcGFpbnRlZCBieSB0aGUgbWFwXG4gICAgICAgICAgICAvLyBjb250YWluZXIncyBDU1MgYmFja2dyb3VuZCAoc2VlIHN0eWxlU2VsZWN0b3IpLCBOT1QgYnkgYSBwZXItdmlld1xuICAgICAgICAgICAgLy8gY29sb3IgY2xlYXIuIGRlY2suZ2wgYXBwbGllcyBhIFZpZXcncyBgY2xlYXJDb2xvcmAgaW4gKmV2ZXJ5KiBwYXNzLFxuICAgICAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBwaWNraW5nIHBhc3MsIGFuZCBpdCBmb3JjZXMgdGhlIGNsZWFyZWQgYWxwaGEgdG8gMjU1XG4gICAgICAgICAgICAvLyAoYGNsZWFyQ29sb3JbM10gfHwgMjU1YCkuIEluIHRoZSBwaWNraW5nIGJ1ZmZlciB0aGUgYWxwaGEgYnl0ZSBlbmNvZGVzXG4gICAgICAgICAgICAvLyB0aGUgbGF5ZXIgaW5kZXgsIHNvIGEgMjU1IGNsZWFyIG1ha2VzIGRlY2suZ2wgZGVjb2RlIGV2ZXJ5IHBpeGVsIGFzIGFcbiAgICAgICAgICAgIC8vIG5vbi1leGlzdGVudCBsYXllciAoXCJQaWNrZWQgbm9uLWV4aXN0ZW50IGxheWVyLiBJcyBwaWNraW5nIGJ1ZmZlclxuICAgICAgICAgICAgLy8gY29ycnVwdD9cIikgb24gaG92ZXIuIGBjbGVhckNvbG9yOiBmYWxzZWAgc2tpcHMgdGhlIHBlci12aWV3IGNvbG9yXG4gICAgICAgICAgICAvLyBjbGVhciBzbyB0aGUgcGlja2luZyBidWZmZXIga2VlcHMgaXRzIDAgYWxwaGE7IHRoZSBjYW52YXMgc3RheXNcbiAgICAgICAgICAgIC8vIHRyYW5zcGFyZW50IGFuZCB0aGUgQ1NTIGJhY2tncm91bmQgc2hvd3MgdGhyb3VnaC5cbiAgICAgICAgICAgIGNsZWFyOiB0cnVlLFxuICAgICAgICAgICAgY2xlYXJDb2xvcjogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICA6IG5ldyBNYXBWaWV3KHtmYXJaTXVsdGlwbGllcjogMS4yfSk7XG5cbiAgICAgIGxldCBhbGxEZWNrR2xQcm9wcyA9IHtcbiAgICAgICAgLi4uZGVja0dsUHJvcHMsXG4gICAgICAgIHBpY2tpbmdSYWRpdXM6IERFRkFVTFRfUElDS0lOR19SQURJVVMsXG4gICAgICAgIHZpZXdzLFxuICAgICAgICBsYXllcnM6IGZpbmFsRGVja0dsTGF5ZXJzLFxuICAgICAgICBlZmZlY3RzLFxuICAgICAgICBwYXJhbWV0ZXJzOiBpc0dsb2JlTW9kZSA/IHtjdWxsOiB0cnVlfSA6IGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzKHZpc1N0YXRlLmxheWVyQmxlbmRpbmcpXG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja1JlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhbGxEZWNrR2xQcm9wcyA9IGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrUmVuZGVyKGFsbERlY2tHbFByb3BzKTtcbiAgICAgICAgaWYgKCFhbGxEZWNrR2xQcm9wcykge1xuICAgICAgICAgIC8vIGlmIG9uRGVja1JlbmRlciByZXR1cm5zIG51bGwsIGRvIG5vdCByZW5kZXIgZGVjay5nbFxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICB7Li4uKGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG9uTW91c2VNb3ZlOiBwcmltYXJ5TWFwXG4gICAgICAgICAgICAgICAgICA/IGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTW92ZT8uKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbk1vdXNlTW92ZURlYm91bmNlZChldmVudCwgdmlld3BvcnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtzdHlsZToge3BvaW50ZXJFdmVudHM6ICdub25lJ319KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxEZWNrR0xcbiAgICAgICAgICAgIGlkPVwiZGVmYXVsdC1kZWNrZ2wtb3ZlcmxheVwiXG4gICAgICAgICAgICBvbkxvYWQ9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tMb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tMb2FkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB7Li4uYWxsRGVja0dsUHJvcHN9XG4gICAgICAgICAgICBjb250cm9sbGVyPXtcbiAgICAgICAgICAgICAgaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBkb3VibGVDbGlja1pvb206ICFpc0VkaXRvckRyYXdpbmdNb2RlLFxuICAgICAgICAgICAgICAgICAgICBkcmFnUm90YXRlOiB0aGlzLnByb3BzLm1hcFN0YXRlLmRyYWdSb3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIG1heFBpdGNoOiB0aGlzLnByb3BzLm1hcFN0YXRlLm1heFBpdGNoID8/IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkubWF4UGl0Y2gsXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGdsb2JlIG1vZGUgYWxsb3cgem9vbWluZyBvdXQgZnVydGhlciB0aGFuIGRlY2suZ2wncyBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIC8vIG9mIDAgc28gdGhlIHdob2xlIGdsb2JlIGNhbiBiZSBwdWxsZWQgYmFjayBvbiBzY3JlZW4uIFNldCBvbiB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbGxlciBzbyBpdCBzdGF5cyBhdXRob3JpdGF0aXZlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZpZXdTdGF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyByb3VuZC10cmlwIHRocm91Z2ggUmVkdXgvbG9jYWwgY29udGV4dC4gQ2FwIHRoZSBtYXggem9vbSB0b28gc29cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJhc2VtYXAgdGlsZXMgZG9uJ3QgYnJlYWsgZG93biBhdCBoaWdoIGdsb2JlIHpvb20uXG4gICAgICAgICAgICAgICAgICAgIC4uLihpc0dsb2JlTW9kZSA/IHttaW5ab29tOiBHTE9CRV9NSU5fWk9PTSwgbWF4Wm9vbTogR0xPQkVfTUFYX1pPT019IDoge30pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmlld1N0YXRlPXtcbiAgICAgICAgICAgICAgaXNHbG9iZU1vZGVcbiAgICAgICAgICAgICAgICA/IHsuLi5pbnRlcm5hbFZpZXdTdGF0ZSwgbWluWm9vbTogR0xPQkVfTUlOX1pPT00sIG1heFpvb206IEdMT0JFX01BWF9aT09NfVxuICAgICAgICAgICAgICAgIDogaW50ZXJuYWxWaWV3U3RhdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQmVmb3JlUmVuZGVyPXt0aGlzLl9vbkJlZm9yZVJlbmRlcn1cbiAgICAgICAgICAgIG9uVmlld1N0YXRlQ2hhbmdlPXtpc0ludGVyYWN0aXZlID8gdGhpcy5fb25WaWV3cG9ydENoYW5nZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHsuLi5leHRyYURlY2tQYXJhbXN9XG4gICAgICAgICAgICBvbkhvdmVyPXtcbiAgICAgICAgICAgICAgaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgID8gZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEVkaXRvckxheWVyVXRpbHMub25Ib3ZlcihkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgaG92ZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25MYXllckhvdmVyRGVib3VuY2VkKGRhdGEsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhkYXRhLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZUV2ZW50KGV2ZW50LnNyY0V2ZW50LCB2aWV3cG9ydCk7XG5cbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGJpdG1hcCBsYXllciBhbGlnbm1lbnQgbW9kZTogaWYgYSBiaXRtYXAgbGF5ZXIgaXMgd2FpdGluZ1xuICAgICAgICAgICAgICAvLyBmb3IgYSBtYXAgY2xpY2ssIHJvdXRlIHRoZSBjbGljayBjb29yZGluYXRlIHRvIGl0XG4gICAgICAgICAgICAgIGlmIChkYXRhLmNvb3JkaW5hdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGlnbmluZ0xheWVyID0gdmlzU3RhdGUubGF5ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAobDogYW55KSA9PiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuYWxpZ25XYWl0aW5nRm9yTWFwICYmIGwuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWduaW5nTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgIChhbGlnbmluZ0xheWVyIGFzIGFueSkub25BbGlnbk1hcENsaWNrKGRhdGEuY29vcmRpbmF0ZSBhcyBbbnVtYmVyLCBudW1iZXJdKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX29uUmVkcmF3TmVlZGVkKDApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEVkaXRvckxheWVyVXRpbHMub25DbGljayhkYXRhLCBldmVudCwge1xuICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgIG9uTGF5ZXJDbGljayxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgbWFwSW5kZXg6IGluZGV4XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAocmVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJDbGljayhkYXRhKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkVycm9yPXt0aGlzLl9vbkRlY2tFcnJvcn1cbiAgICAgICAgICAgIHJlZj17Y29tcCA9PiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgaWYgKGNvbXAgJiYgY29tcC5kZWNrICYmICF0aGlzLl9kZWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHRoaXMuX2RlY2sgPSBjb21wLmRlY2s7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkRldmljZUluaXRpYWxpemVkPXtkZXZpY2UgPT4gdGhpcy5fb25EZWNrSW5pdGlhbGl6ZWQoZGV2aWNlKX1cbiAgICAgICAgICAgIG9uQWZ0ZXJSZW5kZXI9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tBZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrQWZ0ZXJSZW5kZXIoYWxsRGVja0dsUHJvcHMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gYXJlQW55RGVja0xheWVyc0xvYWRpbmcoYWxsRGVja0dsUHJvcHMubGF5ZXJzKTtcbiAgICAgICAgICAgICAgaWYgKGFueUFjdGl2ZUxheWVyTG9hZGluZyAhPT0gdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcgPSBhbnlBY3RpdmVMYXllckxvYWRpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDwvRGVja0dMPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZU1hcGJveExheWVycygpIHtcbiAgICAgIGNvbnN0IG1hcGJveExheWVycyA9IHRoaXMubWFwYm94TGF5ZXJzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBpZiAoIU9iamVjdC5rZXlzKG1hcGJveExheWVycykubGVuZ3RoICYmICFPYmplY3Qua2V5cyh0aGlzLnByZXZpb3VzTGF5ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVNYXBib3hMYXllcnModGhpcy5fbWFwLCBtYXBib3hMYXllcnMsIHRoaXMucHJldmlvdXNMYXllcnMpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzTGF5ZXJzID0gbWFwYm94TGF5ZXJzO1xuICAgIH1cblxuICAgIF9yZW5kZXJNYXBib3hPdmVybGF5cygpIHtcbiAgICAgIGlmICh0aGlzLl9tYXAgJiYgdGhpcy5fbWFwLmlzU3R5bGVMb2FkZWQoKSkge1xuICAgICAgICB0aGlzLl91cGRhdGVNYXBib3hMYXllcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBjb25zdCB2aWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgb25WaWV3UG9ydENoYW5nZShcbiAgICAgICAgdmlld1N0YXRlLFxuICAgICAgICB0aGlzLnByb3BzLm1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAsXG4gICAgICAgIHRoaXMucHJvcHMub25WaWV3U3RhdGVDaGFuZ2UsXG4gICAgICAgIHRoaXMucHJvcHMucHJpbWFyeSxcbiAgICAgICAgdGhpcy5wcm9wcy5pbmRleFxuICAgICAgKTtcbiAgICB9LCBERUJPVU5DRV9WSUVXUE9SVF9QUk9QQUdBVEUpO1xuXG4gICAgX29uVmlld3BvcnRDaGFuZ2UgPSB2aWV3cG9ydCA9PiB7XG4gICAgICBjb25zdCB7dmlld1N0YXRlLCBpbnRlcmFjdGlvblN0YXRlfSA9IHZpZXdwb3J0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuaXNFeHBvcnQpIHtcbiAgICAgICAgLy8gSW1hZ2UgZXhwb3J0IG1hcCBzaG91bGRuJ3QgYmUgaW50ZXJhY3RpdmUgKG90aGVyd2lzZSB0aGlzIGNhbGxiYWNrIGNhblxuICAgICAgICAvLyBsZWFkIHRvIGluYWR2ZXJ0ZW50IGNoYW5nZXMgdG8gdGhlIHN0YXRlIG9mIHRoZSBtYWluIG1hcClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge3NldEludGVybmFsVmlld1N0YXRlfSA9IHRoaXMuY29udGV4dDtcblxuICAgICAgLy8gRmxhdCBtYXAgKDJELzNEKToga2VlcCB0aGUgb3JpZ2luYWwsIGFsd2F5cy1zeW5jaHJvbm91cyBiZWhhdmlvci4gVGhlXG4gICAgICAvLyBpbnRlcmFjdGlvbi1hd2FyZSB0aW1pbmcgYmVsb3cgZXhpc3RzIHB1cmVseSB0byBmaXggZ2xvYmUtc3BlY2lmaWNcbiAgICAgIC8vIGNvbnRyb2xsZWQtdmlld1N0YXRlLCBzbyBpdCBtdXN0IG5vdCBjaGFuZ2UgdGhlIG1haW4gMkQgbG9naWMuXG4gICAgICBpZiAoIXRoaXMucHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5lbmFibGVkKSB7XG4gICAgICAgIHNldEludGVybmFsVmlld1N0YXRlKHZpZXdTdGF0ZSwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICAgIHRoaXMuX3dhc0ludGVyYWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1VzZXJJbnRlcmFjdGlvbiA9XG4gICAgICAgIGludGVyYWN0aW9uU3RhdGUgJiZcbiAgICAgICAgKGludGVyYWN0aW9uU3RhdGUuaXNab29taW5nIHx8XG4gICAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZS5pc1Bhbm5pbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmlzUm90YXRpbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmlzRHJhZ2dpbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmluVHJhbnNpdGlvbik7XG4gICAgICAvLyBUaGUgZW1pdCB0aGF0IGVuZHMgYSBnZXN0dXJlIChwYW5lbmQvcm90YXRlRW5kLCBvciBhIGZsaW5nIHRyYW5zaXRpb25cbiAgICAgIC8vIGVuZGluZykgYXJyaXZlcyB3aXRoIGFsbCBpbnRlcmFjdGlvbiBmbGFncyBmYWxzZS4gSWYgd2UgZGVmZXIgaXQsIHRoZVxuICAgICAgLy8gY29udHJvbGxlZCBgdmlld1N0YXRlYCBmZWQgYmFjayB0byBkZWNrIGxhZ3MgYSBmcmFtZSBiZWhpbmQgdGhlXG4gICAgICAvLyBjb250cm9sbGVyJ3MgY29tbWl0dGVkIHN0YXRlIGFuZCBkZWNrIHJlLXNlZWRzIGZyb20gdGhlIHN0YWxlIHZhbHVlLFxuICAgICAgLy8gbWFraW5nIHRoZSBnbG9iZSB2aXNpYmx5IFwianVtcCBiYWNrXCIgdG8gd2hlcmUgdGhlIGRyYWcgd2FzIHJlbGVhc2VkIC1cbiAgICAgIC8vIG1vc3Qgbm90aWNlYWJsZSBvbiBhIHRocm93L2ZsaW5nIHJlbGVhc2UuIFRyZWF0IHRoZSBmaXJzdCBhbGwtZmFsc2UgZW1pdFxuICAgICAgLy8gcmlnaHQgYWZ0ZXIgYW4gYWN0aXZlIGdlc3R1cmUgYXMgcGFydCBvZiB0aGF0IGdlc3R1cmUgYW5kIGFwcGx5IGl0XG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRvby5cbiAgICAgIGNvbnN0IGlzSW50ZXJhY3Rpb25TZXR0bGUgPSAhaXNVc2VySW50ZXJhY3Rpb24gJiYgdGhpcy5fd2FzSW50ZXJhY3Rpbmc7XG4gICAgICB0aGlzLl93YXNJbnRlcmFjdGluZyA9IEJvb2xlYW4oaXNVc2VySW50ZXJhY3Rpb24pO1xuICAgICAgaWYgKGlzVXNlckludGVyYWN0aW9uIHx8IGlzSW50ZXJhY3Rpb25TZXR0bGUpIHtcbiAgICAgICAgLy8gRm9yIGludGVyYWN0aXZlIGdlc3R1cmVzIChwYW4vem9vbS9yb3RhdGUpIGFuZCB0aGVpciBlbmQtb2YtZ2VzdHVyZVxuICAgICAgICAvLyBzZXR0bGUsIHVwZGF0ZSBzeW5jaHJvbm91c2x5IHNvIHRoZSBjb250cm9sbGVkIGB2aWV3U3RhdGVgIHN0YXlzIGluXG4gICAgICAgIC8vIGxvY2tzdGVwIHdpdGggdGhlIGNvbnRyb2xsZXIgYW5kIHRoZXJlJ3Mgbm8gc3RhbGUgcmUtc2VlZC5cbiAgICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlY2suZ2wgY2FuIGZpcmUgb25WaWV3U3RhdGVDaGFuZ2Ugc3luY2hyb25vdXNseSBkdXJpbmcgaXRzIG93biByZW5kZXJcbiAgICAgICAgLy8gKGUuZy4gd2hlbiBzd2l0Y2hpbmcgdmlldyB0eXBlcyBsaWtlIE1hcFZpZXcgLT4gR2xvYmVWaWV3KS4gVXBkYXRpbmcgUmVhY3RcbiAgICAgICAgLy8gc3RhdGUgZHVyaW5nIHJlbmRlciB0aHJvd3MgYSB3YXJuaW5nLCBzbyBkZWZlciBub24taW50ZXJhY3RpdmUgdXBkYXRlcy5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkKCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXJEZWJvdW5jZWQgPSBkZWJvdW5jZSgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJIb3ZlcihkYXRhLCBpbmRleCk7XG4gICAgfSwgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUpO1xuXG4gICAgX29uTW91c2VNb3ZlRGVib3VuY2VkID0gZGVib3VuY2UoKGV2ZW50LCB2aWV3cG9ydCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25Nb3VzZU1vdmUobm9ybWFsaXplRXZlbnQoZXZlbnQsIHZpZXdwb3J0KSk7XG4gICAgfSwgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUpO1xuXG4gICAgX29uTGF5ZXJMb2FkaW5nU3RhdGVDaGFuZ2UgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAvLyB0cmlnZ2VyIGxvYWRpbmcgaW5kaWNhdG9yIHVwZGF0ZSB3aXRob3V0IGFueSBjaGFuZ2UgdG8gdXBkYXRlIFVJXG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRMb2FkaW5nSW5kaWNhdG9yKHtjaGFuZ2U6IDB9KTtcbiAgICB9LCBERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSk7XG5cbiAgICBfaGFuZGxlVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5ID0gKGxheWVyOiBMYXllcikgPT4ge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiAhbGF5ZXIuY29uZmlnLmlzVmlzaWJsZX0pO1xuICAgIH07XG5cbiAgICBfdG9nZ2xlTWFwQ29udHJvbCA9IHBhbmVsSWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4LCB1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICB1aVN0YXRlQWN0aW9ucy50b2dnbGVNYXBDb250cm9sKHBhbmVsSWQsIE51bWJlcihpbmRleCkpO1xuICAgIH07XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcCgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gbWFwYm94QXBpVXJsLFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgaXNFeHBvcnQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHByaW1hcnksXG4gICAgICAgIGJvdHRvbU1hcENvbnRhaW5lclByb3BzLFxuICAgICAgICB0b3BNYXBDb250YWluZXJQcm9wcyxcbiAgICAgICAgdGhlbWUsXG4gICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnMgPSBbXSxcbiAgICAgICAgYXR0cmlidXRpb25Mb2dvcyA9IFtdLFxuICAgICAgICBjb250YWluZXJJZCA9IDAsXG4gICAgICAgIGlzTG9hZGluZ0luZGljYXRvclZpc2libGUsXG4gICAgICAgIGFjdGl2ZVNpZGVQYW5lbCxcbiAgICAgICAgc2lkZVBhbmVsV2lkdGhcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCB7bGF5ZXJzLCBkYXRhc2V0cywgZWRpdG9yLCBpbnRlcmFjdGlvbkNvbmZpZywgbGF5ZXJPcmRlcn0gPSB2aXNTdGF0ZTtcblxuICAgICAgY29uc3QgbGF5ZXJzVG9SZW5kZXIgPSB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBsYXllcnNGb3JEZWNrID0gdGhpcy5sYXllcnNGb3JEZWNrU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIC8vIEN1cnJlbnQgc3R5bGUgY2FuIGJlIGEgY3VzdG9tIHN0eWxlLCBmcm9tIHdoaWNoIHdlIHB1bGwgdGhlIG1hcGJveCBBUEkgYWNjY2VzcyB0b2tlblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgLy8gU2VsZWN0IHRoZSBjb3JyZWN0IE1hcCBhZGFwdGVyIGJhc2VkIG9uIHRoZSBhY3RpdmUgYmFzZSBtYXAgbGlicmFyeS5cbiAgICAgIC8vIFVzaW5nIHRoZSBuYXRpdmUgYWRhcHRlciBmb3IgZWFjaCBsaWJyYXJ5IGF2b2lkcyBUcmFuc2Zvcm0gQVBJXG4gICAgICAvLyBpbmNvbXBhdGliaWxpdGllcyAoZS5nLiBtYXBib3gtbGVnYWN5J3MgY2xvbmVUcmFuc2Zvcm0gd2l0aCBNYXBMaWJyZSB2NSkuXG4gICAgICBjb25zdCBSZXNvbHZlZE1hcENvbXBvbmVudCA9XG4gICAgICAgIHRoaXMucHJvcHMuTWFwQ29tcG9uZW50ID8/XG4gICAgICAgIChiYXNlTWFwTGlicmFyeU5hbWUgPT09IE1BUF9MSUJfT1BUSU9OUy5NQVBCT1ggPyBNYXBib3hMZWdhY3lNYXAgOiBNYXBsaWJyZU1hcCk7XG5cbiAgICAgIGNvbnN0IHVzZU1hcGJveEFkYXB0ZXIgPSBSZXNvbHZlZE1hcENvbXBvbmVudCA9PT0gTWFwYm94TGVnYWN5TWFwO1xuXG4gICAgICBjb25zdCBpbnRlcm5hbFZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUoaW5kZXgpO1xuICAgICAgY29uc3QgY29uZmlnTWF4UGl0Y2ggPSBtYXBTdGF0ZS5tYXhQaXRjaCA/PyBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLm1heFBpdGNoO1xuICAgICAgY29uc3QgZWZmZWN0aXZlTWF4UGl0Y2ggPSB1c2VNYXBib3hBZGFwdGVyXG4gICAgICAgID8gTWF0aC5taW4oY29uZmlnTWF4UGl0Y2gsIE1BUEJPWF9NQVhfUElUQ0gpXG4gICAgICAgIDogY29uZmlnTWF4UGl0Y2g7XG4gICAgICBjb25zdCBtYXBQcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgICAgLi4uaW50ZXJuYWxWaWV3U3RhdGUsXG4gICAgICAgIG1heFBpdGNoOiBlZmZlY3RpdmVNYXhQaXRjaCxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByb3BzLmlzRXhwb3J0ID8/IGZhbHNlLFxuICAgICAgICBtYXBib3hBY2Nlc3NUb2tlbjogY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gYmFzZUFwaVVybDogbWFwYm94QXBpVXJsLFxuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0OlxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNmb3JtUmVxdWVzdCB8fFxuICAgICAgICAgIHRyYW5zZm9ybVJlcXVlc3QoY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbilcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLlJUTFRleHRQbHVnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtYXBQcm9wcy5SVExUZXh0UGx1Z2luID0gdGhpcy5wcm9wcy5SVExUZXh0UGx1Z2luO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlTWFwYm94QWRhcHRlcikge1xuICAgICAgICBjb25zdCBtYXBib3hDb25maWcgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnW01BUF9MSUJfT1BUSU9OUy5NQVBCT1hdO1xuICAgICAgICBtYXBQcm9wcy5tYXBMaWIgPSBtYXBib3hDb25maWcuZ2V0TWFwTGliKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0dlb2NvZGVyTGF5ZXIgPSBCb29sZWFuKGxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gR0VPQ09ERVJfTEFZRVJfSUQpKTtcbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBCb29sZWFuKG1hcFN0YXRlLmlzU3BsaXQpO1xuXG4gICAgICBjb25zdCBkZWNrID0gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkobGF5ZXJzRm9yRGVjaywge1xuICAgICAgICBwcmltYXJ5TWFwOiB0cnVlLFxuICAgICAgICBpc0ludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogKFxuICAgICAgICAgIDxSZXNvbHZlZE1hcENvbXBvbmVudFxuICAgICAgICAgICAga2V5PXtgYm90dG9tLSR7YmFzZU1hcExpYnJhcnlOYW1lfWB9XG4gICAgICAgICAgICB7Li4ubWFwUHJvcHN9XG4gICAgICAgICAgICBtYXBTdHlsZT17XG4gICAgICAgICAgICAgIG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkXG4gICAgICAgICAgICAgICAgPyBFTVBUWV9NQVBCT1hfU1RZTEVcbiAgICAgICAgICAgICAgICA6IG1hcFN0eWxlLmJvdHRvbU1hcFN0eWxlID8/IEVNUFRZX01BUEJPWF9TVFlMRVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgey4uLmJvdHRvbU1hcENvbnRhaW5lclByb3BzfVxuICAgICAgICAgICAgcmVmPXt0aGlzLl9zZXRNYXBSZWZ9XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWRlY2spIHtcbiAgICAgICAgLy8gZGVja092ZXJsYXkgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIEluIHNwbGl0IChkdWFsKSB2aWV3IG1vZGUsIG9ubHkgcmVuZGVyIHRoZSBtYXAgY29udHJvbCBidXR0b25zIG9uIHRoZVxuICAgICAgLy8gcmlnaHQtc2lkZSBtYXAgKHByaW1hcnkgPT09IHRydWUsIGkuZS4gaW5kZXggPT09IDEpLiBPdGhlcndpc2UgdGhlIHNhbWVcbiAgICAgIC8vIGJ1dHRvbnMgYXJlIGR1cGxpY2F0ZWQgb24gYm90aCBtYXBzIGFuZCBhbnkgb3BlbmVkIG1lbnUgYXBwZWFycyBtaXJyb3JlZC5cbiAgICAgIGNvbnN0IHNob3dNYXBDb250cm9sID0gIWlzU3BsaXQgfHwgQm9vbGVhbihwcmltYXJ5KTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3Nob3dNYXBDb250cm9sICYmIChcbiAgICAgICAgICAgIDxNYXBDb250cm9sXG4gICAgICAgICAgICAgIG1hcFN0YXRlPXttYXBTdGF0ZX1cbiAgICAgICAgICAgICAgbWFwU3RhdGVBY3Rpb25zPXttYXBTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcz17TE9DQUxFX0NPREVTX0FSUkFZfVxuICAgICAgICAgICAgICBkcmFnUm90YXRlPXttYXBTdGF0ZS5kcmFnUm90YXRlfVxuICAgICAgICAgICAgICBpc1NwbGl0PXtpc1NwbGl0fVxuICAgICAgICAgICAgICBwcmltYXJ5PXtCb29sZWFuKHByaW1hcnkpfVxuICAgICAgICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgICBsYXllck9yZGVyPXtsYXllck9yZGVyfVxuICAgICAgICAgICAgICBsYXllcnNUb1JlbmRlcj17bGF5ZXJzVG9SZW5kZXJ9XG4gICAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgICBtYXBDb250cm9scz17bWFwQ29udHJvbHN9XG4gICAgICAgICAgICAgIHJlYWRPbmx5PXt0aGlzLnByb3BzLnJlYWRPbmx5fVxuICAgICAgICAgICAgICBzY2FsZT17bWFwU3RhdGUuc2NhbGUgfHwgMX1cbiAgICAgICAgICAgICAgbG9nb0NvbXBvbmVudD17dGhpcy5wcm9wcy5sb2dvQ29tcG9uZW50fVxuICAgICAgICAgICAgICB0b3A9e1xuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWRcbiAgICAgICAgICAgICAgICAgID8gdGhlbWUubWFwQ29udHJvbFRvcFxuICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgICBvblRvZ2dsZVBlcnNwZWN0aXZlPXttYXBTdGF0ZUFjdGlvbnMudG9nZ2xlUGVyc3BlY3RpdmV9XG4gICAgICAgICAgICAgIG9uU2V0TWFwVmlld01vZGU9e21hcFN0YXRlQWN0aW9ucy5zZXRNYXBWaWV3TW9kZX1cbiAgICAgICAgICAgICAgbWFwVmlld01vZGU9e21hcFN0YXRlLm1hcFZpZXdNb2RlfVxuICAgICAgICAgICAgICBvblRvZ2dsZVNwbGl0TWFwPXttYXBTdGF0ZUFjdGlvbnMudG9nZ2xlU3BsaXRNYXB9XG4gICAgICAgICAgICAgIG9uTWFwVG9nZ2xlTGF5ZXI9e3RoaXMuX2hhbmRsZU1hcFRvZ2dsZUxheWVyfVxuICAgICAgICAgICAgICBvblRvZ2dsZU1hcENvbnRyb2w9e3RoaXMuX3RvZ2dsZU1hcENvbnRyb2x9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD17bWFwU3RhdGVBY3Rpb25zLnRvZ2dsZVNwbGl0TWFwVmlld3BvcnR9XG4gICAgICAgICAgICAgIG9uU2V0RWRpdG9yTW9kZT17dmlzU3RhdGVBY3Rpb25zLnNldEVkaXRvck1vZGV9XG4gICAgICAgICAgICAgIG9uU2V0TG9jYWxlPXt1aVN0YXRlQWN0aW9ucy5zZXRMb2NhbGV9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eT17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUVkaXRvclZpc2liaWxpdHl9XG4gICAgICAgICAgICAgIG9uTGF5ZXJWaXNDb25maWdDaGFuZ2U9e3Zpc1N0YXRlQWN0aW9ucy5sYXllclZpc0NvbmZpZ0NoYW5nZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVMYXllclZpc2liaWxpdHk9e3RoaXMuX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgbWFwSGVpZ2h0PXttYXBTdGF0ZS5oZWlnaHR9XG4gICAgICAgICAgICAgIHNldE1hcENvbnRyb2xTZXR0aW5ncz17dWlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e2FjdGl2ZVNpZGVQYW5lbH1cbiAgICAgICAgICAgICAgc3BsaXRNYXBzPXt0aGlzLnByb3BzLnZpc1N0YXRlLnNwbGl0TWFwc31cbiAgICAgICAgICAgICAgb25Ub2dnbGVMYXllckZvck1hcD17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpc1NwbGl0U2VsZWN0b3IodGhpcy5wcm9wcykgJiYgPERyb3BwYWJsZSBjb250YWluZXJJZD17Y29udGFpbmVySWR9IC8+fVxuXG4gICAgICAgICAge2RlY2t9XG4gICAgICAgICAge3RoaXMuX3JlbmRlck1hcGJveE92ZXJsYXlzKCl9XG4gICAgICAgICAgPEVkaXRvclxuICAgICAgICAgICAgaW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgIGZpbHRlcnM9e3RoaXMucG9seWdvbkZpbHRlcnNTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgb25EZWxldGVGZWF0dXJlPXt2aXNTdGF0ZUFjdGlvbnMuZGVsZXRlRmVhdHVyZX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXt2aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgb25Ub2dnbGVQb2x5Z29uRmlsdGVyPXt2aXNTdGF0ZUFjdGlvbnMuc2V0UG9seWdvbkZpbHRlckxheWVyfVxuICAgICAgICAgICAgb25TZXRFZGl0b3JNb2RlPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RWRpdG9yTW9kZX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdhbGwnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgZGlzcGxheTogZWRpdG9yLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEFubm90YXRpb25PdmVybGF5XG4gICAgICAgICAgICBhbm5vdGF0aW9ucz17dmlzU3RhdGUuYW5ub3RhdGlvbnN9XG4gICAgICAgICAgICBzZWxlY3RlZEFubm90YXRpb25JZD17dmlzU3RhdGUuc2VsZWN0ZWRBbm5vdGF0aW9uSWR9XG4gICAgICAgICAgICBpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dD17dmlzU3RhdGUuaXNFZGl0aW5nQW5ub3RhdGlvblRleHR9XG4gICAgICAgICAgICBpc0Fubm90YXRpb25Nb2RlPXtCb29sZWFuKG1hcENvbnRyb2xzPy5hbm5vdGF0aW9uPy5hY3RpdmUpfVxuICAgICAgICAgICAgbWFwSW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICB2aWV3cG9ydD17dGhpcy5fZ2V0QW5ub3RhdGlvblZpZXdwb3J0KG1hcFN0YXRlLCBpbnRlcm5hbFZpZXdTdGF0ZSl9XG4gICAgICAgICAgICBpc0dsb2JlRW5hYmxlZD17Qm9vbGVhbihtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZCl9XG4gICAgICAgICAgICB1cGRhdGVBbm5vdGF0aW9uPXt2aXNTdGF0ZUFjdGlvbnMudXBkYXRlQW5ub3RhdGlvbn1cbiAgICAgICAgICAgIHNldFNlbGVjdGVkQW5ub3RhdGlvbj17dmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkQW5ub3RhdGlvbn1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgIHttYXBTdHlsZS50b3BNYXBTdHlsZSAmJiAhbWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQgPyAoXG4gICAgICAgICAgICA8UmVzb2x2ZWRNYXBDb21wb25lbnRcbiAgICAgICAgICAgICAga2V5PXtgdG9wLSR7YmFzZU1hcExpYnJhcnlOYW1lfWB9XG4gICAgICAgICAgICAgIHZpZXdTdGF0ZT17aW50ZXJuYWxWaWV3U3RhdGV9XG4gICAgICAgICAgICAgIG1heFBpdGNoPXtlZmZlY3RpdmVNYXhQaXRjaH1cbiAgICAgICAgICAgICAgbWFwU3R5bGU9e21hcFN0eWxlLnRvcE1hcFN0eWxlfVxuICAgICAgICAgICAgICBzdHlsZT17TUFQX1NUWUxFLnRvcH1cbiAgICAgICAgICAgICAgbWFwYm94QWNjZXNzVG9rZW49e21hcFByb3BzLm1hcGJveEFjY2Vzc1Rva2VufVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0PXttYXBQcm9wcy50cmFuc2Zvcm1SZXF1ZXN0fVxuICAgICAgICAgICAgICB7Li4uKG1hcFByb3BzLlJUTFRleHRQbHVnaW4gIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1JUTFRleHRQbHVnaW46IG1hcFByb3BzLlJUTFRleHRQbHVnaW59XG4gICAgICAgICAgICAgICAgOiB7fSl9XG4gICAgICAgICAgICAgIHsuLi4odXNlTWFwYm94QWRhcHRlclxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBtYXBMaWI6XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZ1tcbiAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9MSUJfT1BUSU9OUy5NQVBCT1hcbiAgICAgICAgICAgICAgICAgICAgICBdLmdldE1hcExpYigpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSl9XG4gICAgICAgICAgICAgIHsuLi50b3BNYXBDb250YWluZXJQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICB7aGFzR2VvY29kZXJMYXllclxuICAgICAgICAgICAgPyB0aGlzLl9yZW5kZXJEZWNrT3ZlcmxheShcbiAgICAgICAgICAgICAgICB7W0dFT0NPREVSX0xBWUVSX0lEXTogaGFzR2VvY29kZXJMYXllcn0sXG4gICAgICAgICAgICAgICAge3ByaW1hcnlNYXA6IGZhbHNlLCBpc0ludGVyYWN0aXZlOiBmYWxzZX1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgIHt0aGlzLl9yZW5kZXJNYXBQb3BvdmVyKCl9XG4gICAgICAgICAgeyFpc0V4cG9ydCAmJiBwcmltYXJ5ICE9PSBpc1NwbGl0ID8gKFxuICAgICAgICAgICAgPExvYWRpbmdJbmRpY2F0b3JcbiAgICAgICAgICAgICAgaXNWaXNpYmxlPXtCb29sZWFuKGlzTG9hZGluZ0luZGljYXRvclZpc2libGUgfHwgdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcpfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e0Jvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKX1cbiAgICAgICAgICAgICAgc2lkZVBhbmVsV2lkdGg9e3NpZGVQYW5lbFdpZHRofVxuICAgICAgICAgICAgICBoYXNBdHRyaWJ1dGlvbkxvZ29zPXthdHRyaWJ1dGlvbkxvZ29zLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgIGhhc01hcFNjYWxlPXtnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmVuYWJsZU1hcFNjYWxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wcmltYXJ5ID8gKFxuICAgICAgICAgICAgPEF0dHJpYnV0aW9uXG4gICAgICAgICAgICAgIHNob3dCYXNlTWFwTGliTG9nbz17dGhpcy5zdGF0ZS5zaG93QmFzZU1hcExpYkxvZ299XG4gICAgICAgICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnM9e3RoaXMuc3RhdGUuYmFzZW1hcEF0dHJpYnV0aW9uc31cbiAgICAgICAgICAgICAgZGF0YXNldEF0dHJpYnV0aW9ucz17ZGF0YXNldEF0dHJpYnV0aW9uc31cbiAgICAgICAgICAgICAgYmFzZU1hcExpYnJhcnlDb25maWc9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnfVxuICAgICAgICAgICAgICBnbG9iZUF0dHJpYnV0aW9ucz17Z2V0R2xvYmVCYXNlbWFwQXR0cmlidXRpb25zKHtcbiAgICAgICAgICAgICAgICBnbG9iZTogbWFwU3RhdGUuZ2xvYmUsXG4gICAgICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgICAgICAgICAgbWFwU3R5bGVUeXBlOiBtYXBTdHlsZT8uc3R5bGVUeXBlLFxuICAgICAgICAgICAgICAgIGJhc2VtYXBQcm92aWRlcjogcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyKFxuICAgICAgICAgICAgICAgICAgYmFzZU1hcExpYnJhcnlOYW1lLFxuICAgICAgICAgICAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5wcm9wcy5wcmltYXJ5ID8gKFxuICAgICAgICAgICAgPEF0dHJpYnV0aW9uTG9nb3NcbiAgICAgICAgICAgICAgbG9nb3M9e2F0dHJpYnV0aW9uTG9nb3N9XG4gICAgICAgICAgICAgIGFjdGl2ZVNpZGVQYW5lbD17Qm9vbGVhbihhY3RpdmVTaWRlUGFuZWwpfVxuICAgICAgICAgICAgICBzaWRlUGFuZWxXaWR0aD17c2lkZVBhbmVsV2lkdGh9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIHshaXNFeHBvcnQgJiYgZ2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVNYXBTY2FsZSA/IChcbiAgICAgICAgICAgIDxTdHlsZWRNYXBTY2FsZUNvbnRhaW5lclxuICAgICAgICAgICAgICAkbGVmdD17XG4gICAgICAgICAgICAgICAgcHJpbWFyeSAmJiBhY3RpdmVTaWRlUGFuZWxcbiAgICAgICAgICAgICAgICAgID8gKHNpZGVQYW5lbFdpZHRoIHx8IDApICsgKHRoZW1lPy5zaWRlUGFuZWw/Lm1hcmdpbj8ubGVmdCA/PyA5KVxuICAgICAgICAgICAgICAgICAgOiB0aGVtZT8uc2lkZVBhbmVsPy5tYXJnaW4/LmxlZnQgPz8gOVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRib3R0b21PZmZzZXQ9e3ByaW1hcnkgJiYgYXR0cmlidXRpb25Mb2dvcy5sZW5ndGggPiAwID8gMjQgOiAwfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TWFwU2NhbGUgbWFwU3RhdGU9e21hcFN0YXRlfSBtYXBJbmRleD17aW5kZXggPz8gMH0gLz5cbiAgICAgICAgICAgIDwvU3R5bGVkTWFwU2NhbGVDb250YWluZXI+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICBjb25zdCB7dmlzU3RhdGUsIG1hcFN0eWxlfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBtYXBDb250ZW50ID0gdGhpcy5fcmVuZGVyTWFwKCk7XG4gICAgICBpZiAoIW1hcENvbnRlbnQpIHtcbiAgICAgICAgLy8gbWFwQ29udGVudCBjYW4gYmUgbnVsbCBpZiBvbkRlY2tSZW5kZXIgcmV0dXJucyBudWxsXG4gICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHJlbmRlciB0aGUgbWFwXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50U3R5bGUgPSBtYXBTdHlsZS5tYXBTdHlsZXM/LlttYXBTdHlsZS5zdHlsZVR5cGVdO1xuICAgICAgY29uc3QgYmFzZU1hcExpYnJhcnlOYW1lID0gZ2V0QmFzZU1hcExpYnJhcnkoY3VycmVudFN0eWxlKTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5Q29uZmlnID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5iYXNlTWFwTGlicmFyeUNvbmZpZ1tiYXNlTWFwTGlicmFyeU5hbWVdO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U3R5bGVkTWFwXG4gICAgICAgICAgcmVmPXt0aGlzLl9yZWZ9XG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3R5bGVTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICBvbkNvbnRleHRNZW51PXtldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpfVxuICAgICAgICAgICRtaXhCbGVuZE1vZGU9e3Zpc1N0YXRlLm92ZXJsYXlCbGVuZGluZ31cbiAgICAgICAgICAkbWFwTGliQ3NzQ2xhc3M9e2Jhc2VNYXBMaWJyYXJ5Q29uZmlnLm1hcExpYkNzc0NsYXNzfVxuICAgICAgICA+XG4gICAgICAgICAge21hcENvbnRlbnR9XG4gICAgICAgIDwvU3R5bGVkTWFwPlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2l0aFRoZW1lKE1hcENvbnRhaW5lcik7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBRix1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsYUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsY0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUks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
|
|
1333
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9tYXBib3hMZWdhY3kiLCJfcmVhY3RNYXBsaWJyZSIsIl9jb3JlIiwiX3JlYWN0MiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVzZWxlY3QiLCJfY29yZTIiLCJfZGVib3VuY2UiLCJfbWFwUG9wb3ZlciIsIl9tYXBDb250cm9sIiwiX21hcFNjYWxlIiwiX3N0eWxlZENvbXBvbmVudHMyIiwiX2F0dHJpYnV0aW9uIiwiX2VkaXRvciIsIl9maWx0ZXJGZWF0dXJlQmFkZ2VzIiwiX2Fubm90YXRpb25zIiwiX2xheWVycyIsIl91dGlscyIsIl9jb25zdGFudHMiLCJfZGVja2dsTGF5ZXJzIiwiX2RuZExheWVySXRlbXMiLCJfbWFwVmlld1N0YXRlQ29udGV4dCIsIl9lcnJvckJvdW5kYXJ5IiwiX2xvY2FsaXphdGlvbiIsIl9yZWR1Y2VycyIsIl9sb2FkaW5nSW5kaWNhdG9yIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIkRFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSIsIkRFQk9VTkNFX01PVVNFX01PVkVfUFJPUEFHQVRFIiwiREVCT1VOQ0VfTE9BRElOR19TVEFURV9QUk9QQUdBVEUiLCJNQVBfU1RZTEUiLCJjb250YWluZXIiLCJkaXNwbGF5IiwicG9zaXRpb24iLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsInBvaW50ZXJFdmVudHMiLCJMT0NBTEVfQ09ERVNfQVJSQVkiLCJMT0NBTEVfQ09ERVMiLCJTdHlsZWRNYXAiLCJzdHlsZWQiLCJTdHlsZWRNYXBDb250YWluZXIiLCJfcmVmIiwiX3JlZiQkbWl4QmxlbmRNb2RlIiwiJG1peEJsZW5kTW9kZSIsIiRtYXBMaWJDc3NDbGFzcyIsImNvbmNhdCIsIk1BUEJPWEdMX1NUWUxFX1VQREFURSIsIk1BUEJPWEdMX1JFTkRFUiIsIk9TTV9BVFRSSUJVVElPTl9IVE1MIiwiU3R5bGVkRHJvcHBhYmxlIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJwcm9wcyIsIiRpc092ZXIiLCJ0aGVtZSIsImRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IiLCJTdHlsZWRNYXBTY2FsZUNvbnRhaW5lciIsInNpZGVQYW5lbCIsIm1hcmdpbiIsImxlZnQiLCIkYm90dG9tT2Zmc2V0IiwiJGxlZnQiLCJpc1NwbGl0U2VsZWN0b3IiLCJleHBvcnRzIiwidmlzU3RhdGUiLCJzcGxpdE1hcHMiLCJEcm9wcGFibGUiLCJfcmVmMiIsImNvbnRhaW5lcklkIiwiX3VzZURyb3BwYWJsZSIsInVzZURyb3BwYWJsZSIsImlkIiwiZGF0YSIsInR5cGUiLCJEUk9QUEFCTEVfTUFQX0NPTlRBSU5FUl9UWVBFIiwiaW5kZXgiLCJkaXNhYmxlZCIsImlzT3ZlciIsInNldE5vZGVSZWYiLCJjcmVhdGVFbGVtZW50IiwicmVmIiwiTWFwQ29udGFpbmVyRmFjdG9yeSIsImRlcHMiLCJNYXBQb3BvdmVyRmFjdG9yeSIsIk1hcENvbnRyb2xGYWN0b3J5IiwiRWRpdG9yRmFjdG9yeSIsIk1hcFNjYWxlRmFjdG9yeSIsIk1hcFBvcG92ZXIiLCJNYXBDb250cm9sIiwiRWRpdG9yIiwiTWFwU2NhbGUiLCJNYXBDb250YWluZXIiLCJfQ29tcG9uZW50IiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwic2hvd0Jhc2VNYXBMaWJMb2dvIiwiYmFzZW1hcEF0dHJpYnV0aW9ucyIsImNyZWF0ZVJlZiIsIm9uTWFwUmVuZGVyIiwiX21hcCIsImRpbWVuc2lvbnMiLCJfdGhpcyRwcm9wcyIsInByaW1hcnkiLCJtYXBTdGF0ZUFjdGlvbnMiLCJ1cGRhdGVNYXAiLCJsYXllcnMiLCJsYXllckRhdGEiLCJjcmVhdGVTZWxlY3RvciIsInNwbGl0TWFwU2VsZWN0b3IiLCJzcGxpdE1hcEluZGV4U2VsZWN0b3IiLCJnZXRNYXBMYXllcnNGcm9tU3BsaXRNYXBzIiwibGF5ZXJPcmRlciIsImxheWVyc1NlbGVjdG9yIiwibGF5ZXJEYXRhU2VsZWN0b3IiLCJtYXBMYXllcnNTZWxlY3RvciIsInByZXBhcmVMYXllcnNUb1JlbmRlciIsInByZXBhcmVMYXllcnNGb3JEZWNrIiwiZmlsdGVycyIsImZpbHRlcnNTZWxlY3RvciIsIkZJTFRFUl9UWVBFUyIsInBvbHlnb24iLCJlbmFibGVkIiwiZWRpdG9yIiwiZmVhdHVyZXMiLCJzZWxlY3RlZEZlYXR1cmUiLCJwb2x5Z29uRmlsdGVyc1NlbGVjdG9yIiwiZmVhdHVyZXNTZWxlY3RvciIsInBvbHlnb25GaWx0ZXJzIiwibWFwIiwidmFsdWUiLCJmZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yIiwic2VsZWN0ZWRGZWF0dXJlU2VsZWN0b3IiLCJjb2xsZWN0aW9uIiwiZmluZEluZGV4IiwiX3Byb3BzJGdlbmVyYXRlTWFwYm94IiwiZ2VuZXJhdGVNYXBib3hMYXllcnMiLCJsYXllck9yZGVyU2VsZWN0b3IiLCJsYXllcnNUb1JlbmRlclNlbGVjdG9yIiwiZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZFNlbGVjdG9yIiwibGF5ZXIiLCJsYXllcnNUb1JlbmRlciIsImdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2QiLCJtYXBTdHlsZSIsInN0eWxlVHlwZSIsImJhY2tncm91bmRDb2xvciIsIl9wcm9wcyRtYXBTdGF0ZSIsIm1hcFN0YXRlIiwiZ2xvYmUiLCJfcHJvcHMkbWFwU3RhdGUyIiwiY29uZmlnIiwiX3Byb3BzJG1hcFN0YXRlMyIsInN0YXJzIiwibWFwU3R5bGVUeXBlU2VsZWN0b3IiLCJtYXBTdHlsZUJhY2tncm91bmRDb2xvclNlbGVjdG9yIiwiZ2xvYmVNb2RlU2VsZWN0b3IiLCJnbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yIiwiZ2xvYmVTdGFyc1NlbGVjdG9yIiwiaXNHbG9iZU1vZGUiLCJnbG9iZUJhY2tncm91bmRDb2xvciIsImdsb2JlU3RhcnMiLCJOT19NQVBfSUQiLCJyZ2JUb0hleCIsImdldEdsb2JlQ2xlYXJDb2xvciIsInNsaWNlIiwiYmFja2dyb3VuZEltYWdlIiwiZ2V0U3RhcnNCYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUmVwZWF0IiwidmlzU3RhdGVBY3Rpb25zIiwib25MYXllckNsaWNrIiwiX2lkeCIsImluZm8iLCJvbkxheWVySG92ZXIiLCJpZHgiLCJBcnJheSIsImlzQXJyYXkiLCJjb2xvckRvbWFpbiIsImRvbWFpbiIsImFnZ3JlZ2F0ZWRCaW5zIiwibGF5ZXJDb25maWdDaGFuZ2UiLCJfdGhpcyRwcm9wczIiLCJib3VuZHMiLCJmaXRCb3VuZHMiLCJldmVudCIsImxheWVyRmlsdGVyZWRJdGVtc0NoYW5nZSIsIndtc0ZlYXR1cmVJbmZvIiwiZmVhdHVyZUluZm8iLCJjb29yZGluYXRlIiwibGF5ZXJJZCIsIl90aGlzJHByb3BzMyIsIl90aGlzJHByb3BzMyRpbmRleCIsIm1hcEluZGV4IiwidG9nZ2xlTGF5ZXJGb3JNYXAiLCJ1cGRhdGUiLCJwcmV2aW91c0xheWVycyIsIl91cGRhdGVNYXBib3hMYXllcnMiLCJfdXBkYXRlQXR0cmlidXRpb24iLCJvbk1hcFN0eWxlTG9hZGVkIiwiX3RoaXMkcHJvcHMkbWFwU3R5bGUiLCJfdGhpcyRwcm9wcyRtYXBTdHlsZTIiLCJfcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzIiwic3R5bGVPYmoiLCJzdHlsZSIsIl90aGlzJF9tYXAkaXNTdHlsZUxvYSIsIl90aGlzJF9tYXAiLCJfdGhpcyRfbWFwJGdldFN0eWxlIiwiX3RoaXMkX21hcDIiLCJyYXdTdHlsZSIsImlzU3R5bGVMb2FkZWQiLCJnZXRTdHlsZSIsInN0eWxlc2hlZXQiLCJfdW51c2VkIiwidXNlc01hcGJveCIsImlzU3R5bGVVc2luZ01hcGJveFRpbGVzIiwidXNlc09zbSIsImlzU3R5bGVVc2luZ09wZW5TdHJlZXRNYXBUaWxlcyIsImdldEJhc2VNYXBBdHRyaWJ1dGlvbnMiLCJjdXJyZW50U3R5bGUiLCJtYXBTdHlsZXMiLCJpc1VzZXJDdXN0b21TdHlsZSIsImN1c3RvbSIsInNldFN0YXRlIiwiX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zIiwiX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIiLCJvZmYiLCJfYmFzZW1hcElkbGVMaXN0ZW5lciIsImF0dGVtcHRzIiwiTUFYX0FUVEVNUFRTIiwidHJ5Q29sbGVjdCIsIm9uU291cmNlRGF0YSIsImlzU291cmNlTG9hZGVkIiwic291cmNlRGF0YVR5cGUiLCJvbklkbGUiLCJvbiIsIm1hcFJlZiIsImdldE1hcCIsIl9vbk1hcGJveFN0eWxlVXBkYXRlIiwiX29uTWFwUmVuZGVyIiwiZ2V0TWFwYm94UmVmIiwiZXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlIiwibGF5ZXJNZXNzYWdlIiwiZXJyb3JNZXNzYWdlRnVsbCIsImxhc3RTaG93biIsIl9kZWNrR0xFcnJvcnNFbGFwc2VkIiwiRGF0ZSIsIm5vdyIsIlRIUk9UVExFX05PVElGSUNBVElPTl9USU1FIiwiZXh0cmFMYXllck1lc3NhZ2UiLCJfdG9wTW9zdExheWVyJHByb3BzIiwidG9wTW9zdExheWVyIiwicGFyZW50IiwibGF5ZXJTZXRJc1ZhbGlkIiwidWlTdGF0ZUFjdGlvbnMiLCJhZGROb3RpZmljYXRpb24iLCJlcnJvck5vdGlmaWNhdGlvbiIsImRlYm91bmNlIiwiX3RoaXMkY29udGV4dCIsInZpZXdTdGF0ZSIsImNvbnRleHQiLCJnZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIm9uVmlld1BvcnRDaGFuZ2UiLCJvblZpZXdTdGF0ZUNoYW5nZSIsInZpZXdwb3J0IiwiX3RoaXMkcHJvcHMkbWFwU3RhdGUiLCJpbnRlcmFjdGlvblN0YXRlIiwiaXNFeHBvcnQiLCJzZXRJbnRlcm5hbFZpZXdTdGF0ZSIsIl93YXNJbnRlcmFjdGluZyIsIl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkIiwiaXNVc2VySW50ZXJhY3Rpb24iLCJpc1pvb21pbmciLCJpc1Bhbm5pbmciLCJpc1JvdGF0aW5nIiwiaXNEcmFnZ2luZyIsImluVHJhbnNpdGlvbiIsImlzSW50ZXJhY3Rpb25TZXR0bGUiLCJzZXRUaW1lb3V0Iiwib25Nb3VzZU1vdmUiLCJub3JtYWxpemVFdmVudCIsInNldExvYWRpbmdJbmRpY2F0b3IiLCJjaGFuZ2UiLCJpc1Zpc2libGUiLCJwYW5lbElkIiwiX3RoaXMkcHJvcHM0IiwidG9nZ2xlTWFwQ29udHJvbCIsIk51bWJlciIsInBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3NpbmciLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsImNvbXBvbmVudERpZE1vdW50IiwiY3VycmVudCIsIm9ic2VydmVEaW1lbnNpb25zIiwiX2hhbmRsZVJlc2l6ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5vYnNlcnZlRGltZW5zaW9ucyIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsIl9vbkRlY2tJbml0aWFsaXplZCIsImRldmljZSIsIm9uRGVja0luaXRpYWxpemVkIiwiX2RlY2siLCJfaXNPS1RvUmVuZGVyRWZmZWN0cyIsInZpZXdJbmRleCIsIl90aGlzJF9kZWNrIiwidmlld01hbmFnZXIiLCJfdmlld3BvcnRzIiwiX2dldEFubm90YXRpb25WaWV3cG9ydCIsImludGVybmFsVmlld1N0YXRlIiwiX2ludGVybmFsVmlld1N0YXRlJGxvIiwiX2ludGVybmFsVmlld1N0YXRlJGxhIiwiX2ludGVybmFsVmlld1N0YXRlJHpvIiwiX3JlZjMiLCJfaW50ZXJuYWxWaWV3U3RhdGUkcGkiLCJfcmVmNCIsIl9pbnRlcm5hbFZpZXdTdGF0ZSRiZSIsIl90aGlzJF9hbm5vdGF0aW9uVmlldyIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiem9vbSIsInBpdGNoIiwiYmVhcmluZyIsIl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZSIsIm1lcmdlZFN0YXRlIiwidnAiLCJnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZSIsInByb2plY3QiLCJsbmdMYXQiLCJ1bnByb2plY3QiLCJ4eSIsIl9yZW5kZXJNYXBQb3BvdmVyIiwiX3RoaXMkcHJvcHMkdmlzU3RhdGUkIiwiaG92ZXJJbmZvIiwiX3RoaXMkcHJvcHM1IiwiX3RoaXMkcHJvcHM1JHZpc1N0YXRlIiwiY2xpY2tlZCIsImRhdGFzZXRzIiwiaW50ZXJhY3Rpb25Db25maWciLCJhbmltYXRpb25Db25maWciLCJfdGhpcyRwcm9wczUkdmlzU3RhdGUyIiwibW91c2VQb3MiLCJtb3VzZVBvc2l0aW9uIiwicGlubmVkIiwidG9vbHRpcCIsImxheWVySG92ZXJQcm9wIiwiZ2V0TGF5ZXJIb3ZlclByb3AiLCJjb21wYXJlTW9kZSIsInBpbm5lZFBvc2l0aW9uIiwieCIsInkiLCJsYXllclBpbm5lZFByb3AiLCJfZ2V0SG92ZXJYWSIsInByaW1hcnlEYXRhIiwiY29tcGFyZVR5cGUiLCJjb21tb25Qcm9wIiwib25DbG9zZSIsIl9vbkNsb3NlTWFwUG9wb3ZlciIsImNhbnZhcyIsInVuZGVmaW5lZCIsIl9leHRlbmRzMiIsImZyb3plbiIsImlzQmFzZSIsIm9uU2V0RmVhdHVyZXMiLCJzZXRGZWF0dXJlcyIsInNldFNlbGVjdGVkRmVhdHVyZSIsImZlYXR1cmVDb2xsZWN0aW9uIiwic2NyZWVuQ29vcmQiLCJfcmVuZGVyRGVja092ZXJsYXkiLCJsYXllcnNGb3JEZWNrIiwiX3RoaXMkY29udGV4dDIiLCJfbWFwU3RhdGUkZ2xvYmUiLCJfbWFwU3R5bGUkbWFwU3R5bGVzIiwiX3RoaXMyIiwiX3RoaXMkcHJvcHMkbWFwU3RhdGUkIiwib3B0aW9ucyIsInByaW1hcnlNYXAiLCJfdGhpcyRwcm9wczYiLCJtYXBib3hBcGlBY2Nlc3NUb2tlbiIsIm1hcGJveEFwaVVybCIsImRlY2tHbFByb3BzIiwibWFwQ29udHJvbHMiLCJkZWNrUmVuZGVyQ2FsbGJhY2tzIiwiZ2VuZXJhdGVEZWNrR0xMYXllcnMiLCJpc0ludGVyYWN0aXZlIiwiY2hpbGRyZW4iLCJtYXBEcmF3IiwiX3JlZjUiLCJfcmVmNSRhY3RpdmUiLCJhY3RpdmUiLCJlZGl0b3JNZW51QWN0aXZlIiwiaXNFZGl0b3JEcmF3aW5nTW9kZSIsIkVkaXRvckxheWVyVXRpbHMiLCJpc0RyYXdpbmdBY3RpdmUiLCJtb2RlIiwiaW50ZXJuYWxNYXBTdGF0ZSIsImVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRQb2x5Z29uSW5kZXhTZWxlY3RvciIsImdlbmVyYXRlRGVja0dMTGF5ZXJzTWV0aG9kIiwiY29tcHV0ZURlY2tMYXllcnMiLCJleHRyYURlY2tQYXJhbXMiLCJnZXRUb29sdGlwIiwiaXNOYU4iLCJnZXRDdXJzb3IiLCJfcmVmNiIsImVkaXRvckN1cnNvciIsImVmZmVjdHMiLCJjb21wdXRlRGVja0VmZmVjdHMiLCJsYXllckJsZW5kaW5nUGFyYW1zIiwibGF5ZXJCbGVuZGluZyIsImdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzIiwiZGVja0xheWVyc01hcFN0YXRlIiwibGF5ZXJQYXJhbWV0ZXJzIiwiZGVja0dsTGF5ZXJzIiwiZWRpdG9ySW5mbyIsIm9uQXBwbHlQb2x5Z29uRmlsdGVyQWxsIiwic2V0UG9seWdvbkZpbHRlckFsbExheWVycyIsInNlbGVjdGVkRmVhdHVyZUluZGV4ZXMiLCJzZWxlY3RlZEZlYXR1cmVJbmRleEFycmF5U2VsZWN0b3IiLCJfb25MYXllckhvdmVyIiwib25TZXRMYXllckRvbWFpbiIsIl9vbkxheWVyU2V0RG9tYWluIiwib25GaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwiX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlIiwib25XTVNGZWF0dXJlSW5mbyIsIl9vbldNU0ZlYXR1cmVJbmZvIiwib25SZWRyYXdOZWVkZWQiLCJfb25SZWRyYXdOZWVkZWQiLCJvbkZpdEJvdW5kcyIsIl9vbkZpdEJvdW5kcyIsImdsb2JlQmFzZW1hcFByb3ZpZGVyIiwicmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyIiwiZ2V0QmFzZU1hcExpYnJhcnkiLCJnbG9iZUJhc2VMYXllcnMiLCJnZXRHbG9iZUJhc2VMYXllcnMiLCJtYXBTdHlsZVR5cGUiLCJiYXNlbWFwUHJvdmlkZXIiLCJnbG9iZVRvcExheWVycyIsImdldEdsb2JlVG9wTGF5ZXJzIiwiZmluYWxEZWNrR2xMYXllcnMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwidmlld3MiLCJLZXBsZXJHbG9iZVZpZXciLCJyZXNvbHV0aW9uIiwiY2xlYXIiLCJjbGVhckNvbG9yIiwiTWFwVmlldyIsImZhclpNdWx0aXBsaWVyIiwiYWxsRGVja0dsUHJvcHMiLCJwaWNraW5nUmFkaXVzIiwiREVGQVVMVF9QSUNLSU5HX1JBRElVUyIsInBhcmFtZXRlcnMiLCJjdWxsIiwib25EZWNrUmVuZGVyIiwiX29uTW91c2VNb3ZlRGVib3VuY2VkIiwib25Mb2FkIiwib25EZWNrTG9hZCIsImNvbnRyb2xsZXIiLCJkb3VibGVDbGlja1pvb20iLCJkcmFnUm90YXRlIiwibWF4UGl0Y2giLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsIm1pblpvb20iLCJHTE9CRV9NSU5fWk9PTSIsIm1heFpvb20iLCJHTE9CRV9NQVhfWk9PTSIsIm9uQmVmb3JlUmVuZGVyIiwiX29uQmVmb3JlUmVuZGVyIiwiX29uVmlld3BvcnRDaGFuZ2UiLCJvbkhvdmVyIiwicmVzIiwiX29uTGF5ZXJIb3ZlckRlYm91bmNlZCIsIm9uQ2xpY2siLCJzcmNFdmVudCIsImFsaWduaW5nTGF5ZXIiLCJmaW5kIiwibCIsImFsaWduV2FpdGluZ0Zvck1hcCIsIm9uQWxpZ25NYXBDbGljayIsIm9uRXJyb3IiLCJfb25EZWNrRXJyb3IiLCJjb21wIiwiZGVjayIsIm9uRGV2aWNlSW5pdGlhbGl6ZWQiLCJvbkFmdGVyUmVuZGVyIiwib25EZWNrQWZ0ZXJSZW5kZXIiLCJhbnlBY3RpdmVMYXllckxvYWRpbmciLCJhcmVBbnlEZWNrTGF5ZXJzTG9hZGluZyIsIl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlIiwibWFwYm94TGF5ZXJzIiwibWFwYm94TGF5ZXJzU2VsZWN0b3IiLCJ1cGRhdGVNYXBib3hMYXllcnMiLCJfcmVuZGVyTWFwYm94T3ZlcmxheXMiLCJfcmVuZGVyTWFwIiwiX21hcFN0eWxlJG1hcFN0eWxlczIiLCJfdGhpcyRwcm9wcyRNYXBDb21wb24iLCJfdGhpcyRjb250ZXh0MyIsIl9tYXBTdGF0ZSRtYXhQaXRjaCIsIl90aGlzJHByb3BzJGlzRXhwb3J0IiwiX21hcFN0YXRlJGdsb2JlMiIsIl9tYXBTdHlsZSRib3R0b21NYXBTdCIsIl9tYXBTdGF0ZSRnbG9iZTMiLCJfbWFwQ29udHJvbHMkYW5ub3RhdGkiLCJfbWFwU3RhdGUkZ2xvYmU0IiwiX21hcFN0YXRlJGdsb2JlNSIsIl90aGVtZSRzaWRlUGFuZWwkbWFyZyIsIl90aGVtZSRzaWRlUGFuZWwiLCJfdGhlbWUkc2lkZVBhbmVsJG1hcmcyIiwiX3RoZW1lJHNpZGVQYW5lbDIiLCJfdGhpcyRwcm9wczciLCJsb2NhbGUiLCJ1aVRoZW1lIiwiYm90dG9tTWFwQ29udGFpbmVyUHJvcHMiLCJ0b3BNYXBDb250YWluZXJQcm9wcyIsIl90aGlzJHByb3BzNyRkYXRhc2V0QSIsImRhdGFzZXRBdHRyaWJ1dGlvbnMiLCJfdGhpcyRwcm9wczckYXR0cmlidXQiLCJhdHRyaWJ1dGlvbkxvZ29zIiwiX3RoaXMkcHJvcHM3JGNvbnRhaW5lIiwiaXNMb2FkaW5nSW5kaWNhdG9yVmlzaWJsZSIsImFjdGl2ZVNpZGVQYW5lbCIsInNpZGVQYW5lbFdpZHRoIiwibGF5ZXJzRm9yRGVja1NlbGVjdG9yIiwiYmFzZU1hcExpYnJhcnlOYW1lIiwiYmFzZU1hcExpYnJhcnlDb25maWciLCJSZXNvbHZlZE1hcENvbXBvbmVudCIsIk1hcENvbXBvbmVudCIsIk1BUF9MSUJfT1BUSU9OUyIsIk1BUEJPWCIsIk1hcGJveExlZ2FjeU1hcCIsIk1hcGxpYnJlTWFwIiwidXNlTWFwYm94QWRhcHRlciIsImNvbmZpZ01heFBpdGNoIiwiZWZmZWN0aXZlTWF4UGl0Y2giLCJNYXRoIiwibWluIiwiTUFQQk9YX01BWF9QSVRDSCIsIm1hcFByb3BzIiwicHJlc2VydmVEcmF3aW5nQnVmZmVyIiwibWFwYm94QWNjZXNzVG9rZW4iLCJhY2Nlc3NUb2tlbiIsInRyYW5zZm9ybVJlcXVlc3QiLCJSVExUZXh0UGx1Z2luIiwibWFwYm94Q29uZmlnIiwibWFwTGliIiwiZ2V0TWFwTGliIiwiaGFzR2VvY29kZXJMYXllciIsIkdFT0NPREVSX0xBWUVSX0lEIiwiaXNTcGxpdCIsIkVNUFRZX01BUEJPWF9TVFlMRSIsImJvdHRvbU1hcFN0eWxlIiwiX3NldE1hcFJlZiIsInNob3dNYXBDb250cm9sIiwiRnJhZ21lbnQiLCJhdmFpbGFibGVMb2NhbGVzIiwicmVhZE9ubHkiLCJzY2FsZSIsImxvZ29Db21wb25lbnQiLCJnZW9jb2RlciIsIm1hcENvbnRyb2xUb3AiLCJ0aGVtZU5hbWUiLCJvblRvZ2dsZVBlcnNwZWN0aXZlIiwidG9nZ2xlUGVyc3BlY3RpdmUiLCJvblNldE1hcFZpZXdNb2RlIiwic2V0TWFwVmlld01vZGUiLCJtYXBWaWV3TW9kZSIsIm9uVG9nZ2xlU3BsaXRNYXAiLCJ0b2dnbGVTcGxpdE1hcCIsIm9uTWFwVG9nZ2xlTGF5ZXIiLCJfaGFuZGxlTWFwVG9nZ2xlTGF5ZXIiLCJvblRvZ2dsZU1hcENvbnRyb2wiLCJfdG9nZ2xlTWFwQ29udHJvbCIsIm9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCIsInRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvblNldEVkaXRvck1vZGUiLCJzZXRFZGl0b3JNb2RlIiwib25TZXRMb2NhbGUiLCJzZXRMb2NhbGUiLCJvblNldFRoZW1lIiwic2V0VGhlbWUiLCJvblRvZ2dsZUVkaXRvclZpc2liaWxpdHkiLCJ0b2dnbGVFZGl0b3JWaXNpYmlsaXR5Iiwib25Db252ZXJ0RWRpdG9yRmVhdHVyZXNUb0xheWVyIiwiY29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllciIsIm9uTGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJsYXllclZpc0NvbmZpZ0NoYW5nZSIsIm9uVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5IiwiX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eSIsIm1hcEhlaWdodCIsInNldE1hcENvbnRyb2xTZXR0aW5ncyIsIm9uVG9nZ2xlTGF5ZXJGb3JNYXAiLCJvbkRlbGV0ZUZlYXR1cmUiLCJkZWxldGVGZWF0dXJlIiwib25TZXRGZWF0dXJlUHJvcGVydGllcyIsInNldEVkaXRvckZlYXR1cmVQcm9wZXJ0aWVzIiwib25TZWxlY3QiLCJvblRvZ2dsZVBvbHlnb25GaWx0ZXIiLCJzZXRQb2x5Z29uRmlsdGVyTGF5ZXIiLCJ2aXNpYmxlIiwiaXNHbG9iZUVuYWJsZWQiLCJBbm5vdGF0aW9uT3ZlcmxheSIsImFubm90YXRpb25zIiwic2VsZWN0ZWRBbm5vdGF0aW9uSWQiLCJpc0VkaXRpbmdBbm5vdGF0aW9uVGV4dCIsImlzQW5ub3RhdGlvbk1vZGUiLCJhbm5vdGF0aW9uIiwidXBkYXRlQW5ub3RhdGlvbiIsInNldFNlbGVjdGVkQW5ub3RhdGlvbiIsInRvcE1hcFN0eWxlIiwiaGFzQXR0cmlidXRpb25Mb2dvcyIsImhhc01hcFNjYWxlIiwiZW5hYmxlTWFwU2NhbGUiLCJBdHRyaWJ1dGlvbiIsInN0YXRlIiwiZ2xvYmVBdHRyaWJ1dGlvbnMiLCJnZXRHbG9iZUJhc2VtYXBBdHRyaWJ1dGlvbnMiLCJBdHRyaWJ1dGlvbkxvZ29zIiwibG9nb3MiLCJyZW5kZXIiLCJfbWFwU3R5bGUkbWFwU3R5bGVzMyIsIl90aGlzJHByb3BzOCIsIm1hcENvbnRlbnQiLCJzdHlsZVNlbGVjdG9yIiwib25Db250ZXh0TWVudSIsInByZXZlbnREZWZhdWx0Iiwib3ZlcmxheUJsZW5kaW5nIiwibWFwTGliQ3NzQ2xhc3MiLCJDb21wb25lbnQiLCJNYXBWaWV3U3RhdGVDb250ZXh0Iiwid2l0aFRoZW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC1jb250YWluZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGxpYnJhcmllc1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBjcmVhdGVSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQsIHt3aXRoVGhlbWV9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7TWFwIGFzIE1hcGJveExlZ2FjeU1hcCwgTWFwUmVmfSBmcm9tICdyZWFjdC1tYXAtZ2wvbWFwYm94LWxlZ2FjeSc7XG5pbXBvcnQge01hcCBhcyBNYXBsaWJyZU1hcH0gZnJvbSAnQHZpcy5nbC9yZWFjdC1tYXBsaWJyZSc7XG5pbXBvcnQge1BpY2tpbmdJbmZvLCBNYXBWaWV3fSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCBEZWNrR0wgZnJvbSAnQGRlY2suZ2wvcmVhY3QnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3RvciwgU2VsZWN0b3J9IGZyb20gJ3Jlc2VsZWN0JztcbmltcG9ydCB7dXNlRHJvcHBhYmxlfSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuXG5pbXBvcnQge1Zpc1N0YXRlQWN0aW9ucywgTWFwU3RhdGVBY3Rpb25zLCBVSVN0YXRlQWN0aW9uc30gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IE1hcFBvcG92ZXJGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1wb3BvdmVyJztcbmltcG9ydCBNYXBDb250cm9sRmFjdG9yeSBmcm9tICcuL21hcC9tYXAtY29udHJvbCc7XG5pbXBvcnQgTWFwU2NhbGVGYWN0b3J5IGZyb20gJy4vbWFwL21hcC1zY2FsZSc7XG5pbXBvcnQge1N0eWxlZE1hcENvbnRhaW5lcn0gZnJvbSAnLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRpb24sXG4gIEF0dHJpYnV0aW9uTG9nb3MsXG4gIHJlbmRlckJhc2VtYXBBdHRyaWJ1dGlvbixcbiAgZGVkdXBlQmFzZW1hcEF0dHJpYnV0aW9uc1xufSBmcm9tICcuL21hcC9hdHRyaWJ1dGlvbic7XG5cbmltcG9ydCBFZGl0b3JGYWN0b3J5IGZyb20gJy4vZWRpdG9yL2VkaXRvcic7XG5pbXBvcnQgRmlsdGVyRmVhdHVyZUJhZGdlcyBmcm9tICcuL2VkaXRvci9maWx0ZXItZmVhdHVyZS1iYWRnZXMnO1xuaW1wb3J0IHtBbm5vdGF0aW9uT3ZlcmxheX0gZnJvbSAnLi9hbm5vdGF0aW9ucyc7XG5cbi8vIHV0aWxzXG5pbXBvcnQge1xuICBnZW5lcmF0ZU1hcGJveExheWVycyxcbiAgdXBkYXRlTWFwYm94TGF5ZXJzLFxuICBMYXllcixcbiAgTGF5ZXJCYXNlQ29uZmlnLFxuICBWaXN1YWxDaGFubmVsRG9tYWluLFxuICBFZGl0b3JMYXllclV0aWxzLFxuICBBZ2dyZWdhdGVkQmluXG59IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcbmltcG9ydCB7XG4gIEF0dHJpYnV0aW9uV2l0aFN0eWxlLFxuICBEYXRhc2V0QXR0cmlidXRpb24sXG4gIE1hcFN0YXRlLFxuICBNYXBDb250cm9scyxcbiAgVmlld3BvcnQsXG4gIFNwbGl0TWFwLFxuICBTcGxpdE1hcExheWVyc1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGVycm9yTm90aWZpY2F0aW9uLFxuICBpc1N0eWxlVXNpbmdNYXBib3hUaWxlcyxcbiAgaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzLFxuICBnZXRCYXNlTWFwQXR0cmlidXRpb25zLFxuICBnZXRCYXNlTWFwTGlicmFyeSxcbiAgdHJhbnNmb3JtUmVxdWVzdCxcbiAgb2JzZXJ2ZURpbWVuc2lvbnMsXG4gIHVub2JzZXJ2ZURpbWVuc2lvbnMsXG4gIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHMsXG4gIG9uVmlld1BvcnRDaGFuZ2UsXG4gIGdldFZpZXdwb3J0RnJvbU1hcFN0YXRlLFxuICBub3JtYWxpemVFdmVudCxcbiAgcmdiVG9IZXgsXG4gIGNvbXB1dGVEZWNrRWZmZWN0cyxcbiAgZ2V0QXBwbGljYXRpb25Db25maWcsXG4gIEdldE1hcFJlZixcbiAgZ2V0TGF5ZXJCbGVuZGluZ1BhcmFtZXRlcnMsXG4gIHBhdGNoRGVja1JlbmRlcmVyRm9yUG9zdFByb2Nlc3Npbmdcbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbi8vIGRlZmF1bHQtc2V0dGluZ3NcbmltcG9ydCB7XG4gIEZJTFRFUl9UWVBFUyxcbiAgR0VPQ09ERVJfTEFZRVJfSUQsXG4gIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FLFxuICBERUZBVUxUX1BJQ0tJTkdfUkFESVVTLFxuICBOT19NQVBfSUQsXG4gIEVNUFRZX01BUEJPWF9TVFlMRSxcbiAgTUFQQk9YX01BWF9QSVRDSCxcbiAgTUFQX0xJQl9PUFRJT05TLFxuICBHTE9CRV9NSU5fWk9PTSxcbiAgR0xPQkVfTUFYX1pPT01cbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQge1xuICBnZXRHbG9iZUJhc2VMYXllcnMsXG4gIGdldEdsb2JlVG9wTGF5ZXJzLFxuICBnZXRHbG9iZUNsZWFyQ29sb3IsXG4gIGdldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyxcbiAgcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyLFxuICBnZXRTdGFyc0JhY2tncm91bmRJbWFnZSxcbiAgS2VwbGVyR2xvYmVWaWV3XG59IGZyb20gJ0BrZXBsZXIuZ2wvZGVja2dsLWxheWVycyc7XG5cbmltcG9ydCB7RFJPUFBBQkxFX01BUF9DT05UQUlORVJfVFlQRX0gZnJvbSAnLi9jb21tb24vZG5kLWxheWVyLWl0ZW1zJztcbi8vIENvbnRleHRzXG5pbXBvcnQge01hcFZpZXdTdGF0ZUNvbnRleHR9IGZyb20gJy4vbWFwLXZpZXctc3RhdGUtY29udGV4dCc7XG5cbmltcG9ydCBFcnJvckJvdW5kYXJ5IGZyb20gJy4vY29tbW9uL2Vycm9yLWJvdW5kYXJ5JztcbmltcG9ydCB7TE9DQUxFX0NPREVTfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5pbXBvcnQge1xuICBNYXBTdHlsZSxcbiAgYXJlQW55RGVja0xheWVyc0xvYWRpbmcsXG4gIGNvbXB1dGVEZWNrTGF5ZXJzLFxuICBnZXRMYXllckhvdmVyUHJvcCxcbiAgTGF5ZXJIb3ZlclByb3AsXG4gIHByZXBhcmVMYXllcnNGb3JEZWNrLFxuICBwcmVwYXJlTGF5ZXJzVG9SZW5kZXIsXG4gIExheWVyc1RvUmVuZGVyXG59IGZyb20gJ0BrZXBsZXIuZ2wvcmVkdWNlcnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IExvYWRpbmdJbmRpY2F0b3IgZnJvbSAnLi9sb2FkaW5nLWluZGljYXRvcic7XG5cbi8vIERlYm91bmNlIHRoZSBwcm9wYWdhdGlvbiBvZiB2aWV3cG9ydCBjaGFuZ2UgYW5kIG1vdXNlIG1vdmVzIHRvIHJlZHV4IHN0b3JlLlxuLy8gVGhpcyBpcyB0byBhdm9pZCB0b28gbWFueSByZW5kZXJzIG9mIG90aGVyIGNvbXBvbmVudHMgd2hlbiB0aGUgbWFwIGlzXG4vLyBiZWluZyBwYW5uZWQvem9vbWVkIChsZWFkaW5nIHRvIGxhZ2d5IGJhc2VtYXAvZGVjayBzeW5jaW5nKS5cbmNvbnN0IERFQk9VTkNFX1ZJRVdQT1JUX1BST1BBR0FURSA9IDEwO1xuY29uc3QgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUgPSAxMDtcblxuLy8gSG93IGxvbmcgc2hvdWxkIHdlIHdhaXQgYmV0d2VlbiBsYXllciBsb2FkaW5nIHN0YXRlIGNoYW5nZXMgYmVmb3JlIHRyaWdnZXJpbmcgYSBVSSB1cGRhdGVcbmNvbnN0IERFQk9VTkNFX0xPQURJTkdfU1RBVEVfUFJPUEFHQVRFID0gMTAwO1xuXG5jb25zdCBNQVBfU1RZTEU6IHtba2V5OiBzdHJpbmddOiBSZWFjdC5DU1NQcm9wZXJ0aWVzfSA9IHtcbiAgY29udGFpbmVyOiB7XG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJ1xuICB9LFxuICB0b3A6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZSdcbiAgfVxufTtcblxuY29uc3QgTE9DQUxFX0NPREVTX0FSUkFZID0gT2JqZWN0LmtleXMoTE9DQUxFX0NPREVTKTtcblxuaW50ZXJmYWNlIFN0eWxlZE1hcENvbnRhaW5lclByb3BzIHtcbiAgJG1peEJsZW5kTW9kZT86IHN0cmluZztcbiAgJG1hcExpYkNzc0NsYXNzOiBzdHJpbmc7XG59XG5cbmNvbnN0IFN0eWxlZE1hcCA9IHN0eWxlZChTdHlsZWRNYXBDb250YWluZXIpPFN0eWxlZE1hcENvbnRhaW5lclByb3BzPihcbiAgKHskbWl4QmxlbmRNb2RlID0gJ25vcm1hbCcsICRtYXBMaWJDc3NDbGFzc30pID0+IGBcbiAgI2RlZmF1bHQtZGVja2dsLW92ZXJsYXkge1xuICAgIG1peC1ibGVuZC1tb2RlOiAkeyRtaXhCbGVuZE1vZGV9O1xuICB9O1xuICAqWyR7JG1hcExpYkNzc0NsYXNzfS1jaGlsZHJlbl0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxuYFxuKTtcblxuY29uc3QgTUFQQk9YR0xfU1RZTEVfVVBEQVRFID0gJ3N0eWxlLmxvYWQnO1xuY29uc3QgTUFQQk9YR0xfUkVOREVSID0gJ3JlbmRlcic7XG5cbi8vIENhbm9uaWNhbCBPcGVuU3RyZWV0TWFwIGF0dHJpYnV0aW9uLCBpbmplY3RlZCBpbnRvIHRoZSBjb2xsZWN0ZWQgbGlzdCB3aGVuIGFcbi8vIHN0eWxlIGlzIGRldGVjdGVkIHRvIHVzZSBPU00gdGlsZXMgYnV0IHRoZSByZXNvbHZlZCBzb3VyY2VzIGhhdmVuJ3QgeWllbGRlZFxuLy8gYW4gYXR0cmlidXRpb24gc3RyaW5nIG9mIHRoZWlyIG93biAoZS5nLiByYXcgc3R5bGUgZGVjbGFyZXMgT1NNIGJ1dCB0aGVcbi8vIFRpbGVKU09OIGhhc24ndCBleHBvc2VkIGl0KS4gUmVuZGVyZWQgdGhyb3VnaCB0aGUgc2FtZSBzYWZlIGxpbmsgcGFyc2VyIGFzXG4vLyBldmVyeSBvdGhlciBjb2xsZWN0ZWQgYXR0cmlidXRpb24uXG5jb25zdCBPU01fQVRUUklCVVRJT05fSFRNTCA9XG4gICfCqSA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4nO1xuXG5pbnRlcmZhY2UgU3R5bGVkRHJvcHBhYmxlUHJvcHMge1xuICAkaXNPdmVyOiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWREcm9wcGFibGUgPSBzdHlsZWQuZGl2PFN0eWxlZERyb3BwYWJsZVByb3BzPmBcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiAocHJvcHMuJGlzT3ZlciA/IHByb3BzLnRoZW1lLmRuZE92ZXJCYWNrZ3JvdW5kQ29sb3IgOiAnbm9uZScpfTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XG5cbmNvbnN0IFN0eWxlZE1hcFNjYWxlQ29udGFpbmVyID0gc3R5bGVkLmRpdjx7JGxlZnQ6IG51bWJlcjsgJGJvdHRvbU9mZnNldDogbnVtYmVyfT5gXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNpZGVQYW5lbC5tYXJnaW4ubGVmdCArIHByb3BzLiRib3R0b21PZmZzZXR9cHg7XG4gIGxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMuJGxlZnR9cHg7XG4gIHotaW5kZXg6IDE7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuYDtcblxuZXhwb3J0IGNvbnN0IGlzU3BsaXRTZWxlY3RvciA9IHByb3BzID0+XG4gIHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcyAmJiBwcm9wcy52aXNTdGF0ZS5zcGxpdE1hcHMubGVuZ3RoID4gMTtcblxuZXhwb3J0IGNvbnN0IERyb3BwYWJsZSA9ICh7Y29udGFpbmVySWR9KSA9PiB7XG4gIGNvbnN0IHtpc092ZXIsIHNldE5vZGVSZWZ9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZDogY29udGFpbmVySWQsXG4gICAgZGF0YToge3R5cGU6IERST1BQQUJMRV9NQVBfQ09OVEFJTkVSX1RZUEUsIGluZGV4OiBjb250YWluZXJJZH0sXG4gICAgZGlzYWJsZWQ6ICFjb250YWluZXJJZFxuICB9KTtcblxuICByZXR1cm4gPFN0eWxlZERyb3BwYWJsZSByZWY9e3NldE5vZGVSZWZ9ICRpc092ZXI9e2lzT3Zlcn0gLz47XG59O1xuXG4vLyBBdHRyaWJ1dGlvbiBVSSAocGFyc2VyICsgY29tcG9uZW50cykgbGl2ZXMgaW4gLi9tYXAvYXR0cmlidXRpb24gYW5kIGlzXG4vLyByZS1leHBvcnRlZCBoZXJlIHRvIHByZXNlcnZlIHRoZSBwdWJsaWMgaW1wb3J0IHBhdGggKEBrZXBsZXIuZ2wvY29tcG9uZW50cykuXG5leHBvcnQge0F0dHJpYnV0aW9uLCBBdHRyaWJ1dGlvbkxvZ29zLCByZW5kZXJCYXNlbWFwQXR0cmlidXRpb24sIGRlZHVwZUJhc2VtYXBBdHRyaWJ1dGlvbnN9O1xuXG5NYXBDb250YWluZXJGYWN0b3J5LmRlcHMgPSBbTWFwUG9wb3ZlckZhY3RvcnksIE1hcENvbnRyb2xGYWN0b3J5LCBFZGl0b3JGYWN0b3J5LCBNYXBTY2FsZUZhY3RvcnldO1xuXG50eXBlIE1hcGJveFN0eWxlID0gc3RyaW5nIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xudHlwZSBQcm9wU2VsZWN0b3I8Uj4gPSBTZWxlY3RvcjxNYXBDb250YWluZXJQcm9wcywgUj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwQ29udGFpbmVyUHJvcHMge1xuICB2aXNTdGF0ZTogVmlzU3RhdGU7XG4gIG1hcFN0YXRlOiBNYXBTdGF0ZTtcbiAgbWFwQ29udHJvbHM6IE1hcENvbnRyb2xzO1xuICBtYXBTdHlsZToge2JvdHRvbU1hcFN0eWxlPzogTWFwYm94U3R5bGU7IHRvcE1hcFN0eWxlPzogTWFwYm94U3R5bGV9ICYgTWFwU3R5bGU7XG4gIG1hcGJveEFwaUFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIG1hcGJveEFwaVVybDogc3RyaW5nO1xuICB2aXNTdGF0ZUFjdGlvbnM6IHR5cGVvZiBWaXNTdGF0ZUFjdGlvbnM7XG4gIG1hcFN0YXRlQWN0aW9uczogdHlwZW9mIE1hcFN0YXRlQWN0aW9ucztcbiAgdWlTdGF0ZUFjdGlvbnM6IHR5cGVvZiBVSVN0YXRlQWN0aW9ucztcblxuICAvLyBvcHRpb25hbFxuICBwcmltYXJ5PzogYm9vbGVhbjsgLy8gcHJpbWFyeSBvbmUgd2lsbCBiZSByZXBvcnRpbmcgaXRzIHNpemUgdG8gYXBwU3RhdGVcbiAgcmVhZE9ubHk/OiBib29sZWFuO1xuICBpc0V4cG9ydD86IGJvb2xlYW47XG4gIC8vIG9uTWFwU3R5bGVMb2FkZWQ/OiAobWFwOiBtYXBsaWJyZWdsLk1hcCB8IFJldHVyblR5cGU8TWFwUmVmWydnZXRNYXAnXT4gfCBudWxsKSA9PiB2b2lkO1xuICBvbk1hcFN0eWxlTG9hZGVkPzogKG1hcDogR2V0TWFwUmVmIHwgbnVsbCkgPT4gdm9pZDtcbiAgb25NYXBSZW5kZXI/OiAobWFwOiBHZXRNYXBSZWYgfCBudWxsKSA9PiB2b2lkO1xuICBnZXRNYXBib3hSZWY/OiAobWFwYm94PzogTWFwUmVmIHwgbnVsbCwgaW5kZXg/OiBudW1iZXIpID0+IHZvaWQ7XG4gIGluZGV4PzogbnVtYmVyO1xuICBkZWxldGVNYXBMYWJlbHM/OiAoY29udGFpbmVySWQ6IHN0cmluZywgbGF5ZXJJZDogc3RyaW5nKSA9PiB2b2lkO1xuICBjb250YWluZXJJZD86IG51bWJlcjtcblxuICBpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlPzogYm9vbGVhbjtcbiAgYWN0aXZlU2lkZVBhbmVsOiBzdHJpbmcgfCBudWxsO1xuICBzaWRlUGFuZWxXaWR0aD86IG51bWJlcjtcblxuICBsb2NhbGU/OiBhbnk7XG4gIHVpVGhlbWU/OiBzdHJpbmc7XG4gIHRoZW1lPzogYW55O1xuICBlZGl0b3I/OiBhbnk7XG4gIE1hcENvbXBvbmVudD86IHR5cGVvZiBNYXBib3hMZWdhY3lNYXAgfCB0eXBlb2YgTWFwbGlicmVNYXA7XG4gIGRlY2tHbFByb3BzPzogYW55O1xuICBvbkRlY2tJbml0aWFsaXplZD86IChhOiBhbnksIGI6IGFueSkgPT4gdm9pZDtcbiAgb25WaWV3U3RhdGVDaGFuZ2U/OiAodmlld3BvcnQ6IFZpZXdwb3J0KSA9PiB2b2lkO1xuXG4gIHRvcE1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIGJvdHRvbU1hcENvbnRhaW5lclByb3BzOiBhbnk7XG4gIHRyYW5zZm9ybVJlcXVlc3Q/OiAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IHN0cmluZykgPT4ge3VybDogc3RyaW5nfTtcblxuICAvKiogUGFzcyBgZmFsc2VgIHRvIGRpc2FibGUgdGhlIHJlbW90ZSBSVEwgdGV4dCBwbHVnaW4sIG9yIGEgVVJMIHN0cmluZyB0byBzZWxmLWhvc3QgaXQuICovXG4gIFJUTFRleHRQbHVnaW4/OiBzdHJpbmcgfCBmYWxzZTtcblxuICBkYXRhc2V0QXR0cmlidXRpb25zPzogRGF0YXNldEF0dHJpYnV0aW9uW107XG4gIGF0dHJpYnV0aW9uTG9nb3M/OiBBdHRyaWJ1dGlvbldpdGhTdHlsZVtdO1xuXG4gIGdlbmVyYXRlTWFwYm94TGF5ZXJzPzogdHlwZW9mIGdlbmVyYXRlTWFwYm94TGF5ZXJzO1xuICBnZW5lcmF0ZURlY2tHTExheWVycz86IHR5cGVvZiBjb21wdXRlRGVja0xheWVycztcblxuICBvbk1vdXNlTW92ZT86IChldmVudDogUmVhY3QuTW91c2VFdmVudCAmIHtsbmdMYXQ/OiBbbnVtYmVyLCBudW1iZXJdfSkgPT4gdm9pZDtcblxuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZGVja1JlbmRlckNhbGxiYWNrcz86IHtcbiAgICBvbkRlY2tMb2FkPzogKCkgPT4gdm9pZDtcbiAgICBvbkRlY2tSZW5kZXI/OiAoZGVja1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsO1xuICAgIG9uRGVja0FmdGVyUmVuZGVyPzogKGRlY2tQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IGFueTtcbiAgfTtcblxuICAvLyBPcHRpb25hbDogb3ZlcnJpZGUgbGVnZW5kIGhlYWRlciBsb2dvIGluIG1hcCBjb250cm9scyAodXNlZCBieSBpbWFnZSBleHBvcnQpXG4gIGxvZ29Db21wb25lbnQ/OiBSZWFjdC5GQyB8IFJlYWN0LlJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWFwQ29udGFpbmVyRmFjdG9yeShcbiAgTWFwUG9wb3ZlcjogUmV0dXJuVHlwZTx0eXBlb2YgTWFwUG9wb3ZlckZhY3Rvcnk+LFxuICBNYXBDb250cm9sOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBDb250cm9sRmFjdG9yeT4sXG4gIEVkaXRvcjogUmV0dXJuVHlwZTx0eXBlb2YgRWRpdG9yRmFjdG9yeT4sXG4gIE1hcFNjYWxlOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBTY2FsZUZhY3Rvcnk+XG4pOiBSZWFjdC5Db21wb25lbnRUeXBlPE1hcENvbnRhaW5lclByb3BzPiB7XG4gIGNsYXNzIE1hcENvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudDxNYXBDb250YWluZXJQcm9wcz4ge1xuICAgIGRpc3BsYXlOYW1lID0gJ01hcENvbnRhaW5lcic7XG5cbiAgICBwcml2YXRlIGFueUFjdGl2ZUxheWVyTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgc3RhdGljIGNvbnRleHRUeXBlID0gTWFwVmlld1N0YXRlQ29udGV4dDtcblxuICAgIGRlY2xhcmUgY29udGV4dDogUmVhY3QuQ29udGV4dFR5cGU8dHlwZW9mIE1hcFZpZXdTdGF0ZUNvbnRleHQ+O1xuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICAgIGRlY2tHbFByb3BzOiB7fSxcbiAgICAgIGluZGV4OiAwLFxuICAgICAgcHJpbWFyeTogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgcGF0Y2hEZWNrUmVuZGVyZXJGb3JQb3N0UHJvY2Vzc2luZygpO1xuICAgIH1cblxuICAgIHN0YXRlID0ge1xuICAgICAgLy8gdHJ1ZSBmb3IgYnVpbHQtaW4ga2VwbGVyLmdsIHN0eWxlcyAoZGFyay1tYXR0ZXIsIHBvc2l0cm9uLCDigKYpIGFuZCB3aGVuIHRoZVxuICAgICAgLy8gYmFzZW1hcCB1c2VzIE1hcGJveC1ob3N0ZWQgdGlsZXMgKG1hcGJveDovLyBzb3VyY2VzKS5cbiAgICAgIC8vIEZvciB1c2VyLWFkZGVkIGN1c3RvbSBzdHlsZXMgKE9wZW5GcmVlTWFwLCBDQVJUTyBzZWxmLWhvc3RlZCwg4oCmKSBNYXBMaWJyZSBpc1xuICAgICAgLy8gbWVyZWx5IHRoZSByZW5kZXJpbmcgZW5naW5lLCBub3QgdGhlIHRpbGUgcHJvdmlkZXIsIHNvIHRoZSBsb2dvIGlzIGhpZGRlbiBhbmRcbiAgICAgIC8vIHRoZSBiYXNlbWFwJ3Mgb3duIFRpbGVKU09OIGF0dHJpYnV0aW9uIGlzIHNob3duIGluc3RlYWQuXG4gICAgICBzaG93QmFzZU1hcExpYkxvZ286IGZhbHNlLFxuICAgICAgLy8gYXR0cmlidXRpb24gc3RyaW5ncyBjb2xsZWN0ZWQgZnJvbSB0aGUgcmVzb2x2ZWQgbWFwIHNvdXJjZXMgKGUuZy4gQ0FSVE8sXG4gICAgICAvLyBPcGVuRnJlZU1hcCkuICBQb3B1bGF0ZWQgYWZ0ZXIgVGlsZUpTT04gcmVzb2x2ZXMuXG4gICAgICBiYXNlbWFwQXR0cmlidXRpb25zOiBbXSBhcyBzdHJpbmdbXVxuICAgIH07XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmICghdGhpcy5fcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgb2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQsIHRoaXMuX2hhbmRsZVJlc2l6ZSk7XG4gICAgfVxuXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfU1RZTEVfVVBEQVRFLCB0aGlzLl9vbk1hcGJveFN0eWxlVXBkYXRlKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9SRU5ERVIsIHRoaXMuX29uTWFwUmVuZGVyKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX3JlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHVub2JzZXJ2ZURpbWVuc2lvbnModGhpcy5fcmVmLmN1cnJlbnQpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgIGlmIChwcmV2UHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlICE9PSB0aGlzLnByb3BzLm1hcFN0eWxlLnN0eWxlVHlwZSkge1xuICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubWFwU3R5bGUuc3R5bGVUeXBlID09PSBOT19NQVBfSUQpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHNob3dCYXNlTWFwTGliTG9nbzogZmFsc2UsXG4gICAgICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zOiBbXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBfZGVjazogYW55ID0gbnVsbDtcbiAgICBfbWFwOiBHZXRNYXBSZWYgfCBudWxsID0gbnVsbDtcbiAgICBfcmVmID0gY3JlYXRlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICAgIF9kZWNrR0xFcnJvcnNFbGFwc2VkOiB7W2lkOiBzdHJpbmddOiBudW1iZXJ9ID0ge307XG4gICAgX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXI6ICgoZTogYW55KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIF9iYXNlbWFwSWRsZUxpc3RlbmVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICAgIF9vbk1hcFJlbmRlciA9ICgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbk1hcFJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwUmVuZGVyKHRoaXMuX21hcCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHByZXZpb3VzTGF5ZXJzID0ge1xuICAgICAgLy8gW2xheWVycy5pZF06IG1hcGJveExheWVyQ29uZmlnXG4gICAgfTtcblxuICAgIF9oYW5kbGVSZXNpemUgPSBkaW1lbnNpb25zID0+IHtcbiAgICAgIGNvbnN0IHtwcmltYXJ5LCBpbmRleH0gPSB0aGlzLnByb3BzO1xuICAgICAgaWYgKHByaW1hcnkpIHtcbiAgICAgICAgY29uc3Qge21hcFN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoZGltZW5zaW9ucyAmJiBkaW1lbnNpb25zLndpZHRoID4gMCAmJiBkaW1lbnNpb25zLmhlaWdodCA+IDApIHtcbiAgICAgICAgICBtYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKGRpbWVuc2lvbnMsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBsYXllcnNTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllcnMnXT4gPSBwcm9wcyA9PiBwcm9wcy52aXNTdGF0ZS5sYXllcnM7XG4gICAgbGF5ZXJEYXRhU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxWaXNTdGF0ZVsnbGF5ZXJzJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJEYXRhO1xuICAgIHNwbGl0TWFwU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxTcGxpdE1hcFtdPiA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLnNwbGl0TWFwcztcbiAgICBzcGxpdE1hcEluZGV4U2VsZWN0b3I6IFByb3BTZWxlY3RvcjxudW1iZXIgfCB1bmRlZmluZWQ+ID0gcHJvcHMgPT4gcHJvcHMuaW5kZXg7XG4gICAgbWFwTGF5ZXJzU2VsZWN0b3I6IFByb3BTZWxlY3RvcjxTcGxpdE1hcExheWVycyB8IG51bGwgfCB1bmRlZmluZWQ+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLnNwbGl0TWFwU2VsZWN0b3IsXG4gICAgICB0aGlzLnNwbGl0TWFwSW5kZXhTZWxlY3RvcixcbiAgICAgIGdldE1hcExheWVyc0Zyb21TcGxpdE1hcHNcbiAgICApO1xuICAgIGxheWVyT3JkZXJTZWxlY3RvcjogUHJvcFNlbGVjdG9yPFZpc1N0YXRlWydsYXllck9yZGVyJ10+ID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUubGF5ZXJPcmRlcjtcbiAgICBsYXllcnNUb1JlbmRlclNlbGVjdG9yOiBQcm9wU2VsZWN0b3I8TGF5ZXJzVG9SZW5kZXI+ID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmxheWVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllckRhdGFTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwTGF5ZXJzU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzVG9SZW5kZXJcbiAgICApO1xuICAgIGxheWVyc0ZvckRlY2tTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5sYXllcnNTZWxlY3RvcixcbiAgICAgIHRoaXMubGF5ZXJEYXRhU2VsZWN0b3IsXG4gICAgICBwcmVwYXJlTGF5ZXJzRm9yRGVja1xuICAgICk7XG4gICAgZmlsdGVyc1NlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMudmlzU3RhdGUuZmlsdGVycztcbiAgICBwb2x5Z29uRmlsdGVyc1NlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IodGhpcy5maWx0ZXJzU2VsZWN0b3IsIGZpbHRlcnMgPT5cbiAgICAgIGZpbHRlcnMuZmlsdGVyKGYgPT4gZi50eXBlID09PSBGSUxURVJfVFlQRVMucG9seWdvbiAmJiBmLmVuYWJsZWQgIT09IGZhbHNlKVxuICAgICk7XG4gICAgZmVhdHVyZXNTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmVkaXRvci5mZWF0dXJlcztcbiAgICBzZWxlY3RlZEZlYXR1cmVTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLnZpc1N0YXRlLmVkaXRvci5zZWxlY3RlZEZlYXR1cmU7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yLFxuICAgICAgdGhpcy5mZWF0dXJlc1NlbGVjdG9yLFxuICAgICAgKHBvbHlnb25GaWx0ZXJzLCBmZWF0dXJlcykgPT4gKHtcbiAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmNvbmNhdChwb2x5Z29uRmlsdGVycy5tYXAoZiA9PiBmLnZhbHVlKSlcbiAgICAgIH0pXG4gICAgKTtcbiAgICAvLyBAdHMtaWdub3JlIC0gTm8gb3ZlcmxvYWQgbWF0Y2hlcyB0aGlzIGNhbGxcbiAgICBzZWxlY3RlZFBvbHlnb25JbmRleFNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IsXG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZVNlbGVjdG9yLFxuICAgICAgKGNvbGxlY3Rpb24sIHNlbGVjdGVkRmVhdHVyZSkgPT5cbiAgICAgICAgY29sbGVjdGlvbi5mZWF0dXJlcy5maW5kSW5kZXgoZiA9PiBmLmlkID09PSBzZWxlY3RlZEZlYXR1cmU/LmlkKVxuICAgICk7XG4gICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAodmFsdWU6IG51bWJlcikgPT4gdmFsdWUsXG4gICAgICB2YWx1ZSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA8IDAgPyBbXSA6IFt2YWx1ZV07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2RTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLmdlbmVyYXRlTWFwYm94TGF5ZXJzID8/IGdlbmVyYXRlTWFwYm94TGF5ZXJzO1xuXG4gICAgbWFwYm94TGF5ZXJzU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHRoaXMubGF5ZXJzU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyRGF0YVNlbGVjdG9yLFxuICAgICAgdGhpcy5sYXllck9yZGVyU2VsZWN0b3IsXG4gICAgICB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IsXG4gICAgICB0aGlzLmdlbmVyYXRlTWFwYm94TGF5ZXJNZXRob2RTZWxlY3RvcixcbiAgICAgIChsYXllciwgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBsYXllcnNUb1JlbmRlciwgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZCkgPT5cbiAgICAgICAgZ2VuZXJhdGVNYXBib3hMYXllck1ldGhvZChsYXllciwgbGF5ZXJEYXRhLCBsYXllck9yZGVyLCBsYXllcnNUb1JlbmRlcilcbiAgICApO1xuXG4gICAgLy8gbWVyZ2UgaW4gYSBiYWNrZ3JvdW5kLWNvbG9yIHN0eWxlIGlmIHRoZSBiYXNlbWFwIGNob2ljZSBpcyBOT19NQVBfSURcbiAgICAvLyB1c2VkIGJ5IDxTdHlsZWRNYXA+IGlubGluZSBzdHlsZSBwcm9wXG4gICAgbWFwU3R5bGVUeXBlU2VsZWN0b3IgPSBwcm9wcyA9PiBwcm9wcy5tYXBTdHlsZS5zdHlsZVR5cGU7XG4gICAgbWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvciA9IHByb3BzID0+IHByb3BzLm1hcFN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICBnbG9iZU1vZGVTZWxlY3RvciA9IHByb3BzID0+IEJvb2xlYW4ocHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5lbmFibGVkKTtcbiAgICBnbG9iZUJhY2tncm91bmRDb2xvclNlbGVjdG9yID0gcHJvcHMgPT4gcHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5jb25maWc/LmJhY2tncm91bmRDb2xvcjtcbiAgICBnbG9iZVN0YXJzU2VsZWN0b3IgPSBwcm9wcyA9PiBCb29sZWFuKHByb3BzLm1hcFN0YXRlPy5nbG9iZT8uY29uZmlnPy5zdGFycyk7XG4gICAgc3R5bGVTZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgdGhpcy5tYXBTdHlsZVR5cGVTZWxlY3RvcixcbiAgICAgIHRoaXMubWFwU3R5bGVCYWNrZ3JvdW5kQ29sb3JTZWxlY3RvcixcbiAgICAgIHRoaXMuZ2xvYmVNb2RlU2VsZWN0b3IsXG4gICAgICB0aGlzLmdsb2JlQmFja2dyb3VuZENvbG9yU2VsZWN0b3IsXG4gICAgICB0aGlzLmdsb2JlU3RhcnNTZWxlY3RvcixcbiAgICAgIChzdHlsZVR5cGUsIGJhY2tncm91bmRDb2xvciwgaXNHbG9iZU1vZGUsIGdsb2JlQmFja2dyb3VuZENvbG9yLCBnbG9iZVN0YXJzKSA9PiAoe1xuICAgICAgICAuLi5NQVBfU1RZTEUuY29udGFpbmVyLFxuICAgICAgICAuLi4oc3R5bGVUeXBlID09PSBOT19NQVBfSUQgPyB7YmFja2dyb3VuZENvbG9yOiByZ2JUb0hleChiYWNrZ3JvdW5kQ29sb3IpfSA6IHt9KSxcbiAgICAgICAgLy8gSW4gZ2xvYmUgbW9kZSB0aGUgZGVjay5nbCBjYW52YXMgaXMgdHJhbnNwYXJlbnQgKHRoZSBnbG9iZSBWaWV3IHVzZXNcbiAgICAgICAgLy8gYGNsZWFyQ29sb3I6IGZhbHNlYCB0byBhdm9pZCBjb3JydXB0aW5nIHRoZSBwaWNraW5nIGJ1ZmZlciksIHNvIHRoZVxuICAgICAgICAvLyBiYWNrZ3JvdW5kIGFyb3VuZCB0aGUgZ2xvYmUgaXMgcGFpbnRlZCBoZXJlIG9uIHRoZSBjb250YWluZXIgaW5zdGVhZC5cbiAgICAgICAgLi4uKGlzR2xvYmVNb2RlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBnbG9iZSBiYWNrZ3JvdW5kIHdoZW4gbm9uZSBpcyBjb25maWd1cmVkLlxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJnYlRvSGV4KFxuICAgICAgICAgICAgICAgIChnbG9iZUJhY2tncm91bmRDb2xvciBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHx8XG4gICAgICAgICAgICAgICAgICAoZ2V0R2xvYmVDbGVhckNvbG9yKCkuc2xpY2UoMCwgMykgYXMgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAvLyBPcHRpb25hbGx5IG92ZXJsYXkgYSB0aWxlYWJsZSBzdGFyLWZpZWxkIHBhdHRlcm4gb24gdGhlIGJhY2tncm91bmQuXG4gICAgICAgICAgICAgIC4uLihnbG9iZVN0YXJzXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgnJHtnZXRTdGFyc0JhY2tncm91bmRJbWFnZSgpfScpYCxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZFJlcGVhdDogJ3JlcGVhdCdcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvKiBjb21wb25lbnQgcHJpdmF0ZSBmdW5jdGlvbnMgKi9cbiAgICBfb25DbG9zZU1hcFBvcG92ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5vbkxheWVyQ2xpY2sobnVsbCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXIgPSAoX2lkeDogbnVtYmVyLCBpbmZvOiBQaWNraW5nSW5mbzxhbnk+IHwgbnVsbCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25MYXllckhvdmVyKGluZm8sIHRoaXMucHJvcHMuaW5kZXgpO1xuICAgIH07XG5cbiAgICBfb25MYXllclNldERvbWFpbiA9IChcbiAgICAgIGlkeDogbnVtYmVyLFxuICAgICAgdmFsdWU6IG51bWJlcltdIHwge2RvbWFpbjogVmlzdWFsQ2hhbm5lbERvbWFpbjsgYWdncmVnYXRlZEJpbnM6IFJlY29yZDxudW1iZXIsIEFnZ3JlZ2F0ZWRCaW4+fVxuICAgICkgPT4ge1xuICAgICAgLy8gZGVjay5nbCA5IG5hdGl2ZSBhZ2dyZWdhdGlvbiBsYXllcnMgKEdyaWQsIEhleGFnb24pIHBhc3NcbiAgICAgIC8vIHtkb21haW4sIGFnZ3JlZ2F0ZWRCaW5zfSB2aWEgb3VyIFNjYWxlRW5oYW5jZWQqIG92ZXJyaWRlcyxcbiAgICAgIC8vIHdoaWxlIENsdXN0ZXJMYXllcidzIENQVUFnZ3JlZ2F0b3IgYWxzbyBwYXNzZXMge2RvbWFpbiwgYWdncmVnYXRlZEJpbnN9LlxuICAgICAgLy8gUGxhaW4gW21pbiwgbWF4XSBpcyBhIGZhbGxiYWNrIGlmIHRoZSBvdmVycmlkZSBpcyBieXBhc3NlZC5cbiAgICAgIGNvbnN0IGNvbmZpZyA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgID8ge2NvbG9yRG9tYWluOiB2YWx1ZSBhcyBWaXN1YWxDaGFubmVsRG9tYWlufVxuICAgICAgICA6IHtjb2xvckRvbWFpbjogdmFsdWUuZG9tYWluLCBhZ2dyZWdhdGVkQmluczogdmFsdWUuYWdncmVnYXRlZEJpbnN9O1xuXG4gICAgICBjb25zdCBsYXllciA9IHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF07XG4gICAgICBpZiAoIWxheWVyKSByZXR1cm47XG5cbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCBjb25maWcgYXMgUGFydGlhbDxMYXllckJhc2VDb25maWc+KTtcbiAgICB9O1xuXG4gICAgX29uUmVkcmF3TmVlZGVkID0gKF9pZHg6IG51bWJlcikgPT4ge1xuICAgICAgLy8gdXBkYXRlTWFwVXBkYXRlciBhbHdheXMgcmV0dXJucyBhIG5ldyBzdGF0ZSBvYmplY3QgcmVmZXJlbmNlLCB3aGljaCB0cmlnZ2VycyByZS1yZW5kZXJcbiAgICAgIGNvbnN0IHttYXBTdGF0ZUFjdGlvbnMsIGluZGV4fSA9IHRoaXMucHJvcHM7XG4gICAgICBtYXBTdGF0ZUFjdGlvbnMudXBkYXRlTWFwKHt9LCBpbmRleCk7XG4gICAgfTtcblxuICAgIF9vbkZpdEJvdW5kcyA9IChfaWR4OiBudW1iZXIsIGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pID0+IHtcbiAgICAgIHRoaXMucHJvcHMubWFwU3RhdGVBY3Rpb25zLmZpdEJvdW5kcyhib3VuZHMpO1xuICAgIH07XG5cbiAgICBfb25MYXllckZpbHRlcmVkSXRlbXNDaGFuZ2UgPSAoaWR4LCBldmVudCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMubGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlKHRoaXMucHJvcHMudmlzU3RhdGUubGF5ZXJzW2lkeF0sIGV2ZW50KTtcbiAgICB9O1xuXG4gICAgX29uV01TRmVhdHVyZUluZm8gPSAoXG4gICAgICBpZHg6IG51bWJlcixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZmVhdHVyZUluZm86IEFycmF5PHtuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmd9PiB8IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGNvb3JkaW5hdGU/OiBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbDtcbiAgICAgIH1cbiAgICApID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLndtc0ZlYXR1cmVJbmZvKFxuICAgICAgICB0aGlzLnByb3BzLnZpc1N0YXRlLmxheWVyc1tpZHhdLFxuICAgICAgICBkYXRhLmZlYXR1cmVJbmZvLFxuICAgICAgICBkYXRhLmNvb3JkaW5hdGVcbiAgICAgICk7XG4gICAgfTtcblxuICAgIF9oYW5kbGVNYXBUb2dnbGVMYXllciA9IGxheWVySWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4OiBtYXBJbmRleCA9IDAsIHZpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwKG1hcEluZGV4LCBsYXllcklkKTtcbiAgICB9O1xuXG4gICAgX29uTWFwYm94U3R5bGVVcGRhdGUgPSB1cGRhdGUgPT4ge1xuICAgICAgLy8gZm9yY2UgcmVmcmVzaCBtYXBib3hnbCBsYXllcnNcbiAgICAgIHRoaXMucHJldmlvdXNMYXllcnMgPSB7fTtcbiAgICAgIHRoaXMuX3VwZGF0ZU1hcGJveExheWVycygpO1xuXG4gICAgICB0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbih1cGRhdGUpO1xuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25NYXBTdHlsZUxvYWRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnByb3BzLm9uTWFwU3R5bGVMb2FkZWQodGhpcy5fbWFwKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3VwZGF0ZUF0dHJpYnV0aW9uID0gKHVwZGF0ZT86IGFueSkgPT4ge1xuICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG5cbiAgICAgIGxldCBzdHlsZU9iaiA9IHVwZGF0ZT8uc3R5bGUgfHwgbnVsbDtcbiAgICAgIGlmICghc3R5bGVPYmogJiYgdGhpcy5fbWFwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmF3U3R5bGUgPSB0aGlzLl9tYXAuaXNTdHlsZUxvYWRlZD8uKCkgPyB0aGlzLl9tYXAuZ2V0U3R5bGU/LigpIDogbnVsbDtcbiAgICAgICAgICBpZiAocmF3U3R5bGUpIHtcbiAgICAgICAgICAgIHN0eWxlT2JqID0ge3N0eWxlc2hlZXQ6IHJhd1N0eWxlfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIG1hcCBzdHlsZSBub3QgcmVhZHkgeWV0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHVzZXNNYXBib3ggPSBzdHlsZU9iaiA/IGlzU3R5bGVVc2luZ01hcGJveFRpbGVzKHN0eWxlT2JqKSA6IGZhbHNlO1xuICAgICAgY29uc3QgdXNlc09zbSA9IHN0eWxlT2JqID8gaXNTdHlsZVVzaW5nT3BlblN0cmVldE1hcFRpbGVzKHN0eWxlT2JqKSA6IGZhbHNlO1xuICAgICAgY29uc3QgYmFzZW1hcEF0dHJpYnV0aW9ucyA9IGdldEJhc2VNYXBBdHRyaWJ1dGlvbnModGhpcy5fbWFwKTtcblxuICAgICAgLy8gaWYgT1NNIHRpbGVzIGFyZSBkZXRlY3RlZCBpbiB0aGUgcmF3IHN0eWxlIGJ1dCBubyBzb3VyY2UtbGV2ZWwgYXR0cmlidXRpb25cbiAgICAgIC8vIHN0cmluZyB3YXMgY29sbGVjdGVkIHlldCwgZm9sZCBpbiB0aGUgY2Fub25pY2FsIE9TTSBhdHRyaWJ1dGlvbiBzbyB0aGVcbiAgICAgIC8vIHJlbmRlciBwYXRoIHN0YXlzIHVuaWZvcm0gKG5vIHNlcGFyYXRlIGhhcmRjb2RlZCBmYWxsYmFjayBsaW5rKVxuICAgICAgaWYgKHVzZXNPc20gJiYgIWJhc2VtYXBBdHRyaWJ1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VtYXBBdHRyaWJ1dGlvbnMucHVzaChPU01fQVRUUklCVVRJT05fSFRNTCk7XG4gICAgICB9XG5cbiAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHRvIHNob3cgdGhlIFwiQmFzZW1hcCBieTogTWFwTGlicmUvTWFwYm94XCIgbG9nbzpcbiAgICAgIC8vICAtIEFsd2F5cyBzaG93IGZvciBidWlsdC1pbiBrZXBsZXIuZ2wgc3R5bGVzIChkYXJrLW1hdHRlciwgcG9zaXRyb24sIOKApik6XG4gICAgICAvLyAgICB0aGV5IGRvbid0IGNhcnJ5IHRoZWlyIG93biBcInByb3ZpZGVyXCIgYnJhbmRpbmcgc28gdGhlIHJlbmRlcmluZy1lbmdpbmVcbiAgICAgIC8vICAgIGxvZ28gYWN0cyBhcyB0aGUgYmFzZW1hcCBjcmVkaXQuXG4gICAgICAvLyAgLSBBbHdheXMgc2hvdyB3aGVuIE1hcGJveCB0aWxlcyBhcmUgaW4gdXNlIChtYXBib3g6Ly8gc291cmNlcyk6IE1hcGJveFxuICAgICAgLy8gICAgYXR0cmlidXRpb24gaXMgcmVxdWlyZWQuXG4gICAgICAvLyAgLSBIaWRlIGZvciBjdXN0b20gdXNlci1hZGRlZCBzdHlsZXMgKGN1c3RvbSA9PT0gJ0xPQ0FMJyB8ICdNQU5BR0VEJyk6XG4gICAgICAvLyAgICB0aG9zZSBzdHlsZXMgc3VwcGx5IHRoZWlyIG93biBUaWxlSlNPTiBhdHRyaWJ1dGlvbiAoZS5nLiBPcGVuRnJlZU1hcCksXG4gICAgICAvLyAgICBzbyBzaG93aW5nIFwiQmFzZW1hcCBieTogTWFwTGlicmVcIiB3b3VsZCBiZSBtaXNsZWFkaW5nLlxuICAgICAgY29uc3Qgc3R5bGVUeXBlID0gdGhpcy5wcm9wcy5tYXBTdHlsZT8uc3R5bGVUeXBlO1xuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gdGhpcy5wcm9wcy5tYXBTdHlsZT8ubWFwU3R5bGVzPy5bc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGlzVXNlckN1c3RvbVN0eWxlID0gQm9vbGVhbihjdXJyZW50U3R5bGU/LmN1c3RvbSk7XG4gICAgICBjb25zdCBzaG93QmFzZU1hcExpYkxvZ28gPSB1c2VzTWFwYm94IHx8ICFpc1VzZXJDdXN0b21TdHlsZTtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHNob3dCYXNlTWFwTGliTG9nbyxcbiAgICAgICAgYmFzZW1hcEF0dHJpYnV0aW9uc1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEZvciBub24tTWFwYm94IHN0eWxlcywgVGlsZUpTT04gYXR0cmlidXRpb24gcmVzb2x2ZXMgYXN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGFmdGVyIHN0eWxlLmxvYWQuICBTdGFydCBhIGxpc3RlbmVyIHNvIHdlIGNhbiB1cGRhdGUgYmFzZW1hcEF0dHJpYnV0aW9uc1xuICAgICAgLy8gYXMgc29vbiBhcyB0aGUgc291cmNlcyByZXNvbHZlIHRoZWlyIFRpbGVKU09OLlxuICAgICAgaWYgKCF1c2VzTWFwYm94KSB7XG4gICAgICAgIHRoaXMuX2NvbGxlY3RCYXNlbWFwQXR0cmlidXRpb25zKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciAmJiB0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignc291cmNlZGF0YScsIHRoaXMuX2Jhc2VtYXBTb3VyY2VEYXRhTGlzdGVuZXIpO1xuICAgICAgICB0aGlzLl9iYXNlbWFwU291cmNlRGF0YUxpc3RlbmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9iYXNlbWFwSWRsZUxpc3RlbmVyICYmIHRoaXMuX21hcCkge1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdpZGxlJywgdGhpcy5fYmFzZW1hcElkbGVMaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfY29sbGVjdEJhc2VtYXBBdHRyaWJ1dGlvbnMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX21hcCkgcmV0dXJuO1xuICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgICAgLy8gQ2FwIHJldHJpZXMgc28gYSBzdHlsZSB0aGF0IG5ldmVyIHlpZWxkcyBhdHRyaWJ1dGlvbnMgZG9lc24ndCBsZWF2ZSBhXG4gICAgICAvLyBwZXJtYW5lbnQgc291cmNlZGF0YSBsaXN0ZW5lciBhdHRhY2hlZC5cbiAgICAgIGNvbnN0IE1BWF9BVFRFTVBUUyA9IDUwO1xuXG4gICAgICBjb25zdCB0cnlDb2xsZWN0ID0gKCkgPT4ge1xuICAgICAgICAvLyBUaWxlSlNPTiByZXNvbHZlcyBhc3luY2hyb25vdXNseTsgcmUtY29sbGVjdCBhdHRyaWJ1dGlvbnMgb25jZSBhXG4gICAgICAgIC8vIHNvdXJjZSdzIG1ldGFkYXRhIGlzIGF2YWlsYWJsZSBzbyBjdXN0b20gYmFzZW1hcCBhdHRyaWJ1dGlvbnMgYXJlIG5vdCBsb3N0LlxuICAgICAgICBjb25zdCBiYXNlbWFwQXR0cmlidXRpb25zID0gZ2V0QmFzZU1hcEF0dHJpYnV0aW9ucyh0aGlzLl9tYXApO1xuICAgICAgICBpZiAoYmFzZW1hcEF0dHJpYnV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLl9yZW1vdmVCYXNlbWFwQXR0cmlidXRpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgICAvLyBEb24ndCBjaGFuZ2Ugc2hvd0Jhc2VNYXBMaWJMb2dvIGhlcmUg4oCUIGl0IGlzIGZpeGVkIGF0IHN0eWxlLmxvYWQgdGltZVxuICAgICAgICAgIC8vIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHN0eWxlIHVzZXMgTWFwYm94IHRpbGVzLiAgV2Ugb25seSB1cGRhdGUgdGhlXG4gICAgICAgICAgLy8gcHJvdmlkZXIgYXR0cmlidXRpb25zIGNvbGxlY3RlZCBmcm9tIHRoZSByZXNvbHZlZCBUaWxlSlNPTi5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtiYXNlbWFwQXR0cmlidXRpb25zfSk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25Tb3VyY2VEYXRhID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAvLyBDb2xsZWN0IGF0dHJpYnV0aW9ucyB3aGVuOlxuICAgICAgICAvLyAgIChhKSBhIHNvdXJjZSdzIFRpbGVKU09OIGhhcyBqdXN0IGJlZW4gZmV0Y2hlZCAoc291cmNlRGF0YVR5cGUgPT09ICdtZXRhZGF0YScpIOKAlFxuICAgICAgICAvLyAgICAgICB0aGlzIGlzIHRoZSBlYXJsaWVzdCBtb21lbnQgdGhlIGBhdHRyaWJ1dGlvbmAgcHJvcGVydHkgaXMgYXZhaWxhYmxlIG9uIHRoZVxuICAgICAgICAvLyAgICAgICByZXNvbHZlZCBzb3VyY2Ugb2JqZWN0LCBvclxuICAgICAgICAvLyAgIChiKSBhIHNvdXJjZSBpcyBmdWxseSBsb2FkZWQgKGlzU291cmNlTG9hZGVkID09PSB0cnVlKSDigJQgZmFsbGJhY2sgZm9yIHJhc3RlclxuICAgICAgICAvLyAgICAgICBzb3VyY2VzIG9yIHN0eWxlcyB0aGF0IHNldCBhdHRyaWJ1dGlvbiBpbmxpbmUgcmF0aGVyIHRoYW4gdmlhIFRpbGVKU09OLlxuICAgICAgICBpZiAoIWU/LmlzU291cmNlTG9hZGVkICYmIGU/LnNvdXJjZURhdGFUeXBlICE9PSAnbWV0YWRhdGEnKSByZXR1cm47XG4gICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgIHRyeUNvbGxlY3QoKTtcbiAgICAgICAgaWYgKGF0dGVtcHRzID49IE1BWF9BVFRFTVBUUykge1xuICAgICAgICAgIHRoaXMuX3JlbW92ZUJhc2VtYXBBdHRyaWJ1dGlvbkxpc3RlbmVycygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBUaGUgYGlkbGVgIGV2ZW50IGZpcmVzIHdoZW4gdGhlIG1hcCBoYXMgZmluaXNoZWQgbG9hZGluZyBhbGwgcGVuZGluZ1xuICAgICAgLy8gcmVzb3VyY2VzICh0aWxlcywgVGlsZUpTT04sIHNwcml0ZXMpLiBBdCB0aGF0IHBvaW50IGF0dHJpYnV0aW9ucyBmcm9tXG4gICAgICAvLyBhbGwgc291cmNlcyBhcmUgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCwgc28gdGhpcyBpcyBhIHJlbGlhYmxlXG4gICAgICAvLyBvbmUtc2hvdCBmYWxsYmFjayB0aGF0IGNhdGNoZXMgY2FzZXMgd2hlcmUgdGhlIHNvdXJjZWRhdGEgbWV0YWRhdGFcbiAgICAgIC8vIGV2ZW50cyBhcmUgbWlzc2VkIG9yIHRoZSBzb3VyY2UgbmV2ZXIgcmVhY2hlcyBpc1NvdXJjZUxvYWRlZC5cbiAgICAgIGNvbnN0IG9uSWRsZSA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgIGNvbnN0IGJhc2VtYXBBdHRyaWJ1dGlvbnMgPSBnZXRCYXNlTWFwQXR0cmlidXRpb25zKHRoaXMuX21hcCk7XG4gICAgICAgIGlmIChiYXNlbWFwQXR0cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2Jhc2VtYXBBdHRyaWJ1dGlvbnN9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5fYmFzZW1hcFNvdXJjZURhdGFMaXN0ZW5lciA9IG9uU291cmNlRGF0YTtcbiAgICAgIHRoaXMuX2Jhc2VtYXBJZGxlTGlzdGVuZXIgPSBvbklkbGU7XG4gICAgICB0aGlzLl9tYXAub24oJ3NvdXJjZWRhdGEnLCBvblNvdXJjZURhdGEpO1xuICAgICAgdGhpcy5fbWFwLm9uKCdpZGxlJywgb25JZGxlKTtcbiAgICB9O1xuXG4gICAgX3NldE1hcFJlZiA9IG1hcFJlZiA9PiB7XG4gICAgICAvLyBIYW5kbGUgY2hhbmdlIG9mIHRoZSBtYXAgbGlicmFyeVxuICAgICAgaWYgKHRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgY29uc3QgbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICBpZiAobWFwICYmIHRoaXMuX21hcCAhPT0gbWFwKSB7XG4gICAgICAgICAgdGhpcy5fbWFwLm9mZihNQVBCT1hHTF9TVFlMRV9VUERBVEUsIHRoaXMuX29uTWFwYm94U3R5bGVVcGRhdGUpO1xuICAgICAgICAgIHRoaXMuX21hcC5vZmYoTUFQQk9YR0xfUkVOREVSLCB0aGlzLl9vbk1hcFJlbmRlcik7XG4gICAgICAgICAgdGhpcy5fcmVtb3ZlQmFzZW1hcEF0dHJpYnV0aW9uTGlzdGVuZXJzKCk7XG4gICAgICAgICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuX21hcCAmJiBtYXBSZWYpIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwUmVmLmdldE1hcCgpO1xuICAgICAgICAvLyBpIG5vdGljZWQgaW4gY2VydGFpbiBjb250ZXh0IHdlIGRvbid0IGFjY2VzcyB0aGUgYWN0dWFsIG1hcCBlbGVtZW50XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJpbmQgbWFwYm94Z2wgZXZlbnQgbGlzdGVuZXJcbiAgICAgICAgdGhpcy5fbWFwLm9uKE1BUEJPWEdMX1NUWUxFX1VQREFURSwgdGhpcy5fb25NYXBib3hTdHlsZVVwZGF0ZSk7XG4gICAgICAgIHRoaXMuX21hcC5vbihNQVBCT1hHTF9SRU5ERVIsIHRoaXMuX29uTWFwUmVuZGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMuZ2V0TWFwYm94UmVmKSB7XG4gICAgICAgIC8vIFRoZSBwYXJlbnQgY29tcG9uZW50IGNhbiBnYWluIGFjY2VzcyB0byBvdXIgTWFwYm94R2xNYXAgYnlcbiAgICAgICAgLy8gcHJvdmlkaW5nIHRoaXMgY2FsbGJhY2suIE5vdGUgdGhhdCAnbWFwYm94JyB3aWxsIGJlIG51bGwgd2hlbiB0aGVcbiAgICAgICAgLy8gcmVmIGlzIHVuc2V0IChlLmcuIHdoZW4gYSBzcGxpdCBtYXAgaXMgY2xvc2VkKS5cbiAgICAgICAgdGhpcy5wcm9wcy5nZXRNYXBib3hSZWYobWFwUmVmLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX29uRGVja0luaXRpYWxpemVkKGRldmljZSkge1xuICAgICAgaWYgKHRoaXMucHJvcHMub25EZWNrSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vbkRlY2tJbml0aWFsaXplZCh0aGlzLl9kZWNrLCBkZXZpY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDEpIEFsbG93IGVmZmVjdHMgb25seSBmb3IgdGhlIGZpcnN0IHZpZXcuXG4gICAgICogMikgUHJldmVudCBlZmZlY3Q6cHJlUmVuZGVyIGNhbGwgd2l0aG91dCB2YWxpZCBnZW5lcmF0ZWQgdmlld3BvcnRzLlxuICAgICAqIEBwYXJhbSB2aWV3SW5kZXggVmlldyBpbmRleC5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgZWZmZWN0cyBjYW4gYmUgdXNlZC5cbiAgICAgKi9cbiAgICBfaXNPS1RvUmVuZGVyRWZmZWN0cyh2aWV3SW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhdmlld0luZGV4ICYmIEJvb2xlYW4odGhpcy5fZGVjaz8udmlld01hbmFnZXI/Ll92aWV3cG9ydHM/Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgX29uQmVmb3JlUmVuZGVyID0gKCkgPT4ge1xuICAgICAgLy8gbm8tb3BcbiAgICB9O1xuXG4gICAgX2Fubm90YXRpb25WaWV3cG9ydENhY2hlOiB7a2V5OiBzdHJpbmc7IHZpZXdwb3J0OiBhbnl9IHwgbnVsbCA9IG51bGw7XG5cbiAgICBfd2FzSW50ZXJhY3RpbmcgPSBmYWxzZTtcblxuICAgIF9nZXRBbm5vdGF0aW9uVmlld3BvcnQobWFwU3RhdGU6IGFueSwgaW50ZXJuYWxWaWV3U3RhdGU6IGFueSkge1xuICAgICAgY29uc3QgbG9uZ2l0dWRlID0gaW50ZXJuYWxWaWV3U3RhdGU/LmxvbmdpdHVkZSA/PyBtYXBTdGF0ZS5sb25naXR1ZGU7XG4gICAgICBjb25zdCBsYXRpdHVkZSA9IGludGVybmFsVmlld1N0YXRlPy5sYXRpdHVkZSA/PyBtYXBTdGF0ZS5sYXRpdHVkZTtcbiAgICAgIGNvbnN0IHpvb20gPSBpbnRlcm5hbFZpZXdTdGF0ZT8uem9vbSA/PyBtYXBTdGF0ZS56b29tO1xuICAgICAgY29uc3QgcGl0Y2ggPSBpbnRlcm5hbFZpZXdTdGF0ZT8ucGl0Y2ggPz8gbWFwU3RhdGUucGl0Y2ggPz8gMDtcbiAgICAgIGNvbnN0IGJlYXJpbmcgPSBpbnRlcm5hbFZpZXdTdGF0ZT8uYmVhcmluZyA/PyBtYXBTdGF0ZS5iZWFyaW5nID8/IDA7XG4gICAgICBjb25zdCB3aWR0aCA9IG1hcFN0YXRlLndpZHRoIHx8IDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSBtYXBTdGF0ZS5oZWlnaHQgfHwgMDtcbiAgICAgIGNvbnN0IGtleSA9IGAke2xvbmdpdHVkZX0sJHtsYXRpdHVkZX0sJHt6b29tfSwke3BpdGNofSwke2JlYXJpbmd9LCR7d2lkdGh9LCR7aGVpZ2h0fWA7XG5cbiAgICAgIGlmICh0aGlzLl9hbm5vdGF0aW9uVmlld3BvcnRDYWNoZT8ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Fubm90YXRpb25WaWV3cG9ydENhY2hlLnZpZXdwb3J0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXJnZWRTdGF0ZSA9IHsuLi5tYXBTdGF0ZSwgLi4uaW50ZXJuYWxWaWV3U3RhdGUsIHdpZHRoLCBoZWlnaHR9O1xuICAgICAgY29uc3QgdnAgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShtZXJnZWRTdGF0ZSkgYXMgYW55O1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSB7XG4gICAgICAgIHByb2plY3Q6IChsbmdMYXQ6IFtudW1iZXIsIG51bWJlcl0pID0+IHZwLnByb2plY3QobG5nTGF0KSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICB1bnByb2plY3Q6ICh4eTogW251bWJlciwgbnVtYmVyXSkgPT4gdnAudW5wcm9qZWN0KHh5KSBhcyBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICBsb25naXR1ZGUsXG4gICAgICAgIGxhdGl0dWRlLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICB6b29tXG4gICAgICB9O1xuICAgICAgdGhpcy5fYW5ub3RhdGlvblZpZXdwb3J0Q2FjaGUgPSB7a2V5LCB2aWV3cG9ydH07XG4gICAgICByZXR1cm4gdmlld3BvcnQ7XG4gICAgfVxuXG4gICAgX29uRGVja0Vycm9yID0gKGVycm9yLCBsYXllcikgPT4ge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3I/Lm1lc3NhZ2UgfHwgJ3Vua25vd24tZXJyb3InO1xuICAgICAgY29uc3QgbGF5ZXJNZXNzYWdlID0gbGF5ZXI/LmlkID8gYCBpbiAke2xheWVyLmlkfSBsYXllcmAgOiAnJztcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZUZ1bGwgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09ICdXZWJHTCBjb250ZXh0IGlzIGxvc3QnXG4gICAgICAgICAgPyAnWW91ciBHUFUgd2FzIGRpc2Nvbm5lY3RlZC4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdXIgY29tcHV0ZXIgZ29lcyB0byBzbGVlcC4gSXQgY2FuIGFsc28gb2NjdXIgZm9yIG90aGVyIHJlYXNvbnMsIHN1Y2ggYXMgaWYgeW91IGFyZSBydW5uaW5nIHRvbyBtYW55IEdQVSBhcHBsaWNhdGlvbnMuJ1xuICAgICAgICAgIDogYEFuIGVycm9yIGluIGRlY2suZ2w6ICR7ZXJyb3JNZXNzYWdlfSR7bGF5ZXJNZXNzYWdlfS5gO1xuXG4gICAgICAvLyBUaHJvdHRsZSBlcnJvciBub3RpZmljYXRpb25zLCBhcyBSZWFjdCBkb2Vzbid0IGxpa2UgdG9vIG1hbnkgc3RhdGUgY2hhbmdlcyBmcm9tIGhlcmUuXG4gICAgICBjb25zdCBsYXN0U2hvd24gPSB0aGlzLl9kZWNrR0xFcnJvcnNFbGFwc2VkW2Vycm9yTWVzc2FnZUZ1bGxdO1xuICAgICAgaWYgKCFsYXN0U2hvd24gfHwgbGFzdFNob3duIDwgRGF0ZS5ub3coKSAtIFRIUk9UVExFX05PVElGSUNBVElPTl9USU1FKSB7XG4gICAgICAgIHRoaXMuX2RlY2tHTEVycm9yc0VsYXBzZWRbZXJyb3JNZXNzYWdlRnVsbF0gPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIE1hcmsgbGF5ZXIgYXMgaW52YWxpZFxuICAgICAgICBsZXQgZXh0cmFMYXllck1lc3NhZ2UgPSAnJztcbiAgICAgICAgY29uc3Qge3Zpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAobGF5ZXIpIHtcbiAgICAgICAgICBsZXQgdG9wTW9zdExheWVyID0gbGF5ZXI7XG4gICAgICAgICAgd2hpbGUgKHRvcE1vc3RMYXllci5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRvcE1vc3RMYXllciA9IHRvcE1vc3RMYXllci5wYXJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0b3BNb3N0TGF5ZXIucHJvcHM/LmlkKSB7XG4gICAgICAgICAgICB2aXNTdGF0ZUFjdGlvbnMubGF5ZXJTZXRJc1ZhbGlkKHRvcE1vc3RMYXllciwgZmFsc2UpO1xuICAgICAgICAgICAgZXh0cmFMYXllck1lc3NhZ2UgPSAnVGhlIGxheWVyIGhhcyBiZWVuIGRpc2FibGVkIGFuZCBoaWdobGlnaHRlZC4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgZXJyb3Igbm90aWZpY2F0aW9uIG9yIHVwZGF0ZSBleGlzdGluZyBvbmUgd2l0aCBzYW1lIGlkLlxuICAgICAgICAvLyBVcGRhdGUgaXMgcmVxdWlyZWQgdG8gcHJlc2VydmUgdGhlIG9yZGVyIG9mIG5vdGlmaWNhdGlvbnMgYXMgdGhleSBwcm9iYWJseSBhcmUgZ29pbmcgdG8gXCJqdW1wXCIgYmFzZWQgb24gb3JkZXIgb2YgZXJyb3JzLlxuICAgICAgICBjb25zdCB7dWlTdGF0ZUFjdGlvbnN9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMuYWRkTm90aWZpY2F0aW9uKFxuICAgICAgICAgIGVycm9yTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke2Vycm9yTWVzc2FnZUZ1bGx9ICR7ZXh0cmFMYXllck1lc3NhZ2V9YCxcbiAgICAgICAgICAgIGlkOiBlcnJvck1lc3NhZ2VGdWxsIC8vIHRyZWF0IHRoZSBlcnJvciBtZXNzYWdlIGFzIGlkXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyogY29tcG9uZW50IHJlbmRlciBmdW5jdGlvbnMgKi9cblxuICAgIC8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbiAgICBfcmVuZGVyTWFwUG9wb3ZlcigpIHtcbiAgICAgIC8vIHRoaXMgY2hlY2sgaXMgZm9yIGxpbWl0aW5nIHRoZSBkaXNwbGF5IG9mIHRoZSBgPE1hcFBvcG92ZXI+YCB0byB0aGUgYDxNYXBDb250YWluZXI+YCB0aGUgdXNlciBpcyBpbnRlcmFjdGluZyB3aXRoXG4gICAgICAvLyB0aGUgRGVja0dMIG9uSG92ZXIgZXZlbnQgaGFuZGxlciBhZGRzIGEgYG1hcEluZGV4YCBwcm9wZXJ0eSB3aGljaCBpcyBhdmFpbGFibGUgaW4gdGhlIGBob3ZlckluZm9gIG9iamVjdCBvZiBgdmlzU3RhdGVgXG4gICAgICBpZiAodGhpcy5wcm9wcy5pbmRleCAhPT0gdGhpcy5wcm9wcy52aXNTdGF0ZS5ob3ZlckluZm8/Lm1hcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgaW50byByZWR1Y2VyIHNvIGl0IGNhbiBiZSB0ZXN0ZWRcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIHZpc1N0YXRlOiB7XG4gICAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICAgIGNsaWNrZWQsXG4gICAgICAgICAgZGF0YXNldHMsXG4gICAgICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIGxheWVycyxcbiAgICAgICAgICBtb3VzZVBvczoge21vdXNlUG9zaXRpb24sIGNvb3JkaW5hdGUsIHBpbm5lZH1cbiAgICAgICAgfVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBsYXllcnNUb1JlbmRlciA9IHRoaXMubGF5ZXJzVG9SZW5kZXJTZWxlY3Rvcih0aGlzLnByb3BzKTtcblxuICAgICAgaWYgKCFtb3VzZVBvc2l0aW9uIHx8ICFpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYXllckhvdmVyUHJvcCA9IGdldExheWVySG92ZXJQcm9wKHtcbiAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICBpbnRlcmFjdGlvbkNvbmZpZyxcbiAgICAgICAgaG92ZXJJbmZvLFxuICAgICAgICBsYXllcnMsXG4gICAgICAgIGxheWVyc1RvUmVuZGVyLFxuICAgICAgICBkYXRhc2V0c1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbXBhcmVNb2RlID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWdcbiAgICAgICAgPyBpbnRlcmFjdGlvbkNvbmZpZy50b29sdGlwLmNvbmZpZy5jb21wYXJlTW9kZVxuICAgICAgICA6IGZhbHNlO1xuXG4gICAgICBsZXQgcGlubmVkUG9zaXRpb24gPSB7eDogMCwgeTogMH07XG4gICAgICBsZXQgbGF5ZXJQaW5uZWRQcm9wOiBMYXllckhvdmVyUHJvcCB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKHBpbm5lZCB8fCBjbGlja2VkKSB7XG4gICAgICAgIC8vIHByb2plY3QgbG5nbGF0IHRvIHNjcmVlbiBzbyB0aGF0IHRvb2x0aXAgZm9sbG93cyB0aGUgb2JqZWN0IG9uIHpvb21cbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShtYXBTdGF0ZSk7XG4gICAgICAgIGNvbnN0IGxuZ0xhdCA9IGNsaWNrZWQgPyBjbGlja2VkLmNvb3JkaW5hdGUgOiBwaW5uZWQuY29vcmRpbmF0ZTtcbiAgICAgICAgcGlubmVkUG9zaXRpb24gPSB0aGlzLl9nZXRIb3ZlclhZKHZpZXdwb3J0LCBsbmdMYXQpO1xuICAgICAgICBsYXllclBpbm5lZFByb3AgPSBnZXRMYXllckhvdmVyUHJvcCh7XG4gICAgICAgICAgYW5pbWF0aW9uQ29uZmlnLFxuICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLFxuICAgICAgICAgIGhvdmVySW5mbzogY2xpY2tlZCxcbiAgICAgICAgICBsYXllcnMsXG4gICAgICAgICAgbGF5ZXJzVG9SZW5kZXIsXG4gICAgICAgICAgZGF0YXNldHNcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChsYXllckhvdmVyUHJvcCAmJiBsYXllclBpbm5lZFByb3ApIHtcbiAgICAgICAgICBsYXllckhvdmVyUHJvcC5wcmltYXJ5RGF0YSA9IGxheWVyUGlubmVkUHJvcC5kYXRhO1xuICAgICAgICAgIGxheWVySG92ZXJQcm9wLmNvbXBhcmVUeXBlID0gaW50ZXJhY3Rpb25Db25maWcudG9vbHRpcC5jb25maWcuY29tcGFyZVR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tbW9uUHJvcCA9IHtcbiAgICAgICAgb25DbG9zZTogdGhpcy5fb25DbG9zZU1hcFBvcG92ZXIsXG4gICAgICAgIHpvb206IG1hcFN0YXRlLnpvb20sXG4gICAgICAgIGNvbnRhaW5lcjogdGhpcy5fZGVjayA/IHRoaXMuX2RlY2suY2FudmFzIDogdW5kZWZpbmVkXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RXJyb3JCb3VuZGFyeT5cbiAgICAgICAgICB7bGF5ZXJQaW5uZWRQcm9wICYmIChcbiAgICAgICAgICAgIDxNYXBQb3BvdmVyXG4gICAgICAgICAgICAgIHsuLi5waW5uZWRQb3NpdGlvbn1cbiAgICAgICAgICAgICAgey4uLmNvbW1vblByb3B9XG4gICAgICAgICAgICAgIGxheWVySG92ZXJQcm9wPXtsYXllclBpbm5lZFByb3B9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGU9e2ludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZCAmJiAocGlubmVkIHx8IHt9KS5jb29yZGluYXRlfVxuICAgICAgICAgICAgICBmcm96ZW49e3RydWV9XG4gICAgICAgICAgICAgIGlzQmFzZT17Y29tcGFyZU1vZGV9XG4gICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldEZlYXR1cmVzfVxuICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmU9e3RoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLnNldFNlbGVjdGVkRmVhdHVyZX1cbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb249e3RoaXMuZmVhdHVyZUNvbGxlY3Rpb25TZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7bGF5ZXJIb3ZlclByb3AgJiYgKCFsYXllclBpbm5lZFByb3AgfHwgY29tcGFyZU1vZGUpICYmIChcbiAgICAgICAgICAgIDxNYXBQb3BvdmVyXG4gICAgICAgICAgICAgIHg9e21vdXNlUG9zaXRpb25bMF19XG4gICAgICAgICAgICAgIHk9e21vdXNlUG9zaXRpb25bMV19XG4gICAgICAgICAgICAgIHsuLi5jb21tb25Qcm9wfVxuICAgICAgICAgICAgICBsYXllckhvdmVyUHJvcD17bGF5ZXJIb3ZlclByb3B9XG4gICAgICAgICAgICAgIGZyb3plbj17ZmFsc2V9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGU9e2ludGVyYWN0aW9uQ29uZmlnLmNvb3JkaW5hdGUuZW5hYmxlZCAmJiBjb29yZGluYXRlfVxuICAgICAgICAgICAgICBvblNldEZlYXR1cmVzPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRGZWF0dXJlc31cbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRGZWF0dXJlPXt0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgQXJndW1lbnQgb2YgdHlwZSAnUmVhZG9ubHk8TWFwQ29udGFpbmVyUHJvcHM+JyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbmV2ZXInXG4gICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uPXt0aGlzLmZlYXR1cmVDb2xsZWN0aW9uU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRXJyb3JCb3VuZGFyeT5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbiAgICBfZ2V0SG92ZXJYWSh2aWV3cG9ydCwgbG5nTGF0KSB7XG4gICAgICBjb25zdCBzY3JlZW5Db29yZCA9ICF2aWV3cG9ydCB8fCAhbG5nTGF0ID8gbnVsbCA6IHZpZXdwb3J0LnByb2plY3QobG5nTGF0KTtcbiAgICAgIHJldHVybiBzY3JlZW5Db29yZCAmJiB7eDogc2NyZWVuQ29vcmRbMF0sIHk6IHNjcmVlbkNvb3JkWzFdfTtcbiAgICB9XG5cbiAgICBfcmVuZGVyRGVja092ZXJsYXkoXG4gICAgICBsYXllcnNGb3JEZWNrLFxuICAgICAgb3B0aW9uczoge3ByaW1hcnlNYXA6IGJvb2xlYW47IGlzSW50ZXJhY3RpdmU/OiBib29sZWFuOyBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZX0gPSB7XG4gICAgICAgIHByaW1hcnlNYXA6IGZhbHNlXG4gICAgICB9XG4gICAgKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcFN0eWxlLFxuICAgICAgICB2aXNTdGF0ZSxcbiAgICAgICAgbWFwU3RhdGUsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgbWFwYm94QXBpQWNjZXNzVG9rZW4sXG4gICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgZGVja0dsUHJvcHMsXG4gICAgICAgIGluZGV4LFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcyxcbiAgICAgICAgdGhlbWUsXG4gICAgICAgIGdlbmVyYXRlRGVja0dMTGF5ZXJzLFxuICAgICAgICBvbk1vdXNlTW92ZVxuICAgICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgIGNvbnN0IHtob3ZlckluZm8sIGVkaXRvcn0gPSB2aXNTdGF0ZTtcbiAgICAgIGNvbnN0IHtwcmltYXJ5TWFwLCBpc0ludGVyYWN0aXZlLCBjaGlsZHJlbn0gPSBvcHRpb25zO1xuXG4gICAgICAvLyBkaXNhYmxlIGRvdWJsZSBjbGljayB6b29tIHdoZW4gZWRpdG9yIGlzIGluIGFueSBkcmF3IG1vZGVcbiAgICAgIGNvbnN0IHttYXBEcmF3fSA9IG1hcENvbnRyb2xzO1xuICAgICAgY29uc3Qge2FjdGl2ZTogZWRpdG9yTWVudUFjdGl2ZSA9IGZhbHNlfSA9IG1hcERyYXcgfHwge307XG4gICAgICBjb25zdCBpc0VkaXRvckRyYXdpbmdNb2RlID0gRWRpdG9yTGF5ZXJVdGlscy5pc0RyYXdpbmdBY3RpdmUoZWRpdG9yTWVudUFjdGl2ZSwgZWRpdG9yLm1vZGUpO1xuXG4gICAgICBjb25zdCBpbnRlcm5hbFZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUoaW5kZXgpO1xuICAgICAgY29uc3QgaW50ZXJuYWxNYXBTdGF0ZSA9IHsuLi5tYXBTdGF0ZSwgLi4uaW50ZXJuYWxWaWV3U3RhdGV9O1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydEZyb21NYXBTdGF0ZShpbnRlcm5hbE1hcFN0YXRlKTtcblxuICAgICAgY29uc3QgZWRpdG9yRmVhdHVyZVNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkUG9seWdvbkluZGV4U2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIGNvbnN0IHtzZXRGZWF0dXJlcywgb25MYXllckNsaWNrLCBzZXRTZWxlY3RlZEZlYXR1cmV9ID0gdmlzU3RhdGVBY3Rpb25zO1xuXG4gICAgICBjb25zdCBnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZCA9IGdlbmVyYXRlRGVja0dMTGF5ZXJzID8/IGNvbXB1dGVEZWNrTGF5ZXJzO1xuXG4gICAgICBjb25zdCBleHRyYURlY2tQYXJhbXM6IHtcbiAgICAgICAgZ2V0VG9vbHRpcD86IChpbmZvOiBhbnkpID0+IG9iamVjdCB8IG51bGw7XG4gICAgICAgIGdldEN1cnNvcj86ICh7aXNEcmFnZ2luZ306IHtpc0RyYWdnaW5nOiBib29sZWFufSkgPT4gc3RyaW5nO1xuICAgICAgfSA9IHt9O1xuICAgICAgaWYgKHByaW1hcnlNYXApIHtcbiAgICAgICAgLy8gT21pdCBob3ZlciB1cGRhdGVzIHdoZW4gdGhlIHBvaW50ZXIgcG9zaXRpb24gaXMgaW52YWxpZCwgaWUuIG92ZXIgVUkgb3ZlcmxheXMgb3JcbiAgICAgICAgLy8gb3V0c2lkZSB0aGUgbWFwIGNvbnRhaW5lci4gSW4gdGhvc2UgY2FzZXMgeC95IG1heSBiZSA8IDBcbiAgICAgICAgZXh0cmFEZWNrUGFyYW1zLmdldFRvb2x0aXAgPSBpbmZvID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gTnVtYmVyKGluZm8/LngpO1xuICAgICAgICAgIGNvbnN0IHkgPSBOdW1iZXIoaW5mbz8ueSk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih4KSB8fCBOdW1iZXIuaXNOYU4oeSkgfHwgeCA8IDAgfHwgeSA8IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgcmV0dXJuIEVkaXRvckxheWVyVXRpbHMuZ2V0VG9vbHRpcChpbmZvLCB7XG4gICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBleHRyYURlY2tQYXJhbXMuZ2V0Q3Vyc29yID0gKHtpc0RyYWdnaW5nfToge2lzRHJhZ2dpbmc6IGJvb2xlYW59KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdG9yQ3Vyc29yID0gRWRpdG9yTGF5ZXJVdGlscy5nZXRDdXJzb3Ioe1xuICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgIGhvdmVySW5mb1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChlZGl0b3JDdXJzb3IpIHJldHVybiBlZGl0b3JDdXJzb3I7XG5cbiAgICAgICAgICBpZiAoaXNEcmFnZ2luZykgcmV0dXJuICdncmFiYmluZyc7XG4gICAgICAgICAgaWYgKGhvdmVySW5mbz8ubGF5ZXIpIHJldHVybiAncG9pbnRlcic7XG4gICAgICAgICAgcmV0dXJuICdncmFiJztcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWZmZWN0cyA9IHRoaXMuX2lzT0tUb1JlbmRlckVmZmVjdHMoaW5kZXgpXG4gICAgICAgID8gY29tcHV0ZURlY2tFZmZlY3RzKHt2aXNTdGF0ZSwgbWFwU3RhdGUsIGlzRXhwb3J0OiB0aGlzLnByb3BzLmlzRXhwb3J0fSlcbiAgICAgICAgOiBbXTtcblxuICAgICAgY29uc3QgaXNHbG9iZU1vZGUgPSBtYXBTdGF0ZS5nbG9iZT8uZW5hYmxlZDtcblxuICAgICAgLy8gSW4gZ2xvYmUgbW9kZSB3aXRoIGEgbm9uLWRlZmF1bHQgYmxlbmQgbW9kZSwgZm9yd2FyZCBwcmUtY29tcHV0ZWQgbGF5ZXJcbiAgICAgIC8vIHJlbmRlcmluZyBwYXJhbWV0ZXJzIGludG8gbWFwU3RhdGUgc28gaW5kaXZpZHVhbCBsYXllcnMgY2FuIG1lcmdlIHRoZW0gaW50b1xuICAgICAgLy8gdGhlaXIgb3duIHBhcmFtZXRlcnMgb2JqZWN0cy4gVGhlIGdsb2JhbCBEZWNrR0wgcGFyYW1ldGVycyBjYW5ub3QgYmUgdXNlZCBpblxuICAgICAgLy8gZ2xvYmUgbW9kZSBiZWNhdXNlIHRoZXkgYXJlIG1lcmdlZCBpbnRvIGdsb2JlIHN5c3RlbSBsYXllcnMgKGF0bW9zcGhlcmUsXG4gICAgICAvLyBzdXJmYWNlLCBldGMuKSBhbmQgYWx0ZXIgdGhlaXIgY2FyZWZ1bGx5IHR1bmVkIGJsZW5kL2RlcHRoIHN0YXRlLlxuICAgICAgLy8gJ25vcm1hbCcgaXMgb21pdHRlZCDigJQgaXQgaXMgdGhlIFdlYkdMIGRlZmF1bHQgYW5kIGluamVjdGluZyBpdCB3b3VsZFxuICAgICAgLy8gb3ZlcnJpZGUgaW50ZW50aW9uYWwgYmxlbmQ6ZmFsc2Ugc2V0dGluZ3Mgb24gbGF5ZXJzIGxpa2UgdHJpcC9zY2VuZWdyYXBoLlxuICAgICAgY29uc3QgbGF5ZXJCbGVuZGluZ1BhcmFtcyA9XG4gICAgICAgIGlzR2xvYmVNb2RlICYmIHZpc1N0YXRlLmxheWVyQmxlbmRpbmcgJiYgdmlzU3RhdGUubGF5ZXJCbGVuZGluZyAhPT0gJ25vcm1hbCdcbiAgICAgICAgICA/IGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzKHZpc1N0YXRlLmxheWVyQmxlbmRpbmcpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBkZWNrTGF5ZXJzTWFwU3RhdGUgPSBsYXllckJsZW5kaW5nUGFyYW1zXG4gICAgICAgID8gey4uLmludGVybmFsTWFwU3RhdGUsIGxheWVyUGFyYW1ldGVyczogbGF5ZXJCbGVuZGluZ1BhcmFtc31cbiAgICAgICAgOiBpbnRlcm5hbE1hcFN0YXRlO1xuXG4gICAgICBjb25zdCBkZWNrR2xMYXllcnMgPSBnZW5lcmF0ZURlY2tHTExheWVyc01ldGhvZChcbiAgICAgICAge1xuICAgICAgICAgIHZpc1N0YXRlLFxuICAgICAgICAgIG1hcFN0YXRlOiBkZWNrTGF5ZXJzTWFwU3RhdGUsXG4gICAgICAgICAgbWFwU3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1hcEluZGV4OiBpbmRleCxcbiAgICAgICAgICBwcmltYXJ5TWFwLFxuICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgIG1hcGJveEFwaVVybCxcbiAgICAgICAgICBsYXllcnNGb3JEZWNrLFxuICAgICAgICAgIGVkaXRvckluZm86IHByaW1hcnlNYXBcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICBlZGl0b3JNZW51QWN0aXZlLFxuICAgICAgICAgICAgICAgIG9uU2V0RmVhdHVyZXM6IHNldEZlYXR1cmVzLFxuICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICBvbkFwcGx5UG9seWdvbkZpbHRlckFsbDogdmlzU3RhdGVBY3Rpb25zLnNldFBvbHlnb25GaWx0ZXJBbGxMYXllcnMsXG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICdSZWFkb25seTxNYXBDb250YWluZXJQcm9wcz4nIGlzIG5vdCBhc3NpZ25hYmxlIHRvIHBhcmFtZXRlciBvZiB0eXBlICduZXZlcidcbiAgICAgICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbjogdGhpcy5mZWF0dXJlQ29sbGVjdGlvblNlbGVjdG9yKHRoaXMucHJvcHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4ZXM6IHRoaXMuc2VsZWN0ZWRGZWF0dXJlSW5kZXhBcnJheVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBBcmd1bWVudCBvZiB0eXBlICd1bmtub3duJyBpcyBub3QgYXNzaWduYWJsZSB0byBwYXJhbWV0ZXIgb2YgdHlwZSAnbnVtYmVyJy5cbiAgICAgICAgICAgICAgICAgIGVkaXRvckZlYXR1cmVTZWxlY3RlZEluZGV4XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25MYXllckhvdmVyOiB0aGlzLl9vbkxheWVySG92ZXIsXG4gICAgICAgICAgb25TZXRMYXllckRvbWFpbjogdGhpcy5fb25MYXllclNldERvbWFpbixcbiAgICAgICAgICBvbkZpbHRlcmVkSXRlbXNDaGFuZ2U6IHRoaXMuX29uTGF5ZXJGaWx0ZXJlZEl0ZW1zQ2hhbmdlLFxuICAgICAgICAgIG9uV01TRmVhdHVyZUluZm86IHRoaXMuX29uV01TRmVhdHVyZUluZm8sXG4gICAgICAgICAgb25SZWRyYXdOZWVkZWQ6IHRoaXMuX29uUmVkcmF3TmVlZGVkLFxuICAgICAgICAgIG9uRml0Qm91bmRzOiB0aGlzLl9vbkZpdEJvdW5kc1xuICAgICAgICB9LFxuICAgICAgICBkZWNrR2xQcm9wc1xuICAgICAgKTtcblxuICAgICAgLy8gRm9sbG93IHRoZSBzZWxlY3RlZCBiYXNlbWFwIHN0eWxlJ3MgbGlicmFyeSBzbyB0aGUgZ2xvYmUgdXNlcyB0aGUgc2FtZVxuICAgICAgLy8gcHJvdmlkZXIgYXMgdGhlIGZsYXQgMkQgbWFwIChDQVJUTyB0aWxlcyBmb3IgTWFwTGlicmUgc3R5bGVzLCBNYXBib3hcbiAgICAgIC8vIHRpbGVzIGZvciBNYXBib3ggc3R5bGVzKS5cbiAgICAgIGNvbnN0IGdsb2JlQmFzZW1hcFByb3ZpZGVyID0gcmVzb2x2ZUdsb2JlQmFzZW1hcFByb3ZpZGVyKFxuICAgICAgICBnZXRCYXNlTWFwTGlicmFyeShtYXBTdHlsZT8ubWFwU3R5bGVzPy5bbWFwU3R5bGU/LnN0eWxlVHlwZV0pLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbiB8fCAnJ1xuICAgICAgKTtcblxuICAgICAgLy8gSW4gZ2xvYmUgbW9kZSwgcHJlcGVuZCBnbG9iZSBiYXNlIGxheWVycyBhbmQgYXBwZW5kIHRvcCBsYXllcnNcbiAgICAgIGNvbnN0IGdsb2JlQmFzZUxheWVycyA9XG4gICAgICAgIGlzR2xvYmVNb2RlICYmIG1hcFN0YXRlLmdsb2JlXG4gICAgICAgICAgPyBnZXRHbG9iZUJhc2VMYXllcnMoe1xuICAgICAgICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbjogbWFwYm94QXBpQWNjZXNzVG9rZW4gfHwgJycsXG4gICAgICAgICAgICAgIGdsb2JlOiBtYXBTdGF0ZS5nbG9iZSxcbiAgICAgICAgICAgICAgbWFwU3R5bGVUeXBlOiBtYXBTdHlsZT8uc3R5bGVUeXBlLFxuICAgICAgICAgICAgICBiYXNlbWFwUHJvdmlkZXI6IGdsb2JlQmFzZW1hcFByb3ZpZGVyLFxuICAgICAgICAgICAgICAvLyBVc2UgdGhlIGxpdmUgKGludGVybmFsKSBsYXRpdHVkZSBzbyB0aGUgdGlsZSBMT0QgY29tcGVuc2F0aW9uXG4gICAgICAgICAgICAgIC8vIHN0YXlzIGluIHN5bmMgd2l0aCB0aGUgZGVjayB2aWV3cG9ydCBkdXJpbmcgYSBkcmFnOyBtYXBTdGF0ZVxuICAgICAgICAgICAgICAvLyBsYXRpdHVkZSBsYWdzIGJlaGluZCB3aGlsZSByb3RhdGluZy5cbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGludGVybmFsTWFwU3RhdGUubGF0aXR1ZGUsXG4gICAgICAgICAgICAgIHpvb206IGludGVybmFsTWFwU3RhdGUuem9vbVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgZ2xvYmVUb3BMYXllcnMgPVxuICAgICAgICBpc0dsb2JlTW9kZSAmJiBtYXBTdGF0ZS5nbG9iZVxuICAgICAgICAgID8gZ2V0R2xvYmVUb3BMYXllcnMoe2dsb2JlOiBtYXBTdGF0ZS5nbG9iZSwgem9vbTogaW50ZXJuYWxNYXBTdGF0ZS56b29tfSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgY29uc3QgZmluYWxEZWNrR2xMYXllcnMgPSBpc0dsb2JlTW9kZVxuICAgICAgICA/IFsuLi5nbG9iZUJhc2VMYXllcnMsIC4uLmRlY2tHbExheWVycywgLi4uZ2xvYmVUb3BMYXllcnNdXG4gICAgICAgIDogZGVja0dsTGF5ZXJzO1xuXG4gICAgICBjb25zdCB2aWV3cyA9IGRlY2tHbFByb3BzPy52aWV3c1xuICAgICAgICA/IGRlY2tHbFByb3BzPy52aWV3cygpXG4gICAgICAgIDogaXNHbG9iZU1vZGVcbiAgICAgICAgPyBuZXcgS2VwbGVyR2xvYmVWaWV3KHtcbiAgICAgICAgICAgIHJlc29sdXRpb246IDUsXG4gICAgICAgICAgICAvLyBUaGUgdmlzaWJsZSBiYWNrZ3JvdW5kIGFyb3VuZCB0aGUgZ2xvYmUgaXMgcGFpbnRlZCBieSB0aGUgbWFwXG4gICAgICAgICAgICAvLyBjb250YWluZXIncyBDU1MgYmFja2dyb3VuZCAoc2VlIHN0eWxlU2VsZWN0b3IpLCBOT1QgYnkgYSBwZXItdmlld1xuICAgICAgICAgICAgLy8gY29sb3IgY2xlYXIuIGRlY2suZ2wgYXBwbGllcyBhIFZpZXcncyBgY2xlYXJDb2xvcmAgaW4gKmV2ZXJ5KiBwYXNzLFxuICAgICAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBwaWNraW5nIHBhc3MsIGFuZCBpdCBmb3JjZXMgdGhlIGNsZWFyZWQgYWxwaGEgdG8gMjU1XG4gICAgICAgICAgICAvLyAoYGNsZWFyQ29sb3JbM10gfHwgMjU1YCkuIEluIHRoZSBwaWNraW5nIGJ1ZmZlciB0aGUgYWxwaGEgYnl0ZSBlbmNvZGVzXG4gICAgICAgICAgICAvLyB0aGUgbGF5ZXIgaW5kZXgsIHNvIGEgMjU1IGNsZWFyIG1ha2VzIGRlY2suZ2wgZGVjb2RlIGV2ZXJ5IHBpeGVsIGFzIGFcbiAgICAgICAgICAgIC8vIG5vbi1leGlzdGVudCBsYXllciAoXCJQaWNrZWQgbm9uLWV4aXN0ZW50IGxheWVyLiBJcyBwaWNraW5nIGJ1ZmZlclxuICAgICAgICAgICAgLy8gY29ycnVwdD9cIikgb24gaG92ZXIuIGBjbGVhckNvbG9yOiBmYWxzZWAgc2tpcHMgdGhlIHBlci12aWV3IGNvbG9yXG4gICAgICAgICAgICAvLyBjbGVhciBzbyB0aGUgcGlja2luZyBidWZmZXIga2VlcHMgaXRzIDAgYWxwaGE7IHRoZSBjYW52YXMgc3RheXNcbiAgICAgICAgICAgIC8vIHRyYW5zcGFyZW50IGFuZCB0aGUgQ1NTIGJhY2tncm91bmQgc2hvd3MgdGhyb3VnaC5cbiAgICAgICAgICAgIGNsZWFyOiB0cnVlLFxuICAgICAgICAgICAgY2xlYXJDb2xvcjogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICA6IG5ldyBNYXBWaWV3KHtmYXJaTXVsdGlwbGllcjogMS4yfSk7XG5cbiAgICAgIGxldCBhbGxEZWNrR2xQcm9wcyA9IHtcbiAgICAgICAgLi4uZGVja0dsUHJvcHMsXG4gICAgICAgIHBpY2tpbmdSYWRpdXM6IERFRkFVTFRfUElDS0lOR19SQURJVVMsXG4gICAgICAgIHZpZXdzLFxuICAgICAgICBsYXllcnM6IGZpbmFsRGVja0dsTGF5ZXJzLFxuICAgICAgICBlZmZlY3RzLFxuICAgICAgICBwYXJhbWV0ZXJzOiBpc0dsb2JlTW9kZSA/IHtjdWxsOiB0cnVlfSA6IGdldExheWVyQmxlbmRpbmdQYXJhbWV0ZXJzKHZpc1N0YXRlLmxheWVyQmxlbmRpbmcpXG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZW9mIGRlY2tSZW5kZXJDYWxsYmFja3M/Lm9uRGVja1JlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBhbGxEZWNrR2xQcm9wcyA9IGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrUmVuZGVyKGFsbERlY2tHbFByb3BzKTtcbiAgICAgICAgaWYgKCFhbGxEZWNrR2xQcm9wcykge1xuICAgICAgICAgIC8vIGlmIG9uRGVja1JlbmRlciByZXR1cm5zIG51bGwsIGRvIG5vdCByZW5kZXIgZGVjay5nbFxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICB7Li4uKGlzSW50ZXJhY3RpdmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG9uTW91c2VNb3ZlOiBwcmltYXJ5TWFwXG4gICAgICAgICAgICAgICAgICA/IGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTW92ZT8uKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbk1vdXNlTW92ZURlYm91bmNlZChldmVudCwgdmlld3BvcnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtzdHlsZToge3BvaW50ZXJFdmVudHM6ICdub25lJ319KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxEZWNrR0xcbiAgICAgICAgICAgIGlkPVwiZGVmYXVsdC1kZWNrZ2wtb3ZlcmxheVwiXG4gICAgICAgICAgICBvbkxvYWQ9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tMb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgZGVja1JlbmRlckNhbGxiYWNrcy5vbkRlY2tMb2FkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB7Li4uYWxsRGVja0dsUHJvcHN9XG4gICAgICAgICAgICBjb250cm9sbGVyPXtcbiAgICAgICAgICAgICAgaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBkb3VibGVDbGlja1pvb206ICFpc0VkaXRvckRyYXdpbmdNb2RlLFxuICAgICAgICAgICAgICAgICAgICBkcmFnUm90YXRlOiB0aGlzLnByb3BzLm1hcFN0YXRlLmRyYWdSb3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIG1heFBpdGNoOiB0aGlzLnByb3BzLm1hcFN0YXRlLm1heFBpdGNoID8/IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkubWF4UGl0Y2gsXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGdsb2JlIG1vZGUgYWxsb3cgem9vbWluZyBvdXQgZnVydGhlciB0aGFuIGRlY2suZ2wncyBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIC8vIG9mIDAgc28gdGhlIHdob2xlIGdsb2JlIGNhbiBiZSBwdWxsZWQgYmFjayBvbiBzY3JlZW4uIFNldCBvbiB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbGxlciBzbyBpdCBzdGF5cyBhdXRob3JpdGF0aXZlIHJlZ2FyZGxlc3Mgb2YgdGhlIHZpZXdTdGF0ZVxuICAgICAgICAgICAgICAgICAgICAvLyByb3VuZC10cmlwIHRocm91Z2ggUmVkdXgvbG9jYWwgY29udGV4dC4gQ2FwIHRoZSBtYXggem9vbSB0b28gc29cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJhc2VtYXAgdGlsZXMgZG9uJ3QgYnJlYWsgZG93biBhdCBoaWdoIGdsb2JlIHpvb20uXG4gICAgICAgICAgICAgICAgICAgIC4uLihpc0dsb2JlTW9kZSA/IHttaW5ab29tOiBHTE9CRV9NSU5fWk9PTSwgbWF4Wm9vbTogR0xPQkVfTUFYX1pPT019IDoge30pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmlld1N0YXRlPXtcbiAgICAgICAgICAgICAgaXNHbG9iZU1vZGVcbiAgICAgICAgICAgICAgICA/IHsuLi5pbnRlcm5hbFZpZXdTdGF0ZSwgbWluWm9vbTogR0xPQkVfTUlOX1pPT00sIG1heFpvb206IEdMT0JFX01BWF9aT09NfVxuICAgICAgICAgICAgICAgIDogaW50ZXJuYWxWaWV3U3RhdGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQmVmb3JlUmVuZGVyPXt0aGlzLl9vbkJlZm9yZVJlbmRlcn1cbiAgICAgICAgICAgIG9uVmlld1N0YXRlQ2hhbmdlPXtpc0ludGVyYWN0aXZlID8gdGhpcy5fb25WaWV3cG9ydENoYW5nZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIHsuLi5leHRyYURlY2tQYXJhbXN9XG4gICAgICAgICAgICBvbkhvdmVyPXtcbiAgICAgICAgICAgICAgaXNJbnRlcmFjdGl2ZVxuICAgICAgICAgICAgICAgID8gZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEVkaXRvckxheWVyVXRpbHMub25Ib3ZlcihkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZWRpdG9yTWVudUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgaG92ZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25MYXllckhvdmVyRGVib3VuY2VkKGRhdGEsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhkYXRhLCBldmVudCkgPT4ge1xuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZUV2ZW50KGV2ZW50LnNyY0V2ZW50LCB2aWV3cG9ydCk7XG5cbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGJpdG1hcCBsYXllciBhbGlnbm1lbnQgbW9kZTogaWYgYSBiaXRtYXAgbGF5ZXIgaXMgd2FpdGluZ1xuICAgICAgICAgICAgICAvLyBmb3IgYSBtYXAgY2xpY2ssIHJvdXRlIHRoZSBjbGljayBjb29yZGluYXRlIHRvIGl0XG4gICAgICAgICAgICAgIGlmIChkYXRhLmNvb3JkaW5hdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbGlnbmluZ0xheWVyID0gdmlzU3RhdGUubGF5ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAobDogYW55KSA9PiBsLnR5cGUgPT09ICdiaXRtYXAnICYmIGwuYWxpZ25XYWl0aW5nRm9yTWFwICYmIGwuY29uZmlnLmlzVmlzaWJsZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGFsaWduaW5nTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgIChhbGlnbmluZ0xheWVyIGFzIGFueSkub25BbGlnbk1hcENsaWNrKGRhdGEuY29vcmRpbmF0ZSBhcyBbbnVtYmVyLCBudW1iZXJdKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX29uUmVkcmF3TmVlZGVkKDApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHJlcyA9IEVkaXRvckxheWVyVXRpbHMub25DbGljayhkYXRhLCBldmVudCwge1xuICAgICAgICAgICAgICAgIGVkaXRvck1lbnVBY3RpdmUsXG4gICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgIG9uTGF5ZXJDbGljayxcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgbWFwSW5kZXg6IGluZGV4XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAocmVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJDbGljayhkYXRhKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkVycm9yPXt0aGlzLl9vbkRlY2tFcnJvcn1cbiAgICAgICAgICAgIHJlZj17Y29tcCA9PiB7XG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgaWYgKGNvbXAgJiYgY29tcC5kZWNrICYmICF0aGlzLl9kZWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHRoaXMuX2RlY2sgPSBjb21wLmRlY2s7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkRldmljZUluaXRpYWxpemVkPXtkZXZpY2UgPT4gdGhpcy5fb25EZWNrSW5pdGlhbGl6ZWQoZGV2aWNlKX1cbiAgICAgICAgICAgIG9uQWZ0ZXJSZW5kZXI9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZWNrUmVuZGVyQ2FsbGJhY2tzPy5vbkRlY2tBZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGRlY2tSZW5kZXJDYWxsYmFja3Mub25EZWNrQWZ0ZXJSZW5kZXIoYWxsRGVja0dsUHJvcHMpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgYW55QWN0aXZlTGF5ZXJMb2FkaW5nID0gYXJlQW55RGVja0xheWVyc0xvYWRpbmcoYWxsRGVja0dsUHJvcHMubGF5ZXJzKTtcbiAgICAgICAgICAgICAgaWYgKGFueUFjdGl2ZUxheWVyTG9hZGluZyAhPT0gdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkxheWVyTG9hZGluZ1N0YXRlQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hbnlBY3RpdmVMYXllckxvYWRpbmcgPSBhbnlBY3RpdmVMYXllckxvYWRpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgIDwvRGVja0dMPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZU1hcGJveExheWVycygpIHtcbiAgICAgIGNvbnN0IG1hcGJveExheWVycyA9IHRoaXMubWFwYm94TGF5ZXJzU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBpZiAoIU9iamVjdC5rZXlzKG1hcGJveExheWVycykubGVuZ3RoICYmICFPYmplY3Qua2V5cyh0aGlzLnByZXZpb3VzTGF5ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGVNYXBib3hMYXllcnModGhpcy5fbWFwLCBtYXBib3hMYXllcnMsIHRoaXMucHJldmlvdXNMYXllcnMpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzTGF5ZXJzID0gbWFwYm94TGF5ZXJzO1xuICAgIH1cblxuICAgIF9yZW5kZXJNYXBib3hPdmVybGF5cygpIHtcbiAgICAgIGlmICh0aGlzLl9tYXAgJiYgdGhpcy5fbWFwLmlzU3R5bGVMb2FkZWQoKSkge1xuICAgICAgICB0aGlzLl91cGRhdGVNYXBib3hMYXllcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBjb25zdCB2aWV3U3RhdGUgPSB0aGlzLmNvbnRleHQ/LmdldEludGVybmFsVmlld1N0YXRlKHRoaXMucHJvcHMuaW5kZXgpO1xuICAgICAgb25WaWV3UG9ydENoYW5nZShcbiAgICAgICAgdmlld1N0YXRlLFxuICAgICAgICB0aGlzLnByb3BzLm1hcFN0YXRlQWN0aW9ucy51cGRhdGVNYXAsXG4gICAgICAgIHRoaXMucHJvcHMub25WaWV3U3RhdGVDaGFuZ2UsXG4gICAgICAgIHRoaXMucHJvcHMucHJpbWFyeSxcbiAgICAgICAgdGhpcy5wcm9wcy5pbmRleFxuICAgICAgKTtcbiAgICB9LCBERUJPVU5DRV9WSUVXUE9SVF9QUk9QQUdBVEUpO1xuXG4gICAgX29uVmlld3BvcnRDaGFuZ2UgPSB2aWV3cG9ydCA9PiB7XG4gICAgICBjb25zdCB7dmlld1N0YXRlLCBpbnRlcmFjdGlvblN0YXRlfSA9IHZpZXdwb3J0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuaXNFeHBvcnQpIHtcbiAgICAgICAgLy8gSW1hZ2UgZXhwb3J0IG1hcCBzaG91bGRuJ3QgYmUgaW50ZXJhY3RpdmUgKG90aGVyd2lzZSB0aGlzIGNhbGxiYWNrIGNhblxuICAgICAgICAvLyBsZWFkIHRvIGluYWR2ZXJ0ZW50IGNoYW5nZXMgdG8gdGhlIHN0YXRlIG9mIHRoZSBtYWluIG1hcClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge3NldEludGVybmFsVmlld1N0YXRlfSA9IHRoaXMuY29udGV4dDtcblxuICAgICAgLy8gRmxhdCBtYXAgKDJELzNEKToga2VlcCB0aGUgb3JpZ2luYWwsIGFsd2F5cy1zeW5jaHJvbm91cyBiZWhhdmlvci4gVGhlXG4gICAgICAvLyBpbnRlcmFjdGlvbi1hd2FyZSB0aW1pbmcgYmVsb3cgZXhpc3RzIHB1cmVseSB0byBmaXggZ2xvYmUtc3BlY2lmaWNcbiAgICAgIC8vIGNvbnRyb2xsZWQtdmlld1N0YXRlLCBzbyBpdCBtdXN0IG5vdCBjaGFuZ2UgdGhlIG1haW4gMkQgbG9naWMuXG4gICAgICBpZiAoIXRoaXMucHJvcHMubWFwU3RhdGU/Lmdsb2JlPy5lbmFibGVkKSB7XG4gICAgICAgIHNldEludGVybmFsVmlld1N0YXRlKHZpZXdTdGF0ZSwgdGhpcy5wcm9wcy5pbmRleCk7XG4gICAgICAgIHRoaXMuX3dhc0ludGVyYWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX29uVmlld3BvcnRDaGFuZ2VQcm9wYWdhdGVEZWJvdW5jZWQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1VzZXJJbnRlcmFjdGlvbiA9XG4gICAgICAgIGludGVyYWN0aW9uU3RhdGUgJiZcbiAgICAgICAgKGludGVyYWN0aW9uU3RhdGUuaXNab29taW5nIHx8XG4gICAgICAgICAgaW50ZXJhY3Rpb25TdGF0ZS5pc1Bhbm5pbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmlzUm90YXRpbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmlzRHJhZ2dpbmcgfHxcbiAgICAgICAgICBpbnRlcmFjdGlvblN0YXRlLmluVHJhbnNpdGlvbik7XG4gICAgICAvLyBUaGUgZW1pdCB0aGF0IGVuZHMgYSBnZXN0dXJlIChwYW5lbmQvcm90YXRlRW5kLCBvciBhIGZsaW5nIHRyYW5zaXRpb25cbiAgICAgIC8vIGVuZGluZykgYXJyaXZlcyB3aXRoIGFsbCBpbnRlcmFjdGlvbiBmbGFncyBmYWxzZS4gSWYgd2UgZGVmZXIgaXQsIHRoZVxuICAgICAgLy8gY29udHJvbGxlZCBgdmlld1N0YXRlYCBmZWQgYmFjayB0byBkZWNrIGxhZ3MgYSBmcmFtZSBiZWhpbmQgdGhlXG4gICAgICAvLyBjb250cm9sbGVyJ3MgY29tbWl0dGVkIHN0YXRlIGFuZCBkZWNrIHJlLXNlZWRzIGZyb20gdGhlIHN0YWxlIHZhbHVlLFxuICAgICAgLy8gbWFraW5nIHRoZSBnbG9iZSB2aXNpYmx5IFwianVtcCBiYWNrXCIgdG8gd2hlcmUgdGhlIGRyYWcgd2FzIHJlbGVhc2VkIC1cbiAgICAgIC8vIG1vc3Qgbm90aWNlYWJsZSBvbiBhIHRocm93L2ZsaW5nIHJlbGVhc2UuIFRyZWF0IHRoZSBmaXJzdCBhbGwtZmFsc2UgZW1pdFxuICAgICAgLy8gcmlnaHQgYWZ0ZXIgYW4gYWN0aXZlIGdlc3R1cmUgYXMgcGFydCBvZiB0aGF0IGdlc3R1cmUgYW5kIGFwcGx5IGl0XG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRvby5cbiAgICAgIGNvbnN0IGlzSW50ZXJhY3Rpb25TZXR0bGUgPSAhaXNVc2VySW50ZXJhY3Rpb24gJiYgdGhpcy5fd2FzSW50ZXJhY3Rpbmc7XG4gICAgICB0aGlzLl93YXNJbnRlcmFjdGluZyA9IEJvb2xlYW4oaXNVc2VySW50ZXJhY3Rpb24pO1xuICAgICAgaWYgKGlzVXNlckludGVyYWN0aW9uIHx8IGlzSW50ZXJhY3Rpb25TZXR0bGUpIHtcbiAgICAgICAgLy8gRm9yIGludGVyYWN0aXZlIGdlc3R1cmVzIChwYW4vem9vbS9yb3RhdGUpIGFuZCB0aGVpciBlbmQtb2YtZ2VzdHVyZVxuICAgICAgICAvLyBzZXR0bGUsIHVwZGF0ZSBzeW5jaHJvbm91c2x5IHNvIHRoZSBjb250cm9sbGVkIGB2aWV3U3RhdGVgIHN0YXlzIGluXG4gICAgICAgIC8vIGxvY2tzdGVwIHdpdGggdGhlIGNvbnRyb2xsZXIgYW5kIHRoZXJlJ3Mgbm8gc3RhbGUgcmUtc2VlZC5cbiAgICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlY2suZ2wgY2FuIGZpcmUgb25WaWV3U3RhdGVDaGFuZ2Ugc3luY2hyb25vdXNseSBkdXJpbmcgaXRzIG93biByZW5kZXJcbiAgICAgICAgLy8gKGUuZy4gd2hlbiBzd2l0Y2hpbmcgdmlldyB0eXBlcyBsaWtlIE1hcFZpZXcgLT4gR2xvYmVWaWV3KS4gVXBkYXRpbmcgUmVhY3RcbiAgICAgICAgLy8gc3RhdGUgZHVyaW5nIHJlbmRlciB0aHJvd3MgYSB3YXJuaW5nLCBzbyBkZWZlciBub24taW50ZXJhY3RpdmUgdXBkYXRlcy5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2V0SW50ZXJuYWxWaWV3U3RhdGUodmlld1N0YXRlLCB0aGlzLnByb3BzLmluZGV4KTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9vblZpZXdwb3J0Q2hhbmdlUHJvcGFnYXRlRGVib3VuY2VkKCk7XG4gICAgfTtcblxuICAgIF9vbkxheWVySG92ZXJEZWJvdW5jZWQgPSBkZWJvdW5jZSgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMudmlzU3RhdGVBY3Rpb25zLm9uTGF5ZXJIb3ZlcihkYXRhLCBpbmRleCk7XG4gICAgfSwgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUpO1xuXG4gICAgX29uTW91c2VNb3ZlRGVib3VuY2VkID0gZGVib3VuY2UoKGV2ZW50LCB2aWV3cG9ydCkgPT4ge1xuICAgICAgdGhpcy5wcm9wcy52aXNTdGF0ZUFjdGlvbnMub25Nb3VzZU1vdmUobm9ybWFsaXplRXZlbnQoZXZlbnQsIHZpZXdwb3J0KSk7XG4gICAgfSwgREVCT1VOQ0VfTU9VU0VfTU9WRV9QUk9QQUdBVEUpO1xuXG4gICAgX29uTGF5ZXJMb2FkaW5nU3RhdGVDaGFuZ2UgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAvLyB0cmlnZ2VyIGxvYWRpbmcgaW5kaWNhdG9yIHVwZGF0ZSB3aXRob3V0IGFueSBjaGFuZ2UgdG8gdXBkYXRlIFVJXG4gICAgICB0aGlzLnByb3BzLnZpc1N0YXRlQWN0aW9ucy5zZXRMb2FkaW5nSW5kaWNhdG9yKHtjaGFuZ2U6IDB9KTtcbiAgICB9LCBERUJPVU5DRV9MT0FESU5HX1NUQVRFX1BST1BBR0FURSk7XG5cbiAgICBfaGFuZGxlVG9nZ2xlTGF5ZXJWaXNpYmlsaXR5ID0gKGxheWVyOiBMYXllcikgPT4ge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuICAgICAgdmlzU3RhdGVBY3Rpb25zLmxheWVyQ29uZmlnQ2hhbmdlKGxheWVyLCB7aXNWaXNpYmxlOiAhbGF5ZXIuY29uZmlnLmlzVmlzaWJsZX0pO1xuICAgIH07XG5cbiAgICBfdG9nZ2xlTWFwQ29udHJvbCA9IHBhbmVsSWQgPT4ge1xuICAgICAgY29uc3Qge2luZGV4LCB1aVN0YXRlQWN0aW9uc30gPSB0aGlzLnByb3BzO1xuXG4gICAgICB1aVN0YXRlQWN0aW9ucy50b2dnbGVNYXBDb250cm9sKHBhbmVsSWQsIE51bWJlcihpbmRleCkpO1xuICAgIH07XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4gICAgX3JlbmRlck1hcCgpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdmlzU3RhdGUsXG4gICAgICAgIG1hcFN0YXRlLFxuICAgICAgICBtYXBTdHlsZSxcbiAgICAgICAgbWFwU3RhdGVBY3Rpb25zLFxuICAgICAgICBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gbWFwYm94QXBpVXJsLFxuICAgICAgICBtYXBDb250cm9scyxcbiAgICAgICAgaXNFeHBvcnQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgdWlUaGVtZSxcbiAgICAgICAgdWlTdGF0ZUFjdGlvbnMsXG4gICAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHByaW1hcnksXG4gICAgICAgIGJvdHRvbU1hcENvbnRhaW5lclByb3BzLFxuICAgICAgICB0b3BNYXBDb250YWluZXJQcm9wcyxcbiAgICAgICAgdGhlbWUsXG4gICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnMgPSBbXSxcbiAgICAgICAgYXR0cmlidXRpb25Mb2dvcyA9IFtdLFxuICAgICAgICBjb250YWluZXJJZCA9IDAsXG4gICAgICAgIGlzTG9hZGluZ0luZGljYXRvclZpc2libGUsXG4gICAgICAgIGFjdGl2ZVNpZGVQYW5lbCxcbiAgICAgICAgc2lkZVBhbmVsV2lkdGhcbiAgICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgICBjb25zdCB7bGF5ZXJzLCBkYXRhc2V0cywgZWRpdG9yLCBpbnRlcmFjdGlvbkNvbmZpZywgbGF5ZXJPcmRlcn0gPSB2aXNTdGF0ZTtcblxuICAgICAgY29uc3QgbGF5ZXJzVG9SZW5kZXIgPSB0aGlzLmxheWVyc1RvUmVuZGVyU2VsZWN0b3IodGhpcy5wcm9wcyk7XG4gICAgICBjb25zdCBsYXllcnNGb3JEZWNrID0gdGhpcy5sYXllcnNGb3JEZWNrU2VsZWN0b3IodGhpcy5wcm9wcyk7XG5cbiAgICAgIC8vIEN1cnJlbnQgc3R5bGUgY2FuIGJlIGEgY3VzdG9tIHN0eWxlLCBmcm9tIHdoaWNoIHdlIHB1bGwgdGhlIG1hcGJveCBBUEkgYWNjY2VzcyB0b2tlblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgLy8gU2VsZWN0IHRoZSBjb3JyZWN0IE1hcCBhZGFwdGVyIGJhc2VkIG9uIHRoZSBhY3RpdmUgYmFzZSBtYXAgbGlicmFyeS5cbiAgICAgIC8vIFVzaW5nIHRoZSBuYXRpdmUgYWRhcHRlciBmb3IgZWFjaCBsaWJyYXJ5IGF2b2lkcyBUcmFuc2Zvcm0gQVBJXG4gICAgICAvLyBpbmNvbXBhdGliaWxpdGllcyAoZS5nLiBtYXBib3gtbGVnYWN5J3MgY2xvbmVUcmFuc2Zvcm0gd2l0aCBNYXBMaWJyZSB2NSkuXG4gICAgICBjb25zdCBSZXNvbHZlZE1hcENvbXBvbmVudCA9XG4gICAgICAgIHRoaXMucHJvcHMuTWFwQ29tcG9uZW50ID8/XG4gICAgICAgIChiYXNlTWFwTGlicmFyeU5hbWUgPT09IE1BUF9MSUJfT1BUSU9OUy5NQVBCT1ggPyBNYXBib3hMZWdhY3lNYXAgOiBNYXBsaWJyZU1hcCk7XG5cbiAgICAgIGNvbnN0IHVzZU1hcGJveEFkYXB0ZXIgPSBSZXNvbHZlZE1hcENvbXBvbmVudCA9PT0gTWFwYm94TGVnYWN5TWFwO1xuXG4gICAgICBjb25zdCBpbnRlcm5hbFZpZXdTdGF0ZSA9IHRoaXMuY29udGV4dD8uZ2V0SW50ZXJuYWxWaWV3U3RhdGUoaW5kZXgpO1xuICAgICAgY29uc3QgY29uZmlnTWF4UGl0Y2ggPSBtYXBTdGF0ZS5tYXhQaXRjaCA/PyBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLm1heFBpdGNoO1xuICAgICAgY29uc3QgZWZmZWN0aXZlTWF4UGl0Y2ggPSB1c2VNYXBib3hBZGFwdGVyXG4gICAgICAgID8gTWF0aC5taW4oY29uZmlnTWF4UGl0Y2gsIE1BUEJPWF9NQVhfUElUQ0gpXG4gICAgICAgIDogY29uZmlnTWF4UGl0Y2g7XG4gICAgICBjb25zdCBtYXBQcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgICAgLi4uaW50ZXJuYWxWaWV3U3RhdGUsXG4gICAgICAgIG1heFBpdGNoOiBlZmZlY3RpdmVNYXhQaXRjaCxcbiAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0aGlzLnByb3BzLmlzRXhwb3J0ID8/IGZhbHNlLFxuICAgICAgICBtYXBib3hBY2Nlc3NUb2tlbjogY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbixcbiAgICAgICAgLy8gYmFzZUFwaVVybDogbWFwYm94QXBpVXJsLFxuICAgICAgICB0cmFuc2Zvcm1SZXF1ZXN0OlxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNmb3JtUmVxdWVzdCB8fFxuICAgICAgICAgIHRyYW5zZm9ybVJlcXVlc3QoY3VycmVudFN0eWxlPy5hY2Nlc3NUb2tlbiB8fCBtYXBib3hBcGlBY2Nlc3NUb2tlbilcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLlJUTFRleHRQbHVnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtYXBQcm9wcy5SVExUZXh0UGx1Z2luID0gdGhpcy5wcm9wcy5SVExUZXh0UGx1Z2luO1xuICAgICAgfVxuXG4gICAgICBpZiAodXNlTWFwYm94QWRhcHRlcikge1xuICAgICAgICBjb25zdCBtYXBib3hDb25maWcgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmJhc2VNYXBMaWJyYXJ5Q29uZmlnW01BUF9MSUJfT1BUSU9OUy5NQVBCT1hdO1xuICAgICAgICBtYXBQcm9wcy5tYXBMaWIgPSBtYXBib3hDb25maWcuZ2V0TWFwTGliKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0dlb2NvZGVyTGF5ZXIgPSBCb29sZWFuKGxheWVycy5maW5kKGwgPT4gbC5pZCA9PT0gR0VPQ09ERVJfTEFZRVJfSUQpKTtcbiAgICAgIGNvbnN0IGlzU3BsaXQgPSBCb29sZWFuKG1hcFN0YXRlLmlzU3BsaXQpO1xuXG4gICAgICBjb25zdCBkZWNrID0gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkobGF5ZXJzRm9yRGVjaywge1xuICAgICAgICBwcmltYXJ5TWFwOiB0cnVlLFxuICAgICAgICBpc0ludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgICBjaGlsZHJlbjogKFxuICAgICAgICAgIDxSZXNvbHZlZE1hcENvbXBvbmVudFxuICAgICAgICAgICAga2V5PXtgYm90dG9tLSR7YmFzZU1hcExpYnJhcnlOYW1lfWB9XG4gICAgICAgICAgICB7Li4ubWFwUHJvcHN9XG4gICAgICAgICAgICBtYXBTdHlsZT17XG4gICAgICAgICAgICAgIG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkXG4gICAgICAgICAgICAgICAgPyBFTVBUWV9NQVBCT1hfU1RZTEVcbiAgICAgICAgICAgICAgICA6IG1hcFN0eWxlLmJvdHRvbU1hcFN0eWxlID8/IEVNUFRZX01BUEJPWF9TVFlMRVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgey4uLmJvdHRvbU1hcENvbnRhaW5lclByb3BzfVxuICAgICAgICAgICAgcmVmPXt0aGlzLl9zZXRNYXBSZWZ9XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgICBpZiAoIWRlY2spIHtcbiAgICAgICAgLy8gZGVja092ZXJsYXkgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIEluIHNwbGl0IChkdWFsKSB2aWV3IG1vZGUsIG9ubHkgcmVuZGVyIHRoZSBtYXAgY29udHJvbCBidXR0b25zIG9uIHRoZVxuICAgICAgLy8gcmlnaHQtc2lkZSBtYXAgKHByaW1hcnkgPT09IHRydWUsIGkuZS4gaW5kZXggPT09IDEpLiBPdGhlcndpc2UgdGhlIHNhbWVcbiAgICAgIC8vIGJ1dHRvbnMgYXJlIGR1cGxpY2F0ZWQgb24gYm90aCBtYXBzIGFuZCBhbnkgb3BlbmVkIG1lbnUgYXBwZWFycyBtaXJyb3JlZC5cbiAgICAgIGNvbnN0IHNob3dNYXBDb250cm9sID0gIWlzU3BsaXQgfHwgQm9vbGVhbihwcmltYXJ5KTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3Nob3dNYXBDb250cm9sICYmIChcbiAgICAgICAgICAgIDxNYXBDb250cm9sXG4gICAgICAgICAgICAgIG1hcFN0YXRlPXttYXBTdGF0ZX1cbiAgICAgICAgICAgICAgbWFwU3RhdGVBY3Rpb25zPXttYXBTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgYXZhaWxhYmxlTG9jYWxlcz17TE9DQUxFX0NPREVTX0FSUkFZfVxuICAgICAgICAgICAgICBkcmFnUm90YXRlPXttYXBTdGF0ZS5kcmFnUm90YXRlfVxuICAgICAgICAgICAgICBpc1NwbGl0PXtpc1NwbGl0fVxuICAgICAgICAgICAgICBwcmltYXJ5PXtCb29sZWFuKHByaW1hcnkpfVxuICAgICAgICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgICBsYXllck9yZGVyPXtsYXllck9yZGVyfVxuICAgICAgICAgICAgICBsYXllcnNUb1JlbmRlcj17bGF5ZXJzVG9SZW5kZXJ9XG4gICAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgICBtYXBDb250cm9scz17bWFwQ29udHJvbHN9XG4gICAgICAgICAgICAgIHJlYWRPbmx5PXt0aGlzLnByb3BzLnJlYWRPbmx5fVxuICAgICAgICAgICAgICBzY2FsZT17bWFwU3RhdGUuc2NhbGUgfHwgMX1cbiAgICAgICAgICAgICAgbG9nb0NvbXBvbmVudD17dGhpcy5wcm9wcy5sb2dvQ29tcG9uZW50fVxuICAgICAgICAgICAgICB0b3A9e1xuICAgICAgICAgICAgICAgIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyICYmIGludGVyYWN0aW9uQ29uZmlnLmdlb2NvZGVyLmVuYWJsZWRcbiAgICAgICAgICAgICAgICAgID8gdGhlbWUubWFwQ29udHJvbFRvcFxuICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgICAgICAgICB0aGVtZU5hbWU9e3VpVGhlbWV9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlUGVyc3BlY3RpdmU9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVQZXJzcGVjdGl2ZX1cbiAgICAgICAgICAgICAgb25TZXRNYXBWaWV3TW9kZT17bWFwU3RhdGVBY3Rpb25zLnNldE1hcFZpZXdNb2RlfVxuICAgICAgICAgICAgICBtYXBWaWV3TW9kZT17bWFwU3RhdGUubWFwVmlld01vZGV9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlU3BsaXRNYXA9e21hcFN0YXRlQWN0aW9ucy50b2dnbGVTcGxpdE1hcH1cbiAgICAgICAgICAgICAgb25NYXBUb2dnbGVMYXllcj17dGhpcy5faGFuZGxlTWFwVG9nZ2xlTGF5ZXJ9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlTWFwQ29udHJvbD17dGhpcy5fdG9nZ2xlTWFwQ29udHJvbH1cbiAgICAgICAgICAgICAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0PXttYXBTdGF0ZUFjdGlvbnMudG9nZ2xlU3BsaXRNYXBWaWV3cG9ydH1cbiAgICAgICAgICAgICAgb25TZXRFZGl0b3JNb2RlPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RWRpdG9yTW9kZX1cbiAgICAgICAgICAgICAgb25TZXRMb2NhbGU9e3VpU3RhdGVBY3Rpb25zLnNldExvY2FsZX1cbiAgICAgICAgICAgICAgb25TZXRUaGVtZT17dWlTdGF0ZUFjdGlvbnMuc2V0VGhlbWV9XG4gICAgICAgICAgICAgIG9uVG9nZ2xlRWRpdG9yVmlzaWJpbGl0eT17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUVkaXRvclZpc2liaWxpdHl9XG4gICAgICAgICAgICAgIG9uQ29udmVydEVkaXRvckZlYXR1cmVzVG9MYXllcj17dmlzU3RhdGVBY3Rpb25zLmNvbnZlcnRFZGl0b3JGZWF0dXJlc1RvTGF5ZXJ9XG4gICAgICAgICAgICAgIG9uTGF5ZXJWaXNDb25maWdDaGFuZ2U9e3Zpc1N0YXRlQWN0aW9ucy5sYXllclZpc0NvbmZpZ0NoYW5nZX1cbiAgICAgICAgICAgICAgb25Ub2dnbGVMYXllclZpc2liaWxpdHk9e3RoaXMuX2hhbmRsZVRvZ2dsZUxheWVyVmlzaWJpbGl0eX1cbiAgICAgICAgICAgICAgbWFwSGVpZ2h0PXttYXBTdGF0ZS5oZWlnaHR9XG4gICAgICAgICAgICAgIHNldE1hcENvbnRyb2xTZXR0aW5ncz17dWlTdGF0ZUFjdGlvbnMuc2V0TWFwQ29udHJvbFNldHRpbmdzfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e2FjdGl2ZVNpZGVQYW5lbH1cbiAgICAgICAgICAgICAgc3BsaXRNYXBzPXt0aGlzLnByb3BzLnZpc1N0YXRlLnNwbGl0TWFwc31cbiAgICAgICAgICAgICAgb25Ub2dnbGVMYXllckZvck1hcD17dmlzU3RhdGVBY3Rpb25zLnRvZ2dsZUxheWVyRm9yTWFwfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpc1NwbGl0U2VsZWN0b3IodGhpcy5wcm9wcykgJiYgPERyb3BwYWJsZSBjb250YWluZXJJZD17Y29udGFpbmVySWR9IC8+fVxuXG4gICAgICAgICAge2RlY2t9XG4gICAgICAgICAge3RoaXMuX3JlbmRlck1hcGJveE92ZXJsYXlzKCl9XG4gICAgICAgICAgPEVkaXRvclxuICAgICAgICAgICAgaW5kZXg9e2luZGV4IHx8IDB9XG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICAgIGZpbHRlcnM9e3RoaXMucG9seWdvbkZpbHRlcnNTZWxlY3Rvcih0aGlzLnByb3BzKX1cbiAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgb25EZWxldGVGZWF0dXJlPXt2aXNTdGF0ZUFjdGlvbnMuZGVsZXRlRmVhdHVyZX1cbiAgICAgICAgICAgIG9uU2V0RmVhdHVyZVByb3BlcnRpZXM9e3Zpc1N0YXRlQWN0aW9ucy5zZXRFZGl0b3JGZWF0dXJlUHJvcGVydGllc31cbiAgICAgICAgICAgIG9uU2VsZWN0PXt2aXNTdGF0ZUFjdGlvbnMuc2V0U2VsZWN0ZWRGZWF0dXJlfVxuICAgICAgICAgICAgb25Ub2dnbGVQb2x5Z29uRmlsdGVyPXt2aXNTdGF0ZUFjdGlvbnMuc2V0UG9seWdvbkZpbHRlckxheWVyfVxuICAgICAgICAgICAgb25TZXRFZGl0b3JNb2RlPXt2aXNTdGF0ZUFjdGlvbnMuc2V0RWRpdG9yTW9kZX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdhbGwnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgZGlzcGxheTogZWRpdG9yLnZpc2libGUgPyAnYmxvY2snIDogJ25vbmUnXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2VkaXRvci52aXNpYmxlID8gKFxuICAgICAgICAgICAgPEZpbHRlckZlYXR1cmVCYWRnZXNcbiAgICAgICAgICAgICAgZmlsdGVycz17dGhpcy5wb2x5Z29uRmlsdGVyc1NlbGVjdG9yKHRoaXMucHJvcHMpfVxuICAgICAgICAgICAgICB2aWV3cG9ydD17dGhpcy5fZ2V0QW5ub3RhdGlvblZpZXdwb3J0KG1hcFN0YXRlLCBpbnRlcm5hbFZpZXdTdGF0ZSl9XG4gICAgICAgICAgICAgIGlzR2xvYmVFbmFibGVkPXtCb29sZWFuKG1hcFN0YXRlLmdsb2JlPy5lbmFibGVkKX1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEZlYXR1cmV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxBbm5vdGF0aW9uT3ZlcmxheVxuICAgICAgICAgICAgYW5ub3RhdGlvbnM9e3Zpc1N0YXRlLmFubm90YXRpb25zfVxuICAgICAgICAgICAgc2VsZWN0ZWRBbm5vdGF0aW9uSWQ9e3Zpc1N0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbklkfVxuICAgICAgICAgICAgaXNFZGl0aW5nQW5ub3RhdGlvblRleHQ9e3Zpc1N0YXRlLmlzRWRpdGluZ0Fubm90YXRpb25UZXh0fVxuICAgICAgICAgICAgaXNBbm5vdGF0aW9uTW9kZT17Qm9vbGVhbihtYXBDb250cm9scz8uYW5ub3RhdGlvbj8uYWN0aXZlKX1cbiAgICAgICAgICAgIG1hcEluZGV4PXtpbmRleCB8fCAwfVxuICAgICAgICAgICAgdmlld3BvcnQ9e3RoaXMuX2dldEFubm90YXRpb25WaWV3cG9ydChtYXBTdGF0ZSwgaW50ZXJuYWxWaWV3U3RhdGUpfVxuICAgICAgICAgICAgaXNHbG9iZUVuYWJsZWQ9e0Jvb2xlYW4obWFwU3RhdGUuZ2xvYmU/LmVuYWJsZWQpfVxuICAgICAgICAgICAgdXBkYXRlQW5ub3RhdGlvbj17dmlzU3RhdGVBY3Rpb25zLnVwZGF0ZUFubm90YXRpb259XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEFubm90YXRpb249e3Zpc1N0YXRlQWN0aW9ucy5zZXRTZWxlY3RlZEFubm90YXRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICB7bWFwU3R5bGUudG9wTWFwU3R5bGUgJiYgIW1hcFN0YXRlLmdsb2JlPy5lbmFibGVkID8gKFxuICAgICAgICAgICAgPFJlc29sdmVkTWFwQ29tcG9uZW50XG4gICAgICAgICAgICAgIGtleT17YHRvcC0ke2Jhc2VNYXBMaWJyYXJ5TmFtZX1gfVxuICAgICAgICAgICAgICB2aWV3U3RhdGU9e2ludGVybmFsVmlld1N0YXRlfVxuICAgICAgICAgICAgICBtYXhQaXRjaD17ZWZmZWN0aXZlTWF4UGl0Y2h9XG4gICAgICAgICAgICAgIG1hcFN0eWxlPXttYXBTdHlsZS50b3BNYXBTdHlsZX1cbiAgICAgICAgICAgICAgc3R5bGU9e01BUF9TVFlMRS50b3B9XG4gICAgICAgICAgICAgIG1hcGJveEFjY2Vzc1Rva2VuPXttYXBQcm9wcy5tYXBib3hBY2Nlc3NUb2tlbn1cbiAgICAgICAgICAgICAgdHJhbnNmb3JtUmVxdWVzdD17bWFwUHJvcHMudHJhbnNmb3JtUmVxdWVzdH1cbiAgICAgICAgICAgICAgey4uLihtYXBQcm9wcy5SVExUZXh0UGx1Z2luICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHtSVExUZXh0UGx1Z2luOiBtYXBQcm9wcy5SVExUZXh0UGx1Z2lufVxuICAgICAgICAgICAgICAgIDoge30pfVxuICAgICAgICAgICAgICB7Li4uKHVzZU1hcGJveEFkYXB0ZXJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgbWFwTGliOlxuICAgICAgICAgICAgICAgICAgICAgIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbXG4gICAgICAgICAgICAgICAgICAgICAgICBNQVBfTElCX09QVElPTlMuTUFQQk9YXG4gICAgICAgICAgICAgICAgICAgICAgXS5nZXRNYXBMaWIoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pfVxuICAgICAgICAgICAgICB7Li4udG9wTWFwQ29udGFpbmVyUHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgICAge2hhc0dlb2NvZGVyTGF5ZXJcbiAgICAgICAgICAgID8gdGhpcy5fcmVuZGVyRGVja092ZXJsYXkoXG4gICAgICAgICAgICAgICAge1tHRU9DT0RFUl9MQVlFUl9JRF06IGhhc0dlb2NvZGVyTGF5ZXJ9LFxuICAgICAgICAgICAgICAgIHtwcmltYXJ5TWFwOiBmYWxzZSwgaXNJbnRlcmFjdGl2ZTogZmFsc2V9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICB7dGhpcy5fcmVuZGVyTWFwUG9wb3ZlcigpfVxuICAgICAgICAgIHshaXNFeHBvcnQgJiYgcHJpbWFyeSAhPT0gaXNTcGxpdCA/IChcbiAgICAgICAgICAgIDxMb2FkaW5nSW5kaWNhdG9yXG4gICAgICAgICAgICAgIGlzVmlzaWJsZT17Qm9vbGVhbihpc0xvYWRpbmdJbmRpY2F0b3JWaXNpYmxlIHx8IHRoaXMuYW55QWN0aXZlTGF5ZXJMb2FkaW5nKX1cbiAgICAgICAgICAgICAgYWN0aXZlU2lkZVBhbmVsPXtCb29sZWFuKGFjdGl2ZVNpZGVQYW5lbCl9XG4gICAgICAgICAgICAgIHNpZGVQYW5lbFdpZHRoPXtzaWRlUGFuZWxXaWR0aH1cbiAgICAgICAgICAgICAgaGFzQXR0cmlidXRpb25Mb2dvcz17YXR0cmlidXRpb25Mb2dvcy5sZW5ndGggPiAwfVxuICAgICAgICAgICAgICBoYXNNYXBTY2FsZT17Z2V0QXBwbGljYXRpb25Db25maWcoKS5lbmFibGVNYXBTY2FsZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvblxuICAgICAgICAgICAgICBzaG93QmFzZU1hcExpYkxvZ289e3RoaXMuc3RhdGUuc2hvd0Jhc2VNYXBMaWJMb2dvfVxuICAgICAgICAgICAgICBiYXNlbWFwQXR0cmlidXRpb25zPXt0aGlzLnN0YXRlLmJhc2VtYXBBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGRhdGFzZXRBdHRyaWJ1dGlvbnM9e2RhdGFzZXRBdHRyaWJ1dGlvbnN9XG4gICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5Q29uZmlnPXtiYXNlTWFwTGlicmFyeUNvbmZpZ31cbiAgICAgICAgICAgICAgZ2xvYmVBdHRyaWJ1dGlvbnM9e2dldEdsb2JlQmFzZW1hcEF0dHJpYnV0aW9ucyh7XG4gICAgICAgICAgICAgICAgZ2xvYmU6IG1hcFN0YXRlLmdsb2JlLFxuICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgIG1hcFN0eWxlVHlwZTogbWFwU3R5bGU/LnN0eWxlVHlwZSxcbiAgICAgICAgICAgICAgICBiYXNlbWFwUHJvdmlkZXI6IHJlc29sdmVHbG9iZUJhc2VtYXBQcm92aWRlcihcbiAgICAgICAgICAgICAgICAgIGJhc2VNYXBMaWJyYXJ5TmFtZSxcbiAgICAgICAgICAgICAgICAgIG1hcGJveEFwaUFjY2Vzc1Rva2VuXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAge3RoaXMucHJvcHMucHJpbWFyeSA/IChcbiAgICAgICAgICAgIDxBdHRyaWJ1dGlvbkxvZ29zXG4gICAgICAgICAgICAgIGxvZ29zPXthdHRyaWJ1dGlvbkxvZ29zfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e0Jvb2xlYW4oYWN0aXZlU2lkZVBhbmVsKX1cbiAgICAgICAgICAgICAgc2lkZVBhbmVsV2lkdGg9e3NpZGVQYW5lbFdpZHRofVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICB7IWlzRXhwb3J0ICYmIGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZW5hYmxlTWFwU2NhbGUgPyAoXG4gICAgICAgICAgICA8U3R5bGVkTWFwU2NhbGVDb250YWluZXJcbiAgICAgICAgICAgICAgJGxlZnQ9e1xuICAgICAgICAgICAgICAgIHByaW1hcnkgJiYgYWN0aXZlU2lkZVBhbmVsXG4gICAgICAgICAgICAgICAgICA/IChzaWRlUGFuZWxXaWR0aCB8fCAwKSArICh0aGVtZT8uc2lkZVBhbmVsPy5tYXJnaW4/LmxlZnQgPz8gOSlcbiAgICAgICAgICAgICAgICAgIDogdGhlbWU/LnNpZGVQYW5lbD8ubWFyZ2luPy5sZWZ0ID8/IDlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkYm90dG9tT2Zmc2V0PXtwcmltYXJ5ICYmIGF0dHJpYnV0aW9uTG9nb3MubGVuZ3RoID4gMCA/IDI0IDogMH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPE1hcFNjYWxlIG1hcFN0YXRlPXttYXBTdGF0ZX0gbWFwSW5kZXg9e2luZGV4ID8/IDB9IC8+XG4gICAgICAgICAgICA8L1N0eWxlZE1hcFNjYWxlQ29udGFpbmVyPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge3Zpc1N0YXRlLCBtYXBTdHlsZX0gPSB0aGlzLnByb3BzO1xuICAgICAgY29uc3QgbWFwQ29udGVudCA9IHRoaXMuX3JlbmRlck1hcCgpO1xuICAgICAgaWYgKCFtYXBDb250ZW50KSB7XG4gICAgICAgIC8vIG1hcENvbnRlbnQgY2FuIGJlIG51bGwgaWYgb25EZWNrUmVuZGVyIHJldHVybnMgbnVsbFxuICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FudCB0byByZW5kZXIgdGhlIG1hcFxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudFN0eWxlID0gbWFwU3R5bGUubWFwU3R5bGVzPy5bbWFwU3R5bGUuc3R5bGVUeXBlXTtcbiAgICAgIGNvbnN0IGJhc2VNYXBMaWJyYXJ5TmFtZSA9IGdldEJhc2VNYXBMaWJyYXJ5KGN1cnJlbnRTdHlsZSk7XG4gICAgICBjb25zdCBiYXNlTWFwTGlicmFyeUNvbmZpZyA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuYmFzZU1hcExpYnJhcnlDb25maWdbYmFzZU1hcExpYnJhcnlOYW1lXTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFN0eWxlZE1hcFxuICAgICAgICAgIHJlZj17dGhpcy5fcmVmfVxuICAgICAgICAgIHN0eWxlPXt0aGlzLnN0eWxlU2VsZWN0b3IodGhpcy5wcm9wcyl9XG4gICAgICAgICAgb25Db250ZXh0TWVudT17ZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKX1cbiAgICAgICAgICAkbWl4QmxlbmRNb2RlPXt2aXNTdGF0ZS5vdmVybGF5QmxlbmRpbmd9XG4gICAgICAgICAgJG1hcExpYkNzc0NsYXNzPXtiYXNlTWFwTGlicmFyeUNvbmZpZy5tYXBMaWJDc3NDbGFzc31cbiAgICAgICAgPlxuICAgICAgICAgIHttYXBDb250ZW50fVxuICAgICAgICA8L1N0eWxlZE1hcD5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpdGhUaGVtZShNYXBDb250YWluZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUYsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLGFBQUEs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
|