@colijnit/homedecorator 258.1.1 → 258.1.2

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.
Files changed (92) hide show
  1. package/app/core/enum/icon.enum.d.ts +1 -0
  2. package/app/core/enum/message-type.enum.d.ts +2 -1
  3. package/app/core/interface/message-with-payload.interface.d.ts +1 -0
  4. package/app/core/model/homedecorator-settings-options.d.ts +1 -1
  5. package/app/core/model/homedecorator-settings.d.ts +3 -0
  6. package/app/core/service/3dm-api.d.ts +2 -2
  7. package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
  8. package/app/core/service/homedecorator-connector-adapter.service.d.ts +9 -1
  9. package/app/core/service/homedecorator-connector.service.d.ts +15 -2
  10. package/app/core/service/utils.service.d.ts +1 -1
  11. package/app/core/utils/object.utils.d.ts +2 -0
  12. package/app/homedecorator.module.d.ts +2 -1
  13. package/app/plugins/core3d/service/wall-measurements.service.d.ts +2 -0
  14. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +3 -0
  15. package/app/plugins/product-catalog/product-catalog/product-catalog.component.d.ts +2 -0
  16. package/app/plugins/product-configurator/product-configurator-selector-list-of-values.component.scss +28 -0
  17. package/app/plugins/product-configurator/product-configurator-selector-option-button.component.d.ts +19 -0
  18. package/app/plugins/product-configurator/product-configurator-selector-option-button.component.scss +38 -0
  19. package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.d.ts +20 -0
  20. package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.scss +0 -0
  21. package/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.d.ts +19 -0
  22. package/app/plugins/product-configurator/product-configurator-selector-option-tile.component.scss +56 -0
  23. package/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.d.ts +20 -0
  24. package/app/plugins/product-configurator/product-configurator-selector.component.d.ts +26 -0
  25. package/app/plugins/product-configurator/product-configurator-selector.component.scss +46 -0
  26. package/app/plugins/product-configurator/product-configurator.component.d.ts +38 -0
  27. package/app/plugins/product-configurator/product-configurator.component.scss +35 -0
  28. package/app/plugins/product-configurator/product-configurator.module.d.ts +18 -0
  29. package/app/plugins/product-configurator/template_variables.scss +13 -0
  30. package/app/plugins/render/model/blender-render-settings.d.ts +10 -0
  31. package/app/plugins/render/model/blender-scene-settings.d.ts +18 -0
  32. package/app/plugins/render/render-controls/render-controls.component.d.ts +19 -7
  33. package/app/plugins/render/service/new-render.service.d.ts +21 -4
  34. package/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.scss +1 -1
  35. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +5 -0
  36. package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +4 -0
  37. package/app/plugins/threedselector/threedselector/threedselector.component.scss +17 -0
  38. package/app/plugins/threedselector/threedselector.module.d.ts +2 -1
  39. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
  40. package/assets/icons/circle_regular.svg +0 -0
  41. package/bundles/colijnit-homedecorator.umd.js +1986 -835
  42. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  43. package/esm2015/app/app.version.js +3 -3
  44. package/esm2015/app/core/enum/icon.enum.js +2 -1
  45. package/esm2015/app/core/enum/message-type.enum.js +2 -1
  46. package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
  47. package/esm2015/app/core/model/homedecorator-settings-options.js +2 -2
  48. package/esm2015/app/core/model/homedecorator-settings.js +3 -1
  49. package/esm2015/app/core/model/icon.js +2 -1
  50. package/esm2015/app/core/service/3dm-api.js +15 -22
  51. package/esm2015/app/core/service/homedecorator-app-event.service.js +3 -2
  52. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +65 -7
  53. package/esm2015/app/core/service/homedecorator-connector.service.js +150 -6
  54. package/esm2015/app/core/service/homedecorator-settings.service.js +8 -1
  55. package/esm2015/app/core/service/utils.service.js +116 -93
  56. package/esm2015/app/core/utils/object.utils.js +13 -1
  57. package/esm2015/app/homedecorator.component.js +1 -2
  58. package/esm2015/app/homedecorator.module.js +8 -4
  59. package/esm2015/app/plugins/core3d/core3d/core3d.component.js +2 -2
  60. package/esm2015/app/plugins/core3d/service/wall-measurements.service.js +7 -1
  61. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +98 -50
  62. package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +4 -4
  63. package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +21 -11
  64. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-button.component.js +67 -0
  65. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.js +57 -0
  66. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.js +75 -0
  67. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.js +90 -0
  68. package/esm2015/app/plugins/product-configurator/product-configurator-selector.component.js +253 -0
  69. package/esm2015/app/plugins/product-configurator/product-configurator.component.js +151 -0
  70. package/esm2015/app/plugins/product-configurator/product-configurator.module.js +115 -0
  71. package/esm2015/app/plugins/render/model/blender-render-settings.js +3 -0
  72. package/esm2015/app/plugins/render/model/blender-scene-settings.js +10 -0
  73. package/esm2015/app/plugins/render/model/render-parameters.js +3 -3
  74. package/esm2015/app/plugins/render/render-controls/render-controls.component.js +532 -446
  75. package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +6 -40
  76. package/esm2015/app/plugins/render/service/new-render.service.js +212 -44
  77. package/esm2015/app/plugins/render/service/render.service.js +6 -9
  78. package/esm2015/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.js +1 -1
  79. package/esm2015/app/plugins/room-planner/components/texture-picker/texture-picker.component.js +1 -1
  80. package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +12 -10
  81. package/esm2015/app/plugins/threedselector/element-buttons/element-buttons.component.js +2 -2
  82. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +55 -1
  83. package/esm2015/app/plugins/threedselector/threedselector/service/load-furniture.service.js +3 -3
  84. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +64 -15
  85. package/esm2015/app/plugins/threedselector/threedselector/utils/asset.utils.js +1 -1
  86. package/esm2015/app/plugins/threedselector/threedselector.module.js +8 -4
  87. package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +1 -1
  88. package/esm2015/app/shared/category-library/category-library.component.js +1 -1
  89. package/fesm2015/colijnit-homedecorator.js +2522 -1149
  90. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  91. package/package.json +4 -4
  92. package/styles.scss +1 -1
@@ -73,14 +73,15 @@ import * as i37 from "../../../core/service/homedecorator-connector-adapter.serv
73
73
  import * as i38 from "../../core3d/service/light-presets.service";
74
74
  import * as i39 from "../../../core/service/view-mode.service";
75
75
  import * as i40 from "../../lite-selector/lite-selector/lite-selector.component";
76
- import * as i41 from "../element-toolbar/element-toolbar.component";
77
- import * as i42 from "../element-buttons/element-buttons.component";
78
- import * as i43 from "../../../shared/toolbar-icon/toolbar-icon.component";
79
- import * as i44 from "../../lite-selector/lite-selector/component/animation/animation.component";
80
- import * as i45 from "../../lite-selector/lite-selector/component/customizer/customizer.component";
81
- import * as i46 from "../element-slider/element-slider.component";
82
- import * as i47 from "@angular/common";
83
- import * as i48 from "../../../core/pipe/localize.pipe";
76
+ import * as i41 from "../../product-configurator/product-configurator.component";
77
+ import * as i42 from "../element-toolbar/element-toolbar.component";
78
+ import * as i43 from "../element-buttons/element-buttons.component";
79
+ import * as i44 from "../../../shared/toolbar-icon/toolbar-icon.component";
80
+ import * as i45 from "../../lite-selector/lite-selector/component/animation/animation.component";
81
+ import * as i46 from "../../lite-selector/lite-selector/component/customizer/customizer.component";
82
+ import * as i47 from "../element-slider/element-slider.component";
83
+ import * as i48 from "@angular/common";
84
+ import * as i49 from "../../../core/pipe/localize.pipe";
84
85
  export class ThreedselectorComponent {
85
86
  constructor(screenSizeService, _dialog, _appService, _iOne, _messageBus, _loadFurnitureService, _buildFurnitureService, _integrationService, _dictionaryService, _toastService, _messageService, _sceneService, _dialogService, _cameraService, _presetsService, _itemService, _settingsService, _sceneOptionsService, _dimensionsService, _appEventService, _floorplanService, _floorService, _iconCacheService, _arService, _googleTagManager, _errorService, _rotationService, _roomService, _appStateService, _progressService, _animationService, _resizeService, _customizerService, _dynamicCameraService, _threedInPhotoInitializerService, _renderService, _newRenderService, _connectorAdapterService, _lightPresetService, _viewModeService) {
86
87
  this.screenSizeService = screenSizeService;
@@ -130,6 +131,7 @@ export class ThreedselectorComponent {
130
131
  this.editAddButtons = [];
131
132
  this.editCustomizeButton = [];
132
133
  this.resizeButtons = [];
134
+ this.animateEditAddButtons = false;
133
135
  this.selectedElementPosition = new Vector2();
134
136
  this.showElementToolbar = false;
135
137
  this.showLiteSelector = false;
@@ -144,6 +146,7 @@ export class ThreedselectorComponent {
144
146
  this.showLoader = true; // Show/Hide loader
145
147
  this.showProgressBar = true; // Show/Hide progress bar
146
148
  this.showProgressText = true; // Show/Hide progress text
149
+ this.showFullConfiguration = false;
147
150
  this._skuAlreadySet = false;
148
151
  this._itemsFromScratch = [];
149
152
  this._itemsNeedUserInput = [];
@@ -154,7 +157,7 @@ export class ThreedselectorComponent {
154
157
  ngOnInit() {
155
158
  this._subs.push(this._appEventService.answerCountReceived.subscribe((answerCount) => this._handleAnswerCountReceived(answerCount)), this._messageBus.subscribe(MessageType.LoadIOneFurnitureIntoSceneBySKU, ({ sku, settings, position }) => this._handleLoadIOneFurnitureIntoSceneBySKU(sku, settings, position)), this._messageBus.subscribe(MessageType.CopyIOneFurnitureIntoSceneBySKU, (original) => this._handleCopyIOneFurnitureIntoSceneBySKU(original)), this._buildFurnitureService.configureModeChanged.subscribe(configuringModeChange => this._handleConfigureModeChange(configuringModeChange)), this._buildFurnitureService.toggleSelectedElement.subscribe((element) => this._selectedElementToggle(element)), this._buildFurnitureService.buildFinished.subscribe((result) => this._handleBuildFinished(result)), this._buildFurnitureService.answerSelected.subscribe((result) => this._answerSelected(result)), this._sceneService.onAfterRender.subscribe(() => this._handleRender()), this._appService.skuSet.subscribe(sku => this._handleSkuSet(sku)), this._appEventService.articleInfoReceived.subscribe(info => this._handleInfoClick(info)), this._messageService.subscribe(MessageType.UndefinedErrorOccured, () => this._handleUndefinedErrorOccured()), this._presetsService.afterLoad.subscribe(() => this._afterLoadFromPreset()), this._messageBus.subscribe(MessageType.Undo, () => this._clearItems()), this._messageBus.subscribe(MessageType.Redo, () => this._clearItems()), this._messageBus.subscribe(MessageType.StartWithEmptyRoom, () => this._clearItems()), this._messageBus.subscribe(MessageType.StartWithPreset, () => this._clearItems()), this._messageBus.subscribe(MessageType.LoadRoomFromPreset, () => this._clearItems()), this._messageBus.subscribe(MessageType.LoadRoomFromCloud, () => this._clearItems()), this._messageBus.subscribe(MessageType.NewRoom, () => this._clearItems()), this._messageBus.subscribe(MessageType.ResetRoomplan, () => this._clearItems()), this._messageBus.subscribe(MessageType.LoadScaledDiagram, () => this._clearItems()), this._presetsService.beforeLoad.subscribe(() => this._clearItems()), this._messageService.subscribe(MessageType.ItemSelected, (item) => this.objectSelected(item)), this._messageService.subscribe(MessageType.ItemUnselected, () => this._removeButtons()), this.screenSizeService.screenSizeChanged.subscribe((info) => {
156
159
  this.shouldShowLabel = info.isPhoneSize;
157
- }), this._settingsService.settingsLoaded.subscribe((loaded) => {
160
+ }), this._messageService.subscribe(MessageType.ChangeArticleConfigurationType, (showFullConfig) => this._setTemplateType(showFullConfig)), this._settingsService.settingsLoaded.subscribe((loaded) => {
158
161
  if (loaded) {
159
162
  this.showSwapButton = !this._settingsService.settings.options.instantReplace;
160
163
  this.showProgressBar = this._settingsService.settings.options.showProgressBar;
@@ -162,6 +165,9 @@ export class ThreedselectorComponent {
162
165
  }
163
166
  }));
164
167
  this._addModelDialogToolbar();
168
+ if (this._iOne.article && this._iOne.article.showFullConfiguration) {
169
+ this.showFullConfiguration = this._iOne.article.showFullConfiguration;
170
+ }
165
171
  }
166
172
  ngOnDestroy() {
167
173
  this._subs.forEach(sub => sub.unsubscribe());
@@ -517,8 +523,10 @@ export class ThreedselectorComponent {
517
523
  // save camera settings for render
518
524
  this._cameraService.camera.updateMatrixWorld(true);
519
525
  this._newRenderService.standAloneCameraMatrix = Array.from(this._cameraService.camera.matrixWorldInverse.elements);
526
+ this._newRenderService.standAloneCameraFixedMatrix = Array.from(this._cameraService.camera.matrixWorld.elements);
520
527
  this._buildFurnitureService.standAloneFirstBuildReady = true;
521
528
  this._appEventService.readyToRender.next(true);
529
+ this._showPlusButtonsBriefly(item);
522
530
  });
523
531
  }
524
532
  _handleUndefinedErrorOccured() {
@@ -576,6 +584,44 @@ export class ThreedselectorComponent {
576
584
  }
577
585
  }
578
586
  }
587
+ _showPlusButtonsBriefly(item) {
588
+ if (!item) {
589
+ return;
590
+ }
591
+ item.traverse((child) => {
592
+ const selection = ObjectUtils.GetSelectionFromSelectedObject(child);
593
+ if (selection) {
594
+ const len = selection.decoNode ? selection.decoNode.connectors.length : 0;
595
+ for (let i = 0; i < len; i++) {
596
+ const conObject = this._getConnectorObject(child, selection.decoNode.connectors[i].connector);
597
+ const conObjectParent = ObjectUtils.GetParentCustomObject(conObject);
598
+ const existingButton = this.editAddButtons.find((eab) => {
599
+ return conObjectParent && ((eab.data.connectedTo === conObjectParent.name) || (eab.data.name === conObject.name));
600
+ }); // only unique buttons
601
+ if (!existingButton) {
602
+ if (conObject && this._canShowAddButton(selection.decoNode.connectors[i], conObject)) {
603
+ this.editAddButtons.push(new CustomButton('', () => {
604
+ this._handleAddButtonClick(selection, selection.decoNode.connectors[i], child);
605
+ }, conObject));
606
+ }
607
+ }
608
+ }
609
+ }
610
+ });
611
+ if (this.editAddButtons && this.editAddButtons.length > 0) {
612
+ setTimeout(() => {
613
+ this.showElementToolbar = true;
614
+ this._sceneService.needsRender = true;
615
+ this._repositionButtons();
616
+ this.animateEditAddButtons = true;
617
+ }, 200);
618
+ setTimeout(() => {
619
+ this.animateEditAddButtons = false;
620
+ this.showElementToolbar = false;
621
+ this._sceneService.needsRender = true;
622
+ }, 3000); // timeout time is coupled on animation duration in scss file
623
+ }
624
+ }
579
625
  _handleBuildFinished(result) {
580
626
  this._itemService.glassMaterialCheck(result.furniture);
581
627
  if (this.selectedElement && result.furniture) {
@@ -1132,12 +1178,15 @@ export class ThreedselectorComponent {
1132
1178
  }
1133
1179
  });
1134
1180
  }
1181
+ _setTemplateType(showFullConfiguration) {
1182
+ this.showFullConfiguration = showFullConfiguration;
1183
+ }
1135
1184
  }
1136
1185
  ThreedselectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ThreedselectorComponent, deps: [{ token: i1.ScreenSizeAnalysisService }, { token: i2.MatDialog }, { token: i3.HomedecoratorAppService }, { token: i4.HomedecoratorConnectorService }, { token: i5.MessageBusService }, { token: i6.LoadFurnitureService }, { token: i7.BuildFurnitureService }, { token: i8.IntegrationService }, { token: i9.HomedecoratorDictionaryService }, { token: i10.ToastService }, { token: i5.MessageBusService }, { token: i11.SceneService }, { token: i12.DialogService }, { token: i13.CameraService }, { token: i14.PresetsService }, { token: i15.ItemService }, { token: i16.HomedecoratorSettingsService }, { token: i17.SceneOptionsService }, { token: i18.DimensionsService }, { token: i19.HomedecoratorAppEventService }, { token: i20.FloorplanService }, { token: i21.FloorService }, { token: i22.HomedecoratorIconCacheService }, { token: i23.ArService }, { token: i24.GoogleTagManagerService }, { token: i25.ErrorService }, { token: i26.RotationService }, { token: i27.RoomService }, { token: i28.AppStateService }, { token: i29.ProgressService }, { token: i30.AnimationService }, { token: i31.ResizeService }, { token: i32.CustomizerService }, { token: i33.DynamicCameraService }, { token: i34.ThreedInPhotoInitializerService }, { token: i35.RenderService }, { token: i36.NewRenderService }, { token: i37.HomedecoratorConnectorAdapterService }, { token: i38.LightPresetsService }, { token: i39.ViewModeService }], target: i0.ɵɵFactoryTarget.Component });
1137
- ThreedselectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ThreedselectorComponent, selector: "rp-threedselector", inputs: { selections: "selections" }, outputs: { customizeButtonClicked: "customizeButtonClicked" }, viewQueries: [{ propertyName: "toolbarIconModels", first: true, predicate: ["toolbarIconModels"], descendants: true, static: true }, { propertyName: "selectedThreedObjectCustomizationSidebar", first: true, predicate: ["selectedThreedObjectCustomizationSidebar"], descendants: true, static: true }, { propertyName: "selectedThreedObjectAnimationSidebar", first: true, predicate: ["selectedThreedObjectAnimationSidebar"], descendants: true, static: true }, { propertyName: "customizeButtonClicked", first: true, predicate: ElementToolbarComponent, descendants: true, static: true }], ngImport: i0, template: "<rp-lite-selector *ngIf=\"!standAlone\" class=\"floating\"\r\n [(show)]=\"showLiteSelector\"\r\n [metadata]=\"activeMetadata\"\r\n [showSelections]=\"showSelections\"\r\n [showAnswers]=\"showAnswers\"\r\n (showChange)=\"handleShowChangeSelector($event)\"\r\n></rp-lite-selector>\r\n\r\n<ng-container *ngIf=\"standAlone\">\r\n <div *ngIf=\"showLoader && showProgressBar\" [class.full]=\"!showProgressText\" id=\"loader\">\r\n <p *ngIf=\"showProgressText\" id=\"loader-text\">{{ loaderText }}</p>\r\n <div id=\"progress-bar\">\r\n <div id=\"progress\" [style.width]=\"loaderProgress + '%'\"></div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"showElementToolbar\">\r\n <rp-element-toolbar class=\"rp-element-toolbar floating\" [class.custom]=\"standAlone\" @showElementToolbar\r\n [editMenu]=\"editElementMenu\"\r\n [showSwap]=\"showSwapButton\"\r\n [showPointer]=\"selectedElementPosition !== undefined\"\r\n (swapClicked)=\"swapElement()\"\r\n (deleteClicked)=\"deleteElement()\"\r\n (animationClicked)=\"openAnimationSidebar()\"\r\n ></rp-element-toolbar>\r\n <rp-element-buttons class=\"rp-element-buttons floating\" @showElementToolbar\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [addButtons]=\"editAddButtons\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [resizeButtons]=\"resizeButtons\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"showCustomizeButtons\">\r\n <rp-element-buttons class=\"rp-element-buttons floating\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n</ng-container>\r\n\r\n<ng-template #toolbarIconModels>\r\n <rp-toolbar-icon\r\n matIcon=\"list\"\r\n tooltip=\"{{iconName.Objects | localize}}\"\r\n (onClick)=\"setModelErrorDialog()\"\r\n [showLabel]=\"shouldShowLabel\"\r\n ></rp-toolbar-icon>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectAnimationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-title\" [textContent]=\"'ANIMATE' | localize\"></h2>\r\n </header>\r\n <rp-animation>\r\n\r\n </rp-animation>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectCustomizationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-title\" [textContent]=\"'CUSTOMIZE' | localize\"></h2>\r\n </header>\r\n <rp-customizer\r\n [selection]=\"selectionToCustomize\"\r\n ></rp-customizer>\r\n</ng-template>\r\n\r\n<div class=\"slider-container\">\r\n <rp-element-slider class=\"rp-element-slider\"></rp-element-slider>\r\n</div>\r\n", styles: [":host{position:absolute;top:0;left:0;pointer-events:none;margin:0;padding:0;width:100%;height:100%;overflow:hidden}:host>*{pointer-events:all}.input-wrapper{display:flex;flex-direction:column}.flex-wrap{display:flex;flex-flow:column nowrap;height:100%}.logo-menu-5th{position:absolute;top:220px;left:84px}.logo-menu-5th.front .mat-raised-button{width:170px;text-align:left}.sidebar{position:absolute;left:0;top:0;height:100vh;max-width:30%;width:400px;background:#fff;padding:0 20px;box-shadow:0 0 20px #00000040}.on-top{z-index:3}.solid-background{fill:#fff;background:white}.solid-background>*{fill:#fff;background:white}.button-close{height:36px;width:36px;min-width:initial;padding:0;border:none;position:absolute;right:20px;top:15px;border-radius:50%}.remove-all{position:absolute;top:15px;right:71px}#loader{width:300px;position:fixed;top:25%;left:50%;margin-left:-200px;background-color:#fff;border-radius:15px;transform:translate(-50%,-50%);text-align:center;font-family:\"Public sans\",serif;z-index:1000;box-sizing:border-box;padding:15px}#loader.full{width:100%;top:0;left:0;margin-left:0;border-radius:0;transform:none;z-index:auto;padding:0;position:absolute}#loader.full #progress-bar{width:100%;height:5px;border:none;margin-top:0;border-radius:0}#loader-text{font-family:\"Public sans\",serif;font-size:15px}#progress-bar{width:270px;height:20px;border:1px solid transparent;background:#e0e0e0;position:relative;margin-top:10px;border-radius:15px;overflow:hidden}#progress{height:100%;width:0;background:#da9803;transition:width .3s}\n"], components: [{ type: i40.LiteSelectorComponent, selector: "rp-lite-selector", inputs: ["showAnswers", "show", "showSelections", "showLabel", "canClose", "metadata", "customDimensions"], outputs: ["showChange", "answerChosen"] }, { type: i41.ElementToolbarComponent, selector: "rp-element-toolbar", inputs: ["editMenu", "showPointer", "showSwap"], outputs: ["deleteClicked", "swapClicked", "animationClicked"] }, { type: i42.ElementButtonsComponent, selector: "rp-element-buttons", inputs: ["addButtons", "customizeButtons", "resizeButtons", "elementPointer", "elementPosition"], outputs: ["customizeButtonClicked"] }, { type: i43.ToolbarIconComponent, selector: "rp-toolbar-icon", inputs: ["matIcon", "svgIcon", "tooltip", "disabled", "showLabel"], outputs: ["onClick"] }, { type: i44.AnimationComponent, selector: "rp-animation" }, { type: i45.CustomizerComponent, selector: "rp-customizer", inputs: ["selection"] }, { type: i46.ElementSliderComponent, selector: "rp-element-slider" }], directives: [{ type: i47.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": i48.LocalizePipe }, animations: [
1186
+ ThreedselectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ThreedselectorComponent, selector: "rp-threedselector", inputs: { selections: "selections" }, outputs: { customizeButtonClicked: "customizeButtonClicked" }, viewQueries: [{ propertyName: "toolbarIconModels", first: true, predicate: ["toolbarIconModels"], descendants: true, static: true }, { propertyName: "selectedThreedObjectCustomizationSidebar", first: true, predicate: ["selectedThreedObjectCustomizationSidebar"], descendants: true, static: true }, { propertyName: "selectedThreedObjectAnimationSidebar", first: true, predicate: ["selectedThreedObjectAnimationSidebar"], descendants: true, static: true }, { propertyName: "customizeButtonClicked", first: true, predicate: ElementToolbarComponent, descendants: true, static: true }], ngImport: i0, template: "<rp-lite-selector *ngIf=\"!standAlone && !showFullConfiguration\" class=\"floating\"\r\n [(show)]=\"showLiteSelector\"\r\n [metadata]=\"activeMetadata\"\r\n [showSelections]=\"showSelections\"\r\n [showAnswers]=\"showAnswers\"\r\n (showChange)=\"handleShowChangeSelector($event)\"\r\n></rp-lite-selector>\r\n\r\n<rp-product-configurator\r\n *ngIf=\"!standAlone && showFullConfiguration\" class=\"floating\"\r\n [(show)]=\"showLiteSelector\"\r\n [metadata]=\"activeMetadata\"\r\n [showSelections]=\"showSelections\"\r\n (showChange)=\"handleShowChangeSelector($event)\"\r\n>\r\n</rp-product-configurator>\r\n\r\n\r\n<ng-container *ngIf=\"standAlone\">\r\n <div *ngIf=\"showLoader && showProgressBar\" [class.full]=\"!showProgressText\" id=\"loader\">\r\n <p *ngIf=\"showProgressText\" id=\"loader-text\">{{ loaderText }}</p>\r\n <div id=\"progress-bar\">\r\n <div id=\"progress\" [style.width]=\"loaderProgress + '%'\"></div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"showElementToolbar\">\r\n <rp-element-toolbar class=\"rp-element-toolbar floating\" [class.custom]=\"standAlone\" @showElementToolbar\r\n [editMenu]=\"editElementMenu\"\r\n [showSwap]=\"showSwapButton\"\r\n [showPointer]=\"selectedElementPosition !== undefined\"\r\n (swapClicked)=\"swapElement()\"\r\n (deleteClicked)=\"deleteElement()\"\r\n (animationClicked)=\"openAnimationSidebar()\"\r\n ></rp-element-toolbar>\r\n <rp-element-buttons class=\"rp-element-buttons floating\" [class.animate]=\"animateEditAddButtons\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [addButtons]=\"editAddButtons\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [resizeButtons]=\"resizeButtons\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"showCustomizeButtons\">\r\n <rp-element-buttons class=\"rp-element-buttons floating\" [class.animate]=\"animateEditAddButtons\"\r\n [elementPointer]=\"elementToolbar?.elementPointer\"\r\n [customizeButtons]=\"editCustomizeButton\"\r\n [elementPosition]=\"selectedElementPosition\"\r\n (customizeButtonClicked)=\"handleCustomizeClick()\"\r\n ></rp-element-buttons>\r\n</ng-container>\r\n\r\n<ng-template #toolbarIconModels>\r\n <rp-toolbar-icon\r\n matIcon=\"list\"\r\n tooltip=\"{{iconName.Objects | localize}}\"\r\n (onClick)=\"setModelErrorDialog()\"\r\n [showLabel]=\"shouldShowLabel\"\r\n ></rp-toolbar-icon>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectAnimationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-title\" [textContent]=\"'ANIMATE' | localize\"></h2>\r\n </header>\r\n <rp-animation>\r\n\r\n </rp-animation>\r\n</ng-template>\r\n\r\n<ng-template #selectedThreedObjectCustomizationSidebar>\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-title\" [textContent]=\"'CUSTOMIZE' | localize\"></h2>\r\n </header>\r\n <rp-customizer\r\n [selection]=\"selectionToCustomize\"\r\n ></rp-customizer>\r\n</ng-template>\r\n\r\n<div class=\"slider-container\">\r\n <rp-element-slider class=\"rp-element-slider\"></rp-element-slider>\r\n</div>\r\n", styles: [":host{position:absolute;top:0;left:0;pointer-events:none;margin:0;padding:0;width:100%;height:100%;overflow:hidden}:host .rp-element-buttons.animate ::ng-deep .element-add-button{animation-name:pulse-add-buttons;animation-duration:.4s;animation-iteration-count:6;animation-direction:alternate}:host>*{pointer-events:all}.input-wrapper{display:flex;flex-direction:column}.flex-wrap{display:flex;flex-flow:column nowrap;height:100%}.logo-menu-5th{position:absolute;top:220px;left:84px}.logo-menu-5th.front .mat-raised-button{width:170px;text-align:left}.sidebar{position:absolute;left:0;top:0;height:100vh;max-width:30%;width:400px;background:#fff;padding:0 20px;box-shadow:0 0 20px #00000040}.on-top{z-index:3}.solid-background{fill:#fff;background:white}.solid-background>*{fill:#fff;background:white}.button-close{height:36px;width:36px;min-width:initial;padding:0;border:none;position:absolute;right:20px;top:15px;border-radius:50%}.remove-all{position:absolute;top:15px;right:71px}#loader{width:300px;position:fixed;top:25%;left:50%;margin-left:-200px;background-color:#fff;border-radius:15px;transform:translate(-50%,-50%);text-align:center;font-family:\"Public sans\",serif;z-index:1000;box-sizing:border-box;padding:15px}#loader.full{width:100%;top:0;left:0;margin-left:0;border-radius:0;transform:none;z-index:auto;padding:0;position:absolute}#loader.full #progress-bar{width:100%;height:5px;border:none;margin-top:0;border-radius:0}#loader-text{font-family:\"Public sans\",serif;font-size:15px}#progress-bar{width:270px;height:20px;border:1px solid transparent;background:#e0e0e0;position:relative;margin-top:10px;border-radius:15px;overflow:hidden}#progress{height:100%;width:0;background:#da9803;transition:width .3s}@keyframes pulse-add-buttons{50%{box-shadow:0 0 20px #ff5c33}}\n"], components: [{ type: i40.LiteSelectorComponent, selector: "rp-lite-selector", inputs: ["showAnswers", "show", "showSelections", "showLabel", "canClose", "metadata", "customDimensions"], outputs: ["showChange", "answerChosen"] }, { type: i41.ProductConfiguratorComponent, selector: "rp-product-configurator", inputs: ["show", "showHeaderInformation", "showSelections", "showLabel", "canClose", "metadata", "customDimensions"], outputs: ["showChange", "answerChosen"] }, { type: i42.ElementToolbarComponent, selector: "rp-element-toolbar", inputs: ["editMenu", "showPointer", "showSwap"], outputs: ["deleteClicked", "swapClicked", "animationClicked"] }, { type: i43.ElementButtonsComponent, selector: "rp-element-buttons", inputs: ["addButtons", "customizeButtons", "resizeButtons", "elementPointer", "elementPosition"], outputs: ["customizeButtonClicked"] }, { type: i44.ToolbarIconComponent, selector: "rp-toolbar-icon", inputs: ["matIcon", "svgIcon", "tooltip", "disabled", "showLabel"], outputs: ["onClick"] }, { type: i45.AnimationComponent, selector: "rp-animation" }, { type: i46.CustomizerComponent, selector: "rp-customizer", inputs: ["selection"] }, { type: i47.ElementSliderComponent, selector: "rp-element-slider" }], directives: [{ type: i48.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": i49.LocalizePipe }, animations: [
1138
1187
  trigger('showElementToolbar', [
1139
- state('void', style({ 'opacity': '0' })),
1140
- state('*', style({ 'opacity': '1' })),
1188
+ state('void', style({ opacity: 0 })),
1189
+ state('*', style({ opacity: 1 })),
1141
1190
  transition('void => *', animate('500ms ease'))
1142
1191
  ])
1143
1192
  ] /*,
@@ -1150,8 +1199,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
1150
1199
  styleUrls: ['./threedselector.component.scss'],
1151
1200
  animations: [
1152
1201
  trigger('showElementToolbar', [
1153
- state('void', style({ 'opacity': '0' })),
1154
- state('*', style({ 'opacity': '1' })),
1202
+ state('void', style({ opacity: 0 })),
1203
+ state('*', style({ opacity: 1 })),
1155
1204
  transition('void => *', animate('500ms ease'))
1156
1205
  ])
1157
1206
  ] /*,
@@ -1174,4 +1223,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
1174
1223
  }], selections: [{
1175
1224
  type: Input
1176
1225
  }] } });
1177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWVkc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFlLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQVksYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUkxRyxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRS9FLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNyRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFXLFFBQVEsRUFBRSxhQUFhLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRixPQUFPLEVBQUMsVUFBVSxFQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxlQUFlLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUd2RyxPQUFP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RUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDOzRCQUNuQyxVQUFVLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQzt5QkFDL0MsQ0FBQztxQkFDSCxDQUFBO3FFQUNnRDtpQkFDbEQ7dTVDQUlpRCxpQkFBaUI7c0JBQWhFLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUN5Qix3Q0FBd0M7c0JBQTlHLFNBQVM7dUJBQUMsMENBQTBDLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNGLG9DQUFvQztzQkFBdEcsU0FBUzt1QkFBQyxzQ0FBc0MsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSTFELHNCQUFzQjtzQkFINUIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7O3NCQUVqRCxNQUFNO2dCQUlBLFVBQVU7c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29sb3IsIEV1bGVyLCBNZXNoLCBPYmplY3QzRCwgUGxhbmVHZW9tZXRyeSwgU2hhcGUsIFNoYXBlR2VvbWV0cnksIFZlY3RvcjIsIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb24nO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQge0FydGljbGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZSc7XHJcbmltcG9ydCB7SWNvbk5hbWV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9pY29uLW5hbWUuZW51bSc7XHJcbmltcG9ydCB7RWxlbWVudFRvb2xiYXJDb21wb25lbnR9IGZyb20gJy4uL2VsZW1lbnQtdG9vbGJhci9lbGVtZW50LXRvb2xiYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtDdXN0b21CdXR0b259IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvY3VzdG9tLWJ1dHRvbic7XHJcbmltcG9ydCB7SGFsZkVkZ2UsIFdhbGxJdGVtLCBXYWxsSXRlbUdyb3VwfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1vYmplY3RzJztcclxuaW1wb3J0IHtDdXN0b21NZXNoLCBDdXN0b21PYmplY3QzRH0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1vYmplY3RzJztcclxuaW1wb3J0IHtpc0l0ZW1Hcm91cFR5cGUsIGlzV2FsbEl0ZW1Hcm91cFR5cGUsIGl0ZW1UeXBlRnJvbVBsYWNlbWVudH0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2ZhY3RvcnknO1xyXG5pbXBvcnQge01ldGFkYXRhfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvbWV0YWRhdGEnO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtR3JvdXB9IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtLWdyb3VwJztcclxuaW1wb3J0IHtDdXN0b21GbG9vckdyb3VwUmVzdWx0fSBmcm9tICcuLi8uLi9jb3JlM2QvbW9kZWwvY3VzdG9tLWZsb29yLWdyb3VwLXJlc3VsdCc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtTY3JlZW5TaXplQW5hbHlzaXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2NyZWVuLXNpemUtYW5hbHlzaXMvc2NyZWVuLXNpemUtYW5hbHlzaXMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7TG9hZEZ1cm5pdHVyZVNlcnZpY2V9IGZyb20gJy4vc2VydmljZS9sb2FkLWZ1cm5pdHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdWlsZEZ1cm5pdHVyZVNlcnZpY2UsIENvbmZpZ3VyaW5nTW9kZUNoYW5nZUludGVyZmFjZX0gZnJvbSAnLi9zZXJ2aWNlL2J1aWxkLWZ1cm5pdHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJbnRlZ3JhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9pbnRlZ3JhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yRGljdGlvbmFyeVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWRpY3Rpb25hcnkuc2VydmljZSc7XHJcbmltcG9ydCB7VG9hc3RTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGlhbG9nL3NlcnZpY2UvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVPcHRpb25zU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUtb3B0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHtEaW1lbnNpb25zU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlL2RpbWVuc2lvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29ycGxhblNlcnZpY2V9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL2Zsb29ycGxhbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1pY29uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FyU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvYXIuc2VydmljZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Vycm9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2Vycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JvdGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvcm90YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7Um9vbVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL3Jvb20uc2VydmljZSc7XHJcbmltcG9ydCB7QXBwU3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvYXBwLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Byb2dyZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3Byb2dyZXNzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FuaW1hdGlvblNlcnZpY2V9IGZyb20gJy4vc2VydmljZS9hbmltYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7UmVzaXplU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlL3Jlc2l6ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDdXN0b21pemVyU2VydmljZX0gZnJvbSAnLi4vLi4vbGl0ZS1zZWxlY3Rvci9saXRlLXNlbGVjdG9yL3NlcnZpY2UvY3VzdG9taXplci5zZXJ2aWNlJztcclxuaW1wb3J0IHtEeW5hbWljQ2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2R5bmFtaWMtY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RocmVlZEluUGhvdG9Jbml0aWFsaXplclNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZC1pbi1waG90by9zZXJ2aWNlcy90aHJlZWQtaW4tcGhvdG8taW5pdGlhbGl6ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7UmVuZGVyU2VydmljZX0gZnJvbSAnLi4vLi4vcmVuZGVyL3NlcnZpY2UvcmVuZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge05ld1JlbmRlclNlcnZpY2V9IGZyb20gJy4uLy4uL3JlbmRlci9zZXJ2aWNlL25ldy1yZW5kZXIuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtTY3JlZW5TaXplSW5mb30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NjcmVlbi1zaXplLWFuYWx5c2lzL3NjcmVlbi1zaXplLWluZm8nO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL29iamVjdC51dGlscyc7XHJcbmltcG9ydCB7TW9kZWxEaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbC1kaWFsb2cvbW9kZWwtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7U2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9pbnRlcmZhY2Uvc2NlbmUtb3B0aW9uLWJ1dHRvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtEaWFsb2dDb25maWd9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kaWFsb2cvaW50ZXJmYWNlL2RpYWxvZy1jb25maWcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtEaWFsb2dUeXBlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGlhbG9nL2VudW0vZGlhbG9nLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7RXJyb3JNZXNzYWdlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL2Vycm9yLW1lc3NhZ2UnO1xyXG5pbXBvcnQge1Jlc3VsdFR5cGV9IGZyb20gJy4uLy4uL2NvcmUzZC9lbnVtL3Jlc3VsdC10eXBlLmVudW0nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JFeHRlcm5hbFNldHRpbmdzSW50ZXJmYWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9ob21lZGVjb3JhdG9yLWV4dGVybmFsLXNldHRpbmdzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7VG9hc3R9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvdG9hc3QnO1xyXG5pbXBvcnQge0RyYWdnZWREYXRhfSBmcm9tICcuLi8uLi9jb3JlM2QvaW50ZXJmYWNlL2RyYWdnZWQtZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtDdXN0b21XYWxsRmxvb3JJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLXdhbGwtZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7Q3VzdG9tV2FsbEl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20td2FsbC1pdGVtJztcclxuaW1wb3J0IHtHb29nbGVUYWdNYW5hZ2VyRXZlbnR9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9nb29nbGUtdGFnLW1hbmFnZXItZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7Q2FtZXJhU2V0dGluZ3NEaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jYW1lcmEtc2V0dGluZ3MtZGlhbG9nL2NhbWVyYS1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtIZGVjb1BsYWNlbWVudH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL2hkZWNvLXBsYWNlbWVudC5lbnVtJztcclxuaW1wb3J0IHtMaWdodFByZXNldHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9saWdodC1wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FydGljbGVFeHRlbmRlZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC5ibyc7XHJcbmltcG9ydCB7Vmlld01vZGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2Uvdmlldy1tb2RlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC10aHJlZWRzZWxlY3RvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RocmVlZHNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90aHJlZWRzZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ3Nob3dFbGVtZW50VG9vbGJhcicsIFtcclxuICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7J29wYWNpdHknOiAnMCd9KSksXHJcbiAgICAgIHN0YXRlKCcqJywgc3R5bGUoeydvcGFjaXR5JzogJzEnfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBhbmltYXRlKCc1MDBtcyBlYXNlJykpXHJcbiAgICBdKVxyXG4gIF0vKixcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCovXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaHJlZWRzZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwdWJsaWMgcmVhZG9ubHkgaWNvbk5hbWU6IHR5cGVvZiBJY29uTmFtZSA9IEljb25OYW1lO1xyXG5cclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvbk1vZGVscycsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbk1vZGVsczogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RlZFRocmVlZE9iamVjdEN1c3RvbWl6YXRpb25TaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlbGVjdGVkVGhyZWVkT2JqZWN0Q3VzdG9taXphdGlvblNpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRUaHJlZWRPYmplY3RBbmltYXRpb25TaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlbGVjdGVkVGhyZWVkT2JqZWN0QW5pbWF0aW9uU2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKEVsZW1lbnRUb29sYmFyQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSlcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGN1c3RvbWl6ZUJ1dHRvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2VsZWN0aW9uczogU2VsZWN0aW9uW10gPSBbXTtcclxuICBwdWJsaWMgZWxlbWVudFRvb2xiYXI6IEVsZW1lbnRUb29sYmFyQ29tcG9uZW50O1xyXG5cclxuICBwdWJsaWMgZWRpdEVsZW1lbnRNZW51OiBDdXN0b21CdXR0b25bXSA9IFtdO1xyXG4gIHB1YmxpYyBlZGl0QWRkQnV0dG9uczogQ3VzdG9tQnV0dG9uW10gPSBbXTtcclxuICBwdWJsaWMgZWRpdEN1c3RvbWl6ZUJ1dHRvbjogQ3VzdG9tQnV0dG9uW10gPSBbXTtcclxuICBwdWJsaWMgcmVzaXplQnV0dG9uczogQ3VzdG9tQnV0dG9uW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHNlbGVjdGVkRWxlbWVudFBvc2l0aW9uOiBWZWN0b3IyID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbiAgcHVibGljIHNob3dFbGVtZW50VG9vbGJhciA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93TGl0ZVNlbGVjdG9yID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTZWxlY3Rpb25zID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dBbnN3ZXJzID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dDdXN0b21pemVCdXR0b25zID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dTd2FwQnV0dG9uID0gdHJ1ZTtcclxuICBwdWJsaWMgc3RhbmRBbG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG91bGRTaG93TGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYWN0aXZlTWV0YWRhdGE6IE1ldGFkYXRhO1xyXG4gIHB1YmxpYyBzZWxlY3Rpb25Ub0N1c3RvbWl6ZTogYW55O1xyXG4gIHB1YmxpYyBzZWxlY3RlZE9iamVjdDogSXRlbSB8IEl0ZW1Hcm91cDtcclxuICBwdWJsaWMgc2VsZWN0ZWRFbGVtZW50OiBNZXNoO1xyXG5cclxuICBwdWJsaWMgbG9hZGVyUHJvZ3Jlc3M6IG51bWJlciA9IDA7IC8vIFByb2dyZXNzIHBlcmNlbnRhZ2VcclxuICBwdWJsaWMgbG9hZGVyVGV4dDogc3RyaW5nID0gJ0luaXRpYWxpemluZy4uLic7IC8vIExvYWRlciB0ZXh0IG1lc3NhZ2VcclxuICBwdWJsaWMgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWU7IC8vIFNob3cvSGlkZSBsb2FkZXJcclxuICBwdWJsaWMgc2hvd1Byb2dyZXNzQmFyOiBib29sZWFuID0gdHJ1ZTsgLy8gU2hvdy9IaWRlIHByb2dyZXNzIGJhclxyXG4gIHB1YmxpYyBzaG93UHJvZ3Jlc3NUZXh0OiBib29sZWFuID0gdHJ1ZTsgLy8gU2hvdy9IaWRlIHByb2dyZXNzIHRleHRcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFbGVtZW50T2JqZWN0OiBDdXN0b21PYmplY3QzRDtcclxuICBwcml2YXRlIF9za3VBbHJlYWR5U2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXRlbXNGcm9tU2NyYXRjaDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdFtdID0gW107XHJcbiAgcHJpdmF0ZSBfaXRlbXNOZWVkVXNlcklucHV0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0W10gPSBbXTtcclxuICBwcml2YXRlIF9zdGFuZGFsb25lRmxvb3JzOiBUZXh0dXJlW107XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9sb2FkaW5nRnJvbVByZXNldDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NhbGxCYWNrRm5XaGVuQnVpbGRGaW5pc2hlZDogRnVuY3Rpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHNjcmVlblNpemVTZXJ2aWNlOiBTY3JlZW5TaXplQW5hbHlzaXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF9hcHBTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgX2lPbmU6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1czogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sb2FkRnVybml0dXJlU2VydmljZTogTG9hZEZ1cm5pdHVyZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9idWlsZEZ1cm5pdHVyZVNlcnZpY2U6IEJ1aWxkRnVybml0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2ludGVncmF0aW9uU2VydmljZTogSW50ZWdyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGljdGlvbmFyeVNlcnZpY2U6IEhvbWVkZWNvcmF0b3JEaWN0aW9uYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ByZXNldHNTZXJ2aWNlOiBQcmVzZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lT3B0aW9uc1NlcnZpY2U6IFNjZW5lT3B0aW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaW1lbnNpb25zU2VydmljZTogRGltZW5zaW9uc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vcnBsYW5TZXJ2aWNlOiBGbG9vcnBsYW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JTZXJ2aWNlOiBGbG9vclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pY29uQ2FjaGVTZXJ2aWNlOiBIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FyU2VydmljZTogQXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZ29vZ2xlVGFnTWFuYWdlcjogR29vZ2xlVGFnTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JvdGF0aW9uU2VydmljZTogUm90YXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcm9ncmVzc1NlcnZpY2U6IFByb2dyZXNzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yZXNpemVTZXJ2aWNlOiBSZXNpemVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY3VzdG9taXplclNlcnZpY2U6IEN1c3RvbWl6ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZHluYW1pY0NhbWVyYVNlcnZpY2U6IER5bmFtaWNDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdGhyZWVkSW5QaG90b0luaXRpYWxpemVyU2VydmljZTogVGhyZWVkSW5QaG90b0luaXRpYWxpemVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3JlbmRlclNlcnZpY2U6IFJlbmRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9uZXdSZW5kZXJTZXJ2aWNlOiBOZXdSZW5kZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29ubmVjdG9yQWRhcHRlclNlcnZpY2U6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2xpZ2h0UHJlc2V0U2VydmljZTogTGlnaHRQcmVzZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ZpZXdNb2RlU2VydmljZTogVmlld01vZGVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9wcmVzZXRzU2VydmljZS5yZWdpc3Rlcih0aGlzKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuYW5zd2VyQ291bnRSZWNlaXZlZC5zdWJzY3JpYmUoKGFuc3dlckNvdW50OiBudW1iZXIpID0+IHRoaXMuX2hhbmRsZUFuc3dlckNvdW50UmVjZWl2ZWQoYW5zd2VyQ291bnQpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZElPbmVGdXJuaXR1cmVJbnRvU2NlbmVCeVNLVSxcclxuICAgICAgICAoe3NrdSwgc2V0dGluZ3MsIHBvc2l0aW9ufTogeyBza3U6IHN0cmluZywgc2V0dGluZ3M6IGFueSwgcG9zaXRpb246IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo/OiBudW1iZXIgfSB9KSA9PlxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlTG9hZElPbmVGdXJuaXR1cmVJbnRvU2NlbmVCeVNLVShza3UsIHNldHRpbmdzLCBwb3NpdGlvbilcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuQ29weUlPbmVGdXJuaXR1cmVJbnRvU2NlbmVCeVNLVSwgKG9yaWdpbmFsOiBJdGVtKSA9PlxyXG4gICAgICAgIHRoaXMuX2hhbmRsZUNvcHlJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1Uob3JpZ2luYWwpXHJcbiAgICAgICksXHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jb25maWd1cmVNb2RlQ2hhbmdlZC5zdWJzY3JpYmUoY29uZmlndXJpbmdNb2RlQ2hhbmdlID0+XHJcbiAgICAgICAgdGhpcy5faGFuZGxlQ29uZmlndXJlTW9kZUNoYW5nZShjb25maWd1cmluZ01vZGVDaGFuZ2UpKSxcclxuICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLnRvZ2dsZVNlbGVjdGVkRWxlbWVudC5zdWJzY3JpYmUoKGVsZW1lbnQ6IE1lc2gpID0+IHRoaXMuX3NlbGVjdGVkRWxlbWVudFRvZ2dsZShlbGVtZW50KSksXHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5idWlsZEZpbmlzaGVkLnN1YnNjcmliZSgocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KSA9PiB0aGlzLl9oYW5kbGVCdWlsZEZpbmlzaGVkKHJlc3VsdCkpLFxyXG4gICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuYW5zd2VyU2VsZWN0ZWQuc3Vic2NyaWJlKChyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpID0+IHRoaXMuX2Fuc3dlclNlbGVjdGVkKHJlc3VsdCkpLFxyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uub25BZnRlclJlbmRlci5zdWJzY3JpYmUoKCkgPT4gdGhpcy5faGFuZGxlUmVuZGVyKCkpLFxyXG4gICAgICB0aGlzLl9hcHBTZXJ2aWNlLnNrdVNldC5zdWJzY3JpYmUoc2t1ID0+IHRoaXMuX2hhbmRsZVNrdVNldChza3UpKSxcclxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLmFydGljbGVJbmZvUmVjZWl2ZWQuc3Vic2NyaWJlKGluZm8gPT4gdGhpcy5faGFuZGxlSW5mb0NsaWNrKGluZm8pKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlVuZGVmaW5lZEVycm9yT2NjdXJlZCwgKCkgPT4gdGhpcy5faGFuZGxlVW5kZWZpbmVkRXJyb3JPY2N1cmVkKCkpLFxyXG4gICAgICB0aGlzLl9wcmVzZXRzU2VydmljZS5hZnRlckxvYWQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2FmdGVyTG9hZEZyb21QcmVzZXQoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlVuZG8sICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlJlZG8sICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlN0YXJ0V2l0aEVtcHR5Um9vbSwgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU3RhcnRXaXRoUHJlc2V0LCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkUm9vbUZyb21QcmVzZXQsICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRSb29tRnJvbUNsb3VkLCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5OZXdSb29tLCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5SZXNldFJvb21wbGFuLCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkU2NhbGVkRGlhZ3JhbSwgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fcHJlc2V0c1NlcnZpY2UuYmVmb3JlTG9hZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkl0ZW1TZWxlY3RlZCwgKGl0ZW0pID0+IHRoaXMub2JqZWN0U2VsZWN0ZWQoaXRlbSkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuSXRlbVVuc2VsZWN0ZWQsICgpID0+IHRoaXMuX3JlbW92ZUJ1dHRvbnMoKSksXHJcbiAgICAgIHRoaXMuc2NyZWVuU2l6ZVNlcnZpY2Uuc2NyZWVuU2l6ZUNoYW5nZWQuc3Vic2NyaWJlKChpbmZvOiBTY3JlZW5TaXplSW5mbykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvdWxkU2hvd0xhYmVsID0gaW5mby5pc1Bob25lU2l6ZTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5nc0xvYWRlZC5zdWJzY3JpYmUoKGxvYWRlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChsb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd1N3YXBCdXR0b24gPSAhdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuaW5zdGFudFJlcGxhY2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzc0JhciA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dQcm9ncmVzc0JhcjtcclxuICAgICAgICAgIHRoaXMuc2hvd1Byb2dyZXNzVGV4dCA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dQcm9ncmVzc1RleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLl9hZGRNb2RlbERpYWxvZ1Rvb2xiYXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY29weVNjZW5lSW5zdGFuY2Uoc2F2ZUFzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoLyohdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLmlzUHJpdmF0ZSAmJiAqL3NhdmVBcykge1xyXG4gICAgICBjb25zdCBmdXJuaXR1cmUgPSB0aGlzLl9pdGVtU2VydmljZS5nZXRJT25lRnVybml0dXJlKCk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVDb3B5SW5zdGFuY2VGb3JGdXJuaXR1cmUoZnVybml0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkT2JqZWN0cyh7ZnVybml0dXJlfSk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAoIWZ1cm5pdHVyZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2xvYWRpbmdGcm9tUHJlc2V0ID0gdHJ1ZTtcclxuICAgIGNvbnN0IGlPTkVPYmplY3RzVG9Mb2FkID0gZnVybml0dXJlLmZpbHRlcihvID0+IHRoaXMuX2lzSU9ORU9iamVjdChvKSk7XHJcbiAgICBmdXJuaXR1cmVcclxuICAgICAgLmZpbHRlcigobykgPT4gaXNJdGVtR3JvdXBUeXBlKG8uaXRlbV90eXBlKSlcclxuICAgICAgLmZvckVhY2goZyA9PiB7XHJcbiAgICAgICAgbGV0IGdyb3VwQWRkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBpdGVtR3JvdXAgPSBpc1dhbGxJdGVtR3JvdXBUeXBlKGcuaXRlbV90eXBlKSA/IG5ldyBXYWxsSXRlbUdyb3VwKCkgOiBuZXcgSXRlbUdyb3VwKCk7XHJcbiAgICAgICAgaXRlbUdyb3VwLmxvY2tlZCA9IGcubG9ja2VkO1xyXG4gICAgICAgIGl0ZW1Hcm91cC5wb3NpdGlvbi5zZXQoZy54cG9zLCBnLnlwb3MsIGcuenBvcyk7XHJcbiAgICAgICAgaXRlbUdyb3VwLnJvdGF0aW9uLnNldCgwLCBnLnJvdGF0aW9uLCAwKTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGcuY2hpbGRyZW47XHJcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjaCA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5faXNJT05FT2JqZWN0KGNoKSkge1xyXG4gICAgICAgICAgICBpZiAoIWdyb3VwQWRkZWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9pdGVtU2VydmljZS5hZGRJdGVtKGl0ZW1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgZ3JvdXBBZGRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2guaXRlbUdyb3VwID0gaXRlbUdyb3VwO1xyXG4gICAgICAgICAgICBpT05FT2JqZWN0c1RvTG9hZC5wdXNoKGNoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZUxvYWRJT25lRnVybml0dXJlRnJvbVByZXNldChpT05FT2JqZWN0c1RvTG9hZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T2JqZWN0cygpOiBhbnkge1xyXG4gICAgLy8gcmV0dXJuIHtmdXJuaXR1cmU6IHRoaXMudGhyZWVTZXJ2aWNlLm1vZGVsLnNhdmVGdXJuaXR1cmUoKX07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb2JqZWN0U2VsZWN0ZWQob2JqZWN0OiBJdGVtIHwgSXRlbUdyb3VwKSB7XHJcbiAgICB0aGlzLl9yZW1vdmVDdXN0b21CdXR0b25zKCk7XHJcbiAgICB0aGlzLnNob3dDdXN0b21pemVCdXR0b25zID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QgPSBvYmplY3Q7XHJcbiAgICBvYmplY3QudHJhdmVyc2UoKGNoaWxkKSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1c3RvbWl6ZUJ1dHRvbjogYW55ID0gY2hpbGQubmFtZSAmJiBjaGlsZC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgncF8nKTtcclxuICAgICAgaWYgKGN1c3RvbWl6ZUJ1dHRvbikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uVG9DdXN0b21pemUgPSBjaGlsZC5wYXJlbnQ7XHJcbiAgICAgICAgdGhpcy5lZGl0Q3VzdG9taXplQnV0dG9uLnB1c2gobmV3IEN1c3RvbUJ1dHRvbignJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUN1c3RvbWl6ZUNsaWNrKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25Ub0N1c3RvbWl6ZSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2hhbmRsZVJlbmRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUN1c3RvbWl6ZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY3VzdG9taXplclNlcnZpY2Uuc2VsZWN0ZWRPYmplY3QgPSB0aGlzLnNlbGVjdGlvblRvQ3VzdG9taXplO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5zZWxlY3RlZFRocmVlZE9iamVjdEN1c3RvbWl6YXRpb25TaWRlYmFyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzd2FwRWxlbWVudCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpIHtcclxuICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLnJlcGxhY2VTZWxlY3Rpb24oT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCksIHRoaXMuYWN0aXZlTWV0YWRhdGEpO1xyXG4gICAgICBpZiAoIXRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmluc3RhbnRSZXBsYWNlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRTZWxlY3RlZEVsZW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUVsZW1lbnQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5kZWxldGVTZWxlY3Rpb24oT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCksIHRoaXMuYWN0aXZlTWV0YWRhdGEpO1xyXG4gICAgICB0aGlzLl9yZXNldFNlbGVjdGVkRWxlbWVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEVsZW1lbnRSZXBsYWNlKHJlYnVpbGQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmNhbmNlbEFuc3dlcih0aGlzLmFjdGl2ZU1ldGFkYXRhLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICB0aGlzLl9yZXNldFNlbGVjdGVkRWxlbWVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5BbmltYXRpb25TaWRlYmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5zZWxlY3RlZFRocmVlZE9iamVjdEFuaW1hdGlvblNpZGViYXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVNob3dDaGFuZ2VTZWxlY3RvcihzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoIXNob3cpIHtcclxuICAgICAgaWYgKHRoaXMuc2hvd0Fuc3dlcnMpIHtcclxuICAgICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuY2FuY2VsQW5zd2VyKHRoaXMuYWN0aXZlTWV0YWRhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jYW5jZWxDb25maWd1cmluZ0N1cnJlbnRJbnN0YW5jZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE1vZGVsRXJyb3JEaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFsb2cub3BlbihNb2RlbERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbG9hZEZ1cm5pdHVyZVNlcnZpY2U6IHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYXJJdGVtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2l0ZW1zRnJvbVNjcmF0Y2gubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZVNrdVNldChza3U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHNrdSkge1xyXG4gICAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgICAgdGhpcy5faU9uZS5jb250cm9sbGVySW5pdGlhbGl6ZWQuc3Vic2NyaWJlKGFzeW5jIChpbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FwcFNlcnZpY2UuZmxvb3JUZXh0dXJlc0xvYWRlZC5zdWJzY3JpYmUoYXN5bmMgKHRleHR1cmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc3RhbmRBbG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVGbG9vcnNMb2FkZWQodGV4dHVyZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVN0YW5kYWxvbmVDb25maWd1cmF0b3Ioc2t1KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBhckJ1dHRvbjogU2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2UgPSB7XHJcbiAgICAgICAgaWQ6IDIsXHJcbiAgICAgICAgZWxlbWVudElkOiAnc3RhbmRhbG9uZV9hcl9zZXNzaW9uJyxcclxuICAgICAgICB0b29sdGlwOiAnU1RBUlRfQVJfU0VTU0lPTicsXHJcbiAgICAgICAgb3JkZXI6IDEwLFxyXG4gICAgICAgIGltYWdlOiB0aGlzLl9pY29uQ2FjaGVTZXJ2aWNlLmdldEljb25Bc0Jhc2U2NChJY29uRW51bS5BckNpcmNsZSksXHJcbiAgICAgICAgdG9nZ2xlOiBmYWxzZSxcclxuICAgICAgICBzaG93OiBhd2FpdCB0aGlzLl9hclNlcnZpY2UuYXJTdXBwb3J0ZWQoKSAmJlxyXG4gICAgICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd1N0YW5kYWxvbmVBUkJ1dHRvbiAmJlxyXG4gICAgICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuYXJFbmFibGVkLFxyXG4gICAgICAgIGNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvYmplY3QgPSAodGhpcy5faXRlbVNlcnZpY2UuZ2V0Q29uZmlndXJhYmxlcygpWzBdIGFzIGFueSkvKi5jbG9uZVZpc2libGUoKSovO1xyXG4gICAgICAgICAgaWYgKG9iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYXJNb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFkZE9iamVjdChvYmplY3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3QgYXJJT1NCdXR0b246IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlID0ge1xyXG4gICAgICAgIGlkOiAzLFxyXG4gICAgICAgIGVsZW1lbnRJZDogJ3N0YW5kYWxvbmVfYXJfc2Vzc2lvbicsXHJcbiAgICAgICAgdG9vbHRpcDogJ1NUQVJUX0FSX1NFU1NJT04nLFxyXG4gICAgICAgIG9yZGVyOiAxMCxcclxuICAgICAgICBpbWFnZTogdGhpcy5faWNvbkNhY2hlU2VydmljZS5nZXRJY29uQXNCYXNlNjQoSWNvbkVudW0uQXJDaXJjbGUpLFxyXG4gICAgICAgIHRvZ2dsZTogZmFsc2UsXHJcbiAgICAgICAgc2hvdzogYXdhaXQgdGhpcy5fYXJTZXJ2aWNlLmFySU9TU3VwcG9ydGVkKCkgJiZcclxuICAgICAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dTdGFuZGFsb25lQVJCdXR0b24gJiZcclxuICAgICAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmFyRW5hYmxlZCxcclxuICAgICAgICBjbGljazogKCkgPT4gdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmRvd25sb2FkVURTWmZvckFSSU9TKClcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5fc2NlbmVPcHRpb25zU2VydmljZS5hZGRTY2VuZU9wdGlvbkJ1dHRvbihhckJ1dHRvbik7XHJcbiAgICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UuYWRkU2NlbmVPcHRpb25CdXR0b24oYXJJT1NCdXR0b24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlRmxvb3JzTG9hZGVkKHRleHR1cmVzOiBUZXh0dXJlW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0ZXh0dXJlcykge1xyXG4gICAgICBsZXQgZGVmYXVsdEZsb29yOiBUZXh0dXJlO1xyXG4gICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlU3RhbmRhbG9uZUZsb29ycykge1xyXG4gICAgICAgIHRoaXMuX3N0YW5kYWxvbmVGbG9vcnMgPSB0aGlzLl9hcHBTZXJ2aWNlLmdldEZsb29yc1N0YW5kYWxvbmUoKTtcclxuICAgICAgICBkZWZhdWx0Rmxvb3IgPSB0aGlzLl9zdGFuZGFsb25lRmxvb3JzLmZpbmQoZiA9PiBmLmRlZmF1bHRTdGFuZGFsb25lKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgZmxvb3JHZW9tZXRyeTtcclxuICAgICAgaWYgKGRlZmF1bHRGbG9vciAmJiBkZWZhdWx0Rmxvb3Iuc2ltcGxlUGxhbmUpIHtcclxuICAgICAgICBmbG9vckdlb21ldHJ5ID0gbmV3IFBsYW5lR2VvbWV0cnkoNiwgNik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY29ybmVycyA9IFtcclxuICAgICAgICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubmV3Q29ybmVyKC0zLCAzKSxcclxuICAgICAgICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubmV3Q29ybmVyKC0zLCAtMyksXHJcbiAgICAgICAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm5ld0Nvcm5lcigzLCAtMyksXHJcbiAgICAgICAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm5ld0Nvcm5lcigzLCAzKSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IHBvaW50cyA9IGNvcm5lcnMubWFwKGNvcm5lciA9PiBuZXcgVmVjdG9yMihjb3JuZXIueCwgY29ybmVyLnkpKTtcclxuICAgICAgICBjb25zdCBzaGFwZSA9IG5ldyBTaGFwZShwb2ludHMpO1xyXG4gICAgICAgIGZsb29yR2VvbWV0cnkgPSBuZXcgU2hhcGVHZW9tZXRyeShzaGFwZSkuY2VudGVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5fZmxvb3JTZXJ2aWNlLmdlbmVyYXRlRmxvb3JQbGFuZSgnd2hpdGUnLCBkZWZhdWx0Rmxvb3IsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmbG9vckdlb21ldHJ5KTtcclxuICAgICAgdGhpcy5fZmxvb3JTZXJ2aWNlLmdldEZsb29yUGxhbmUoKS52aXNpYmxlID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlU3RhbmRhbG9uZUZsb29ycztcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLmJhY2tncm91bmQgPSBuZXcgQ29sb3IocGFyc2VJbnQodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnN0YW5kYWxvbmVTY2VuZUJhY2tncm91bmRDb2xvciwgMCkpO1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5fc3RhbmRhbG9uZUZsb29ycyAmJiB0aGlzLl9zdGFuZGFsb25lRmxvb3JzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLl91cHNlcnRGbG9vckJ1dHRvbnMoZGVmYXVsdEZsb29yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBzZXJ0Rmxvb3JCdXR0b25zKGFjdGl2ZUZsb29yOiBUZXh0dXJlKTogdm9pZCB7XHJcbiAgICBjb25zdCBmbG9vckJ1dHRvbnM6IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlW10gPSBbXTtcclxuICAgIGxldCBuZXdGbG9vckJ1dHRvbjogU2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2U7XHJcbiAgICB0aGlzLl9zdGFuZGFsb25lRmxvb3JzLmZvckVhY2goKGYsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChmICE9PSBhY3RpdmVGbG9vcikge1xyXG4gICAgICAgIG5ld0Zsb29yQnV0dG9uID0ge1xyXG4gICAgICAgICAgaWQ6IGluZGV4LFxyXG4gICAgICAgICAgZWxlbWVudElkOiBgc3RhbmRhbG9uZV9mbG9vcl8ke2YubmFtZX1gLFxyXG4gICAgICAgICAgdG9vbHRpcDogZi5uYW1lLFxyXG4gICAgICAgICAgY2xhc3M6ICdjaXJjbGUnLFxyXG4gICAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICBvYmplY3Q6IGYsXHJcbiAgICAgICAgICBpbWFnZTogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmFzc2V0UGF0aCArIGYudXJsLFxyXG4gICAgICAgICAgY2xpY2s6IChmbG9vcikgPT4gdGhpcy5fY2hhbmdlU3RhbmRhbG9uZUZsb29yKGZsb29yKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZmxvb3JCdXR0b25zLnB1c2gobmV3Rmxvb3JCdXR0b24pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGFjdGl2ZUZsb29yQnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZSA9IHtcclxuICAgICAgaWQ6IDEwLFxyXG4gICAgICBlbGVtZW50SWQ6ICdzdGFuZGFsb25lX2NoYW5nZV9mbG9vcicsXHJcbiAgICAgIHRvb2x0aXA6ICdDSEFOR0VfRkxPT1InLFxyXG4gICAgICBvcmRlcjogOCxcclxuICAgICAgY2xhc3M6ICdjaXJjbGUnLFxyXG4gICAgICBvYmplY3Q6IGFjdGl2ZUZsb29yLFxyXG4gICAgICBjaGlsZHJlbjogZmxvb3JCdXR0b25zLFxyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICBpbWFnZTogYWN0aXZlRmxvb3IgPyB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoICsgYWN0aXZlRmxvb3IudXJsIDogJydcclxuICAgIH07XHJcbiAgICB0aGlzLl9zY2VuZU9wdGlvbnNTZXJ2aWNlLnVwZGF0ZVNjZW5lT3B0aW9uQnV0dG9uKGFjdGl2ZUZsb29yQnV0dG9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2NoYW5nZVN0YW5kYWxvbmVGbG9vcihmbG9vcjogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5fZmxvb3JTZXJ2aWNlLnNldEZsb29yVGV4dHVyZShudWxsLCBmbG9vcik7XHJcbiAgICB0aGlzLl91cHNlcnRGbG9vckJ1dHRvbnMoZmxvb3IpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnVwZGF0ZVBhdGhUcmFjZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZURvd25sb2FkQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZG93bmxvYWQzRE1vZGVsQnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZSA9IHtcclxuICAgICAgaWQ6IDEwMCxcclxuICAgICAgZWxlbWVudElkOiAnc3RhbmRhbG9uZV9kb3dubG9hZF9tb2RlbCcsXHJcbiAgICAgIHRvb2x0aXA6ICdET1dOTE9BRF9NT0RFTCcsXHJcbiAgICAgIG9yZGVyOiAyLFxyXG4gICAgICBjbGFzczogJ2NpcmNsZScsXHJcbiAgICAgIGxhYmVsOiAnY2xvdWRfZG93bmxvYWQnLFxyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICBjbGljazogKCkgPT4gdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmRvd25sb2FkQ3VycmVudEN1c3RvbUZsb29yZ3JvdXAoKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UudXBkYXRlU2NlbmVPcHRpb25CdXR0b24oZG93bmxvYWQzRE1vZGVsQnV0dG9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUNhbWVyYVNldHRpbmdzQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2FtZXJhU2V0dGluZ3NCdXR0b246IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlID0ge1xyXG4gICAgICBpZDogMTEwLFxyXG4gICAgICBlbGVtZW50SWQ6ICdzdGFuZGFsb25lX2NhbWVyYV9zZXR0aW5ncycsXHJcbiAgICAgIHRvb2x0aXA6ICdDQU1FUkFfU0VUVElOR1MnLFxyXG4gICAgICBvcmRlcjogMSxcclxuICAgICAgY2xhc3M6ICdjaXJjbGUnLFxyXG4gICAgICBsYWJlbDogJ2NhbWVyYV9zZXR0aW5ncycsXHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLl9vcGVuQ2FtZXJhU2V0dGluZ3NEaWFsb2coKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UudXBkYXRlU2NlbmVPcHRpb25CdXR0b24oY2FtZXJhU2V0dGluZ3NCdXR0b24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3BlbkNhbWVyYVNldHRpbmdzRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oQ2FtZXJhU2V0dGluZ3NEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc2MDBweCdcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlTWVhc3VyZW1lbnRzQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgYnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZSA9IHtcclxuICAgICAgaWQ6IDEsXHJcbiAgICAgIGVsZW1lbnRJZDogJ3N0YW5kYWxvbmVfc2hvd19tZWFzdXJlbWVudHMnLFxyXG4gICAgICB0b29sdGlwOiAnU0hPV19NRUFTVVJFTUVOVFMnLFxyXG4gICAgICBvcmRlcjogMTEsXHJcbiAgICAgIGltYWdlOiB0aGlzLl9pY29uQ2FjaGVTZXJ2aWNlLmdldEljb25Bc0Jhc2U2NChJY29uRW51bS5NZWFzdXJlbWVudHMpLFxyXG4gICAgICB0b2dnbGU6IHRydWUsXHJcbiAgICAgIHRvb2x0aXBBY3RpdmU6ICdISURFX01FQVNVUkVNRU5UUycsXHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgIGNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fZGltZW5zaW9uc1NlcnZpY2UuZW5hYmxlZCA9ICF0aGlzLl9kaW1lbnNpb25zU2VydmljZS5lbmFibGVkO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5fc2NlbmVPcHRpb25zU2VydmljZS5hZGRTY2VuZU9wdGlvbkJ1dHRvbihidXR0b24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlSW5mb0NsaWNrKGluZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgbWVzc2FnZUNvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICB0eXBlOiBEaWFsb2dUeXBlLkluZm8sXHJcbiAgICAgIG1lc3NhZ2VzOiBbbmV3IEVycm9yTWVzc2FnZShpbmZvKV1cclxuICAgIH07XHJcbiAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlLnNob3dEaWFsb2coe2RhdGE6IG1lc3NhZ2VDb25maWd9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3ByZXBhcmVTdGFuZGFsb25lQ29uZmlndXJhdG9yKHNrdSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdG90YWxTdGVwczogbnVtYmVyID0gNztcclxuICAgIGxldCBjdXJyZW50U3RlcDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVQcm9ncmVzcyA9IChzdGVwOiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlclByb2dyZXNzID0gTWF0aC5yb3VuZCgoc3RlcCAvIHRvdGFsU3RlcHMpICogMTAwKTtcclxuICAgICAgdGhpcy5sb2FkZXJUZXh0ID0gdGV4dDtcclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdXBkYXRlUHJvZ3Jlc3MoKytjdXJyZW50U3RlcCwgJ0xvYWRpbmcgTGlnaHQgUHJlc2V0cy4uLicpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9saWdodFByZXNldFNlcnZpY2UucHJlcGFyZUxvYWRMaWdodFByZXNldCh0cnVlKTtcclxuXHJcbiAgICAgIHVwZGF0ZVByb2dyZXNzKCsrY3VycmVudFN0ZXAsICdTZXR0aW5nIENhbWVyYS4uLicpO1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5wb3NpdGlvbi5zZXQoMCwgMSwgNCk7XHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLmxvb2tBdChuZXcgVmVjdG9yMygpKTtcclxuXHJcbiAgICAgIHVwZGF0ZVByb2dyZXNzKCsrY3VycmVudFN0ZXAsICdMb2FkaW5nIExpZ2h0cy4uLicpO1xyXG4gICAgICBhd2FpdCBPYmplY3RVdGlscy5Mb2FkSERSSShcclxuICAgICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoICsgJy9hc3NldHMvaGRyaS9zdGRfZW52X3YyX0IuaGRyJyxcclxuICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHVwZGF0ZVByb2dyZXNzKCsrY3VycmVudFN0ZXAsICdQcmVwYXJpbmcgU2NlbmUuLi4nKTtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIHVwZGF0ZVByb2dyZXNzKCsrY3VycmVudFN0ZXAsICdTZXR0aW5nIHVwIE9wdGlvbnMuLi4nKTtcclxuICAgICAgdGhpcy5zdGFuZEFsb25lID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93TGl0ZVNlbGVjdG9yID0gdHJ1ZTsgLy8gYWx3YXlzIHNob3cgdGhlIHNlbGVjdGlvbnMgd2hlbiBzdGFuZGFsb25lXHJcbiAgICAgIHRoaXMuc2hvd1NlbGVjdGlvbnMgPSB0cnVlOyAvLyBhbHdheXMgc2hvdyB0aGUgc2VsZWN0aW9ucyB3aGVuIHN0YW5kYWxvbmVcclxuICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uuc2hvdWxkTG9hZFNlbGVjdGlvbnMgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9za3VBbHJlYWR5U2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93RG93bmxvYWRCdXR0b24pIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb3dubG9hZEJ1dHRvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93TWVhc3VyZW1lbnRzQnV0dG9uKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTWVhc3VyZW1lbnRzQnV0dG9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmRldmVsb3BtZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ2FtZXJhU2V0dGluZ3NCdXR0b24oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdXBkYXRlUHJvZ3Jlc3MoKytjdXJyZW50U3RlcCwgJ0xvYWRpbmcgRnVybml0dXJlLi4uJyk7XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCA9IGF3YWl0IHRoaXMuX2xvYWRJT25lRnVybml0dXJlRnJvbVNrdShuZXcgVmVjdG9yMygwLCAwLCAwKSwgc2t1LCB1bmRlZmluZWQsIHRydWUpO1xyXG5cclxuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZnVybml0dXJlKSB7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlRmlyc3RCdWlsZFN0YW5kYWxvbmUocmVzdWx0LmZ1cm5pdHVyZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuTmVlZHNVc2VySW5wdXQpIHtcclxuICAgICAgICB0aGlzLl9jYWxsQmFja0ZuV2hlbkJ1aWxkRmluaXNoZWQgPSB0aGlzLl9oYW5kbGVGaXJzdEJ1aWxkU3RhbmRhbG9uZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdXBkYXRlUHJvZ3Jlc3ModG90YWxTdGVwcywgJ0NvbXBsZXRlIScpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgcHJlcGFyYXRpb246JywgZS5tZXNzYWdlKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LCAxMDAwKTsgLy8gSGlkZSBsb2FkZXIgYWZ0ZXIgYSBkZWxheVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlRmlyc3RCdWlsZFN0YW5kYWxvbmUoaXRlbTogSXRlbSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5fY2FtZXJhU2VydmljZS5tb3ZlQ2FtZXJhVG9GaXRPYmplY3QoaXRlbSk7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuY2FtZXJhUG9zaXRpb25GaXhlZCkge1xyXG4gICAgICB0aGlzLl9yb3RhdGlvblNlcnZpY2UuZW5hYmxlUm90YXRpb25Gb3IoaXRlbSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuY2FtZXJhUG9zaXRpb25GaXhlZEFuZFNjcm9sbGJhcikge1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmRpc2FibGVSb3RhdGUoKTtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFab29tT3V0KCk7XHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuZGlzYWJsZVpvb20oKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9jYWxsQmFja0ZuV2hlbkJ1aWxkRmluaXNoZWQgPSB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmNhbWVyYUNvbmZpZykge1xyXG4gICAgICBhd2FpdCB0aGlzLl9keW5hbWljQ2FtZXJhU2VydmljZS5sb2FkQ3VzdG9tQ2FtZXJhU2V0dGluZ3MoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5lbmFibGUzREluUGhvdG8pIHtcclxuICAgICAgdGhpcy5fdGhyZWVkSW5QaG90b0luaXRpYWxpemVyU2VydmljZS5pbml0KG51bGwsIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLCB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUsIHRoaXMuX3NjZW5lU2VydmljZS5yZW5kZXJlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2F2ZSBjYW1lcmEgc2V0dGluZ3MgZm9yIHJlbmRlclxyXG4gICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XHJcbiAgICB0aGlzLl9uZXdSZW5kZXJTZXJ2aWNlLnN0YW5kQWxvbmVDYW1lcmFNYXRyaXggPSBBcnJheS5mcm9tKHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5lbGVtZW50cyk7XHJcbiAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2Uuc3RhbmRBbG9uZUZpcnN0QnVpbGRSZWFkeSA9IHRydWU7XHJcbiAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UucmVhZHlUb1JlbmRlci5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlVW5kZWZpbmVkRXJyb3JPY2N1cmVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93U2VsZWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93QW5zd2VycyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmNhbmNlbENvbmZpZ3VyaW5nQ3VycmVudEluc3RhbmNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVCdXR0b25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0QWRkQnV0dG9ucy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5lZGl0Q3VzdG9taXplQnV0dG9uLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLnJlc2l6ZUJ1dHRvbnMubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2V0U2VsZWN0ZWRFbGVtZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50UG9zaXRpb24oKTtcclxuICAgIHRoaXMuX3JlbW92ZUFsbEJ1dHRvbnMoKTtcclxuICAgIHRoaXMuc2hvd0VsZW1lbnRUb29sYmFyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVSZW5kZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0IHx8IHRoaXMuc2VsZWN0aW9uVG9DdXN0b21pemUpIHtcclxuICAgICAgdGhpcy5fcmVzZXRFbGVtZW50UG9zaXRpb24oKTtcclxuICAgICAgaWYgKHRoaXMuZWRpdEFkZEJ1dHRvbnMubGVuZ3RoIHx8IHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5sZW5ndGggPiAwIHx8IHRoaXMucmVzaXplQnV0dG9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3NpdGlvbkJ1dHRvbnMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFbGVtZW50VG9nZ2xlKGVsZW1lbnQ6IE1lc2gpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgIGNvbnN0IG9iajogQ3VzdG9tT2JqZWN0M0QgPSBlbGVtZW50ID8gZWxlbWVudC5wYXJlbnQgYXMgQ3VzdG9tT2JqZWN0M0QgOiB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0ICE9PSBvYmopIHtcclxuICAgICAgdGhpcy5zaG93RWxlbWVudFRvb2xiYXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0ID0gb2JqO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlRWxlbWVudE1lbnUoKTtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlQWRkQnV0dG9ucygpO1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5oYW5kbGVQYXJhbWV0cmljKSB7XHJcbiAgICAgICAgICB0aGlzLl9wcmVwYXJlT3RoZXJCdXR0b25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNob3VsZEJlSGlkZGVuOiBib29sZWFuID0gb2JqLnVzZXJEYXRhICYmIG9iai51c2VyRGF0YS5zZWxlY3Rpb24gJiYgb2JqLnVzZXJEYXRhLnNlbGVjdGlvbi5xdWVzdGlvbi5pbmRleE9mKCdbaGlkZGVuXScpID4gLTE7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmluc3RhbnRSZXBsYWNlKSB7XHJcbiAgICAgICAgICBpZiAoc2hvdWxkQmVIaWRkZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxFbGVtZW50UmVwbGFjZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zd2FwRWxlbWVudCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd0VsZW1lbnRUb29sYmFyID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9yZXNldFNlbGVjdGVkRWxlbWVudCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVCdWlsZEZpbmlzaGVkKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCk6IHZvaWQge1xyXG4gICAgdGhpcy5faXRlbVNlcnZpY2UuZ2xhc3NNYXRlcmlhbENoZWNrKHJlc3VsdC5mdXJuaXR1cmUpO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50ICYmIHJlc3VsdC5mdXJuaXR1cmUpIHtcclxuICAgICAgY29uc3QgaXRlbTogSXRlbSA9IHJlc3VsdC5mdXJuaXR1cmU7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEN1c3RvbU1lc2gpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QgPSA8Q3VzdG9tT2JqZWN0M0Q+dGhpcy5zZWxlY3RlZEVsZW1lbnQucGFyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3ByZXBhcmVBZGRCdXR0b25zKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fY2FsbEJhY2tGbldoZW5CdWlsZEZpbmlzaGVkICYmIHRoaXMuc3RhbmRBbG9uZSkge1xyXG4gICAgICB0aGlzLl9jYWxsQmFja0ZuV2hlbkJ1aWxkRmluaXNoZWQocmVzdWx0LmZ1cm5pdHVyZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldEVsZW1lbnRQb3NpdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudCAmJiAhdGhpcy5zdGFuZEFsb25lKSB7XHJcbiAgICAgIGNvbnN0IHlQb3M6IG51bWJlciA9ICgodGhpcy5zZWxlY3RlZEVsZW1lbnQuZ2VvbWV0cnkuYm91bmRpbmdCb3gubWF4LnkgLSB0aGlzLnNlbGVjdGVkRWxlbWVudC5nZW9tZXRyeS5ib3VuZGluZ0JveC5taW4ueSkgLyAyKTtcclxuICAgICAgY29uc3QgcG9zOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LmdldFdvcmxkUG9zaXRpb24ocG9zKTtcclxuICAgICAgcG9zLnkgKz0geVBvcztcclxuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRQb3NpdGlvbiA9IHRoaXMuX3NjZW5lU2VydmljZS5wb3NpdGlvbkluU2NlbmVUb1NjcmVlbihwb3MpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRQb3NpdGlvbiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZUFsbEJ1dHRvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVBZGRCdXR0b25zKCk7XHJcbiAgICB0aGlzLl9yZW1vdmVSZXNpemVCdXR0b25zKCk7XHJcbiAgICB0aGlzLl9yZW1vdmVDdXN0b21CdXR0b25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVDdXN0b21CdXR0b25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0Q3VzdG9taXplQnV0dG9uLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVBZGRCdXR0b25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0QWRkQnV0dG9ucy5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlUmVzaXplQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzaXplQnV0dG9ucy5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlRWRpdEl0ZW1zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0RWxlbWVudE1lbnUubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVFbGVtZW50TWVudSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JlbW92ZUVkaXRJdGVtcygpO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBPYmplY3RVdGlscy5HZXRTZWxlY3Rpb25Gcm9tU2VsZWN0ZWRPYmplY3QodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KTtcclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93RWRpdFBlbmNpbENvbmZpZ3VyYXRvciAmJiBzZWxlY3Rpb24pIHtcclxuICAgICAgbGV0IG9wdGlvbnM6IFNlbGVjdGlvbltdID0gdGhpcy5fZ2V0T3B0aW9uc0Zyb21TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKG8gPT4ge1xyXG4gICAgICAgIHJldHVybiBvLm5vZGVUeXBlID09PSAnT1BUJyAmJiB0aGlzLl9pT25lLmlzU2VsZWN0aW9uUHVibGlzaGVkKG8pO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBvcHRpb25zLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIHRoaXMuZWRpdEVsZW1lbnRNZW51LnB1c2gobmV3IEN1c3RvbUJ1dHRvbihvcHRpb25zW2ldLnF1ZXN0aW9uLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2Uuc2VsZWN0U2VsZWN0aW9uKG9wdGlvbnNbaV0sIHRoaXMuYWN0aXZlTWV0YWRhdGEpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5pbnN0YW50RWRpdE1lbnUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzZXRTZWxlY3RlZEVsZW1lbnQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2FmdGVyTG9hZEZyb21QcmVzZXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgc2V0U3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHRoaXMuX2xvYWRpbmdGcm9tUHJlc2V0ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9wcm9ncmVzc1NlcnZpY2UuZmluaXNoRG93bmxvYWRzKCk7XHJcbiAgICBpZiAodGhpcy5faXRlbXNGcm9tU2NyYXRjaC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5faXRlbXNGcm9tU2NyYXRjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZUxvYWRBbmRCdWlsZEZ1cm5pdHVyZShcclxuICAgICAgICAgIHRoaXMuX2l0ZW1zRnJvbVNjcmF0Y2hbaV0ubWV0YURhdGEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgICBzZXRTdGF0ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2l0ZW1zRnJvbVNjcmF0Y2gubGVuZ3RoID0gMDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pdGVtc05lZWRVc2VySW5wdXQubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2l0ZW1zTmVlZFVzZXJJbnB1dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCA9IGF3YWl0IHRoaXMuX2hhbmRsZUxvYWRBbmRCdWlsZEZ1cm5pdHVyZShcclxuICAgICAgICAgIHRoaXMuX2l0ZW1zTmVlZFVzZXJJbnB1dFtpXS5tZXRhRGF0YSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYmplY3RMaXN0LCByZXN1bHQpO1xyXG4gICAgICB9XHJcbiAgICAgIHNldFN0YXRlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5faXRlbXNOZWVkVXNlcklucHV0Lmxlbmd0aCA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAoc2V0U3RhdGUpIHtcclxuICAgICAgdGhpcy5fcHJlc2V0c1NlcnZpY2UuY3JlYXRlU3RhdGUoKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uub2JqZWN0TGlzdEZpeGVkLmxlbmd0aCA+IDAgfHxcclxuICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uub2Jzb2xldGVPYmplY3RDYWNoZS5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm5vdEZpeGVkT2JqZWN0Q2FjaGUubGVuZ3RoID4gMCB8fFxyXG4gICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5ub3RMb2FkZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNldE1vZGVsRXJyb3JEaWFsb2coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzSU9ORU9iamVjdChvKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISFvLml0ZW1fc2NoZW1hIHx8IG8uaW9uZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVBZGRCdXR0b25zKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBPYmplY3RVdGlscy5HZXRTZWxlY3Rpb25Gcm9tU2VsZWN0ZWRPYmplY3QodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KTtcclxuICAgIHRoaXMuX3JlbW92ZUFkZEJ1dHRvbnMoKTtcclxuICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgLy8gaWYgKGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdmbGF0X3InIHx8XHJcbiAgICAgIC8vICAgZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZsYXRfbCcgfHxcclxuICAgICAgLy8gICBkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZmxhdF9kJyB8fFxyXG4gICAgICAvLyAgIGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdmbGF0X3UnIHx8XHJcbiAgICAgIC8vICAgZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlcnRfcicgfHxcclxuICAgICAgLy8gICBkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAndmVydF9sJyB8fFxyXG4gICAgICAvLyAgIGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd2ZXJ0X2QnIHx8XHJcbiAgICAgIC8vICAgZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlcnRfdScpIHtcclxuICAgICAgLy8gICBpZiAoZGVjb05vZGUuY29ubmVjdG9ycykge1xyXG4gICAgICAvLyAgICAgZGVjb05vZGUuY29ubmVjdG9ycy5mb3JFYWNoKGMgPT4gYy5saW5rZWRSZXBlYXRhYmxlcyA9ICdUJyk7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gc2VsZWN0aW9uLmRlY29Ob2RlID8gc2VsZWN0aW9uLmRlY29Ob2RlLmNvbm5lY3RvcnMubGVuZ3RoIDogMDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNvbk9iamVjdDogYW55ID0gdGhpcy5fZ2V0Q29ubmVjdG9yT2JqZWN0KHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCwgc2VsZWN0aW9uLmRlY29Ob2RlLmNvbm5lY3RvcnNbaV0uY29ubmVjdG9yKTtcclxuICAgICAgICBpZiAoY29uT2JqZWN0ICYmIHRoaXMuX2NhblNob3dBZGRCdXR0b24oc2VsZWN0aW9uLmRlY29Ob2RlLmNvbm5lY3RvcnNbaV0sIGNvbk9iamVjdCkpIHtcclxuICAgICAgICAgIHRoaXMuZWRpdEFkZEJ1dHRvbnMucHVzaChuZXcgQ3VzdG9tQnV0dG9uKCcnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQWRkQnV0dG9uQ2xpY2soc2VsZWN0aW9uLCBzZWxlY3Rpb24uZGVjb05vZGUuY29ubmVjdG9yc1tpXSwgdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29uT2JqZWN0KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLnRyYXZlcnNlKChjaGlsZCkgPT4ge1xyXG4gICAgICAgIGlmIChjaGlsZC5uYW1lKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXN0b21pemVCdXR0b246IGFueSA9IGNoaWxkLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdwXycpO1xyXG4gICAgICAgICAgLy8gY29uc3QgY3VzdG9taXplT3B0aW9uOiBhbnkgPSB0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QuZ2V0T2JqZWN0QnlOYW1lKClcclxuICAgICAgICAgIGlmIChjdXN0b21pemVCdXR0b24pIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Ub0N1c3RvbWl6ZSA9IGNoaWxkLnBhcmVudDtcclxuICAgICAgICAgICAgdGhpcy5lZGl0Q3VzdG9taXplQnV0dG9uLnB1c2gobmV3IEN1c3RvbUJ1dHRvbignJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDdXN0b21pemVDbGljaygpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldENvbm5lY3Rvck9iamVjdChvYmo6IGFueSwgY29ubmVjdG9yOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgaWYgKCFvYmopIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBvYmpGb3VuZCA9IG9iai5nZXRPYmplY3RCeU5hbWUoY29ubmVjdG9yKTtcclxuICAgIGlmIChvYmpGb3VuZCkge1xyXG4gICAgICByZXR1cm4gb2JqRm91bmQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAob2JqLnBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDb25uZWN0b3JPYmplY3Qob2JqLnBhcmVudCwgY29ubmVjdG9yKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0T3Bwb3NpdGVDb25uZWN0b3JQYXJ0cyhjb25uZWN0b3I6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb25uZWN0b3JQYXJ0c0Fycjogc3RyaW5nW10gPSBjb25uZWN0b3Iuc3BsaXQoJ18nKTtcclxuICAgIGNvbm5lY3RvclBhcnRzQXJyLnBvcCgpOyAvLyByZW1vdmUgbnVtYmVyXHJcbiAgICBjb25zdCBjb25uZWN0b3JUeXBlOiBzdHJpbmcgPSBjb25uZWN0b3JQYXJ0c0Fycltjb25uZWN0b3JQYXJ0c0Fyci5sZW5ndGggLSAxXTtcclxuICAgIGNvbm5lY3RvclBhcnRzQXJyW2Nvbm5lY3RvclBhcnRzQXJyLmxlbmd0aCAtIDFdID0gY29ubmVjdG9yVHlwZS50b0xvd2VyQ2FzZSgpID09PSAnZicgPyAnTScgOiAnRic7XHJcbiAgICByZXR1cm4gY29ubmVjdG9yUGFydHNBcnIuam9pbignXycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZU90aGVyQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JlbW92ZVJlc2l6ZUJ1dHRvbnMoKTtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpIHtcclxuICAgICAgY29uc3QgcGFyZW50OiBJdGVtID0gT2JqZWN0VXRpbHMuR2V0UGFyZW50SXRlbSh0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpO1xyXG4gICAgICBpZiAocGFyZW50KSB7IC8vIGhpZGUgYWxsIGNvbm5lY3RvcnNcclxuICAgICAgICBwYXJlbnQudHJhdmVyc2UobyA9PiB7XHJcbiAgICAgICAgICBpZiAoby5uYW1lICYmIG8ubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2NfJykpIHtcclxuICAgICAgICAgICAgby52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgb3RoZXJDb25uZWN0b3JzOiBNZXNoW10gPSA8TWVzaFtdPnRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdC5jaGlsZHJlbi5maWx0ZXIoXHJcbiAgICAgICAgYyA9PiBjIGluc3RhbmNlb2YgTWVzaCAmJiAoYy5uYW1lICYmIChjLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjX3NjYV8nKSB8fCBjLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjX3JlcF8nKSkpKTtcclxuICAgICAgb3RoZXJDb25uZWN0b3JzLmZvckVhY2gobyA9PiB7XHJcbiAgICAgICAgLy8gby52aXNpYmxlID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMucmVzaXplQnV0dG9ucy5wdXNoKG5ldyBDdXN0b21CdXR0b24oJycsICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc2l6ZUJ1dHRvbkNsaWNrKG8ubmFtZSwgdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KTtcclxuICAgICAgICB9LCBvKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQWRkQnV0dG9uQ2xpY2soc2VsZWN0aW9uOiBTZWxlY3Rpb24sIGNvbm5lY3RvcjogYW55LCBwYXJlbnQ6IE9iamVjdDNEKTogdm9pZCB7XHJcbiAgICBsZXQgYWZ0ZXI6IGJvb2xlYW47XHJcbiAgICBpZiAoY29ubmVjdG9yLmFkZEFkanVzdCA9PT0gMikge1xyXG4gICAgICBhZnRlciA9IGNvbm5lY3Rvci5jb25uZWN0b3IuaW5kZXhPZignX01fJykgPiAtMTtcclxuICAgIH1cclxuICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5iYXNlRWxlbWVudE5vZGVJZCA9IHBhcmVudC51c2VyRGF0YSAmJiBwYXJlbnQudXNlckRhdGEuc2VsZWN0aW9uID8gcGFyZW50LnVzZXJEYXRhLnNlbGVjdGlvbi5ub2RlSWQgOiAwO1xyXG4gICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmFjdGl2ZUNvbm5lY3RvciA9IGNvbm5lY3RvcjtcclxuICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5zZWxlY3RTZWxlY3Rpb24oXHJcbiAgICAgIHNlbGVjdGlvbiwgdGhpcy5hY3RpdmVNZXRhZGF0YSwgY29ubmVjdG9yLmxpbmtlZFJlcGVhdGFibGVzICE9PSAnVCcsIGFmdGVyLCBjb25uZWN0b3IuY29ubmVjdG9yKTtcclxuICAgIHRoaXMuX3Jlc2V0U2VsZWN0ZWRFbGVtZW50KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVSZXNpemVCdXR0b25DbGljayhjb25uZWN0b3I6IGFueSwgcGFyZW50OiBPYmplY3QzRCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVzaXplU2VydmljZS5yZXNpemVFbGVtZW50KGNvbm5lY3RvciwgcGFyZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhblNob3dBZGRCdXR0b24oY29ubmVjdG9yOiBhbnksIGNvbk9iamVjdDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKCFjb25PYmplY3QuY29ubmVjdGVkIHx8IGNvbm5lY3Rvci5saW5rZWRSZXBlYXRhYmxlcyA9PT0gJ1QnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlcG9zaXRpb25CdXR0b25zKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLmVkaXRBZGRCdXR0b25zLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICB0aGlzLl9yZXBvc2l0aW9uQnV0dG9uKHRoaXMuZWRpdEFkZEJ1dHRvbnNbaV0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGVucjogbnVtYmVyID0gdGhpcy5yZXNpemVCdXR0b25zLmxlbmd0aDtcclxuICAgIGZvciAobGV0IHI6IG51bWJlciA9IDA7IHIgPCBsZW5yOyByKyspIHtcclxuICAgICAgdGhpcy5fcmVwb3NpdGlvbkJ1dHRvbih0aGlzLnJlc2l6ZUJ1dHRvbnNbcl0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGVuYzogbnVtYmVyID0gdGhpcy5lZGl0Q3VzdG9taXplQnV0dG9uLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGM6IG51bWJlciA9IDA7IGMgPCBsZW5jOyBjKyspIHtcclxuICAgICAgdGhpcy5fcmVwb3NpdGlvbkJ1dHRvbih0aGlzLmVkaXRDdXN0b21pemVCdXR0b25bY10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVwb3NpdGlvbkJ1dHRvbihidXR0b246IEN1c3RvbUJ1dHRvbik6IHZvaWQge1xyXG4gICAgY29uc3QgcG9zOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICBidXR0b24uZGF0YS5nZXRXb3JsZFBvc2l0aW9uKHBvcyk7XHJcbiAgICBjb25zdCBzY3JlZW5Qb3M6IFZlY3RvcjIgPSB0aGlzLl9zY2VuZVNlcnZpY2UucG9zaXRpb25JblNjZW5lVG9TY3JlZW4ocG9zKTtcclxuICAgIGJ1dHRvbi54UG9zID0gc2NyZWVuUG9zLng7XHJcbiAgICBidXR0b24ueVBvcyA9IHNjcmVlblBvcy55O1xyXG4gICAgY29uc3QgZGlzdGFuY2VUb0NhbTogbnVtYmVyID0gdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEucG9zaXRpb24uZGlzdGFuY2VUbyhwb3MpO1xyXG4gICAgYnV0dG9uLnNpemUgPSAoNCAvIGRpc3RhbmNlVG9DYW0pICogMzA7XHJcbiAgICBidXR0b24ub3BhY2l0eSA9IE1hdGgubWF4KDAuMjUsIDEgLSAoTWF0aC5tYXgoNy4wLCAoTWF0aC5yb3VuZChkaXN0YW5jZVRvQ2FtICogMTApIC8gMTApKSAtIDcpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldE9wdGlvbnNGcm9tU2VsZWN0aW9uKGJhc2VTZWxlY3Rpb246IFNlbGVjdGlvbik6IFNlbGVjdGlvbltdIHtcclxuICAgIHJldHVybiB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuZ2V0T3B0aW9uc0Zyb21TZWxlY3Rpb24oYmFzZVNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVBbnN3ZXJDb3VudFJlY2VpdmVkKGFuc3dlckNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0Fuc3dlcnMgPSBhbnN3ZXJDb3VudCA+IDA7XHJcbiAgICBpZiAodGhpcy5zaG93QW5zd2Vycykge1xyXG4gICAgICB0aGlzLnNob3dMaXRlU2VsZWN0b3IgPSAhdGhpcy5fbG9hZGluZ0Zyb21QcmVzZXQ7XHJcbiAgICB9LyogZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLl9pbml0aWFsU3RhcnR1cCkge1xyXG4gICAgICAgIC8vIHRoaXMuX2lPbmUubG9hZFNlbGVjdGlvbnMoKTtcclxuICAgICAgICB0aGlzLl9pbml0aWFsU3RhcnR1cCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9Ki9cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUxvYWRJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1Uoc2t1OiBzdHJpbmcsIHNldHRpbmdzOiBIb21lZGVjb3JhdG9yRXh0ZXJuYWxTZXR0aW5nc0ludGVyZmFjZSwgcG9zaXRpb246IHtcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIHo/OiBudW1iZXJcclxuICB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0b2FzdCA9IG5ldyBUb2FzdCgpO1xyXG4gICAgdG9hc3QubWVzc2FnZSA9ICdNT0RFTF9MT0FESU5HJztcclxuICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93VG9hc3QodG9hc3QpO1xyXG4gICAgYXdhaXQgdGhpcy5fY29ubmVjdG9yQWRhcHRlclNlcnZpY2UuaW5pdENvbm5lY3RvcihcclxuICAgICAgc2V0dGluZ3MgPyBzZXR0aW5ncy5zZXR0aW5ncyA6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncyxcclxuICAgICAgc2V0dGluZ3MgPyBzZXR0aW5ncy5uYW1lIDogdW5kZWZpbmVkLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgc2V0dGluZ3MgJiYgc2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2VJZCA/IHNldHRpbmdzLmV4dGVybmFsU291cmNlSWQgOiB1bmRlZmluZWQpO1xyXG4gICAgY29uc3QgYXJ0aWNsZTogQXJ0aWNsZSA9IGF3YWl0IHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmxvYWRBcnRpY2xlKHNrdSk7XHJcbiAgICBpZiAoYXJ0aWNsZS5wbGFjZW1lbnQgPT09IEhkZWNvUGxhY2VtZW50LkZsb29yRGVjb3JhdGlvbikge1xyXG4gICAgICB0aGlzLl9mbG9vclNlcnZpY2Uuc2VsZWN0ZWRGbG9vckFydGljbGUgPSBhcnRpY2xlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZHJhZ2dlZERhdGE6IERyYWdnZWREYXRhID0ge1xyXG4gICAgICBuYW1lOiBza3UsXHJcbiAgICAgIGNvbnN0cnVjdEZuOiBhc3luYyAocG9zKSA9PiB0aGlzLl9sb2FkSU9uZUZ1cm5pdHVyZUZyb21Ta3UocG9zLCBza3UsIHNldHRpbmdzKSxcclxuICAgICAgdHlwZTogaXRlbVR5cGVGcm9tUGxhY2VtZW50KGFydGljbGUucGxhY2VtZW50KSxcclxuICAgICAgaU9uZTogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TZXREcmFnLCBkcmFnZ2VkRGF0YSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuU3RhcnREcmFnLCBwb3NpdGlvbik7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlQ29weUlPbmVGdXJuaXR1cmVJbnRvU2NlbmVCeVNLVShvcmlnaW5hbDogSXRlbSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdG9hc3QgPSBuZXcgVG9hc3QoKTtcclxuICAgIHRvYXN0Lm1lc3NhZ2UgPSAnTU9ERUxfTE9BRElORyc7XHJcbiAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvd1RvYXN0KHRvYXN0KTtcclxuICAgIG9yaWdpbmFsLm1ldGFkYXRhLmNvbnZlcnNpb25HVE1TZW5kID0gZmFsc2U7XHJcbiAgICBjb25zdCBkcmFnZ2VkRGF0YSA9IHtcclxuICAgICAgbmFtZTogb3JpZ2luYWwubWV0YWRhdGEuaXRlbUlkZW50aWZpZXIsXHJcbiAgICAgIGNvbnN0cnVjdEZuOiAocG9zKSA9PiB0aGlzLl9sb2FkSU9uZUZ1cm5pdHVyZUZyb21PcmlnaW5hbChvcmlnaW5hbC5tZXRhZGF0YSwgcG9zLCBvcmlnaW5hbC5yb3RhdGlvbiksXHJcbiAgICAgIHR5cGU6IG9yaWdpbmFsLm1ldGFkYXRhLml0ZW1UeXBlLFxyXG4gICAgICBpT25lOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLlNldERyYWcsIGRyYWdnZWREYXRhKTtcclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TdGFydERyYWcsIG9yaWdpbmFsLnBvc2l0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRJT25lRnVybml0dXJlRnJvbU9yaWdpbmFsKG1kOiBNZXRhZGF0YSwgcG9zOiBWZWN0b3IzLCByb3Q6IEV1bGVyKTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICBjb25zdCBuZXdNZXRhRGF0YSA9IHsuLi5tZH07XHJcbiAgICBuZXdNZXRhRGF0YS5yb3RhdGlvbiA9IG5ldyBFdWxlcigpLmNvcHkocm90KTtcclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUobmV3TWV0YURhdGEsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWRJT25lRnVybml0dXJlRnJvbVNrdShcclxuICAgIHBvczogVmVjdG9yMywgc2t1OiBzdHJpbmcsIHNldHRpbmdzPzogSG9tZWRlY29yYXRvckV4dGVybmFsU2V0dGluZ3NJbnRlcmZhY2UsIHN0YW5kQWxvbmU6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgY29uc3QgbWQ6IE1ldGFkYXRhID0ge1xyXG4gICAgICBwb3NpdGlvbjogcG9zLFxyXG4gICAgICBpdGVtSWRlbnRpZmllcjogc2t1LFxyXG4gICAgICBleHRlcm5hbFNldHRpbmdzOiBzZXR0aW5nc1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUobWQsIGZhbHNlLCB0cnVlLCBmYWxzZSwgc3RhbmRBbG9uZSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlQ29weUluc3RhbmNlRm9yRnVybml0dXJlKGZ1cm5pdHVyZTogSXRlbVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IGZ1cm5pdHVyZS5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGN1c3RvbUl0ZW06IEl0ZW0gPSBmdXJuaXR1cmVbaV07XHJcbiAgICAgIGlmIChjdXN0b21JdGVtLm1ldGFkYXRhICYmIGN1c3RvbUl0ZW0ubWV0YWRhdGEuaXRlbUlkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fY29ubmVjdG9yQWRhcHRlclNlcnZpY2UuaW5pdENvbm5lY3Rpb25Gcm9tTWV0YWRhdGEoY3VzdG9tSXRlbS5tZXRhZGF0YSxcclxuICAgICAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5wcm9qZWN0U2V0dGluZ3MgPyB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MucHJvamVjdFNldHRpbmdzIDogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzKTtcclxuICAgICAgICBjb25zdCBvbGRJbnN0YW5jZTogc3RyaW5nID0gY3VzdG9tSXRlbS5tZXRhZGF0YS5pdGVtSWQ7XHJcbiAgICAgICAgY29uc3QgbmV3SW5zdGFuY2U6IHN0cmluZyA9IGF3YWl0IHRoaXMuX2lPbmUuY29weUluc3RhbmNlQW5kU2F2ZU9yaWdpbmFsQ29uZmlndXJhdGlvbihvbGRJbnN0YW5jZSwgbnVsbCk7XHJcbiAgICAgICAgY3VzdG9tSXRlbS5tZXRhZGF0YS5pdGVtSWQgPSBuZXdJbnN0YW5jZTtcclxuICAgICAgICBjdXN0b21JdGVtLnVzZXJEYXRhLml0ZW1JZCA9IG5ld0luc3RhbmNlO1xyXG4gICAgICAgIGN1c3RvbUl0ZW0ubWV0YWRhdGEub3JpZ2luYWxJdGVtSWQgPSBvbGRJbnN0YW5jZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlTG9hZElPbmVGdXJuaXR1cmVGcm9tUHJlc2V0KGZ1cm5pdHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBmdXJuaXR1cmUubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIC8vIGlmIChmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncyAmJiBmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZUlkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gICBjb25zdCBleHRlcm5hbFNvdXJjZU9iajogRXh0ZXJuYWxTb3VyY2UgPVxyXG4gICAgICAvLyAgICAgZXh0ZXJuYWxTb3VyY2VzLmZpbmQoc291cmNlID0+IHNvdXJjZS5zY2hlbWEgPT09IGZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzLnNldHRpbmdzLnNjaGVtYSk7XHJcbiAgICAgIC8vICAgaWYgKGV4dGVybmFsU291cmNlT2JqICYmIGV4dGVybmFsU291cmNlT2JqLnNjaGVtYSAhPT0gJycpIHtcclxuICAgICAgLy8gICAgIGlmIChmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5nc1sndXNlcm5hbWUnXSAhPT0gdW5kZWZpbmVkICYmIGZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzLnNldHRpbmdzWydwYXNzd29yZCddICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gICAgICAgZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3NbJ3VzZXJuYW1lJ10gPSAnJztcclxuICAgICAgLy8gICAgICAgZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3NbJ3Bhc3N3b3JkJ10gPSAnJztcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICAgIGZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzLmV4dGVybmFsU291cmNlSWQgPSBleHRlcm5hbFNvdXJjZU9iai5zb3VyY2VJZDtcclxuICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgY29uc29sZS5sb2coJ3NvdXJjZSBub3QgYXZhaWxhYmxlJyk7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRGdXJuaXR1cmVGcm9tSXRlbShmdXJuaXR1cmVbaV0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLlNob3VsZENvcHlGdXJuaXR1cmVGcm9tUHJlc2V0LCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRGdXJuaXR1cmVGcm9tSXRlbShpdGVtOiBhbnkpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gbmV3IFZlY3RvcjMoXHJcbiAgICAgIGl0ZW0ueHBvcywgaXRlbS55cG9zLCBpdGVtLnpwb3MpO1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB7XHJcbiAgICAgIGl0ZW1OYW1lOiBpdGVtLml0ZW1fbmFtZSxcclxuICAgICAgaXRlbURlc2NyaXB0aW9uOiBpdGVtLml0ZW1fZGVzY3JpcHRpb24sXHJcbiAgICAgIGl0ZW1JZDogaXRlbS5pdGVtX2lkLFxyXG4gICAgICBpdGVtSWRlbnRpZmllcjogaXRlbS5pdGVtX2lkZW50aWZpZXIsXHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogIWlzTmlsbChpdGVtLmNvbmZpZ3VyYWJsZSkgPyBpdGVtLmNvbmZpZ3VyYWJsZSA6IHRydWUsXHJcbiAgICAgIGlvbmU6IGl0ZW0uaW9uZSxcclxuICAgICAgc2NoZW1hOiBpdGVtLml0ZW1fc2NoZW1hLFxyXG4gICAgICByZXNpemFibGU6IGl0ZW0ucmVzaXphYmxlLFxyXG4gICAgICBlbGV2YXRpb246IGl0ZW0uZWxldmF0aW9uLFxyXG4gICAgICBlbGV2YXRpb25GaXhlZDogaXRlbS5lbGV2YXRpb25GaXhlZCxcclxuICAgICAgZWxldmF0aW9uQWRqdXN0YWJsZTogaXRlbS5lbGV2YXRpb25BZGp1c3RhYmxlLFxyXG4gICAgICBpdGVtVHlwZTogaXRlbS5pdGVtX3R5cGUsXHJcbiAgICAgIG1vZGVsVXJsOiBpdGVtLm1vZGVsX3VybCxcclxuICAgICAgdGV4dHVyZTogaXRlbS50ZXh0dXJlLFxyXG4gICAgICBwb3NpdGlvbjogcG9zaXRpb24sXHJcbiAgICAgIGFzc2V0UGF0aDogaXRlbS5pdGVtX2Fzc2V0UGF0aCxcclxuICAgICAgcm90YXRpb246IG5ldyBFdWxlcigwLCBpdGVtLnJvdGF0aW9uLCAwKSxcclxuICAgICAgc2NhbGU6IGl0ZW0uc2NhbGUsXHJcbiAgICAgIGNlbnRlclBpdm90OiB0cnVlLFxyXG4gICAgICBpZ25vcmVJbnZpc2libGU6IGl0ZW0uaWdub3JlSW52aXNpYmxlLFxyXG4gICAgICB1cGRhdGVQaXZvdE9uQ3JlYXRlOiB0cnVlLFxyXG4gICAgICBvcGVuaW5nOiBpdGVtLm9wZW5pbmcsXHJcbiAgICAgIGxvY2tlZDogaXRlbS5sb2NrZWQsXHJcbiAgICAgIGl0ZW1Hcm91cDogaXRlbS5pdGVtR3JvdXAsXHJcbiAgICAgIGRlY29zOiBpdGVtLmRlY29zLFxyXG4gICAgICBzZWxlY3Rpb25zOiBpdGVtLnNlbGVjdGlvbnMsXHJcbiAgICAgIGVsZW1lbnRDb25maWd1cmF0aW9uOiBpdGVtLmVsZW1lbnRDb25maWd1cmF0aW9uLFxyXG4gICAgICBvbldhbGw6IGl0ZW0ub25XYWxsLFxyXG4gICAgICBleHRlcm5hbFNldHRpbmdzOiBpdGVtLmV4dGVybmFsU2V0dGluZ3MsXHJcbiAgICAgIGNvbnZlcnNpb25HVE1TZW5kOiBpdGVtLmNvbnZlcnNpb25HVE1TZW5kLFxyXG4gICAgICBjb252ZXJzaW9uU3VibWl0dGVkUHJpY2U6IGl0ZW0uY29udmVyc2lvblN1Ym1pdHRlZFByaWNlXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBsb2FkRnJvbVByb2plY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlmICgobWV0YWRhdGEuc2VsZWN0aW9ucyAmJiBtZXRhZGF0YS5zZWxlY3Rpb25zLmxlbmd0aCAhPT0gMCAmJiBtZXRhZGF0YS5kZWNvcyAmJiBtZXRhZGF0YS5kZWNvcy5sZW5ndGggIT09IDAgJiYgbWV0YWRhdGEuY29uZmlndXJhYmxlKSB8fFxyXG4gICAgICAobWV0YWRhdGEubW9kZWxVcmwgJiYgIW1ldGFkYXRhLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgbG9hZEZyb21Qcm9qZWN0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUoXHJcbiAgICAgIG1ldGFkYXRhLCB0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGxvYWRGcm9tUHJvamVjdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUoXHJcbiAgICBmdXJuaXR1cmVEYXRhOiBNZXRhZGF0YSxcclxuICAgIHNob3VsZENvcHlJbnN0YW5jZTogYm9vbGVhbixcclxuICAgIGxvb3NlT3JpZ2luYWxDb25maWd1cmF0aW9uOiBib29sZWFuLFxyXG4gICAgZnJvbVByZXNldDogYm9vbGVhbixcclxuICAgIHN0YW5kQWxvbmU6IGJvb2xlYW4sXHJcbiAgICBmcm9tU2NyYXRjaDogYm9vbGVhbixcclxuICAgIHNob3dFcnJvckRpYWxvZzogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBsb2FkRnJvbVByb2plY3Q6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICk6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG5cclxuICAgIGlmICghbG9hZEZyb21Qcm9qZWN0KSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLmluaXRDb25uZWN0aW9uRnJvbU1ldGFkYXRhKGZ1cm5pdHVyZURhdGEsXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnByb2plY3RTZXR0aW5ncyA/IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5wcm9qZWN0U2V0dGluZ3MgOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCA9XHJcbiAgICAgIGF3YWl0IHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmxvYWRGdXJuaXR1cmUoXHJcbiAgICAgICAgZnVybml0dXJlRGF0YSwgc2hvdWxkQ29weUluc3RhbmNlLCBsb29zZU9yaWdpbmFsQ29uZmlndXJhdGlvbiwgc3RhbmRBbG9uZSwgZnJvbVNjcmF0Y2gsIGZyb21QcmVzZXQsIGxvYWRGcm9tUHJvamVjdClcclxuICAgICAgICAuY2F0Y2goKGVycm9yUmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWVycm9yUmVzdWx0IHx8ICh0eXBlb2YgZXJyb3JSZXN1bHQgPT09ICdzdHJpbmcnICYmIGVycm9yUmVzdWx0ID09PSAnRUNPTk5BQk9SVEVEJykgfHxcclxuICAgICAgICAgICAgZXJyb3JSZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5UaW1lb3V0KSB7IC8vIHRpbWVvdXRcclxuICAgICAgICAgICAgZXJyb3JSZXN1bHQgPSBuZXcgQ3VzdG9tRmxvb3JHcm91cFJlc3VsdChmdXJuaXR1cmVEYXRhLml0ZW1JZGVudGlmaWVyLCBmdXJuaXR1cmVEYXRhLml0ZW1OYW1lKTtcclxuICAgICAgICAgICAgZXJyb3JSZXN1bHQuZXJyb3JNZXNzYWdlcy5wdXNoKG5ldyBFcnJvck1lc3NhZ2UoJ1RJTUVPVVQnKSk7XHJcbiAgICAgICAgICAgIGVycm9yUmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLlRpbWVvdXQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuRmluaXNoZWRJT25lRnVybml0dXJlQnVpbGQpO1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlRXJyb3IoZXJyb3JSZXN1bHQsIHNob3dFcnJvckRpYWxvZyk7XHJcbiAgICAgICAgICByZXR1cm4gZXJyb3JSZXN1bHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuRmluaXNoZWRJT25lRnVybml0dXJlQnVpbGQpO1xyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuQnVpbGRGcm9tU2NyYXRjaCkge1xyXG4gICAgICAgIGlmIChmcm9tUHJlc2V0KSB7IC8vIHN0YXJ0IGNvbmZpZ3VyaW5nIHdoZW4gbG9hZGluZyBpcyBkb25lXHJcbiAgICAgICAgICByZXN1bHQubWV0YURhdGEgPSB7Li4uZnVybml0dXJlRGF0YX07XHJcbiAgICAgICAgICB0aGlzLl9pdGVtc0Zyb21TY3JhdGNoLnB1c2gocmVzdWx0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZnVybml0dXJlRGF0YS5wb3NpdGlvbiA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0Q2VudGVyKCk7XHJcbiAgICAgICAgICBpZiAoIXN0YW5kQWxvbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nU2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBEaWFsb2dUeXBlLldhcm5pbmcsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KCdCVUlMRF9QUk9EVUNUX0ZST01fU0NSQVRDSCcpLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZXM6IFt7bWVzc2FnZTogdGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KCdNT0RFTF9IQVNfTk9fREVGQVVMVFMnKX1dXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUxvYWRBbmRCdWlsZEZ1cm5pdHVyZShmdXJuaXR1cmVEYXRhLCBmYWxzZSwgdHJ1ZSwgZnJvbVByZXNldCwgc3RhbmRBbG9uZSwgdHJ1ZSwgbG9hZEZyb21Qcm9qZWN0KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTWV0YWRhdGEgPSByZXN1bHQgPyByZXN1bHQubWV0YURhdGEgOiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuTmVlZHNVc2VySW5wdXQpIHtcclxuICAgICAgICByZXN1bHQubWV0YURhdGEgPSB7Li4uZnVybml0dXJlRGF0YX07XHJcbiAgICAgICAgaWYgKGZyb21QcmVzZXQpIHsgLy8gc3RhcnQgY29uZmlndXJpbmcgd2hlbiBsb2FkaW5nIGlzIGRvbmVcclxuICAgICAgICAgIHRoaXMuX2l0ZW1zTmVlZFVzZXJJbnB1dC5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3VsdC5tZXRhRGF0YS5wb3NpdGlvbiA9IHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0Q2VudGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5FeHRlcm5hbFNvdXJjZU5vdEF2YWlsYWJsZSkge1xyXG4gICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5leHRlcm5hbFNvdXJjZU5vdEF2YWlsYWJsZSwgcmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0LmZ1cm5pdHVyZSkge1xyXG4gICAgICAgIGlmIChzaG91bGRDb3B5SW5zdGFuY2UpIHtcclxuICAgICAgICAgIGNvbnN0IGNsb3Nlc3RXYWxsRWRnZTogSGFsZkVkZ2UgPSB0aGlzLl9yb29tU2VydmljZS5nZXRDbG9zZXN0V2FsbEVkZ2UocmVzdWx0LmZ1cm5pdHVyZS5wb3NpdGlvbi54LCByZXN1bHQuZnVybml0dXJlLnBvc2l0aW9uLnopO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5mdXJuaXR1cmUgaW5zdGFuY2VvZiBDdXN0b21XYWxsRmxvb3JJdGVtICYmIHJlc3VsdC5mdXJuaXR1cmUub25XYWxsKSB7XHJcbiAgICAgICAgICAgIChyZXN1bHQuZnVybml0dXJlIGFzIEN1c3RvbVdhbGxGbG9vckl0ZW0pLnBsYWNlT25FZGdlKGNsb3Nlc3RXYWxsRWRnZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5mdXJuaXR1cmUubW92ZUZyb21GbG9vclRvV2FsbCgpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuZnVybml0dXJlIGluc3RhbmNlb2YgV2FsbEl0ZW0gJiYgIShyZXN1bHQuZnVybml0dXJlIGluc3RhbmNlb2YgQ3VzdG9tV2FsbEZsb29ySXRlbSkpIHtcclxuICAgICAgICAgICAgKHJlc3VsdC5mdXJuaXR1cmUgYXMgV2FsbEl0ZW0pLnBsYWNlT25FZGdlKGNsb3Nlc3RXYWxsRWRnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQuZnVybml0dXJlIGluc3RhbmNlb2YgQ3VzdG9tV2FsbEl0ZW0gJiYgc3RhbmRBbG9uZSkge1xyXG4gICAgICAgICAgcmVzdWx0LmZ1cm5pdHVyZS5wb3NpdGlvbi55ICs9IHJlc3VsdC5mdXJuaXR1cmUuaGFsZlNpemUueTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk9ic29sZXRlKSB7XHJcbiAgICAgICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5hZGRUb0xpc3QodGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uub2Jzb2xldGVPYmplY3RDYWNoZSwgcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLkxvYWRlZCkge1xyXG4gICAgICAgICAgaWYgKHJlc3VsdC5tZXRhRGF0YS5jb25maWd1cmFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYWRkVG9MaXN0KHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm9iamVjdExpc3QsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5hZGRUb0xpc3QodGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uuc2ltcGxlT2JqZWN0TGlzdCwgcmVzdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLkNvbmZpZ3VyYXRpb25GaXhlZCkge1xyXG4gICAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYWRkVG9MaXN0KHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm9iamVjdExpc3RGaXhlZCwgcmVzdWx0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbG9hZEZyb21Qcm9qZWN0KSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9hZGRUb1NjZW5lR1RNKHJlc3VsdC5mdXJuaXR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCFmcm9tUHJlc2V0KSB7XHJcbiAgICAgIHRoaXMuX3Byb2dyZXNzU2VydmljZS5maW5pc2hEb3dubG9hZHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlTWV0YWRhdGEgPSByZXN1bHQgPyByZXN1bHQubWV0YURhdGEgOiBudWxsO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hbnN3ZXJTZWxlY3RlZChyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiB2b2lkIHtcclxuICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYmplY3RMaXN0LCByZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlRXJyb3IoZXJyb3I6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQsIHNob3dEaWFsb2c6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChlcnJvci5pbnN0YW5jZUlkIHx8IGVycm9yLnNrdSkge1xyXG4gICAgICBzd2l0Y2ggKGVycm9yLnJlc3VsdFR5cGUpIHtcclxuICAgICAgICBjYXNlIFJlc3VsdFR5cGUuQXJ0aWNsZU5vdEZvdW5kOlxyXG4gICAgICAgIGNhc2UgUmVzdWx0VHlwZS5UaW1lb3V0OlxyXG4gICAgICAgIGNhc2UgUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uTm90Rml4ZWQ6XHJcbiAgICAgICAgY2FzZSBSZXN1bHRUeXBlLkdhbWVvYmplY3ROYW1lTWlzbWF0Y2hJblNvdXJjZTpcclxuICAgICAgICBjYXNlIFJlc3VsdFR5cGUuTm9TZWxlY3Rpb25zOlxyXG4gICAgICAgIGNhc2UgUmVzdWx0VHlwZS5Ob0RlY29Ob2RlczpcclxuICAgICAgICBjYXNlIFJlc3VsdFR5cGUuRXh0ZXJuYWxTb3VyY2VOb3RBdmFpbGFibGU6XHJcbiAgICAgICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5ub3RMb2FkZWQucHVzaChlcnJvcik7XHJcbiAgICAgICAgICBpZiAoc2hvd0RpYWxvZykge1xyXG4gICAgICAgICAgICB0aGlzLl9zaG93V2FybmluZyh7dGl0bGU6ICdFUlJPUicsIG1lc3NhZ2VzOiBlcnJvci5lcnJvck1lc3NhZ2VzfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uubm90TG9hZGVkLnB1c2goZXJyb3IpO1xyXG4gICAgICAgICAgaWYgKHNob3dEaWFsb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2hvd1dhcm5pbmcoe3RpdGxlOiAnRVJST1InLCBtZXNzYWdlczogW25ldyBFcnJvck1lc3NhZ2UoJ0VSUk9SX0xPQURJTkdfRlVSTklUVVJFJyldfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzaG93RGlhbG9nKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd1dhcm5pbmcoe3RpdGxlOiAnRVJST1InLCBtZXNzYWdlczogW25ldyBFcnJvck1lc3NhZ2UoJ0VSUk9SX0xPQURJTkdfRlVSTklUVVJFJyldfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5VbmRlZmluZWRFcnJvck9jY3VyZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlQ29uZmlndXJlTW9kZUNoYW5nZShjb25maWd1cmluZ01vZGVDaGFuZ2U6IENvbmZpZ3VyaW5nTW9kZUNoYW5nZUludGVyZmFjZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuc3RhbmRBbG9uZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoY29uZmlndXJpbmdNb2RlQ2hhbmdlLmNvbmZpZ3VyaW5nKSB7XHJcbiAgICAgIHRoaXMuX2lPbmUuZW1wdHlTZWxlY3Rpb25zKCk7XHJcbiAgICAgIHRoaXMuX2FwcFN0YXRlU2VydmljZS51bmRvRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9hcHBTdGF0ZVNlcnZpY2UucmVkb0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hY3RpdmVNZXRhZGF0YSA9IGNvbmZpZ3VyaW5nTW9kZUNoYW5nZS5tZXRhZGF0YTtcclxuICAgICAgdGhpcy5faGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKFxyXG4gICAgICAgIGNvbmZpZ3VyaW5nTW9kZUNoYW5nZS5tZXRhZGF0YSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2FwcFN0YXRlU2VydmljZS51bmRvRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fYXBwU3RhdGVTZXJ2aWNlLnJlZG9EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93QW5zd2VycyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U2VsZWN0aW9ucyA9IGNvbmZpZ3VyaW5nTW9kZUNoYW5nZS5jb25maWd1cmluZyB8fCB0aGlzLnN0YW5kQWxvbmU7XHJcbiAgICB0aGlzLnNob3dMaXRlU2VsZWN0b3IgPSBjb25maWd1cmluZ01vZGVDaGFuZ2UuY29uZmlndXJpbmcgfHwgdGhpcy5zdGFuZEFsb25lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYWRkTW9kZWxEaWFsb2dUb29sYmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJJY29uTW9kZWxzLFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiA4MDBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd1dhcm5pbmcoY29uZmlnOiBEaWFsb2dDb25maWcpIHtcclxuICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uuc2hvd0RpYWxvZyh7ZGF0YTogY29uZmlnfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9hZGRUb1NjZW5lR1RNKGZ1cm5pdHVyZTogSXRlbSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGZ1cm5pdHVyZSAmJiBmdXJuaXR1cmUubWV0YWRhdGEpIHtcclxuICAgICAgY29uc3QgYXJ0aWNsZUV4dGVuZGVkOiBBcnRpY2xlRXh0ZW5kZWQgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5nZXRBcnRpY2xlRXh0ZW5kZWQoZnVybml0dXJlLm1ldGFkYXRhLml0ZW1JZGVudGlmaWVyKTtcclxuICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgJ2FydGljbGVOcic6IGZ1cm5pdHVyZS5tZXRhZGF0YS5pdGVtSWRlbnRpZmllcixcclxuICAgICAgICAncHJvZHVjdCc6IGZ1cm5pdHVyZS5tZXRhZGF0YS5pdGVtTmFtZSxcclxuICAgICAgICAnc2NoZW1hJzogZnVybml0dXJlLm1ldGFkYXRhLnNjaGVtYVxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoZnVybml0dXJlLm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGV4dGVybmFsRGF0YSA9IHtcclxuICAgICAgICAgICdleHRlcm5hbFNvdXJjZU5hbWUnOiBmdXJuaXR1cmUubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5uYW1lLFxyXG4gICAgICAgICAgJ2V4dGVybmFsU291cmNlVXJsJzogZnVybml0dXJlLm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3MudXJsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBkYXRhID0gey4uLmRhdGEsIC4uLmV4dGVybmFsRGF0YX07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFydGljbGVFeHRlbmRlZCkge1xyXG4gICAgICAgIGNvbnN0IGFydGljbGVEYXRhID0ge1xyXG4gICAgICAgICAgJ2JyYW5kSWQnOiBhcnRpY2xlRXh0ZW5kZWQuYnJhbmRJZCxcclxuICAgICAgICAgICdzdG9yZUdyb3VwSWRzJzogYXJ0aWNsZUV4dGVuZGVkLnN0b3JlR3JvdXBJZHMsXHJcbiAgICAgICAgICAndHVybm92ZXJHcm91cERlc2NyJzogYXJ0aWNsZUV4dGVuZGVkLnR1cm5vdmVyR3JvdXBEZXNjcixcclxuICAgICAgICAgICdjYXRlZ29yeSc6IGFydGljbGVFeHRlbmRlZC5jYXRlZ29yeSxcclxuICAgICAgICAgICdoM2REaXN0cmlidXRpb25JZCc6IGFydGljbGVFeHRlbmRlZC5oM2REaXN0cmlidXRpb25JZCxcclxuICAgICAgICAgICdjYXRhbG9nRGVmaW5pdGlvbklkJzogYXJ0aWNsZUV4dGVuZGVkLmNhdGFsb2dEZWZpbml0aW9uSWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIGRhdGEgPSB7Li4uZGF0YSwgLi4uYXJ0aWNsZURhdGF9O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2dvb2dsZVRhZ01hbmFnZXIuc2VuZEV2ZW50KEdvb2dsZVRhZ01hbmFnZXJFdmVudC5BZGRUb1NjZW5lLCBkYXRhKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPHJwLWxpdGUtc2VsZWN0b3IgKm5nSWY9XCIhc3RhbmRBbG9uZVwiIGNsYXNzPVwiZmxvYXRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICBbKHNob3cpXT1cInNob3dMaXRlU2VsZWN0b3JcIlxyXG4gICAgICAgICAgICAgICAgICBbbWV0YWRhdGFdPVwiYWN0aXZlTWV0YWRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd1NlbGVjdGlvbnNdPVwic2hvd1NlbGVjdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0Fuc3dlcnNdPVwic2hvd0Fuc3dlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAoc2hvd0NoYW5nZSk9XCJoYW5kbGVTaG93Q2hhbmdlU2VsZWN0b3IoJGV2ZW50KVwiXHJcbj48L3JwLWxpdGUtc2VsZWN0b3I+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic3RhbmRBbG9uZVwiPlxyXG4gIDxkaXYgKm5nSWY9XCJzaG93TG9hZGVyICYmIHNob3dQcm9ncmVzc0JhclwiIFtjbGFzcy5mdWxsXT1cIiFzaG93UHJvZ3Jlc3NUZXh0XCIgaWQ9XCJsb2FkZXJcIj5cclxuICAgIDxwICpuZ0lmPVwic2hvd1Byb2dyZXNzVGV4dFwiIGlkPVwibG9hZGVyLXRleHRcIj57eyBsb2FkZXJUZXh0IH19PC9wPlxyXG4gICAgPGRpdiBpZD1cInByb2dyZXNzLWJhclwiPlxyXG4gICAgICA8ZGl2IGlkPVwicHJvZ3Jlc3NcIiBbc3R5bGUud2lkdGhdPVwibG9hZGVyUHJvZ3Jlc3MgKyAnJSdcIj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93RWxlbWVudFRvb2xiYXJcIj5cclxuICA8cnAtZWxlbWVudC10b29sYmFyIGNsYXNzPVwicnAtZWxlbWVudC10b29sYmFyIGZsb2F0aW5nXCIgW2NsYXNzLmN1c3RvbV09XCJzdGFuZEFsb25lXCIgQHNob3dFbGVtZW50VG9vbGJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgW2VkaXRNZW51XT1cImVkaXRFbGVtZW50TWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd1N3YXBdPVwic2hvd1N3YXBCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dQb2ludGVyXT1cInNlbGVjdGVkRWxlbWVudFBvc2l0aW9uICE9PSB1bmRlZmluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKHN3YXBDbGlja2VkKT1cInN3YXBFbGVtZW50KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZUNsaWNrZWQpPVwiZGVsZXRlRWxlbWVudCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChhbmltYXRpb25DbGlja2VkKT1cIm9wZW5BbmltYXRpb25TaWRlYmFyKClcIlxyXG4gID48L3JwLWVsZW1lbnQtdG9vbGJhcj5cclxuICA8cnAtZWxlbWVudC1idXR0b25zIGNsYXNzPVwicnAtZWxlbWVudC1idXR0b25zIGZsb2F0aW5nXCIgQHNob3dFbGVtZW50VG9vbGJhclxyXG4gICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRQb2ludGVyXT1cImVsZW1lbnRUb29sYmFyPy5lbGVtZW50UG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYWRkQnV0dG9uc109XCJlZGl0QWRkQnV0dG9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9taXplQnV0dG9uc109XCJlZGl0Q3VzdG9taXplQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtyZXNpemVCdXR0b25zXT1cInJlc2l6ZUJ1dHRvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRQb3NpdGlvbl09XCJzZWxlY3RlZEVsZW1lbnRQb3NpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY3VzdG9taXplQnV0dG9uQ2xpY2tlZCk9XCJoYW5kbGVDdXN0b21pemVDbGljaygpXCJcclxuICA+PC9ycC1lbGVtZW50LWJ1dHRvbnM+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDdXN0b21pemVCdXR0b25zXCI+XHJcbiAgPHJwLWVsZW1lbnQtYnV0dG9ucyBjbGFzcz1cInJwLWVsZW1lbnQtYnV0dG9ucyBmbG9hdGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZWxlbWVudFBvaW50ZXJdPVwiZWxlbWVudFRvb2xiYXI/LmVsZW1lbnRQb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21pemVCdXR0b25zXT1cImVkaXRDdXN0b21pemVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnRQb3NpdGlvbl09XCJzZWxlY3RlZEVsZW1lbnRQb3NpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY3VzdG9taXplQnV0dG9uQ2xpY2tlZCk9XCJoYW5kbGVDdXN0b21pemVDbGljaygpXCJcclxuICA+PC9ycC1lbGVtZW50LWJ1dHRvbnM+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0b29sYmFySWNvbk1vZGVscz5cclxuICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICBtYXRJY29uPVwibGlzdFwiXHJcbiAgICB0b29sdGlwPVwie3tpY29uTmFtZS5PYmplY3RzIHwgbG9jYWxpemV9fVwiXHJcbiAgICAob25DbGljayk9XCJzZXRNb2RlbEVycm9yRGlhbG9nKClcIlxyXG4gICAgW3Nob3dMYWJlbF09XCJzaG91bGRTaG93TGFiZWxcIlxyXG4gID48L3JwLXRvb2xiYXItaWNvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2VsZWN0ZWRUaHJlZWRPYmplY3RBbmltYXRpb25TaWRlYmFyPlxyXG4gIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCIgW3RleHRDb250ZW50XT1cIidBTklNQVRFJyB8IGxvY2FsaXplXCI+PC9oMj5cclxuICA8L2hlYWRlcj5cclxuICA8cnAtYW5pbWF0aW9uPlxyXG5cclxuICA8L3JwLWFuaW1hdGlvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2VsZWN0ZWRUaHJlZWRPYmplY3RDdXN0b21pemF0aW9uU2lkZWJhcj5cclxuICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiIFt0ZXh0Q29udGVudF09XCInQ1VTVE9NSVpFJyB8IGxvY2FsaXplXCI+PC9oMj5cclxuICA8L2hlYWRlcj5cclxuICA8cnAtY3VzdG9taXplclxyXG4gICAgW3NlbGVjdGlvbl09XCJzZWxlY3Rpb25Ub0N1c3RvbWl6ZVwiXHJcbiAgPjwvcnAtY3VzdG9taXplcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxkaXYgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCI+XHJcbiAgPHJwLWVsZW1lbnQtc2xpZGVyIGNsYXNzPVwicnAtZWxlbWVudC1zbGlkZXJcIj48L3JwLWVsZW1lbnQtc2xpZGVyPlxyXG48L2Rpdj5cclxuIl19
1226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWVkc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFlLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQVksYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUkxRyxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRS9FLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNyRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFXLFFBQVEsRUFBRSxhQUFhLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRixPQUFPLEVBQUMsVUFBVSxFQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxlQUFlLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUd2RyxPQUFP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bXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29sb3IsIEV1bGVyLCBNZXNoLCBPYmplY3QzRCwgUGxhbmVHZW9tZXRyeSwgU2hhcGUsIFNoYXBlR2VvbWV0cnksIFZlY3RvcjIsIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb24nO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQge0FydGljbGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZSc7XHJcbmltcG9ydCB7SWNvbk5hbWV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9pY29uLW5hbWUuZW51bSc7XHJcbmltcG9ydCB7RWxlbWVudFRvb2xiYXJDb21wb25lbnR9IGZyb20gJy4uL2VsZW1lbnQtdG9vbGJhci9lbGVtZW50LXRvb2xiYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtDdXN0b21CdXR0b259IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvY3VzdG9tLWJ1dHRvbic7XHJcbmltcG9ydCB7SGFsZkVkZ2UsIFdhbGxJdGVtLCBXYWxsSXRlbUdyb3VwfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1vYmplY3RzJztcclxuaW1wb3J0IHtDdXN0b21NZXNoLCBDdXN0b21PYmplY3QzRH0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1vYmplY3RzJztcclxuaW1wb3J0IHtpc0l0ZW1Hcm91cFR5cGUsIGlzV2FsbEl0ZW1Hcm91cFR5cGUsIGl0ZW1UeXBlRnJvbVBsYWNlbWVudH0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2ZhY3RvcnknO1xyXG5pbXBvcnQge01ldGFkYXRhfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvbWV0YWRhdGEnO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtR3JvdXB9IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtLWdyb3VwJztcclxuaW1wb3J0IHtDdXN0b21GbG9vckdyb3VwUmVzdWx0fSBmcm9tICcuLi8uLi9jb3JlM2QvbW9kZWwvY3VzdG9tLWZsb29yLWdyb3VwLXJlc3VsdCc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtTY3JlZW5TaXplQW5hbHlzaXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2NyZWVuLXNpemUtYW5hbHlzaXMvc2NyZWVuLXNpemUtYW5hbHlzaXMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7TG9hZEZ1cm5pdHVyZVNlcnZpY2V9IGZyb20gJy4vc2VydmljZS9sb2FkLWZ1cm5pdHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdWlsZEZ1cm5pdHVyZVNlcnZpY2UsIENvbmZpZ3VyaW5nTW9kZUNoYW5nZUludGVyZmFjZX0gZnJvbSAnLi9zZXJ2aWNlL2J1aWxkLWZ1cm5pdHVyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJbnRlZ3JhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9pbnRlZ3JhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yRGljdGlvbmFyeVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWRpY3Rpb25hcnkuc2VydmljZSc7XHJcbmltcG9ydCB7VG9hc3RTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9zY2VuZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGlhbG9nL3NlcnZpY2UvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7U2NlbmVPcHRpb25zU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUtb3B0aW9ucy5zZXJ2aWNlJztcclxuaW1wb3J0IHtEaW1lbnNpb25zU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlL2RpbWVuc2lvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29ycGxhblNlcnZpY2V9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL2Zsb29ycGxhbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1pY29uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FyU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvYXIuc2VydmljZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Vycm9yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2Vycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JvdGF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvcm90YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7Um9vbVNlcnZpY2V9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL3Jvb20uc2VydmljZSc7XHJcbmltcG9ydCB7QXBwU3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvYXBwLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Byb2dyZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3Byb2dyZXNzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FuaW1hdGlvblNlcnZpY2V9IGZyb20gJy4vc2VydmljZS9hbmltYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7UmVzaXplU2VydmljZX0gZnJvbSAnLi9zZXJ2aWNlL3Jlc2l6ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDdXN0b21pemVyU2VydmljZX0gZnJvbSAnLi4vLi4vbGl0ZS1zZWxlY3Rvci9saXRlLXNlbGVjdG9yL3NlcnZpY2UvY3VzdG9taXplci5zZXJ2aWNlJztcclxuaW1wb3J0IHtEeW5hbWljQ2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2R5bmFtaWMtY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RocmVlZEluUGhvdG9Jbml0aWFsaXplclNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZC1pbi1waG90by9zZXJ2aWNlcy90aHJlZWQtaW4tcGhvdG8taW5pdGlhbGl6ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7UmVuZGVyU2VydmljZX0gZnJvbSAnLi4vLi4vcmVuZGVyL3NlcnZpY2UvcmVuZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge05ld1JlbmRlclNlcnZpY2V9IGZyb20gJy4uLy4uL3JlbmRlci9zZXJ2aWNlL25ldy1yZW5kZXIuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtTY3JlZW5TaXplSW5mb30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NjcmVlbi1zaXplLWFuYWx5c2lzL3NjcmVlbi1zaXplLWluZm8nO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL29iamVjdC51dGlscyc7XHJcbmltcG9ydCB7TW9kZWxEaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9tb2RlbC1kaWFsb2cvbW9kZWwtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7U2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9pbnRlcmZhY2Uvc2NlbmUtb3B0aW9uLWJ1dHRvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtEaWFsb2dDb25maWd9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kaWFsb2cvaW50ZXJmYWNlL2RpYWxvZy1jb25maWcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtEaWFsb2dUeXBlfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGlhbG9nL2VudW0vZGlhbG9nLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7RXJyb3JNZXNzYWdlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL2Vycm9yLW1lc3NhZ2UnO1xyXG5pbXBvcnQge1Jlc3VsdFR5cGV9IGZyb20gJy4uLy4uL2NvcmUzZC9lbnVtL3Jlc3VsdC10eXBlLmVudW0nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JFeHRlcm5hbFNldHRpbmdzSW50ZXJmYWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9ob21lZGVjb3JhdG9yLWV4dGVybmFsLXNldHRpbmdzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7VG9hc3R9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvdG9hc3QnO1xyXG5pbXBvcnQge0RyYWdnZWREYXRhfSBmcm9tICcuLi8uLi9jb3JlM2QvaW50ZXJmYWNlL2RyYWdnZWQtZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uJztcclxuaW1wb3J0IHtDdXN0b21XYWxsRmxvb3JJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLXdhbGwtZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7Q3VzdG9tV2FsbEl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20td2FsbC1pdGVtJztcclxuaW1wb3J0IHtHb29nbGVUYWdNYW5hZ2VyRXZlbnR9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9nb29nbGUtdGFnLW1hbmFnZXItZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7Q2FtZXJhU2V0dGluZ3NEaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jYW1lcmEtc2V0dGluZ3MtZGlhbG9nL2NhbWVyYS1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtIZGVjb1BsYWNlbWVudH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL2hkZWNvLXBsYWNlbWVudC5lbnVtJztcclxuaW1wb3J0IHtMaWdodFByZXNldHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9saWdodC1wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FydGljbGVFeHRlbmRlZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC5ibyc7XHJcbmltcG9ydCB7Vmlld01vZGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2Uvdmlldy1tb2RlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC10aHJlZWRzZWxlY3RvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RocmVlZHNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90aHJlZWRzZWxlY3Rvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ3Nob3dFbGVtZW50VG9vbGJhcicsIFtcclxuICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7b3BhY2l0eTogMH0pKSxcclxuICAgICAgc3RhdGUoJyonLCBzdHlsZSh7b3BhY2l0eTogMX0pKSxcclxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgYW5pbWF0ZSgnNTAwbXMgZWFzZScpKVxyXG4gICAgXSlcclxuICBdLyosXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gqL1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGhyZWVkc2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGljb25OYW1lOiB0eXBlb2YgSWNvbk5hbWUgPSBJY29uTmFtZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb25Nb2RlbHMnLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb25Nb2RlbHM6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRUaHJlZWRPYmplY3RDdXN0b21pemF0aW9uU2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBzZWxlY3RlZFRocmVlZE9iamVjdEN1c3RvbWl6YXRpb25TaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGVkVGhyZWVkT2JqZWN0QW5pbWF0aW9uU2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBzZWxlY3RlZFRocmVlZE9iamVjdEFuaW1hdGlvblNpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChFbGVtZW50VG9vbGJhckNvbXBvbmVudCwge3N0YXRpYzogdHJ1ZX0pXHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBjdXN0b21pemVCdXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNlbGVjdGlvbnM6IFNlbGVjdGlvbltdID0gW107XHJcbiAgcHVibGljIGVsZW1lbnRUb29sYmFyOiBFbGVtZW50VG9vbGJhckNvbXBvbmVudDtcclxuXHJcbiAgcHVibGljIGVkaXRFbGVtZW50TWVudTogQ3VzdG9tQnV0dG9uW10gPSBbXTtcclxuICBwdWJsaWMgZWRpdEFkZEJ1dHRvbnM6IEN1c3RvbUJ1dHRvbltdID0gW107XHJcbiAgcHVibGljIGVkaXRDdXN0b21pemVCdXR0b246IEN1c3RvbUJ1dHRvbltdID0gW107XHJcbiAgcHVibGljIHJlc2l6ZUJ1dHRvbnM6IEN1c3RvbUJ1dHRvbltdID0gW107XHJcbiAgcHVibGljIGFuaW1hdGVFZGl0QWRkQnV0dG9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEVsZW1lbnRQb3NpdGlvbjogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG4gIHB1YmxpYyBzaG93RWxlbWVudFRvb2xiYXIgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0xpdGVTZWxlY3RvciA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93U2VsZWN0aW9ucyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93QW5zd2VycyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93Q3VzdG9taXplQnV0dG9ucyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93U3dhcEJ1dHRvbiA9IHRydWU7XHJcbiAgcHVibGljIHN0YW5kQWxvbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvdWxkU2hvd0xhYmVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFjdGl2ZU1ldGFkYXRhOiBNZXRhZGF0YTtcclxuICBwdWJsaWMgc2VsZWN0aW9uVG9DdXN0b21pemU6IGFueTtcclxuICBwdWJsaWMgc2VsZWN0ZWRPYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXA7XHJcbiAgcHVibGljIHNlbGVjdGVkRWxlbWVudDogTWVzaDtcclxuXHJcbiAgcHVibGljIGxvYWRlclByb2dyZXNzOiBudW1iZXIgPSAwOyAvLyBQcm9ncmVzcyBwZXJjZW50YWdlXHJcbiAgcHVibGljIGxvYWRlclRleHQ6IHN0cmluZyA9ICdJbml0aWFsaXppbmcuLi4nOyAvLyBMb2FkZXIgdGV4dCBtZXNzYWdlXHJcbiAgcHVibGljIHNob3dMb2FkZXI6IGJvb2xlYW4gPSB0cnVlOyAvLyBTaG93L0hpZGUgbG9hZGVyXHJcbiAgcHVibGljIHNob3dQcm9ncmVzc0JhcjogYm9vbGVhbiA9IHRydWU7IC8vIFNob3cvSGlkZSBwcm9ncmVzcyBiYXJcclxuICBwdWJsaWMgc2hvd1Byb2dyZXNzVGV4dDogYm9vbGVhbiA9IHRydWU7IC8vIFNob3cvSGlkZSBwcm9ncmVzcyB0ZXh0XHJcblxyXG4gICAgcHVibGljIHNob3dGdWxsQ29uZmlndXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZEVsZW1lbnRPYmplY3Q6IEN1c3RvbU9iamVjdDNEO1xyXG4gIHByaXZhdGUgX3NrdUFscmVhZHlTZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pdGVtc0Zyb21TY3JhdGNoOiBDdXN0b21GbG9vckdyb3VwUmVzdWx0W10gPSBbXTtcclxuICBwcml2YXRlIF9pdGVtc05lZWRVc2VySW5wdXQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHRbXSA9IFtdO1xyXG4gIHByaXZhdGUgX3N0YW5kYWxvbmVGbG9vcnM6IFRleHR1cmVbXTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2xvYWRpbmdGcm9tUHJlc2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY2FsbEJhY2tGbldoZW5CdWlsZEZpbmlzaGVkOiBGdW5jdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc2NyZWVuU2l6ZVNlcnZpY2U6IFNjcmVlblNpemVBbmFseXNpc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX2FwcFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaU9uZTogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlQnVzOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2xvYWRGdXJuaXR1cmVTZXJ2aWNlOiBMb2FkRnVybml0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2J1aWxkRnVybml0dXJlU2VydmljZTogQnVpbGRGdXJuaXR1cmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW50ZWdyYXRpb25TZXJ2aWNlOiBJbnRlZ3JhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWN0aW9uYXJ5U2VydmljZTogSG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHJlc2V0c1NlcnZpY2U6IFByZXNldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVPcHRpb25zU2VydmljZTogU2NlbmVPcHRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpbWVuc2lvbnNTZXJ2aWNlOiBEaW1lbnNpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FwcEV2ZW50U2VydmljZTogSG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29ycGxhblNlcnZpY2U6IEZsb29ycGxhblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vclNlcnZpY2U6IEZsb29yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2ljb25DYWNoZVNlcnZpY2U6IEhvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXJTZXJ2aWNlOiBBclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9nb29nbGVUYWdNYW5hZ2VyOiBHb29nbGVUYWdNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm90YXRpb25TZXJ2aWNlOiBSb3RhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yb29tU2VydmljZTogUm9vbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Byb2dyZXNzU2VydmljZTogUHJvZ3Jlc3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYW5pbWF0aW9uU2VydmljZTogQW5pbWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Jlc2l6ZVNlcnZpY2U6IFJlc2l6ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jdXN0b21pemVyU2VydmljZTogQ3VzdG9taXplclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9keW5hbWljQ2FtZXJhU2VydmljZTogRHluYW1pY0NhbWVyYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90aHJlZWRJblBob3RvSW5pdGlhbGl6ZXJTZXJ2aWNlOiBUaHJlZWRJblBob3RvSW5pdGlhbGl6ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcmVuZGVyU2VydmljZTogUmVuZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX25ld1JlbmRlclNlcnZpY2U6IE5ld1JlbmRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3JBZGFwdGVyU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbGlnaHRQcmVzZXRTZXJ2aWNlOiBMaWdodFByZXNldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmlld01vZGVTZXJ2aWNlOiBWaWV3TW9kZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3ByZXNldHNTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hbnN3ZXJDb3VudFJlY2VpdmVkLnN1YnNjcmliZSgoYW5zd2VyQ291bnQ6IG51bWJlcikgPT4gdGhpcy5faGFuZGxlQW5zd2VyQ291bnRSZWNlaXZlZChhbnN3ZXJDb3VudCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Mb2FkSU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVLFxyXG4gICAgICAgICh7c2t1LCBzZXR0aW5ncywgcG9zaXRpb259OiB7IHNrdTogc3RyaW5nLCBzZXR0aW5nczogYW55LCBwb3NpdGlvbjogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgej86IG51bWJlciB9IH0pID0+XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVMb2FkSU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVKHNrdSwgc2V0dGluZ3MsIHBvc2l0aW9uKVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5Db3B5SU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVLCAob3JpZ2luYWw6IEl0ZW0pID0+XHJcbiAgICAgICAgdGhpcy5faGFuZGxlQ29weUlPbmVGdXJuaXR1cmVJbnRvU2NlbmVCeVNLVShvcmlnaW5hbClcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmNvbmZpZ3VyZU1vZGVDaGFuZ2VkLnN1YnNjcmliZShjb25maWd1cmluZ01vZGVDaGFuZ2UgPT5cclxuICAgICAgICB0aGlzLl9oYW5kbGVDb25maWd1cmVNb2RlQ2hhbmdlKGNvbmZpZ3VyaW5nTW9kZUNoYW5nZSkpLFxyXG4gICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UudG9nZ2xlU2VsZWN0ZWRFbGVtZW50LnN1YnNjcmliZSgoZWxlbWVudDogTWVzaCkgPT4gdGhpcy5fc2VsZWN0ZWRFbGVtZW50VG9nZ2xlKGVsZW1lbnQpKSxcclxuICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmJ1aWxkRmluaXNoZWQuc3Vic2NyaWJlKChyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpID0+IHRoaXMuX2hhbmRsZUJ1aWxkRmluaXNoZWQocmVzdWx0KSksXHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5hbnN3ZXJTZWxlY3RlZC5zdWJzY3JpYmUoKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCkgPT4gdGhpcy5fYW5zd2VyU2VsZWN0ZWQocmVzdWx0KSksXHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5vbkFmdGVyUmVuZGVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9oYW5kbGVSZW5kZXIoKSksXHJcbiAgICAgIHRoaXMuX2FwcFNlcnZpY2Uuc2t1U2V0LnN1YnNjcmliZShza3UgPT4gdGhpcy5faGFuZGxlU2t1U2V0KHNrdSkpLFxyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuYXJ0aWNsZUluZm9SZWNlaXZlZC5zdWJzY3JpYmUoaW5mbyA9PiB0aGlzLl9oYW5kbGVJbmZvQ2xpY2soaW5mbykpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuVW5kZWZpbmVkRXJyb3JPY2N1cmVkLCAoKSA9PiB0aGlzLl9oYW5kbGVVbmRlZmluZWRFcnJvck9jY3VyZWQoKSksXHJcbiAgICAgIHRoaXMuX3ByZXNldHNTZXJ2aWNlLmFmdGVyTG9hZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fYWZ0ZXJMb2FkRnJvbVByZXNldCgpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuVW5kbywgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuUmVkbywgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU3RhcnRXaXRoRW1wdHlSb29tLCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlQnVzLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TdGFydFdpdGhQcmVzZXQsICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRSb29tRnJvbVByZXNldCwgKCkgPT4gdGhpcy5fY2xlYXJJdGVtcygpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuTG9hZFJvb21Gcm9tQ2xvdWQsICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLk5ld1Jvb20sICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlJlc2V0Um9vbXBsYW4sICgpID0+IHRoaXMuX2NsZWFySXRlbXMoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VCdXMuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxvYWRTY2FsZWREaWFncmFtLCAoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9wcmVzZXRzU2VydmljZS5iZWZvcmVMb2FkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jbGVhckl0ZW1zKCkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuSXRlbVNlbGVjdGVkLCAoaXRlbSkgPT4gdGhpcy5vYmplY3RTZWxlY3RlZChpdGVtKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5JdGVtVW5zZWxlY3RlZCwgKCkgPT4gdGhpcy5fcmVtb3ZlQnV0dG9ucygpKSxcclxuICAgICAgdGhpcy5zY3JlZW5TaXplU2VydmljZS5zY3JlZW5TaXplQ2hhbmdlZC5zdWJzY3JpYmUoKGluZm86IFNjcmVlblNpemVJbmZvKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG91bGRTaG93TGFiZWwgPSBpbmZvLmlzUGhvbmVTaXplO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkNoYW5nZUFydGljbGVDb25maWd1cmF0aW9uVHlwZSwgKHNob3dGdWxsQ29uZmlnKSA9PiB0aGlzLl9zZXRUZW1wbGF0ZVR5cGUoc2hvd0Z1bGxDb25maWcpKSxcclxuICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzTG9hZGVkLnN1YnNjcmliZSgobG9hZGVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGxvYWRlZCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93U3dhcEJ1dHRvbiA9ICF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5pbnN0YW50UmVwbGFjZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1Byb2dyZXNzQmFyID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd1Byb2dyZXNzQmFyO1xyXG4gICAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3NUZXh0ID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd1Byb2dyZXNzVGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuX2FkZE1vZGVsRGlhbG9nVG9vbGJhcigpO1xyXG4gICAgaWYgKHRoaXMuX2lPbmUuYXJ0aWNsZSAmJiB0aGlzLl9pT25lLmFydGljbGUuc2hvd0Z1bGxDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RnVsbENvbmZpZ3VyYXRpb24gPSB0aGlzLl9pT25lLmFydGljbGUuc2hvd0Z1bGxDb25maWd1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY29weVNjZW5lSW5zdGFuY2Uoc2F2ZUFzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoLyohdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLmlzUHJpdmF0ZSAmJiAqL3NhdmVBcykge1xyXG4gICAgICBjb25zdCBmdXJuaXR1cmUgPSB0aGlzLl9pdGVtU2VydmljZS5nZXRJT25lRnVybml0dXJlKCk7XHJcbiAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVDb3B5SW5zdGFuY2VGb3JGdXJuaXR1cmUoZnVybml0dXJlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkT2JqZWN0cyh7ZnVybml0dXJlfSk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAoIWZ1cm5pdHVyZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuX2xvYWRpbmdGcm9tUHJlc2V0ID0gdHJ1ZTtcclxuICAgIGNvbnN0IGlPTkVPYmplY3RzVG9Mb2FkID0gZnVybml0dXJlLmZpbHRlcihvID0+IHRoaXMuX2lzSU9ORU9iamVjdChvKSk7XHJcbiAgICBmdXJuaXR1cmVcclxuICAgICAgLmZpbHRlcigobykgPT4gaXNJdGVtR3JvdXBUeXBlKG8uaXRlbV90eXBlKSlcclxuICAgICAgLmZvckVhY2goZyA9PiB7XHJcbiAgICAgICAgbGV0IGdyb3VwQWRkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBpdGVtR3JvdXAgPSBpc1dhbGxJdGVtR3JvdXBUeXBlKGcuaXRlbV90eXBlKSA/IG5ldyBXYWxsSXRlbUdyb3VwKCkgOiBuZXcgSXRlbUdyb3VwKCk7XHJcbiAgICAgICAgaXRlbUdyb3VwLmxvY2tlZCA9IGcubG9ja2VkO1xyXG4gICAgICAgIGl0ZW1Hcm91cC5wb3NpdGlvbi5zZXQoZy54cG9zLCBnLnlwb3MsIGcuenBvcyk7XHJcbiAgICAgICAgaXRlbUdyb3VwLnJvdGF0aW9uLnNldCgwLCBnLnJvdGF0aW9uLCAwKTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGcuY2hpbGRyZW47XHJcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjaCA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5faXNJT05FT2JqZWN0KGNoKSkge1xyXG4gICAgICAgICAgICBpZiAoIWdyb3VwQWRkZWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9pdGVtU2VydmljZS5hZGRJdGVtKGl0ZW1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgZ3JvdXBBZGRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2guaXRlbUdyb3VwID0gaXRlbUdyb3VwO1xyXG4gICAgICAgICAgICBpT05FT2JqZWN0c1RvTG9hZC5wdXNoKGNoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZUxvYWRJT25lRnVybml0dXJlRnJvbVByZXNldChpT05FT2JqZWN0c1RvTG9hZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T2JqZWN0cygpOiBhbnkge1xyXG4gICAgLy8gcmV0dXJuIHtmdXJuaXR1cmU6IHRoaXMudGhyZWVTZXJ2aWNlLm1vZGVsLnNhdmVGdXJuaXR1cmUoKX07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb2JqZWN0U2VsZWN0ZWQob2JqZWN0OiBJdGVtIHwgSXRlbUdyb3VwKSB7XHJcbiAgICB0aGlzLl9yZW1vdmVDdXN0b21CdXR0b25zKCk7XHJcbiAgICB0aGlzLnNob3dDdXN0b21pemVCdXR0b25zID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QgPSBvYmplY3Q7XHJcbiAgICBvYmplY3QudHJhdmVyc2UoKGNoaWxkKSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1c3RvbWl6ZUJ1dHRvbjogYW55ID0gY2hpbGQubmFtZSAmJiBjaGlsZC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgncF8nKTtcclxuICAgICAgaWYgKGN1c3RvbWl6ZUJ1dHRvbikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uVG9DdXN0b21pemUgPSBjaGlsZC5wYXJlbnQ7XHJcbiAgICAgICAgdGhpcy5lZGl0Q3VzdG9taXplQnV0dG9uLnB1c2gobmV3IEN1c3RvbUJ1dHRvbignJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUN1c3RvbWl6ZUNsaWNrKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25Ub0N1c3RvbWl6ZSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2hhbmRsZVJlbmRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUN1c3RvbWl6ZUNsaWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY3VzdG9taXplclNlcnZpY2Uuc2VsZWN0ZWRPYmplY3QgPSB0aGlzLnNlbGVjdGlvblRvQ3VzdG9taXplO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5zZWxlY3RlZFRocmVlZE9iamVjdEN1c3RvbWl6YXRpb25TaWRlYmFyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzd2FwRWxlbWVudCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QpIHtcclxuICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLnJlcGxhY2VTZWxlY3Rpb24oT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCksIHRoaXMuYWN0aXZlTWV0YWRhdGEpO1xyXG4gICAgICBpZiAoIXRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmluc3RhbnRSZXBsYWNlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRTZWxlY3RlZEVsZW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUVsZW1lbnQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5kZWxldGVTZWxlY3Rpb24oT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCksIHRoaXMuYWN0aXZlTWV0YWRhdGEpO1xyXG4gICAgICB0aGlzLl9yZXNldFNlbGVjdGVkRWxlbWVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEVsZW1lbnRSZXBsYWNlKHJlYnVpbGQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmNhbmNlbEFuc3dlcih0aGlzLmFjdGl2ZU1ldGFkYXRhLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICB0aGlzLl9yZXNldFNlbGVjdGVkRWxlbWVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5BbmltYXRpb25TaWRlYmFyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5zZWxlY3RlZFRocmVlZE9iamVjdEFuaW1hdGlvblNpZGViYXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZVNob3dDaGFuZ2VTZWxlY3RvcihzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoIXNob3cpIHtcclxuICAgICAgaWYgKHRoaXMuc2hvd0Fuc3dlcnMpIHtcclxuICAgICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuY2FuY2VsQW5zd2VyKHRoaXMuYWN0aXZlTWV0YWRhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jYW5jZWxDb25maWd1cmluZ0N1cnJlbnRJbnN0YW5jZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE1vZGVsRXJyb3JEaWFsb2coKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFsb2cub3BlbihNb2RlbERpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbG9hZEZ1cm5pdHVyZVNlcnZpY2U6IHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xlYXJJdGVtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2l0ZW1zRnJvbVNjcmF0Y2gubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZVNrdVNldChza3U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHNrdSkge1xyXG4gICAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgICAgdGhpcy5faU9uZS5jb250cm9sbGVySW5pdGlhbGl6ZWQuc3Vic2NyaWJlKGFzeW5jIChpbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FwcFNlcnZpY2UuZmxvb3JUZXh0dXJlc0xvYWRlZC5zdWJzY3JpYmUoYXN5bmMgKHRleHR1cmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRleHR1cmVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc3RhbmRBbG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVGbG9vcnNMb2FkZWQodGV4dHVyZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZVN0YW5kYWxvbmVDb25maWd1cmF0b3Ioc2t1KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBhckJ1dHRvbjogU2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2UgPSB7XHJcbiAgICAgICAgaWQ6IDIsXHJcbiAgICAgICAgZWxlbWVudElkOiAnc3RhbmRhbG9uZV9hcl9zZXNzaW9uJyxcclxuICAgICAgICB0b29sdGlwOiAnU1RBUlRfQVJfU0VTU0lPTicsXHJcbiAgICAgICAgb3JkZXI6IDEwLFxyXG4gICAgICAgIGltYWdlOiB0aGlzLl9pY29uQ2FjaGVTZXJ2aWNlLmdldEljb25Bc0Jhc2U2NChJY29uRW51bS5BckNpcmNsZSksXHJcbiAgICAgICAgdG9nZ2xlOiBmYWxzZSxcclxuICAgICAgICBzaG93OiBhd2FpdCB0aGlzLl9hclNlcnZpY2UuYXJTdXBwb3J0ZWQoKSAmJlxyXG4gICAgICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd1N0YW5kYWxvbmVBUkJ1dHRvbiAmJlxyXG4gICAgICAgICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuYXJFbmFibGVkLFxyXG4gICAgICAgIGNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvYmplY3QgPSAodGhpcy5faXRlbVNlcnZpY2UuZ2V0Q29uZmlndXJhYmxlcygpWzBdIGFzIGFueSkvKi5jbG9uZVZpc2libGUoKSovO1xyXG4gICAgICAgICAgaWYgKG9iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYXJNb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFkZE9iamVjdChvYmplY3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3QgYXJJT1NCdXR0b246IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlID0ge1xyXG4gICAgICAgIGlkOiAzLFxyXG4gICAgICAgIGVsZW1lbnRJZDogJ3N0YW5kYWxvbmVfYXJfc2Vzc2lvbicsXHJcbiAgICAgICAgdG9vbHRpcDogJ1NUQVJUX0FSX1NFU1NJT04nLFxyXG4gICAgICAgIG9yZGVyOiAxMCxcclxuICAgICAgICBpbWFnZTogdGhpcy5faWNvbkNhY2hlU2VydmljZS5nZXRJY29uQXNCYXNlNjQoSWNvbkVudW0uQXJDaXJjbGUpLFxyXG4gICAgICAgIHRvZ2dsZTogZmFsc2UsXHJcbiAgICAgICAgc2hvdzogYXdhaXQgdGhpcy5fYXJTZXJ2aWNlLmFySU9TU3VwcG9ydGVkKCkgJiZcclxuICAgICAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dTdGFuZGFsb25lQVJCdXR0b24gJiZcclxuICAgICAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmFyRW5hYmxlZCxcclxuICAgICAgICBjbGljazogKCkgPT4gdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmRvd25sb2FkVURTWmZvckFSSU9TKClcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5fc2NlbmVPcHRpb25zU2VydmljZS5hZGRTY2VuZU9wdGlvbkJ1dHRvbihhckJ1dHRvbik7XHJcbiAgICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UuYWRkU2NlbmVPcHRpb25CdXR0b24oYXJJT1NCdXR0b24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlRmxvb3JzTG9hZGVkKHRleHR1cmVzOiBUZXh0dXJlW10pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0ZXh0dXJlcykge1xyXG4gICAgICBsZXQgZGVmYXVsdEZsb29yOiBUZXh0dXJlO1xyXG4gICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlU3RhbmRhbG9uZUZsb29ycykge1xyXG4gICAgICAgIHRoaXMuX3N0YW5kYWxvbmVGbG9vcnMgPSB0aGlzLl9hcHBTZXJ2aWNlLmdldEZsb29yc1N0YW5kYWxvbmUoKTtcclxuICAgICAgICBkZWZhdWx0Rmxvb3IgPSB0aGlzLl9zdGFuZGFsb25lRmxvb3JzLmZpbmQoZiA9PiBmLmRlZmF1bHRTdGFuZGFsb25lKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgZmxvb3JHZW9tZXRyeTtcclxuICAgICAgaWYgKGRlZmF1bHRGbG9vciAmJiBkZWZhdWx0Rmxvb3Iuc2ltcGxlUGxhbmUpIHtcclxuICAgICAgICBmbG9vckdlb21ldHJ5ID0gbmV3IFBsYW5lR2VvbWV0cnkoNiwgNik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY29ybmVycyA9IFtcclxuICAgICAgICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubmV3Q29ybmVyKC0zLCAzKSxcclxuICAgICAgICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubmV3Q29ybmVyKC0zLCAtMyksXHJcbiAgICAgICAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm5ld0Nvcm5lcigzLCAtMyksXHJcbiAgICAgICAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLm5ld0Nvcm5lcigzLCAzKSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IHBvaW50cyA9IGNvcm5lcnMubWFwKGNvcm5lciA9PiBuZXcgVmVjdG9yMihjb3JuZXIueCwgY29ybmVyLnkpKTtcclxuICAgICAgICBjb25zdCBzaGFwZSA9IG5ldyBTaGFwZShwb2ludHMpO1xyXG4gICAgICAgIGZsb29yR2VvbWV0cnkgPSBuZXcgU2hhcGVHZW9tZXRyeShzaGFwZSkuY2VudGVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5fZmxvb3JTZXJ2aWNlLmdlbmVyYXRlRmxvb3JQbGFuZSgnd2hpdGUnLCBkZWZhdWx0Rmxvb3IsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmbG9vckdlb21ldHJ5KTtcclxuICAgICAgdGhpcy5fZmxvb3JTZXJ2aWNlLmdldEZsb29yUGxhbmUoKS52aXNpYmxlID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlU3RhbmRhbG9uZUZsb29ycztcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLmJhY2tncm91bmQgPSBuZXcgQ29sb3IocGFyc2VJbnQodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnN0YW5kYWxvbmVTY2VuZUJhY2tncm91bmRDb2xvciwgMCkpO1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5fc3RhbmRhbG9uZUZsb29ycyAmJiB0aGlzLl9zdGFuZGFsb25lRmxvb3JzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLl91cHNlcnRGbG9vckJ1dHRvbnMoZGVmYXVsdEZsb29yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBzZXJ0Rmxvb3JCdXR0b25zKGFjdGl2ZUZsb29yOiBUZXh0dXJlKTogdm9pZCB7XHJcbiAgICBjb25zdCBmbG9vckJ1dHRvbnM6IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlW10gPSBbXTtcclxuICAgIGxldCBuZXdGbG9vckJ1dHRvbjogU2NlbmVPcHRpb25CdXR0b25JbnRlcmZhY2U7XHJcbiAgICB0aGlzLl9zdGFuZGFsb25lRmxvb3JzLmZvckVhY2goKGYsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChmICE9PSBhY3RpdmVGbG9vcikge1xyXG4gICAgICAgIG5ld0Zsb29yQnV0dG9uID0ge1xyXG4gICAgICAgICAgaWQ6IGluZGV4LFxyXG4gICAgICAgICAgZWxlbWVudElkOiBgc3RhbmRhbG9uZV9mbG9vcl8ke2YubmFtZX1gLFxyXG4gICAgICAgICAgdG9vbHRpcDogZi5uYW1lLFxyXG4gICAgICAgICAgY2xhc3M6ICdjaXJjbGUnLFxyXG4gICAgICAgICAgc2hvdzogZmFsc2UsXHJcbiAgICAgICAgICBvYmplY3Q6IGYsXHJcbiAgICAgICAgICBpbWFnZTogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmFzc2V0UGF0aCArIGYudXJsLFxyXG4gICAgICAgICAgY2xpY2s6IChmbG9vcikgPT4gdGhpcy5fY2hhbmdlU3RhbmRhbG9uZUZsb29yKGZsb29yKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZmxvb3JCdXR0b25zLnB1c2gobmV3Rmxvb3JCdXR0b24pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGFjdGl2ZUZsb29yQnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZSA9IHtcclxuICAgICAgaWQ6IDEwLFxyXG4gICAgICBlbGVtZW50SWQ6ICdzdGFuZGFsb25lX2NoYW5nZV9mbG9vcicsXHJcbiAgICAgIHRvb2x0aXA6ICdDSEFOR0VfRkxPT1InLFxyXG4gICAgICBvcmRlcjogOCxcclxuICAgICAgY2xhc3M6ICdjaXJjbGUnLFxyXG4gICAgICBvYmplY3Q6IGFjdGl2ZUZsb29yLFxyXG4gICAgICBjaGlsZHJlbjogZmxvb3JCdXR0b25zLFxyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICBpbWFnZTogYWN0aXZlRmxvb3IgPyB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoICsgYWN0aXZlRmxvb3IudXJsIDogJydcclxuICAgIH07XHJcbiAgICB0aGlzLl9zY2VuZU9wdGlvbnNTZXJ2aWNlLnVwZGF0ZVNjZW5lT3B0aW9uQnV0dG9uKGFjdGl2ZUZsb29yQnV0dG9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2NoYW5nZVN0YW5kYWxvbmVGbG9vcihmbG9vcjogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5fZmxvb3JTZXJ2aWNlLnNldEZsb29yVGV4dHVyZShudWxsLCBmbG9vcik7XHJcbiAgICB0aGlzLl91cHNlcnRGbG9vckJ1dHRvbnMoZmxvb3IpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnVwZGF0ZVBhdGhUcmFjZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZURvd25sb2FkQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZG93bmxvYWQzRE1vZGVsQnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZSA9IHtcclxuICAgICAgaWQ6IDEwMCxcclxuICAgICAgZWxlbWVudElkOiAnc3RhbmRhbG9uZV9kb3dubG9hZF9tb2RlbCcsXHJcbiAgICAgIHRvb2x0aXA6ICdET1dOTE9BRF9NT0RFTCcsXHJcbiAgICAgIG9yZGVyOiAyLFxyXG4gICAgICBjbGFzczogJ2NpcmNsZScsXHJcbiAgICAgIGxhYmVsOiAnY2xvdWRfZG93bmxvYWQnLFxyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICBjbGljazogKCkgPT4gdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmRvd25sb2FkQ3VycmVudEN1c3RvbUZsb29yZ3JvdXAoKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UudXBkYXRlU2NlbmVPcHRpb25CdXR0b24oZG93bmxvYWQzRE1vZGVsQnV0dG9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUNhbWVyYVNldHRpbmdzQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2FtZXJhU2V0dGluZ3NCdXR0b246IFNjZW5lT3B0aW9uQnV0dG9uSW50ZXJmYWNlID0ge1xyXG4gICAgICBpZDogMTEwLFxyXG4gICAgICBlbGVtZW50SWQ6ICdzdGFuZGFsb25lX2NhbWVyYV9zZXR0aW5ncycsXHJcbiAgICAgIHRvb2x0aXA6ICdDQU1FUkFfU0VUVElOR1MnLFxyXG4gICAgICBvcmRlcjogMSxcclxuICAgICAgY2xhc3M6ICdjaXJjbGUnLFxyXG4gICAgICBsYWJlbDogJ2NhbWVyYV9zZXR0aW5ncycsXHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLl9vcGVuQ2FtZXJhU2V0dGluZ3NEaWFsb2coKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3NjZW5lT3B0aW9uc1NlcnZpY2UudXBkYXRlU2NlbmVPcHRpb25CdXR0b24oY2FtZXJhU2V0dGluZ3NCdXR0b24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb3BlbkNhbWVyYVNldHRpbmdzRGlhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oQ2FtZXJhU2V0dGluZ3NEaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc2MDBweCdcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlTWVhc3VyZW1lbnRzQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgYnV0dG9uOiBTY2VuZU9wdGlvbkJ1dHRvbkludGVyZmFjZSA9IHtcclxuICAgICAgaWQ6IDEsXHJcbiAgICAgIGVsZW1lbnRJZDogJ3N0YW5kYWxvbmVfc2hvd19tZWFzdXJlbWVudHMnLFxyXG4gICAgICB0b29sdGlwOiAnU0hPV19NRUFTVVJFTUVOVFMnLFxyXG4gICAgICBvcmRlcjogMTEsXHJcbiAgICAgIGltYWdlOiB0aGlzLl9pY29uQ2FjaGVTZXJ2aWNlLmdldEljb25Bc0Jhc2U2NChJY29uRW51bS5NZWFzdXJlbWVudHMpLFxyXG4gICAgICB0b2dnbGU6IHRydWUsXHJcbiAgICAgIHRvb2x0aXBBY3RpdmU6ICdISURFX01FQVNVUkVNRU5UUycsXHJcbiAgICAgIHNob3c6IHRydWUsXHJcbiAgICAgIGNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fZGltZW5zaW9uc1NlcnZpY2UuZW5hYmxlZCA9ICF0aGlzLl9kaW1lbnNpb25zU2VydmljZS5lbmFibGVkO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5fc2NlbmVPcHRpb25zU2VydmljZS5hZGRTY2VuZU9wdGlvbkJ1dHRvbihidXR0b24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlSW5mb0NsaWNrKGluZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgbWVzc2FnZUNvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICB0eXBlOiBEaWFsb2dUeXBlLkluZm8sXHJcbiAgICAgIG1lc3NhZ2VzOiBbbmV3IEVycm9yTWVzc2FnZShpbmZvKV1cclxuICAgIH07XHJcbiAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlLnNob3dEaWFsb2coe2RhdGE6IG1lc3NhZ2VDb25maWd9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3ByZXBhcmVTdGFuZGFsb25lQ29uZmlndXJhdG9yKHNrdSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdG90YWxTdGVwczogbnVtYmVyID0gNztcclxuICAgIGxldCBjdXJyZW50U3RlcDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVQcm9ncmVzcyA9IChzdGVwOiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRlclByb2dyZXNzID0gTWF0aC5yb3VuZCgoc3RlcCAvIHRvdGFsU3RlcHMpICogMTAwKTtcclxuICAgICAgdGhpcy5sb2FkZXJUZXh0ID0gdGV4dDtcclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdXBkYXRlUHJvZ3Jlc3MoKytjdXJyZW50U3RlcCwgJ0xvYWRpbmcgTGlnaHQgUHJlc2V0cy4uLicpO1xyXG4gICAgICBhd2FpdCB0aGlzLl9saWdodFByZXNldFNlcnZpY2UucHJlcGFyZUxvYWRMaWdodFByZXNldCh0cnVlKTtcclxuXHJcbiAgICAgIHVwZGF0ZVByb2dyZXNzKCsrY3VycmVudFN0ZXAsICdTZXR0aW5nIENhbWVyYS4uLicpO1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5wb3NpdGlvbi5zZXQoMCwgMSwgNCk7XHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLmxvb2tBdChuZXcgVmVjdG9yMygpKTtcclxuXHJcbiAgICAgIHVwZGF0ZVByb2dyZXNzKCsrY3VycmVudFN0ZXAsICdMb2FkaW5nIExpZ2h0cy4uLicpO1xyXG4gICAgICBhd2FpdCBPYmplY3RVdGlscy5Mb2FkSERSSShcclxuICAgICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoICsgJy9hc3NldHMvaGRyaS9zdGRfZW52X3YyX0IuaGRyJyxcclxuICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmVcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHVwZGF0ZVByb2dyZXNzKCsrY3VycmVudFN0ZXAsICdQcmVwYXJpbmcgU2NlbmUuLi4nKTtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIHVwZGF0ZVByb2dyZXNzKCsrY3VycmVudFN0ZXAsICdTZXR0aW5nIHVwIE9wdGlvbnMuLi4nKTtcclxuICAgICAgdGhpcy5zdGFuZEFsb25lID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93TGl0ZVNlbGVjdG9yID0gdHJ1ZTsgLy8gYWx3YXlzIHNob3cgdGhlIHNlbGVjdGlvbnMgd2hlbiBzdGFuZGFsb25lXHJcbiAgICAgIHRoaXMuc2hvd1NlbGVjdGlvbnMgPSB0cnVlOyAvLyBhbHdheXMgc2hvdyB0aGUgc2VsZWN0aW9ucyB3aGVuIHN0YW5kYWxvbmVcclxuICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uuc2hvdWxkTG9hZFNlbGVjdGlvbnMgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9za3VBbHJlYWR5U2V0ID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93RG93bmxvYWRCdXR0b24pIHtcclxuICAgICAgICB0aGlzLl9jcmVhdGVEb3dubG9hZEJ1dHRvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93TWVhc3VyZW1lbnRzQnV0dG9uKSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlTWVhc3VyZW1lbnRzQnV0dG9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmRldmVsb3BtZW50KSB7XHJcbiAgICAgICAgdGhpcy5fY3JlYXRlQ2FtZXJhU2V0dGluZ3NCdXR0b24oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdXBkYXRlUHJvZ3Jlc3MoKytjdXJyZW50U3RlcCwgJ0xvYWRpbmcgRnVybml0dXJlLi4uJyk7XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCA9IGF3YWl0IHRoaXMuX2xvYWRJT25lRnVybml0dXJlRnJvbVNrdShuZXcgVmVjdG9yMygwLCAwLCAwKSwgc2t1LCB1bmRlZmluZWQsIHRydWUpO1xyXG5cclxuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZnVybml0dXJlKSB7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlRmlyc3RCdWlsZFN0YW5kYWxvbmUocmVzdWx0LmZ1cm5pdHVyZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuTmVlZHNVc2VySW5wdXQpIHtcclxuICAgICAgICB0aGlzLl9jYWxsQmFja0ZuV2hlbkJ1aWxkRmluaXNoZWQgPSB0aGlzLl9oYW5kbGVGaXJzdEJ1aWxkU3RhbmRhbG9uZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdXBkYXRlUHJvZ3Jlc3ModG90YWxTdGVwcywgJ0NvbXBsZXRlIScpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgcHJlcGFyYXRpb246JywgZS5tZXNzYWdlKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LCAxMDAwKTsgLy8gSGlkZSBsb2FkZXIgYWZ0ZXIgYSBkZWxheVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlRmlyc3RCdWlsZFN0YW5kYWxvbmUoaXRlbTogSXRlbSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5fY2FtZXJhU2VydmljZS5tb3ZlQ2FtZXJhVG9GaXRPYmplY3QoaXRlbSk7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuY2FtZXJhUG9zaXRpb25GaXhlZCkge1xyXG4gICAgICB0aGlzLl9yb3RhdGlvblNlcnZpY2UuZW5hYmxlUm90YXRpb25Gb3IoaXRlbSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuY2FtZXJhUG9zaXRpb25GaXhlZEFuZFNjcm9sbGJhcikge1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmRpc2FibGVSb3RhdGUoKTtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFab29tT3V0KCk7XHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuZGlzYWJsZVpvb20oKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9jYWxsQmFja0ZuV2hlbkJ1aWxkRmluaXNoZWQgPSB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmNhbWVyYUNvbmZpZykge1xyXG4gICAgICBhd2FpdCB0aGlzLl9keW5hbWljQ2FtZXJhU2VydmljZS5sb2FkQ3VzdG9tQ2FtZXJhU2V0dGluZ3MoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5lbmFibGUzREluUGhvdG8pIHtcclxuICAgICAgdGhpcy5fdGhyZWVkSW5QaG90b0luaXRpYWxpemVyU2VydmljZS5pbml0KG51bGwsIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLCB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUsIHRoaXMuX3NjZW5lU2VydmljZS5yZW5kZXJlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2F2ZSBjYW1lcmEgc2V0dGluZ3MgZm9yIHJlbmRlclxyXG4gICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEudXBkYXRlTWF0cml4V29ybGQodHJ1ZSk7XHJcbiAgICB0aGlzLl9uZXdSZW5kZXJTZXJ2aWNlLnN0YW5kQWxvbmVDYW1lcmFNYXRyaXggPSBBcnJheS5mcm9tKHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5lbGVtZW50cyk7XHJcbiAgICB0aGlzLl9uZXdSZW5kZXJTZXJ2aWNlLnN0YW5kQWxvbmVDYW1lcmFGaXhlZE1hdHJpeCA9IEFycmF5LmZyb20odGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEubWF0cml4V29ybGQuZWxlbWVudHMpO1xyXG5cclxuICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5zdGFuZEFsb25lRmlyc3RCdWlsZFJlYWR5ID0gdHJ1ZTtcclxuICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5yZWFkeVRvUmVuZGVyLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgdGhpcy5fc2hvd1BsdXNCdXR0b25zQnJpZWZseShpdGVtKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVVuZGVmaW5lZEVycm9yT2NjdXJlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd1NlbGVjdGlvbnMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0Fuc3dlcnMgPSBmYWxzZTtcclxuICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5jYW5jZWxDb25maWd1cmluZ0N1cnJlbnRJbnN0YW5jZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdEFkZEJ1dHRvbnMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5yZXNpemVCdXR0b25zLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldFNlbGVjdGVkRWxlbWVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudFBvc2l0aW9uKCk7XHJcbiAgICB0aGlzLl9yZW1vdmVBbGxCdXR0b25zKCk7XHJcbiAgICB0aGlzLnNob3dFbGVtZW50VG9vbGJhciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlUmVuZGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCB8fCB0aGlzLnNlbGVjdGlvblRvQ3VzdG9taXplKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0RWxlbWVudFBvc2l0aW9uKCk7XHJcbiAgICAgIGlmICh0aGlzLmVkaXRBZGRCdXR0b25zLmxlbmd0aCB8fCB0aGlzLmVkaXRDdXN0b21pemVCdXR0b24ubGVuZ3RoID4gMCB8fCB0aGlzLnJlc2l6ZUJ1dHRvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9zaXRpb25CdXR0b25zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkRWxlbWVudFRvZ2dsZShlbGVtZW50OiBNZXNoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICBjb25zdCBvYmo6IEN1c3RvbU9iamVjdDNEID0gZWxlbWVudCA/IGVsZW1lbnQucGFyZW50IGFzIEN1c3RvbU9iamVjdDNEIDogdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCAhPT0gb2JqKSB7XHJcbiAgICAgIHRoaXMuc2hvd0VsZW1lbnRUb29sYmFyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCA9IG9iajtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUVsZW1lbnRNZW51KCk7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUFkZEJ1dHRvbnMoKTtcclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuaGFuZGxlUGFyYW1ldHJpYykge1xyXG4gICAgICAgICAgdGhpcy5fcHJlcGFyZU90aGVyQnV0dG9ucygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaG91bGRCZUhpZGRlbjogYm9vbGVhbiA9IG9iai51c2VyRGF0YSAmJiBvYmoudXNlckRhdGEuc2VsZWN0aW9uICYmIG9iai51c2VyRGF0YS5zZWxlY3Rpb24ucXVlc3Rpb24uaW5kZXhPZignW2hpZGRlbl0nKSA+IC0xO1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5pbnN0YW50UmVwbGFjZSkge1xyXG4gICAgICAgICAgaWYgKHNob3VsZEJlSGlkZGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsRWxlbWVudFJlcGxhY2UoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3dhcEVsZW1lbnQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dFbGVtZW50VG9vbGJhciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICAgIH0sIDIwMCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXRTZWxlY3RlZEVsZW1lbnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd1BsdXNCdXR0b25zQnJpZWZseShpdGVtOiBJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaXRlbS50cmF2ZXJzZSgoY2hpbGQ6IE9iamVjdDNEKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KGNoaWxkKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gc2VsZWN0aW9uLmRlY29Ob2RlID8gc2VsZWN0aW9uLmRlY29Ob2RlLmNvbm5lY3RvcnMubGVuZ3RoIDogMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBjb25PYmplY3Q6IGFueSA9IHRoaXMuX2dldENvbm5lY3Rvck9iamVjdChjaGlsZCwgc2VsZWN0aW9uLmRlY29Ob2RlLmNvbm5lY3RvcnNbaV0uY29ubmVjdG9yKTtcclxuICAgICAgICAgIGNvbnN0IGNvbk9iamVjdFBhcmVudCA9IE9iamVjdFV0aWxzLkdldFBhcmVudEN1c3RvbU9iamVjdChjb25PYmplY3QpO1xyXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdCdXR0b24gPSB0aGlzLmVkaXRBZGRCdXR0b25zLmZpbmQoKGVhYikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gY29uT2JqZWN0UGFyZW50ICYmICgoZWFiLmRhdGEuY29ubmVjdGVkVG8gPT09IGNvbk9iamVjdFBhcmVudC5uYW1lKSB8fCAoZWFiLmRhdGEubmFtZSA9PT0gY29uT2JqZWN0Lm5hbWUpKTtcclxuICAgICAgICAgIH0pOyAvLyBvbmx5IHVuaXF1ZSBidXR0b25zXHJcbiAgICAgICAgICBpZiAoIWV4aXN0aW5nQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIGlmIChjb25PYmplY3QgJiYgdGhpcy5fY2FuU2hvd0FkZEJ1dHRvbihzZWxlY3Rpb24uZGVjb05vZGUuY29ubmVjdG9yc1tpXSwgY29uT2JqZWN0KSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdEFkZEJ1dHRvbnMucHVzaChuZXcgQ3VzdG9tQnV0dG9uKCcnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFkZEJ1dHRvbkNsaWNrKHNlbGVjdGlvbiwgc2VsZWN0aW9uLmRlY29Ob2RlLmNvbm5lY3RvcnNbaV0sIGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb25PYmplY3QpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5lZGl0QWRkQnV0dG9ucyAmJiB0aGlzLmVkaXRBZGRCdXR0b25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93RWxlbWVudFRvb2xiYXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fcmVwb3NpdGlvbkJ1dHRvbnMoKTtcclxuICAgICAgICB0aGlzLmFuaW1hdGVFZGl0QWRkQnV0dG9ucyA9IHRydWU7XHJcbiAgICAgIH0sIDIwMCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYW5pbWF0ZUVkaXRBZGRCdXR0b25zID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93RWxlbWVudFRvb2xiYXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICB9LCAzMDAwKTsgLy8gdGltZW91dCB0aW1lIGlzIGNvdXBsZWQgb24gYW5pbWF0aW9uIGR1cmF0aW9uIGluIHNjc3MgZmlsZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQnVpbGRGaW5pc2hlZChyZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQpOiB2b2lkIHtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmdsYXNzTWF0ZXJpYWxDaGVjayhyZXN1bHQuZnVybml0dXJlKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudCAmJiByZXN1bHQuZnVybml0dXJlKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW06IEl0ZW0gPSByZXN1bHQuZnVybml0dXJlO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBDdXN0b21NZXNoKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0ID0gPEN1c3RvbU9iamVjdDNEPnRoaXMuc2VsZWN0ZWRFbGVtZW50LnBhcmVudDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9wcmVwYXJlQWRkQnV0dG9ucygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2NhbGxCYWNrRm5XaGVuQnVpbGRGaW5pc2hlZCAmJiB0aGlzLnN0YW5kQWxvbmUpIHtcclxuICAgICAgdGhpcy5fY2FsbEJhY2tGbldoZW5CdWlsZEZpbmlzaGVkKHJlc3VsdC5mdXJuaXR1cmUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXRFbGVtZW50UG9zaXRpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQgJiYgIXRoaXMuc3RhbmRBbG9uZSkge1xyXG4gICAgICBjb25zdCB5UG9zOiBudW1iZXIgPSAoKHRoaXMuc2VsZWN0ZWRFbGVtZW50Lmdlb21ldHJ5LmJvdW5kaW5nQm94Lm1heC55IC0gdGhpcy5zZWxlY3RlZEVsZW1lbnQuZ2VvbWV0cnkuYm91bmRpbmdCb3gubWluLnkpIC8gMik7XHJcbiAgICAgIGNvbnN0IHBvczogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5nZXRXb3JsZFBvc2l0aW9uKHBvcyk7XHJcbiAgICAgIHBvcy55ICs9IHlQb3M7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50UG9zaXRpb24gPSB0aGlzLl9zY2VuZVNlcnZpY2UucG9zaXRpb25JblNjZW5lVG9TY3JlZW4ocG9zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50UG9zaXRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW1vdmVBbGxCdXR0b25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVtb3ZlQWRkQnV0dG9ucygpO1xyXG4gICAgdGhpcy5fcmVtb3ZlUmVzaXplQnV0dG9ucygpO1xyXG4gICAgdGhpcy5fcmVtb3ZlQ3VzdG9tQnV0dG9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQ3VzdG9tQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlQWRkQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdEFkZEJ1dHRvbnMubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZVJlc2l6ZUJ1dHRvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZUJ1dHRvbnMubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZUVkaXRJdGVtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdEVsZW1lbnRNZW51Lmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlRWxlbWVudE1lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVFZGl0SXRlbXMoKTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCk7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd0VkaXRQZW5jaWxDb25maWd1cmF0b3IgJiYgc2VsZWN0aW9uKSB7XHJcbiAgICAgIGxldCBvcHRpb25zOiBTZWxlY3Rpb25bXSA9IHRoaXMuX2dldE9wdGlvbnNGcm9tU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcihvID0+IHtcclxuICAgICAgICByZXR1cm4gby5ub2RlVHlwZSA9PT0gJ09QVCcgJiYgdGhpcy5faU9uZS5pc1NlbGVjdGlvblB1Ymxpc2hlZChvKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gb3B0aW9ucy5sZW5ndGg7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICB0aGlzLmVkaXRFbGVtZW50TWVudS5wdXNoKG5ldyBDdXN0b21CdXR0b24ob3B0aW9uc1tpXS5xdWVzdGlvbiwgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLnNlbGVjdFNlbGVjdGlvbihvcHRpb25zW2ldLCB0aGlzLmFjdGl2ZU1ldGFkYXRhKTtcclxuICAgICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuaW5zdGFudEVkaXRNZW51KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0U2VsZWN0ZWRFbGVtZW50KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9hZnRlckxvYWRGcm9tUHJlc2V0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHNldFN0YXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICB0aGlzLl9sb2FkaW5nRnJvbVByZXNldCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcHJvZ3Jlc3NTZXJ2aWNlLmZpbmlzaERvd25sb2FkcygpO1xyXG4gICAgaWYgKHRoaXMuX2l0ZW1zRnJvbVNjcmF0Y2gubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2l0ZW1zRnJvbVNjcmF0Y2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUoXHJcbiAgICAgICAgICB0aGlzLl9pdGVtc0Zyb21TY3JhdGNoW2ldLm1ldGFEYXRhLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgc2V0U3RhdGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9pdGVtc0Zyb21TY3JhdGNoLmxlbmd0aCA9IDA7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5faXRlbXNOZWVkVXNlcklucHV0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9pdGVtc05lZWRVc2VySW5wdXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQgPSBhd2FpdCB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUoXHJcbiAgICAgICAgICB0aGlzLl9pdGVtc05lZWRVc2VySW5wdXRbaV0ubWV0YURhdGEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5hZGRUb0xpc3QodGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uub2JqZWN0TGlzdCwgcmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgICBzZXRTdGF0ZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2l0ZW1zTmVlZFVzZXJJbnB1dC5sZW5ndGggPSAwO1xyXG4gICAgfVxyXG4gICAgaWYgKHNldFN0YXRlKSB7XHJcbiAgICAgIHRoaXMuX3ByZXNldHNTZXJ2aWNlLmNyZWF0ZVN0YXRlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm9iamVjdExpc3RGaXhlZC5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm9ic29sZXRlT2JqZWN0Q2FjaGUubGVuZ3RoID4gMCB8fFxyXG4gICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5ub3RGaXhlZE9iamVjdENhY2hlLmxlbmd0aCA+IDAgfHxcclxuICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uubm90TG9hZGVkLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZXRNb2RlbEVycm9yRGlhbG9nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0lPTkVPYmplY3Qobyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhby5pdGVtX3NjaGVtYSB8fCBvLmlvbmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlQWRkQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gT2JqZWN0VXRpbHMuR2V0U2VsZWN0aW9uRnJvbVNlbGVjdGVkT2JqZWN0KHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCk7XHJcbiAgICB0aGlzLl9yZW1vdmVBZGRCdXR0b25zKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgIC8vIGlmIChkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZmxhdF9yJyB8fFxyXG4gICAgICAvLyAgIGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdmbGF0X2wnIHx8XHJcbiAgICAgIC8vICAgZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZsYXRfZCcgfHxcclxuICAgICAgLy8gICBkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZmxhdF91JyB8fFxyXG4gICAgICAvLyAgIGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd2ZXJ0X3InIHx8XHJcbiAgICAgIC8vICAgZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlcnRfbCcgfHxcclxuICAgICAgLy8gICBkZWNvTm9kZS5nYW1lT2JqZWN0TmFtZS50b0xvd2VyQ2FzZSgpID09PSAndmVydF9kJyB8fFxyXG4gICAgICAvLyAgIGRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnRvTG93ZXJDYXNlKCkgPT09ICd2ZXJ0X3UnKSB7XHJcbiAgICAgIC8vICAgaWYgKGRlY29Ob2RlLmNvbm5lY3RvcnMpIHtcclxuICAgICAgLy8gICAgIGRlY29Ob2RlLmNvbm5lY3RvcnMuZm9yRWFjaChjID0+IGMubGlua2VkUmVwZWF0YWJsZXMgPSAnVCcpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgICBjb25zdCBsZW46IG51bWJlciA9IHNlbGVjdGlvbi5kZWNvTm9kZSA/IHNlbGVjdGlvbi5kZWNvTm9kZS5jb25uZWN0b3JzLmxlbmd0aCA6IDA7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjb25PYmplY3Q6IGFueSA9IHRoaXMuX2dldENvbm5lY3Rvck9iamVjdCh0aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QsIHNlbGVjdGlvbi5kZWNvTm9kZS5jb25uZWN0b3JzW2ldLmNvbm5lY3Rvcik7XHJcbiAgICAgICAgaWYgKGNvbk9iamVjdCAmJiB0aGlzLl9jYW5TaG93QWRkQnV0dG9uKHNlbGVjdGlvbi5kZWNvTm9kZS5jb25uZWN0b3JzW2ldLCBjb25PYmplY3QpKSB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRBZGRCdXR0b25zLnB1c2gobmV3IEN1c3RvbUJ1dHRvbignJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUFkZEJ1dHRvbkNsaWNrKHNlbGVjdGlvbiwgc2VsZWN0aW9uLmRlY29Ob2RlLmNvbm5lY3RvcnNbaV0sIHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbk9iamVjdCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS50cmF2ZXJzZSgoY2hpbGQpID0+IHtcclxuICAgICAgICBpZiAoY2hpbGQubmFtZSkge1xyXG4gICAgICAgICAgY29uc3QgY3VzdG9taXplQnV0dG9uOiBhbnkgPSBjaGlsZC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgncF8nKTtcclxuICAgICAgICAgIC8vIGNvbnN0IGN1c3RvbWl6ZU9wdGlvbjogYW55ID0gdGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0LmdldE9iamVjdEJ5TmFtZSgpXHJcbiAgICAgICAgICBpZiAoY3VzdG9taXplQnV0dG9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uVG9DdXN0b21pemUgPSBjaGlsZC5wYXJlbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5wdXNoKG5ldyBDdXN0b21CdXR0b24oJycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ3VzdG9taXplQ2xpY2soKTtcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRDb25uZWN0b3JPYmplY3Qob2JqOiBhbnksIGNvbm5lY3Rvcjogc3RyaW5nKTogYW55IHtcclxuICAgIGlmICghb2JqKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgb2JqRm91bmQgPSBvYmouZ2V0T2JqZWN0QnlOYW1lKGNvbm5lY3Rvcik7XHJcbiAgICBpZiAob2JqRm91bmQpIHtcclxuICAgICAgcmV0dXJuIG9iakZvdW5kO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKG9iai5wYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Q29ubmVjdG9yT2JqZWN0KG9iai5wYXJlbnQsIGNvbm5lY3Rvcik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldE9wcG9zaXRlQ29ubmVjdG9yUGFydHMoY29ubmVjdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29ubmVjdG9yUGFydHNBcnI6IHN0cmluZ1tdID0gY29ubmVjdG9yLnNwbGl0KCdfJyk7XHJcbiAgICBjb25uZWN0b3JQYXJ0c0Fyci5wb3AoKTsgLy8gcmVtb3ZlIG51bWJlclxyXG4gICAgY29uc3QgY29ubmVjdG9yVHlwZTogc3RyaW5nID0gY29ubmVjdG9yUGFydHNBcnJbY29ubmVjdG9yUGFydHNBcnIubGVuZ3RoIC0gMV07XHJcbiAgICBjb25uZWN0b3JQYXJ0c0Fycltjb25uZWN0b3JQYXJ0c0Fyci5sZW5ndGggLSAxXSA9IGNvbm5lY3RvclR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2YnID8gJ00nIDogJ0YnO1xyXG4gICAgcmV0dXJuIGNvbm5lY3RvclBhcnRzQXJyLmpvaW4oJ18nKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVPdGhlckJ1dHRvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW1vdmVSZXNpemVCdXR0b25zKCk7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudDogSXRlbSA9IE9iamVjdFV0aWxzLkdldFBhcmVudEl0ZW0odGhpcy5fc2VsZWN0ZWRFbGVtZW50T2JqZWN0KTtcclxuICAgICAgaWYgKHBhcmVudCkgeyAvLyBoaWRlIGFsbCBjb25uZWN0b3JzXHJcbiAgICAgICAgcGFyZW50LnRyYXZlcnNlKG8gPT4ge1xyXG4gICAgICAgICAgaWYgKG8ubmFtZSAmJiBvLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjXycpKSB7XHJcbiAgICAgICAgICAgIG8udmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG90aGVyQ29ubmVjdG9yczogTWVzaFtdID0gPE1lc2hbXT50aGlzLl9zZWxlY3RlZEVsZW1lbnRPYmplY3QuY2hpbGRyZW4uZmlsdGVyKFxyXG4gICAgICAgIGMgPT4gYyBpbnN0YW5jZW9mIE1lc2ggJiYgKGMubmFtZSAmJiAoYy5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnY19zY2FfJykgfHwgYy5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnY19yZXBfJykpKSk7XHJcbiAgICAgIG90aGVyQ29ubmVjdG9ycy5mb3JFYWNoKG8gPT4ge1xyXG4gICAgICAgIC8vIG8udmlzaWJsZSA9IHRydWVcclxuICAgICAgICB0aGlzLnJlc2l6ZUJ1dHRvbnMucHVzaChuZXcgQ3VzdG9tQnV0dG9uKCcnLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVSZXNpemVCdXR0b25DbGljayhvLm5hbWUsIHRoaXMuX3NlbGVjdGVkRWxlbWVudE9iamVjdCk7XHJcbiAgICAgICAgfSwgbykpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUFkZEJ1dHRvbkNsaWNrKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb25uZWN0b3I6IGFueSwgcGFyZW50OiBPYmplY3QzRCk6IHZvaWQge1xyXG4gICAgbGV0IGFmdGVyOiBib29sZWFuO1xyXG4gICAgaWYgKGNvbm5lY3Rvci5hZGRBZGp1c3QgPT09IDIpIHtcclxuICAgICAgYWZ0ZXIgPSBjb25uZWN0b3IuY29ubmVjdG9yLmluZGV4T2YoJ19NXycpID4gLTE7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuYmFzZUVsZW1lbnROb2RlSWQgPSBwYXJlbnQudXNlckRhdGEgJiYgcGFyZW50LnVzZXJEYXRhLnNlbGVjdGlvbiA/IHBhcmVudC51c2VyRGF0YS5zZWxlY3Rpb24ubm9kZUlkIDogMDtcclxuICAgIHRoaXMuX2J1aWxkRnVybml0dXJlU2VydmljZS5hY3RpdmVDb25uZWN0b3IgPSBjb25uZWN0b3I7XHJcbiAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2Uuc2VsZWN0U2VsZWN0aW9uKFxyXG4gICAgICBzZWxlY3Rpb24sIHRoaXMuYWN0aXZlTWV0YWRhdGEsIGNvbm5lY3Rvci5saW5rZWRSZXBlYXRhYmxlcyAhPT0gJ1QnLCBhZnRlciwgY29ubmVjdG9yLmNvbm5lY3Rvcik7XHJcbiAgICB0aGlzLl9yZXNldFNlbGVjdGVkRWxlbWVudCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlUmVzaXplQnV0dG9uQ2xpY2soY29ubmVjdG9yOiBhbnksIHBhcmVudDogT2JqZWN0M0QpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNlcnZpY2UucmVzaXplRWxlbWVudChjb25uZWN0b3IsIHBhcmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jYW5TaG93QWRkQnV0dG9uKGNvbm5lY3RvcjogYW55LCBjb25PYmplY3Q6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICghY29uT2JqZWN0LmNvbm5lY3RlZCB8fCBjb25uZWN0b3IubGlua2VkUmVwZWF0YWJsZXMgPT09ICdUJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXBvc2l0aW9uQnV0dG9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5lZGl0QWRkQnV0dG9ucy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgdGhpcy5fcmVwb3NpdGlvbkJ1dHRvbih0aGlzLmVkaXRBZGRCdXR0b25zW2ldKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxlbnI6IG51bWJlciA9IHRoaXMucmVzaXplQnV0dG9ucy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCByOiBudW1iZXIgPSAwOyByIDwgbGVucjsgcisrKSB7XHJcbiAgICAgIHRoaXMuX3JlcG9zaXRpb25CdXR0b24odGhpcy5yZXNpemVCdXR0b25zW3JdKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxlbmM6IG51bWJlciA9IHRoaXMuZWRpdEN1c3RvbWl6ZUJ1dHRvbi5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBjOiBudW1iZXIgPSAwOyBjIDwgbGVuYzsgYysrKSB7XHJcbiAgICAgIHRoaXMuX3JlcG9zaXRpb25CdXR0b24odGhpcy5lZGl0Q3VzdG9taXplQnV0dG9uW2NdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlcG9zaXRpb25CdXR0b24oYnV0dG9uOiBDdXN0b21CdXR0b24pOiB2b2lkIHtcclxuICAgIGNvbnN0IHBvczogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgYnV0dG9uLmRhdGEuZ2V0V29ybGRQb3NpdGlvbihwb3MpO1xyXG4gICAgY29uc3Qgc2NyZWVuUG9zOiBWZWN0b3IyID0gdGhpcy5fc2NlbmVTZXJ2aWNlLnBvc2l0aW9uSW5TY2VuZVRvU2NyZWVuKHBvcyk7XHJcbiAgICBidXR0b24ueFBvcyA9IHNjcmVlblBvcy54O1xyXG4gICAgYnV0dG9uLnlQb3MgPSBzY3JlZW5Qb3MueTtcclxuICAgIGNvbnN0IGRpc3RhbmNlVG9DYW06IG51bWJlciA9IHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLnBvc2l0aW9uLmRpc3RhbmNlVG8ocG9zKTtcclxuICAgIGJ1dHRvbi5zaXplID0gKDQgLyBkaXN0YW5jZVRvQ2FtKSAqIDMwO1xyXG4gICAgYnV0dG9uLm9wYWNpdHkgPSBNYXRoLm1heCgwLjI1LCAxIC0gKE1hdGgubWF4KDcuMCwgKE1hdGgucm91bmQoZGlzdGFuY2VUb0NhbSAqIDEwKSAvIDEwKSkgLSA3KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRPcHRpb25zRnJvbVNlbGVjdGlvbihiYXNlU2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBTZWxlY3Rpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVpbGRGdXJuaXR1cmVTZXJ2aWNlLmdldE9wdGlvbnNGcm9tU2VsZWN0aW9uKGJhc2VTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQW5zd2VyQ291bnRSZWNlaXZlZChhbnN3ZXJDb3VudDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dBbnN3ZXJzID0gYW5zd2VyQ291bnQgPiAwO1xyXG4gICAgaWYgKHRoaXMuc2hvd0Fuc3dlcnMpIHtcclxuICAgICAgdGhpcy5zaG93TGl0ZVNlbGVjdG9yID0gIXRoaXMuX2xvYWRpbmdGcm9tUHJlc2V0O1xyXG4gICAgfS8qIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5faW5pdGlhbFN0YXJ0dXApIHtcclxuICAgICAgICAvLyB0aGlzLl9pT25lLmxvYWRTZWxlY3Rpb25zKCk7XHJcbiAgICAgICAgdGhpcy5faW5pdGlhbFN0YXJ0dXAgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSovXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVMb2FkSU9uZUZ1cm5pdHVyZUludG9TY2VuZUJ5U0tVKHNrdTogc3RyaW5nLCBzZXR0aW5nczogSG9tZWRlY29yYXRvckV4dGVybmFsU2V0dGluZ3NJbnRlcmZhY2UsIHBvc2l0aW9uOiB7XHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICB6PzogbnVtYmVyXHJcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdG9hc3QgPSBuZXcgVG9hc3QoKTtcclxuICAgIHRvYXN0Lm1lc3NhZ2UgPSAnTU9ERUxfTE9BRElORyc7XHJcbiAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvd1RvYXN0KHRvYXN0KTtcclxuICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLmluaXRDb25uZWN0b3IoXHJcbiAgICAgIHNldHRpbmdzID8gc2V0dGluZ3Muc2V0dGluZ3MgOiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MsXHJcbiAgICAgIHNldHRpbmdzID8gc2V0dGluZ3MubmFtZSA6IHVuZGVmaW5lZCxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIHNldHRpbmdzICYmIHNldHRpbmdzLmV4dGVybmFsU291cmNlSWQgPyBzZXR0aW5ncy5leHRlcm5hbFNvdXJjZUlkIDogdW5kZWZpbmVkKTtcclxuICAgIGNvbnN0IGFydGljbGU6IEFydGljbGUgPSBhd2FpdCB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5sb2FkQXJ0aWNsZShza3UpO1xyXG4gICAgaWYgKGFydGljbGUucGxhY2VtZW50ID09PSBIZGVjb1BsYWNlbWVudC5GbG9vckRlY29yYXRpb24pIHtcclxuICAgICAgdGhpcy5fZmxvb3JTZXJ2aWNlLnNlbGVjdGVkRmxvb3JBcnRpY2xlID0gYXJ0aWNsZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRyYWdnZWREYXRhOiBEcmFnZ2VkRGF0YSA9IHtcclxuICAgICAgbmFtZTogc2t1LFxyXG4gICAgICBjb25zdHJ1Y3RGbjogYXN5bmMgKHBvcykgPT4gdGhpcy5fbG9hZElPbmVGdXJuaXR1cmVGcm9tU2t1KHBvcywgc2t1LCBzZXR0aW5ncyksXHJcbiAgICAgIHR5cGU6IGl0ZW1UeXBlRnJvbVBsYWNlbWVudChhcnRpY2xlLnBsYWNlbWVudCksXHJcbiAgICAgIGlPbmU6IHRydWVcclxuICAgIH07XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuU2V0RHJhZywgZHJhZ2dlZERhdGEpO1xyXG4gICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLlN0YXJ0RHJhZywgcG9zaXRpb24pO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUNvcHlJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1Uob3JpZ2luYWw6IEl0ZW0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHRvYXN0ID0gbmV3IFRvYXN0KCk7XHJcbiAgICB0b2FzdC5tZXNzYWdlID0gJ01PREVMX0xPQURJTkcnO1xyXG4gICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3dUb2FzdCh0b2FzdCk7XHJcbiAgICBvcmlnaW5hbC5tZXRhZGF0YS5jb252ZXJzaW9uR1RNU2VuZCA9IGZhbHNlO1xyXG4gICAgY29uc3QgZHJhZ2dlZERhdGEgPSB7XHJcbiAgICAgIG5hbWU6IG9yaWdpbmFsLm1ldGFkYXRhLml0ZW1JZGVudGlmaWVyLFxyXG4gICAgICBjb25zdHJ1Y3RGbjogKHBvcykgPT4gdGhpcy5fbG9hZElPbmVGdXJuaXR1cmVGcm9tT3JpZ2luYWwob3JpZ2luYWwubWV0YWRhdGEsIHBvcywgb3JpZ2luYWwucm90YXRpb24pLFxyXG4gICAgICB0eXBlOiBvcmlnaW5hbC5tZXRhZGF0YS5pdGVtVHlwZSxcclxuICAgICAgaU9uZTogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TZXREcmFnLCBkcmFnZ2VkRGF0YSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuU3RhcnREcmFnLCBvcmlnaW5hbC5wb3NpdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkSU9uZUZ1cm5pdHVyZUZyb21PcmlnaW5hbChtZDogTWV0YWRhdGEsIHBvczogVmVjdG9yMywgcm90OiBFdWxlcik6IFByb21pc2U8Q3VzdG9tRmxvb3JHcm91cFJlc3VsdD4ge1xyXG4gICAgY29uc3QgbmV3TWV0YURhdGEgPSB7Li4ubWR9O1xyXG4gICAgbmV3TWV0YURhdGEucm90YXRpb24gPSBuZXcgRXVsZXIoKS5jb3B5KHJvdCk7XHJcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKG5ld01ldGFEYXRhLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2FkSU9uZUZ1cm5pdHVyZUZyb21Ta3UoXHJcbiAgICBwb3M6IFZlY3RvcjMsIHNrdTogc3RyaW5nLCBzZXR0aW5ncz86IEhvbWVkZWNvcmF0b3JFeHRlcm5hbFNldHRpbmdzSW50ZXJmYWNlLCBzdGFuZEFsb25lOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuICAgIGNvbnN0IG1kOiBNZXRhZGF0YSA9IHtcclxuICAgICAgcG9zaXRpb246IHBvcyxcclxuICAgICAgaXRlbUlkZW50aWZpZXI6IHNrdSxcclxuICAgICAgZXh0ZXJuYWxTZXR0aW5nczogc2V0dGluZ3NcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKG1kLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHN0YW5kQWxvbmUsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUNvcHlJbnN0YW5jZUZvckZ1cm5pdHVyZShmdXJuaXR1cmU6IEl0ZW1bXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgbGVuOiBudW1iZXIgPSBmdXJuaXR1cmUubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBjb25zdCBjdXN0b21JdGVtOiBJdGVtID0gZnVybml0dXJlW2ldO1xyXG4gICAgICBpZiAoY3VzdG9tSXRlbS5tZXRhZGF0YSAmJiBjdXN0b21JdGVtLm1ldGFkYXRhLml0ZW1JZCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLmluaXRDb25uZWN0aW9uRnJvbU1ldGFkYXRhKGN1c3RvbUl0ZW0ubWV0YWRhdGEsXHJcbiAgICAgICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MucHJvamVjdFNldHRpbmdzID8gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnByb2plY3RTZXR0aW5ncyA6IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncyk7XHJcbiAgICAgICAgY29uc3Qgb2xkSW5zdGFuY2U6IHN0cmluZyA9IGN1c3RvbUl0ZW0ubWV0YWRhdGEuaXRlbUlkO1xyXG4gICAgICAgIGNvbnN0IG5ld0luc3RhbmNlOiBzdHJpbmcgPSBhd2FpdCB0aGlzLl9pT25lLmNvcHlJbnN0YW5jZUFuZFNhdmVPcmlnaW5hbENvbmZpZ3VyYXRpb24ob2xkSW5zdGFuY2UsIG51bGwpO1xyXG4gICAgICAgIGN1c3RvbUl0ZW0ubWV0YWRhdGEuaXRlbUlkID0gbmV3SW5zdGFuY2U7XHJcbiAgICAgICAgY3VzdG9tSXRlbS51c2VyRGF0YS5pdGVtSWQgPSBuZXdJbnN0YW5jZTtcclxuICAgICAgICBjdXN0b21JdGVtLm1ldGFkYXRhLm9yaWdpbmFsSXRlbUlkID0gb2xkSW5zdGFuY2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUxvYWRJT25lRnVybml0dXJlRnJvbVByZXNldChmdXJuaXR1cmUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gZnVybml0dXJlLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAvLyBpZiAoZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3MgJiYgZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2VJZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vICAgY29uc3QgZXh0ZXJuYWxTb3VyY2VPYmo6IEV4dGVybmFsU291cmNlID1cclxuICAgICAgLy8gICAgIGV4dGVybmFsU291cmNlcy5maW5kKHNvdXJjZSA9PiBzb3VyY2Uuc2NoZW1hID09PSBmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncy5zY2hlbWEpO1xyXG4gICAgICAvLyAgIGlmIChleHRlcm5hbFNvdXJjZU9iaiAmJiBleHRlcm5hbFNvdXJjZU9iai5zY2hlbWEgIT09ICcnKSB7XHJcbiAgICAgIC8vICAgICBpZiAoZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3NbJ3VzZXJuYW1lJ10gIT09IHVuZGVmaW5lZCAmJiBmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5nc1sncGFzc3dvcmQnXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vICAgICAgIGZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzLnNldHRpbmdzWyd1c2VybmFtZSddID0gJyc7XHJcbiAgICAgIC8vICAgICAgIGZ1cm5pdHVyZVtpXS5leHRlcm5hbFNldHRpbmdzLnNldHRpbmdzWydwYXNzd29yZCddID0gJyc7XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgICBmdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZUlkID0gZXh0ZXJuYWxTb3VyY2VPYmouc291cmNlSWQ7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgIGNvbnNvbGUubG9nKCdzb3VyY2Ugbm90IGF2YWlsYWJsZScpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgICBhd2FpdCB0aGlzLl9sb2FkRnVybml0dXJlRnJvbUl0ZW0oZnVybml0dXJlW2ldKTtcclxuICAgIH1cclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TaG91bGRDb3B5RnVybml0dXJlRnJvbVByZXNldCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkRnVybml0dXJlRnJvbUl0ZW0oaXRlbTogYW55KTogUHJvbWlzZTxDdXN0b21GbG9vckdyb3VwUmVzdWx0PiB7XHJcbiAgICBjb25zdCBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKFxyXG4gICAgICBpdGVtLnhwb3MsIGl0ZW0ueXBvcywgaXRlbS56cG9zKTtcclxuICAgIGNvbnN0IG1ldGFkYXRhID0ge1xyXG4gICAgICBpdGVtTmFtZTogaXRlbS5pdGVtX25hbWUsXHJcbiAgICAgIGl0ZW1EZXNjcmlwdGlvbjogaXRlbS5pdGVtX2Rlc2NyaXB0aW9uLFxyXG4gICAgICBpdGVtSWQ6IGl0ZW0uaXRlbV9pZCxcclxuICAgICAgaXRlbUlkZW50aWZpZXI6IGl0ZW0uaXRlbV9pZGVudGlmaWVyLFxyXG4gICAgICBjb25maWd1cmFibGU6ICFpc05pbGwoaXRlbS5jb25maWd1cmFibGUpID8gaXRlbS5jb25maWd1cmFibGUgOiB0cnVlLFxyXG4gICAgICBpb25lOiBpdGVtLmlvbmUsXHJcbiAgICAgIHNjaGVtYTogaXRlbS5pdGVtX3NjaGVtYSxcclxuICAgICAgcmVzaXphYmxlOiBpdGVtLnJlc2l6YWJsZSxcclxuICAgICAgZWxldmF0aW9uOiBpdGVtLmVsZXZhdGlvbixcclxuICAgICAgZWxldmF0aW9uRml4ZWQ6IGl0ZW0uZWxldmF0aW9uRml4ZWQsXHJcbiAgICAgIGVsZXZhdGlvbkFkanVzdGFibGU6IGl0ZW0uZWxldmF0aW9uQWRqdXN0YWJsZSxcclxuICAgICAgaXRlbVR5cGU6IGl0ZW0uaXRlbV90eXBlLFxyXG4gICAgICBtb2RlbFVybDogaXRlbS5tb2RlbF91cmwsXHJcbiAgICAgIHRleHR1cmU6IGl0ZW0udGV4dHVyZSxcclxuICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxyXG4gICAgICBhc3NldFBhdGg6IGl0ZW0uaXRlbV9hc3NldFBhdGgsXHJcbiAgICAgIHJvdGF0aW9uOiBuZXcgRXVsZXIoMCwgaXRlbS5yb3RhdGlvbiwgMCksXHJcbiAgICAgIHNjYWxlOiBpdGVtLnNjYWxlLFxyXG4gICAgICBjZW50ZXJQaXZvdDogdHJ1ZSxcclxuICAgICAgaWdub3JlSW52aXNpYmxlOiBpdGVtLmlnbm9yZUludmlzaWJsZSxcclxuICAgICAgdXBkYXRlUGl2b3RPbkNyZWF0ZTogdHJ1ZSxcclxuICAgICAgb3BlbmluZzogaXRlbS5vcGVuaW5nLFxyXG4gICAgICBsb2NrZWQ6IGl0ZW0ubG9ja2VkLFxyXG4gICAgICBpdGVtR3JvdXA6IGl0ZW0uaXRlbUdyb3VwLFxyXG4gICAgICBkZWNvczogaXRlbS5kZWNvcyxcclxuICAgICAgc2VsZWN0aW9uczogaXRlbS5zZWxlY3Rpb25zLFxyXG4gICAgICBlbGVtZW50Q29uZmlndXJhdGlvbjogaXRlbS5lbGVtZW50Q29uZmlndXJhdGlvbixcclxuICAgICAgb25XYWxsOiBpdGVtLm9uV2FsbCxcclxuICAgICAgZXh0ZXJuYWxTZXR0aW5nczogaXRlbS5leHRlcm5hbFNldHRpbmdzLFxyXG4gICAgICBjb252ZXJzaW9uR1RNU2VuZDogaXRlbS5jb252ZXJzaW9uR1RNU2VuZCxcclxuICAgICAgY29udmVyc2lvblN1Ym1pdHRlZFByaWNlOiBpdGVtLmNvbnZlcnNpb25TdWJtaXR0ZWRQcmljZVxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgbG9hZEZyb21Qcm9qZWN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZiAoKG1ldGFkYXRhLnNlbGVjdGlvbnMgJiYgbWV0YWRhdGEuc2VsZWN0aW9ucy5sZW5ndGggIT09IDAgJiYgbWV0YWRhdGEuZGVjb3MgJiYgbWV0YWRhdGEuZGVjb3MubGVuZ3RoICE9PSAwICYmIG1ldGFkYXRhLmNvbmZpZ3VyYWJsZSkgfHxcclxuICAgICAgKG1ldGFkYXRhLm1vZGVsVXJsICYmICFtZXRhZGF0YS5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgIGxvYWRGcm9tUHJvamVjdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKFxyXG4gICAgICBtZXRhZGF0YSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBsb2FkRnJvbVByb2plY3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlTG9hZEFuZEJ1aWxkRnVybml0dXJlKFxyXG4gICAgZnVybml0dXJlRGF0YTogTWV0YWRhdGEsXHJcbiAgICBzaG91bGRDb3B5SW5zdGFuY2U6IGJvb2xlYW4sXHJcbiAgICBsb29zZU9yaWdpbmFsQ29uZmlndXJhdGlvbjogYm9vbGVhbixcclxuICAgIGZyb21QcmVzZXQ6IGJvb2xlYW4sXHJcbiAgICBzdGFuZEFsb25lOiBib29sZWFuLFxyXG4gICAgZnJvbVNjcmF0Y2g6IGJvb2xlYW4sXHJcbiAgICBzaG93RXJyb3JEaWFsb2c6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgbG9hZEZyb21Qcm9qZWN0OiBib29sZWFuID0gZmFsc2VcclxuICApOiBQcm9taXNlPEN1c3RvbUZsb29yR3JvdXBSZXN1bHQ+IHtcclxuXHJcbiAgICBpZiAoIWxvYWRGcm9tUHJvamVjdCkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5pbml0Q29ubmVjdGlvbkZyb21NZXRhZGF0YShmdXJuaXR1cmVEYXRhLFxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5wcm9qZWN0U2V0dGluZ3MgPyB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MucHJvamVjdFNldHRpbmdzIDogdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHQ6IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQgPVxyXG4gICAgICBhd2FpdCB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5sb2FkRnVybml0dXJlKFxyXG4gICAgICAgIGZ1cm5pdHVyZURhdGEsIHNob3VsZENvcHlJbnN0YW5jZSwgbG9vc2VPcmlnaW5hbENvbmZpZ3VyYXRpb24sIHN0YW5kQWxvbmUsIGZyb21TY3JhdGNoLCBmcm9tUHJlc2V0LCBsb2FkRnJvbVByb2plY3QpXHJcbiAgICAgICAgLmNhdGNoKChlcnJvclJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFlcnJvclJlc3VsdCB8fCAodHlwZW9mIGVycm9yUmVzdWx0ID09PSAnc3RyaW5nJyAmJiBlcnJvclJlc3VsdCA9PT0gJ0VDT05OQUJPUlRFRCcpIHx8XHJcbiAgICAgICAgICAgIGVycm9yUmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuVGltZW91dCkgeyAvLyB0aW1lb3V0XHJcbiAgICAgICAgICAgIGVycm9yUmVzdWx0ID0gbmV3IEN1c3RvbUZsb29yR3JvdXBSZXN1bHQoZnVybml0dXJlRGF0YS5pdGVtSWRlbnRpZmllciwgZnVybml0dXJlRGF0YS5pdGVtTmFtZSk7XHJcbiAgICAgICAgICAgIGVycm9yUmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKCdUSU1FT1VUJykpO1xyXG4gICAgICAgICAgICBlcnJvclJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5UaW1lb3V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkZpbmlzaGVkSU9uZUZ1cm5pdHVyZUJ1aWxkKTtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGVycm9yUmVzdWx0LCBzaG93RXJyb3JEaWFsb2cpO1xyXG4gICAgICAgICAgcmV0dXJuIGVycm9yUmVzdWx0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnZUJ1cy5lbWl0KE1lc3NhZ2VUeXBlLkZpbmlzaGVkSU9uZUZ1cm5pdHVyZUJ1aWxkKTtcclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLkJ1aWxkRnJvbVNjcmF0Y2gpIHtcclxuICAgICAgICBpZiAoZnJvbVByZXNldCkgeyAvLyBzdGFydCBjb25maWd1cmluZyB3aGVuIGxvYWRpbmcgaXMgZG9uZVxyXG4gICAgICAgICAgcmVzdWx0Lm1ldGFEYXRhID0gey4uLmZ1cm5pdHVyZURhdGF9O1xyXG4gICAgICAgICAgdGhpcy5faXRlbXNGcm9tU2NyYXRjaC5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZ1cm5pdHVyZURhdGEucG9zaXRpb24gPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldENlbnRlcigpO1xyXG4gICAgICAgICAgaWYgKCFzdGFuZEFsb25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uuc2hvd0RpYWxvZyh7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogRGlhbG9nVHlwZS5XYXJuaW5nLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldCgnQlVJTERfUFJPRFVDVF9GUk9NX1NDUkFUQ0gnKSxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiBbe21lc3NhZ2U6IHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldCgnTU9ERUxfSEFTX05PX0RFRkFVTFRTJyl9XVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVMb2FkQW5kQnVpbGRGdXJuaXR1cmUoZnVybml0dXJlRGF0YSwgZmFsc2UsIHRydWUsIGZyb21QcmVzZXQsIHN0YW5kQWxvbmUsIHRydWUsIGxvYWRGcm9tUHJvamVjdCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1ldGFkYXRhID0gcmVzdWx0ID8gcmVzdWx0Lm1ldGFEYXRhIDogbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdC5yZXN1bHRUeXBlID09PSBSZXN1bHRUeXBlLk5lZWRzVXNlcklucHV0KSB7XHJcbiAgICAgICAgcmVzdWx0Lm1ldGFEYXRhID0gey4uLmZ1cm5pdHVyZURhdGF9O1xyXG4gICAgICAgIGlmIChmcm9tUHJlc2V0KSB7IC8vIHN0YXJ0IGNvbmZpZ3VyaW5nIHdoZW4gbG9hZGluZyBpcyBkb25lXHJcbiAgICAgICAgICB0aGlzLl9pdGVtc05lZWRVc2VySW5wdXQucHVzaChyZXN1bHQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXN1bHQubWV0YURhdGEucG9zaXRpb24gPSB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldENlbnRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0LnJlc3VsdFR5cGUgPT09IFJlc3VsdFR5cGUuRXh0ZXJuYWxTb3VyY2VOb3RBdmFpbGFibGUpIHtcclxuICAgICAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5hZGRUb0xpc3QodGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuZXh0ZXJuYWxTb3VyY2VOb3RBdmFpbGFibGUsIHJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdC5mdXJuaXR1cmUpIHtcclxuICAgICAgICBpZiAoc2hvdWxkQ29weUluc3RhbmNlKSB7XHJcbiAgICAgICAgICBjb25zdCBjbG9zZXN0V2FsbEVkZ2U6IEhhbGZFZGdlID0gdGhpcy5fcm9vbVNlcnZpY2UuZ2V0Q2xvc2VzdFdhbGxFZGdlKHJlc3VsdC5mdXJuaXR1cmUucG9zaXRpb24ueCwgcmVzdWx0LmZ1cm5pdHVyZS5wb3NpdGlvbi56KTtcclxuICAgICAgICAgIGlmIChyZXN1bHQuZnVybml0dXJlIGluc3RhbmNlb2YgQ3VzdG9tV2FsbEZsb29ySXRlbSAmJiByZXN1bHQuZnVybml0dXJlLm9uV2FsbCkge1xyXG4gICAgICAgICAgICAocmVzdWx0LmZ1cm5pdHVyZSBhcyBDdXN0b21XYWxsRmxvb3JJdGVtKS5wbGFjZU9uRWRnZShjbG9zZXN0V2FsbEVkZ2UpO1xyXG4gICAgICAgICAgICByZXN1bHQuZnVybml0dXJlLm1vdmVGcm9tRmxvb3JUb1dhbGwoKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmZ1cm5pdHVyZSBpbnN0YW5jZW9mIFdhbGxJdGVtICYmICEocmVzdWx0LmZ1cm5pdHVyZSBpbnN0YW5jZW9mIEN1c3RvbVdhbGxGbG9vckl0ZW0pKSB7XHJcbiAgICAgICAgICAgIChyZXN1bHQuZnVybml0dXJlIGFzIFdhbGxJdGVtKS5wbGFjZU9uRWRnZShjbG9zZXN0V2FsbEVkZ2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LmZ1cm5pdHVyZSBpbnN0YW5jZW9mIEN1c3RvbVdhbGxJdGVtICYmIHN0YW5kQWxvbmUpIHtcclxuICAgICAgICAgIHJlc3VsdC5mdXJuaXR1cmUucG9zaXRpb24ueSArPSByZXN1bHQuZnVybml0dXJlLmhhbGZTaXplLnk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5PYnNvbGV0ZSkge1xyXG4gICAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYWRkVG9MaXN0KHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm9ic29sZXRlT2JqZWN0Q2FjaGUsIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5Mb2FkZWQpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQubWV0YURhdGEuY29uZmlndXJhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYmplY3RMaXN0LCByZXN1bHQpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2UuYWRkVG9MaXN0KHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLnNpbXBsZU9iamVjdExpc3QsIHJlc3VsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQucmVzdWx0VHlwZSA9PT0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uRml4ZWQpIHtcclxuICAgICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLmFkZFRvTGlzdCh0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5vYmplY3RMaXN0Rml4ZWQsIHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWxvYWRGcm9tUHJvamVjdCkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fYWRkVG9TY2VuZUdUTShyZXN1bHQuZnVybml0dXJlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghZnJvbVByZXNldCkge1xyXG4gICAgICB0aGlzLl9wcm9ncmVzc1NlcnZpY2UuZmluaXNoRG93bmxvYWRzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZU1ldGFkYXRhID0gcmVzdWx0ID8gcmVzdWx0Lm1ldGFEYXRhIDogbnVsbDtcclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYW5zd2VyU2VsZWN0ZWQocmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2FkRnVybml0dXJlU2VydmljZS5hZGRUb0xpc3QodGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uub2JqZWN0TGlzdCwgcmVzdWx0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUVycm9yKGVycm9yOiBDdXN0b21GbG9vckdyb3VwUmVzdWx0LCBzaG93RGlhbG9nOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAoZXJyb3IuaW5zdGFuY2VJZCB8fCBlcnJvci5za3UpIHtcclxuICAgICAgc3dpdGNoIChlcnJvci5yZXN1bHRUeXBlKSB7XHJcbiAgICAgICAgY2FzZSBSZXN1bHRUeXBlLkFydGljbGVOb3RGb3VuZDpcclxuICAgICAgICBjYXNlIFJlc3VsdFR5cGUuVGltZW91dDpcclxuICAgICAgICBjYXNlIFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbk5vdEZpeGVkOlxyXG4gICAgICAgIGNhc2UgUmVzdWx0VHlwZS5HYW1lb2JqZWN0TmFtZU1pc21hdGNoSW5Tb3VyY2U6XHJcbiAgICAgICAgY2FzZSBSZXN1bHRUeXBlLk5vU2VsZWN0aW9uczpcclxuICAgICAgICBjYXNlIFJlc3VsdFR5cGUuTm9EZWNvTm9kZXM6XHJcbiAgICAgICAgY2FzZSBSZXN1bHRUeXBlLkV4dGVybmFsU291cmNlTm90QXZhaWxhYmxlOlxyXG4gICAgICAgICAgdGhpcy5fbG9hZEZ1cm5pdHVyZVNlcnZpY2Uubm90TG9hZGVkLnB1c2goZXJyb3IpO1xyXG4gICAgICAgICAgaWYgKHNob3dEaWFsb2cpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2hvd1dhcm5pbmcoe3RpdGxlOiAnRVJST1InLCBtZXNzYWdlczogZXJyb3IuZXJyb3JNZXNzYWdlc30pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHRoaXMuX2xvYWRGdXJuaXR1cmVTZXJ2aWNlLm5vdExvYWRlZC5wdXNoKGVycm9yKTtcclxuICAgICAgICAgIGlmIChzaG93RGlhbG9nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nob3dXYXJuaW5nKHt0aXRsZTogJ0VSUk9SJywgbWVzc2FnZXM6IFtuZXcgRXJyb3JNZXNzYWdlKCdFUlJPUl9MT0FESU5HX0ZVUk5JVFVSRScpXX0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc2hvd0RpYWxvZykge1xyXG4gICAgICAgIHRoaXMuX3Nob3dXYXJuaW5nKHt0aXRsZTogJ0VSUk9SJywgbWVzc2FnZXM6IFtuZXcgRXJyb3JNZXNzYWdlKCdFUlJPUl9MT0FESU5HX0ZVUk5JVFVSRScpXX0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuVW5kZWZpbmVkRXJyb3JPY2N1cmVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUNvbmZpZ3VyZU1vZGVDaGFuZ2UoY29uZmlndXJpbmdNb2RlQ2hhbmdlOiBDb25maWd1cmluZ01vZGVDaGFuZ2VJbnRlcmZhY2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLnN0YW5kQWxvbmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbmZpZ3VyaW5nTW9kZUNoYW5nZS5jb25maWd1cmluZykge1xyXG4gICAgICB0aGlzLl9pT25lLmVtcHR5U2VsZWN0aW9ucygpO1xyXG4gICAgICB0aGlzLl9hcHBTdGF0ZVNlcnZpY2UudW5kb0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fYXBwU3RhdGVTZXJ2aWNlLnJlZG9EaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuYWN0aXZlTWV0YWRhdGEgPSBjb25maWd1cmluZ01vZGVDaGFuZ2UubWV0YWRhdGE7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUxvYWRBbmRCdWlsZEZ1cm5pdHVyZShcclxuICAgICAgICBjb25maWd1cmluZ01vZGVDaGFuZ2UubWV0YWRhdGEsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hcHBTdGF0ZVNlcnZpY2UudW5kb0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX2FwcFN0YXRlU2VydmljZS5yZWRvRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0Fuc3dlcnMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NlbGVjdGlvbnMgPSBjb25maWd1cmluZ01vZGVDaGFuZ2UuY29uZmlndXJpbmcgfHwgdGhpcy5zdGFuZEFsb25lO1xyXG4gICAgdGhpcy5zaG93TGl0ZVNlbGVjdG9yID0gY29uZmlndXJpbmdNb2RlQ2hhbmdlLmNvbmZpZ3VyaW5nIHx8IHRoaXMuc3RhbmRBbG9uZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZE1vZGVsRGlhbG9nVG9vbGJhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbk1vZGVscyxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogODAwXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3dXYXJuaW5nKGNvbmZpZzogRGlhbG9nQ29uZmlnKSB7XHJcbiAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlLnNob3dEaWFsb2coe2RhdGE6IGNvbmZpZ30pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfYWRkVG9TY2VuZUdUTShmdXJuaXR1cmU6IEl0ZW0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChmdXJuaXR1cmUgJiYgZnVybml0dXJlLm1ldGFkYXRhKSB7XHJcbiAgICAgIGNvbnN0IGFydGljbGVFeHRlbmRlZDogQXJ0aWNsZUV4dGVuZGVkID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yQWRhcHRlclNlcnZpY2UuZ2V0QXJ0aWNsZUV4dGVuZGVkKGZ1cm5pdHVyZS5tZXRhZGF0YS5pdGVtSWRlbnRpZmllcik7XHJcbiAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICdhcnRpY2xlTnInOiBmdXJuaXR1cmUubWV0YWRhdGEuaXRlbUlkZW50aWZpZXIsXHJcbiAgICAgICAgJ3Byb2R1Y3QnOiBmdXJuaXR1cmUubWV0YWRhdGEuaXRlbU5hbWUsXHJcbiAgICAgICAgJ3NjaGVtYSc6IGZ1cm5pdHVyZS5tZXRhZGF0YS5zY2hlbWFcclxuICAgICAgfTtcclxuICAgICAgaWYgKGZ1cm5pdHVyZS5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBleHRlcm5hbERhdGEgPSB7XHJcbiAgICAgICAgICAnZXh0ZXJuYWxTb3VyY2VOYW1lJzogZnVybml0dXJlLm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MubmFtZSxcclxuICAgICAgICAgICdleHRlcm5hbFNvdXJjZVVybCc6IGZ1cm5pdHVyZS5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzLnNldHRpbmdzLnVybFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZGF0YSA9IHsuLi5kYXRhLCAuLi5leHRlcm5hbERhdGF9O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhcnRpY2xlRXh0ZW5kZWQpIHtcclxuICAgICAgICBjb25zdCBhcnRpY2xlRGF0YSA9IHtcclxuICAgICAgICAgICdicmFuZElkJzogYXJ0aWNsZUV4dGVuZGVkLmJyYW5kSWQsXHJcbiAgICAgICAgICAnc3RvcmVHcm91cElkcyc6IGFydGljbGVFeHRlbmRlZC5zdG9yZUdyb3VwSWRzLFxyXG4gICAgICAgICAgJ3R1cm5vdmVyR3JvdXBEZXNjcic6IGFydGljbGVFeHRlbmRlZC50dXJub3Zlckdyb3VwRGVzY3IsXHJcbiAgICAgICAgICAnY2F0ZWdvcnknOiBhcnRpY2xlRXh0ZW5kZWQuY2F0ZWdvcnksXHJcbiAgICAgICAgICAnaDNkRGlzdHJpYnV0aW9uSWQnOiBhcnRpY2xlRXh0ZW5kZWQuaDNkRGlzdHJpYnV0aW9uSWQsXHJcbiAgICAgICAgICAnY2F0YWxvZ0RlZmluaXRpb25JZCc6IGFydGljbGVFeHRlbmRlZC5jYXRhbG9nRGVmaW5pdGlvbklkXHJcbiAgICAgICAgfTtcclxuICAgICAgICBkYXRhID0gey4uLmRhdGEsIC4uLmFydGljbGVEYXRhfTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9nb29nbGVUYWdNYW5hZ2VyLnNlbmRFdmVudChHb29nbGVUYWdNYW5hZ2VyRXZlbnQuQWRkVG9TY2VuZSwgZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldFRlbXBsYXRlVHlwZShzaG93RnVsbENvbmZpZ3VyYXRpb246IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgdGhpcy5zaG93RnVsbENvbmZpZ3VyYXRpb24gPSBzaG93RnVsbENvbmZpZ3VyYXRpb247XHJcbiAgICB9XHJcbn1cclxuIiwiPHJwLWxpdGUtc2VsZWN0b3IgKm5nSWY9XCIhc3RhbmRBbG9uZSAmJiAhc2hvd0Z1bGxDb25maWd1cmF0aW9uXCIgY2xhc3M9XCJmbG9hdGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFsoc2hvdyldPVwic2hvd0xpdGVTZWxlY3RvclwiXHJcbiAgICAgICAgICAgICAgICAgIFttZXRhZGF0YV09XCJhY3RpdmVNZXRhZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93U2VsZWN0aW9uc109XCJzaG93U2VsZWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93QW5zd2Vyc109XCJzaG93QW5zd2Vyc1wiXHJcbiAgICAgICAgICAgICAgICAgIChzaG93Q2hhbmdlKT1cImhhbmRsZVNob3dDaGFuZ2VTZWxlY3RvcigkZXZlbnQpXCJcclxuPjwvcnAtbGl0ZS1zZWxlY3Rvcj5cclxuXHJcbjxycC1wcm9kdWN0LWNvbmZpZ3VyYXRvclxyXG4gICpuZ0lmPVwiIXN0YW5kQWxvbmUgJiYgc2hvd0Z1bGxDb25maWd1cmF0aW9uXCIgY2xhc3M9XCJmbG9hdGluZ1wiXHJcbiAgWyhzaG93KV09XCJzaG93TGl0ZVNlbGVjdG9yXCJcclxuICBbbWV0YWRhdGFdPVwiYWN0aXZlTWV0YWRhdGFcIlxyXG4gIFtzaG93U2VsZWN0aW9uc109XCJzaG93U2VsZWN0aW9uc1wiXHJcbiAgKHNob3dDaGFuZ2UpPVwiaGFuZGxlU2hvd0NoYW5nZVNlbGVjdG9yKCRldmVudClcIlxyXG4+XHJcbjwvcnAtcHJvZHVjdC1jb25maWd1cmF0b3I+XHJcblxyXG5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YW5kQWxvbmVcIj5cclxuICA8ZGl2ICpuZ0lmPVwic2hvd0xvYWRlciAmJiBzaG93UHJvZ3Jlc3NCYXJcIiBbY2xhc3MuZnVsbF09XCIhc2hvd1Byb2dyZXNzVGV4dFwiIGlkPVwibG9hZGVyXCI+XHJcbiAgICA8cCAqbmdJZj1cInNob3dQcm9ncmVzc1RleHRcIiBpZD1cImxvYWRlci10ZXh0XCI+e3sgbG9hZGVyVGV4dCB9fTwvcD5cclxuICAgIDxkaXYgaWQ9XCJwcm9ncmVzcy1iYXJcIj5cclxuICAgICAgPGRpdiBpZD1cInByb2dyZXNzXCIgW3N0eWxlLndpZHRoXT1cImxvYWRlclByb2dyZXNzICsgJyUnXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0VsZW1lbnRUb29sYmFyXCI+XHJcbiAgPHJwLWVsZW1lbnQtdG9vbGJhciBjbGFzcz1cInJwLWVsZW1lbnQtdG9vbGJhciBmbG9hdGluZ1wiIFtjbGFzcy5jdXN0b21dPVwic3RhbmRBbG9uZVwiIEBzaG93RWxlbWVudFRvb2xiYXJcclxuICAgICAgICAgICAgICAgICAgICAgIFtlZGl0TWVudV09XCJlZGl0RWxlbWVudE1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dTd2FwXT1cInNob3dTd2FwQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93UG9pbnRlcl09XCJzZWxlY3RlZEVsZW1lbnRQb3NpdGlvbiAhPT0gdW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChzd2FwQ2xpY2tlZCk9XCJzd2FwRWxlbWVudCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVDbGlja2VkKT1cImRlbGV0ZUVsZW1lbnQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoYW5pbWF0aW9uQ2xpY2tlZCk9XCJvcGVuQW5pbWF0aW9uU2lkZWJhcigpXCJcclxuICA+PC9ycC1lbGVtZW50LXRvb2xiYXI+XHJcbiAgPHJwLWVsZW1lbnQtYnV0dG9ucyBjbGFzcz1cInJwLWVsZW1lbnQtYnV0dG9ucyBmbG9hdGluZ1wiIFtjbGFzcy5hbmltYXRlXT1cImFuaW1hdGVFZGl0QWRkQnV0dG9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZWxlbWVudFBvaW50ZXJdPVwiZWxlbWVudFRvb2xiYXI/LmVsZW1lbnRQb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthZGRCdXR0b25zXT1cImVkaXRBZGRCdXR0b25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21pemVCdXR0b25zXT1cImVkaXRDdXN0b21pemVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3Jlc2l6ZUJ1dHRvbnNdPVwicmVzaXplQnV0dG9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZWxlbWVudFBvc2l0aW9uXT1cInNlbGVjdGVkRWxlbWVudFBvc2l0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjdXN0b21pemVCdXR0b25DbGlja2VkKT1cImhhbmRsZUN1c3RvbWl6ZUNsaWNrKClcIlxyXG4gID48L3JwLWVsZW1lbnQtYnV0dG9ucz5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0N1c3RvbWl6ZUJ1dHRvbnNcIj5cclxuICA8cnAtZWxlbWVudC1idXR0b25zIGNsYXNzPVwicnAtZWxlbWVudC1idXR0b25zIGZsb2F0aW5nXCIgW2NsYXNzLmFuaW1hdGVdPVwiYW5pbWF0ZUVkaXRBZGRCdXR0b25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtlbGVtZW50UG9pbnRlcl09XCJlbGVtZW50VG9vbGJhcj8uZWxlbWVudFBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbWl6ZUJ1dHRvbnNdPVwiZWRpdEN1c3RvbWl6ZUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZWxlbWVudFBvc2l0aW9uXT1cInNlbGVjdGVkRWxlbWVudFBvc2l0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjdXN0b21pemVCdXR0b25DbGlja2VkKT1cImhhbmRsZUN1c3RvbWl6ZUNsaWNrKClcIlxyXG4gID48L3JwLWVsZW1lbnQtYnV0dG9ucz5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uTW9kZWxzPlxyXG4gIDxycC10b29sYmFyLWljb25cclxuICAgIG1hdEljb249XCJsaXN0XCJcclxuICAgIHRvb2x0aXA9XCJ7e2ljb25OYW1lLk9iamVjdHMgfCBsb2NhbGl6ZX19XCJcclxuICAgIChvbkNsaWNrKT1cInNldE1vZGVsRXJyb3JEaWFsb2coKVwiXHJcbiAgICBbc2hvd0xhYmVsXT1cInNob3VsZFNob3dMYWJlbFwiXHJcbiAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzZWxlY3RlZFRocmVlZE9iamVjdEFuaW1hdGlvblNpZGViYXI+XHJcbiAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIiBbdGV4dENvbnRlbnRdPVwiJ0FOSU1BVEUnIHwgbG9jYWxpemVcIj48L2gyPlxyXG4gIDwvaGVhZGVyPlxyXG4gIDxycC1hbmltYXRpb24+XHJcblxyXG4gIDwvcnAtYW5pbWF0aW9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzZWxlY3RlZFRocmVlZE9iamVjdEN1c3RvbWl6YXRpb25TaWRlYmFyPlxyXG4gIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCIgW3RleHRDb250ZW50XT1cIidDVVNUT01JWkUnIHwgbG9jYWxpemVcIj48L2gyPlxyXG4gIDwvaGVhZGVyPlxyXG4gIDxycC1jdXN0b21pemVyXHJcbiAgICBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblRvQ3VzdG9taXplXCJcclxuICA+PC9ycC1jdXN0b21pemVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIj5cclxuICA8cnAtZWxlbWVudC1zbGlkZXIgY2xhc3M9XCJycC1lbGVtZW50LXNsaWRlclwiPjwvcnAtZWxlbWVudC1zbGlkZXI+XHJcbjwvZGl2PlxyXG4iXX0=