@colijnit/homedecorator 255.1.2 → 255.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/core/model/homedecorator-settings-options.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -2
- package/app/core/service/homedecorator-connector.service.d.ts +2 -2
- package/app/core/service/utils.service.d.ts +1 -0
- package/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.scss +2 -4
- package/app/plugins/core3d/items/floor-plane-item.d.ts +8 -1
- package/app/plugins/core3d/items/metadata.d.ts +2 -0
- package/app/plugins/core3d/service/ar.service.d.ts +1 -0
- package/app/plugins/core3d/service/floor-pattern.service.d.ts +26 -0
- package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +25 -0
- package/app/plugins/core3d/service/outline.service.d.ts +1 -2
- package/app/plugins/core3d/service/post-processing.service.d.ts +6 -0
- package/app/plugins/core3d/service/scene.service.d.ts +4 -1
- package/app/plugins/core3d/service/ssr.service.d.ts +19 -0
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +40 -3
- package/app/plugins/render/service/new-render.service.d.ts +1 -0
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +10 -1
- package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +1 -0
- package/app/plugins/toolbar/toolbar.module.d.ts +2 -1
- package/app/shared/pdf-export/pdf-export.component.d.ts +20 -0
- package/app/shared/pdf-export/pdf-export.component.scss +19 -0
- package/app/shared/pdf-export/pdf-export.module.d.ts +11 -0
- package/assets/icons/xmark_regular.svg +1 -0
- package/bundles/colijnit-homedecorator.umd.js +1406 -295
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +4 -4
- package/esm2015/app/core/model/homedecorator-settings-options.js +2 -1
- package/esm2015/app/core/model/light-preset.js +11 -7
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +6 -8
- package/esm2015/app/core/service/homedecorator-connector.service.js +7 -5
- package/esm2015/app/core/service/utils.service.js +16 -1
- package/esm2015/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.js +2 -2
- package/esm2015/app/plugins/core3d/components/scene-options/scene-options.component.js +63 -3
- package/esm2015/app/plugins/core3d/items/floor-plane-item.js +25 -2
- package/esm2015/app/plugins/core3d/items/metadata.js +1 -1
- package/esm2015/app/plugins/core3d/service/ar.service.js +14 -1
- package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +156 -0
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +122 -0
- package/esm2015/app/plugins/core3d/service/floor.service.js +5 -2
- package/esm2015/app/plugins/core3d/service/outline.service.js +9 -8
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +77 -22
- package/esm2015/app/plugins/core3d/service/scene.service.js +30 -13
- package/esm2015/app/plugins/core3d/service/ssr.service.js +104 -0
- package/esm2015/app/plugins/lite-selector/lite-selector/component/selections-summary/selections-summary.component.js +3 -3
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +339 -79
- package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +3 -2
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +3 -2
- package/esm2015/app/plugins/render/service/new-render.service.js +37 -13
- package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +2 -2
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +135 -5
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +35 -9
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +9 -25
- package/esm2015/app/plugins/toolbar/toolbar.module.js +8 -4
- package/esm2015/app/shared/pdf-export/pdf-export.component.js +86 -0
- package/esm2015/app/shared/pdf-export/pdf-export.module.js +38 -0
- package/fesm2015/colijnit-homedecorator.js +1385 -295
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +3 -3
|
@@ -669,7 +669,7 @@ export class RoomPlannerComponent {
|
|
|
669
669
|
if (object.metadata) {
|
|
670
670
|
this.showContextMenu = false;
|
|
671
671
|
yield this._connectorAdapterService.initConnector(object.metadata.externalSettings ? object.metadata.externalSettings.settings : this.settingsService.settings, object.metadata.externalSettings ? object.metadata.externalSettings.name : undefined, false, object.metadata.externalSettings && object.metadata.externalSettings.externalSource ? object.metadata.externalSettings.externalSource.sourceId : null);
|
|
672
|
-
const json = yield this._connectorService.addToCart(+object.metadata.goodId, object.metadata.goodType, 1, +object.metadata.itemId);
|
|
672
|
+
const json = yield this._connectorService.addToCart(+object.metadata.goodId, object.metadata.goodType, 1, +object.metadata.itemId, !!(object.metadata.externalSettings && object.metadata.externalSettings.externalSource));
|
|
673
673
|
if (object.metadata.externalSettings) {
|
|
674
674
|
const externalSource = {
|
|
675
675
|
article: json,
|
|
@@ -1692,4 +1692,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
1692
1692
|
type: HostListener,
|
|
1693
1693
|
args: ['document:keydown', ['$event']]
|
|
1694
1694
|
}] } });
|
|
1695
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS1wbGFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvcm9vbS1wbGFubmVyL3Jvb20tcGxhbm5lci9yb29tLXBsYW5uZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFckMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHM0QsT0FBTyxFQUNMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsVUFBVSxFQUNYLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFtQixVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBb0J4RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFJakUsT0FBTyxFQUFD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QUFJLEVBQUM7Z0JBQ0MsY0FBYztzQkFBMUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ1MscUJBQXFCO3NCQUF4RSxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDQSxtQkFBbUI7c0JBQXBFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNVLDJCQUEyQjtzQkFBcEYsU0FBUzt1QkFBQyw2QkFBNkIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0wsb0JBQW9CO3NCQUF0RSxTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDSixjQUFjO3NCQUExRCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDTyxtQkFBbUI7c0JBQXBFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNGLGVBQWU7c0JBQTVELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUV0QixVQUFVO3NCQUEvQixXQUFXO3VCQUFDLE9BQU87Z0JBQ1gsU0FBUztzQkFBakIsS0FBSztnQkFFSSxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQWtGQSxnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0V1bGVyLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7UGx1Z2luSW50ZXJmYWNlfSBmcm9tICcuLi8uLi9wbHVnaW4taW50ZXJmYWNlJztcclxuaW1wb3J0IHtGbG9vcnBsYW5uZXJDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL2Zsb29ycGxhbm5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtJY29uTmFtZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2ljb24tbmFtZS5lbnVtJztcclxuaW1wb3J0IHtWaWV3TW9kZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL3ZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IHtUaHJlZWRNb2RlbH0gZnJvbSAnLi4vLi4vY29yZTNkL21vZGVsL3RocmVlZC1tb2RlbCc7XHJcbmltcG9ydCB7Q2F0ZWdvcnl9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvY2F0ZWdvcnknO1xyXG5pbXBvcnQge1xyXG4gIGlzQ3VzdG9tQ3lsaW5kZXJUeXBlLFxyXG4gIGlzQ3VzdG9tQ3lsaW5kZXJXYWxsVHlwZSxcclxuICBpc0N1c3RvbVNoYXBlVHlwZSxcclxuICBpc0N1c3RvbVNoYXBlV2FsbFR5cGUsXHJcbiAgaXNGdXJuaXR1cmVUeXBlLFxyXG4gIGlzV2FsbFR5cGVcclxufSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvZmFjdG9yeSc7XHJcbmltcG9ydCB7Q29ybmVyLCBIYWxmRWRnZSwgSW5XYWxsSXRlbSwgUm9vbSwgV2FsbCwgV2FsbEl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy93YWxsLW9iamVjdHMnO1xyXG5pbXBvcnQge0l0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtJztcclxuaW1wb3J0IHtJdGVtR3JvdXB9IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9pdGVtLWdyb3VwJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItaWNvbi1jYWNoZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS92aWV3LW1vZGUuc2VydmljZSc7XHJcbmltcG9ydCB7TW9kZWxzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvbW9kZWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByZXNldHNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvcHJlc2V0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjcmVlblNpemVBbmFseXNpc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zY3JlZW4tc2l6ZS1hbmFseXNpcy9zY3JlZW4tc2l6ZS1hbmFseXNpcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vcnBsYW5TZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL2Zsb29ycGxhbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0h1ZFNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2h1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtSb29tU2VydmljZX0gZnJvbSAnLi4vY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NhbWVyYVNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvaXRlbS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJdGVtU2VyaWFsaXphdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9pdGVtLXNlcmlhbGl6YXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7TGlnaHRzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvbGlnaHRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FyU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvYXIuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbktleX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2NvbmZpZ3VyYXRpb24ta2V5LmVudW0nO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1NlbGVjdGVkV2FsbEV2ZW50fSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC13YWxsLWV2ZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7U2VsZWN0ZWRGbG9vckV2ZW50fSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC1mbG9vci1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1NjcmVlblNpemVJbmZvfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2NyZWVuLXNpemUtYW5hbHlzaXMvc2NyZWVuLXNpemUtaW5mbyc7XHJcbmltcG9ydCB7Q3VzdG9tU2hhcGVGbG9vckl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tc2hhcGUtZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7Q3VzdG9tU2hhcGVXYWxsSXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1zaGFwZS13YWxsLWl0ZW0nO1xyXG5pbXBvcnQge0N1c3RvbUN5bGluZGVyRmxvb3JJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLWN5bGluZGVyLWZsb29yLWl0ZW0nO1xyXG5pbXBvcnQge0N1c3RvbUN5bGluZGVyV2FsbEl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tY3lsaW5kZXItd2FsbC1pdGVtJztcclxuaW1wb3J0IHtEcmFnZ2VkRGF0YX0gZnJvbSAnLi4vLi4vY29yZTNkL2ludGVyZmFjZS9kcmFnZ2VkLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtUZXh0dXJlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RleHR1cmUnO1xyXG5pbXBvcnQge0luZm9EaWFsb2dDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbmZvLWRpYWxvZy9pbmZvLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge01vZGVsSW50ZXJmYWNlfSBmcm9tICcuLi8uLi9jb3JlM2QvaW50ZXJmYWNlL21vZGVsLmludGVyZmFjZSc7XHJcbmltcG9ydCB7S2V5fSBmcm9tICcuLi9jb25zdC9rZXknO1xyXG5pbXBvcnQge0Zsb29yUGxhbmVJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGxhbmUtaXRlbSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvZ29vZ2xlLXRhZy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Blcm1hbmVudFN0b3JlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3Blcm1hbmVudC1zdG9yZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDdXN0b21CdXR0b259IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvY3VzdG9tLWJ1dHRvbic7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcEV2ZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtFeHRlcm5hbFNvdXJjZUFydGljbGVBZGRJbnRlcmZhY2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2ludGVyZmFjZS9leHRlcm5hbC1zb3VyY2UtYXJ0aWNsZS1hZGQuaW50ZXJmYWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnAtcm9vbS1wbGFubmVyJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgICA8ZGl2IGNsYXNzPVwiUm9vbVBsYW5uZXJcIj5cclxuICAgICAgICAgIDxmbG9vci1wbGFubmVyXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiIXZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkV2FsbENoYW5nZSk9XCJzZWxlY3RXYWxsKCRldmVudClcIj48L2Zsb29yLXBsYW5uZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPHJwLWNvbnRleHQtbWVudVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpICYmIHNob3dDb250ZXh0TWVudSAmJiBzZWxlY3RlZFdhbGxcIlxyXG4gICAgICAgICAgICAgIFtvcGVuTW91c2VFdmVudF09XCJjb250ZXh0TWVudU1vdXNlRXZlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS13cmFwIFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInNob3dTZWxlY3RlZFdhbGxTaWRlYmFyKClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiIHN2Z0ljb249XCJtYWdpYy13YW5kXCI+PC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnQ09ORklHVVJFJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvcnAtY29udGV4dC1tZW51PlxyXG5cclxuICAgICAgPHJwLWNvbnRleHQtbWVudVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpICYmIHNob3dDb250ZXh0TWVudSAmJiBzZWxlY3RlZEZsb29yXCJcclxuICAgICAgICAgICAgICBbb3Blbk1vdXNlRXZlbnRdPVwiY29udGV4dE1lbnVNb3VzZUV2ZW50XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInNob3dTZWxlY3RlZEZsb29yU2lkZWJhcigpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCIgc3ZnSWNvbj1cIm1hZ2ljLXdhbmRcIj48L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDT05GSUdVUkUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9ycC1jb250ZXh0LW1lbnU+XHJcblxyXG4gICAgICA8cnAtaXRlbS1jb250ZXh0LW1lbnVcclxuICAgICAgICAgICAgICAqbmdJZj1cIiF2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSAmJiBzaG93Q29udGV4dE1lbnUgJiYgIXNob3dHcm91cE1lbnVcIlxyXG4gICAgICAgICAgICAgIFtpdGVtXT1cInNlbGVjdGVkT2JqZWN0XCJcclxuICAgICAgICAgICAgICAoZGVsZXRlUHJlc3NlZCk9XCJoYW5kbGVEZWxldGVPYmplY3QoKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LXdyYXBcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtY2xvc2VcIiAoY2xpY2spPVwiY2xvc2VDb250ZXh0TWVudSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2xvc2UtaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jbG9zZTwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLnNlbGVjdGVkT2JqZWN0XCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPHA+e3sgdGhpcy5zZWxlY3RlZE9iamVjdC5uYW1lIH19PC9wPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93U2V0dGluZ3NCdXR0b25cIiAoY2xpY2spPVwic2hvd1NlbGVjdGVkT2JqZWN0U2lkZWJhcigpXCJcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbSBcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiIHN2Z0ljb249XCJtYWdpYy13YW5kXCI+PC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnQ09ORklHVVJFJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q29uZmlndXJhdGlvbkJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjdXN0b21CdXR0b24gb2YgbW9kZWxzU2VydmljZS5jdXN0b21CdXR0b25zXCIgKGNsaWNrKT1cImhhbmRsZUNvbmZpZ3VyYXRpb25CdXR0b25DbGljayhjdXN0b21CdXR0b24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0gXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29uLk1hZ2ljV2FuZClcIj48L2NvLWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDT05GSUdVUkUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93Q29weUJ1dHRvblwiIChjbGljayk9XCJjb3B5U2VsZWN0ZWRPYmplY3QoKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+ZmlsZV9jb3B5PC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnQ09QWScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZUJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVTZWxlY3RlZE9iamVjdCgpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5kZWxldGU8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdSRU1PVkUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dDb25maWd1cmF0aW9uQnV0dG9uXCIgKGNsaWNrKT1cInNob3dTZWxlY3RlZFRocmVlZE9iamVjdFNpZGViYXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPnNldHRpbmdzPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnU0VUVElOR1MnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dMb2NrQnV0dG9uICYmIHNlbGVjdGVkT2JqZWN0XCIgKGNsaWNrKT1cInRvZ2dsZUxvY2tTZWxlY3RlZE9iamVjdCgpXCJcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCIgW3RleHRDb250ZW50XT1cInNlbGVjdGVkT2JqZWN0LmxvY2tlZCA/ICdsb2NrJyA6ICdsb2NrX29wZW4nXCI+PC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAoc2VsZWN0ZWRPYmplY3QubG9ja2VkID8gJ1VOTE9DSycgOiAnTE9DSycpIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzaG93R3JvdXBFZGl0TWVudUJ1dHRvbnNcIiAoY2xpY2spPVwic3RhcnRHcm91cFNlbGVjdGlvbigpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5saW5rPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnR1JPVVAnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93Q29udmVyc2lvbkJ1dHRvbiAmJiBzZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2hvd0NvbnZlcnNpb25CdXR0b25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZW5kQ29udmVyc2lvblRvVGFnTWFuYWdlcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJhZGRTZWxlY3RlZENsYXNzID8gJ2NvbnZlcnNpb24tYnV0dG9uLXNlbGVjdGVkJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5hZGRfc2hvcHBpbmdfY2FydDwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPTlZFUlNJT04nIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpY29uLXNlbGVjdGVkXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dBUkJ1dHRvblwiIChjbGljayk9XCJzdGFydEFSU2Vzc2lvbigpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj53ZWVrZW5kPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnQVInIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbi1lbGV2YXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRPYmplY3QgJiYgc2VsZWN0ZWRPYmplY3QuZWxldmF0aW9uQWRqdXN0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJzZWxlY3RlZE9iamVjdFwiPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uLWVsZXZhdGlvbj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2FsYWJsZU9iamVjdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2xiYXJfX2RpdmlkZXIgY29udGV4dC1tZW51XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJhZGRUb0NhcnQoc2VsZWN0ZWRPYmplY3QpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtIGFkZC10by1jYXJ0LWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIiBbc3ZnSWNvbl09XCInY2FydC1zaG9wcGluZy1yZWd1bGFyJ1wiPjwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnQUREX1RPX0NBUlQnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3JwLWl0ZW0tY29udGV4dC1tZW51PlxyXG5cclxuICAgICAgPHJwLWl0ZW0tY29udGV4dC1tZW51ICpuZ0lmPVwiIXZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpICYmIHNob3dDb250ZXh0TWVudSAmJiBzaG93R3JvdXBNZW51ICYmICF1c2VySXNHcm91cGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJzZWxlY3RlZE9iamVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVsZXRlUHJlc3NlZCk9XCJoYW5kbGVEZWxldGVPYmplY3QoKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LXdyYXBcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dHcm91cEVkaXRNZW51QnV0dG9uc1wiIChjbGljayk9XCJvbkdyb3VwQ2xpY2soKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+bGluazwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0dST1VQJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R3JvdXBFZGl0TWVudUJ1dHRvbnNcIiAoY2xpY2spPVwib25Vbkdyb3VwQ2xpY2soKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+bGlua19vZmY8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdVTkdST1VQJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R3JvdXBFZGl0TWVudUJ1dHRvbnNcIiAoY2xpY2spPVwicmVtb3ZlU2VsZWN0ZWRPYmplY3QoKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+ZGVsZXRlPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnUkVNT1ZFJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93TG9ja0J1dHRvbiAmJiBzZWxlY3RlZE9iamVjdCAmJiBzaG93R3JvdXBFZGl0TWVudUJ1dHRvbnNcIiAoY2xpY2spPVwidG9nZ2xlTG9ja1NlbGVjdGVkT2JqZWN0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIiBbdGV4dENvbnRlbnRdPVwic2VsZWN0ZWRPYmplY3QubG9ja2VkID8gJ2xvY2snIDogJ2xvY2tfb3BlbidcIj48L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IChzZWxlY3RlZE9iamVjdC5sb2NrZWQgPyAnVU5MT0NLJyA6ICdMT0NLJykgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3JwLWl0ZW0tY29udGV4dC1tZW51PlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0b29sYmFySWNvbkxpYnJhcnk+XHJcbiAgICAgICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSB8fCB2aWV3TW9kZVNlcnZpY2UuaXNXYWxrVGhyb3VnaFZpZXdBY3RpdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgIG1hdEljb249XCJob21lXCJcclxuICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7aWNvbk5hbWUuQXJjaGl0ZWN0dXJlIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNob3dMaWJyYXJ5Q2F0ZWdvcmllcygpXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICAgICAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0b29sYmFySWNvbkFjY2Vzc29pcmVzPlxyXG4gICAgICAgICAgPHJwLXRvb2xiYXItaWNvblxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgfHwgdmlld01vZGVTZXJ2aWNlLmlzV2Fsa1Rocm91Z2hWaWV3QWN0aXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRJY29uPVwibG9jYWxfZmxvcmlzdFwiXHJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e2ljb25OYW1lLkFjY2Vzc29yaWVzIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNob3dBY2Nlc3NvaXJlQ2F0ZWdvcmllcygpXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICAgICAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0b29sYmFySWNvbjJkVmlldz5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbGJhcl9fZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxycC10b29sYmFyLWljb25cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgICAgICAgICAgICAgc3ZnSWNvbj1cImN1YmUtdW5mb2xkZWRcIlxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3tpY29uTmFtZS5Ud29kRmxvb3JwbGFuIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSB8fCAhZGVza3RvcFNpemVTY3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJ1cGRhdGVNb2RlKHZpZXdNb2Rlcy5GbG9vclBsYW4yRCwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uM2RWaWV3PlxyXG4gICAgICAgICAgPHJwLXRvb2xiYXItaWNvblxyXG4gICAgICAgICAgICAgICAgICBzdmdJY29uPVwiY3ViZS1vdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7aWNvbk5hbWUuVGhyZWVkUm9vbXBsYW4gfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInZpZXdNb2RlU2VydmljZS5pczNkVmlld0FjdGl2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidXBkYXRlTW9kZSh2aWV3TW9kZXMuUm9vbVBsYW4zRCwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8cnAtem9vbS1jb250cm9sc1xyXG4gICAgICAgICAgICAgIFt2aXNpYmxlXT1cInZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpXCJcclxuICAgICAgICAgICAgICAob25ab29tSW4pPVwiem9vbUluKClcIlxyXG4gICAgICAgICAgICAgIChvblpvb21SZXNldCk9XCJ6b29tUmVzZXQoKVwiXHJcbiAgICAgICAgICAgICAgKG9uWm9vbU91dCk9XCJ6b29tT3V0KClcIlxyXG4gICAgICA+PC9ycC16b29tLWNvbnRyb2xzPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0b29sYmFySWNvblNldHRpbmdzPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sYmFyX19kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHJwLXRvb2xiYXItaWNvblxyXG4gICAgICAgICAgICAgICAgICBtYXRJY29uPVwic2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3tpY29uTmFtZS5TZXR0aW5ncyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJzaG93U2V0dGluZ3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93TGFiZWxdPVwicGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbGJhckljb25GYXE+XHJcbiAgICAgICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ZhcSgpXCJcclxuICAgICAgICAgICAgICAgICAgbWF0SWNvbj1cImhlbHBcIlxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3tpY29uTmFtZS5GYXEgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib3BlbkZhcSh0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5mYXFVcmwpXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICAgICAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0b29sYmFySWNvbkZlZWRiYWNrPlxyXG4gICAgICAgICAgPHJwLXRvb2xiYXItaWNvblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGZWVkYmFjaygpXCJcclxuICAgICAgICAgICAgICAgICAgbWF0SWNvbj1cImNoYXRfYnViYmxlXCJcclxuICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7aWNvbk5hbWUuRmVlZGJhY2sgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib3BlbkZlZWRiYWNrKHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmZlZWRiYWNrVXJsKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93TGFiZWxdPVwicGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0b29sYmFySWNvbkNhcnQ+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2xiYXJfX2RpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICA8cnAtdG9vbGJhci1pY29uIGNsYXNzPVwiYWRkLXRvLWNhcnQtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgc3ZnSWNvbj1cImNhcnQtc2hvcHBpbmctcmVndWxhclwiXHJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eydBRERfVE9fQ0FSVCcgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWRkQWxsVG9DYXJ0KClcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2xiYXJfX2RpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3NldHRpbmdzU2lkZWJhcj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdTRVRUSU5HUycgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgIDxycC1zZXR0aW5nc1xyXG4gICAgICAgICAgICAgICAgICBbcGxhY2VDYW1lcmFEaXNhYmxlZF09XCJ2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSB8fCBpdGVtU2VydmljZS5nZXRXYWxrdGhyb3VnaENhbWVyYSgpXCJcclxuICAgICAgICAgICAgICAgICAgW21pbldhbGxIZWlnaHRdPVwiZ2V0TWluR2xvYmFsV2FsbEhlaWdodCgpXCJcclxuICAgICAgICAgICAgICAgICAgKG9uV2FsbHNIZWlnaHRVcGRhdGUpPVwid2FsbHNIZWlnaHRVcGRhdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9ycC1zZXR0aW5ncz5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjY2F0ZWdvcmllc1NpZGViYXI+XHJcbiAgICAgICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyAnQVJDSElURUNUVVJFJyB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgPHJwLWNhdGVnb3J5LWxpYnJhcnlcclxuICAgICAgICAgICAgICAgICAgW2NhdGVnb3JpZXNdPVwiY2F0ZWdvcmllc1wiXHJcbiAgICAgICAgICAgICAgICAgIChjYXRlZ29yeUNsaWNrKT1cInNob3dMaWJyYXJ5Q2F0ZWdvcnkoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3JwLWNhdGVnb3J5LWxpYnJhcnk+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2FjY2Vzc29pcmVzQ2F0ZWdvcmllc1NpZGViYXI+XHJcbiAgICAgICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyAnQUNDRVNTT0lSRVMnIHwgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICA8cnAtY2F0ZWdvcnktbGlicmFyeVxyXG4gICAgICAgICAgICAgICAgICBbY2F0ZWdvcmllc109XCJhY2Nlc3NvaXJlQ2F0ZWdvcmllc1wiXHJcbiAgICAgICAgICAgICAgICAgIChjYXRlZ29yeUNsaWNrKT1cInNob3dMaWJyYXJ5Q2F0ZWdvcnkoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3JwLWNhdGVnb3J5LWxpYnJhcnk+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbVNoYXBlQ3JlYXRvclNpZGVCYXI+XHJcbiAgICAgICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyAnQ1VTVE9NX1NIQVBFX0NSRUFUT1InIHwgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICA8cnAtY3VzdG9tLXNoYXBlLWNyZWF0b3IgW3NoYXBlXT1cInNlbGVjdGVkT2JqZWN0XCI+PC9ycC1jdXN0b20tc2hhcGUtY3JlYXRvcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tQ3lsaW5kZXJDcmVhdG9yU2lkZUJhcj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdDVVNUT01fU0hBUEVfQ1JFQVRPUicgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgIDxjdXN0b20tY3lsaW5kZXItY3JlYXRvciBbc2hhcGVdPVwic2VsZWN0ZWRPYmplY3RcIj48L2N1c3RvbS1jeWxpbmRlci1jcmVhdG9yPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNsaWJyYXJ5U2lkZWJhcj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cIndpdGgtc2Nyb2xsYWJsZS1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzaG93QWN0aXZlQ2F0ZWdvcnlTaWRlYmFyKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5hcnJvd19iYWNrX2lvczwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyBzZWxlY3RlZENhdGVnb3J5Lm5hbWUgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYXQtYm9keVwiICpuZ0lmPVwic2VsZWN0ZWRDYXRlZ29yeS5kZXNjcmlwdGlvblwiPnt7IHNlbGVjdGVkQ2F0ZWdvcnkuZGVzY3JpcHRpb24gfCBsb2NhbGl6ZSB9fTwvcD5cclxuICAgICAgICAgICAgICA8c2VjdGlvbiBmeEZsZXg9XCJncm93XCIgKm5nSWY9XCJsaWJyYXJ5T2JqZWN0cz8ubGVuZ3RoID4gMCB8fCBoYXNDdXN0b21PYmplY3RzKClcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0N1c3RvbU9iamVjdHMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMlwiPnt7ICdDVVNUT00nIHwgbG9jYWxpemUgfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHJwLW9iamVjdC1saWJyYXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvYmplY3RzXT1cImN1c3RvbU9iamVjdHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0RHJhZ2dlZCk9XCJzZXREcmFnZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVsZWFzZURyYWdnZWQpPVwicmVsZWFzZURyYWdnZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbk9iamVjdENsaWNrKT1cIm9uT2JqZWN0TGlicmFyeUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9ycC1vYmplY3QtbGlicmFyeT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpYnJhcnlPYmplY3RzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+e3sgJ0xJQlJBUlknIHwgbG9jYWxpemUgfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHJwLW9iamVjdC1saWJyYXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvYmplY3RzXT1cImxpYnJhcnlPYmplY3RzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldERyYWdnZWQpPVwic2V0RHJhZ2dlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbGVhc2VEcmFnZ2VkKT1cInJlbGVhc2VEcmFnZ2VkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25PYmplY3RDbGljayk9XCJvbk9iamVjdExpYnJhcnlDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcnAtb2JqZWN0LWxpYnJhcnk+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNzZWxlY3RlZE9iamVjdFNpZGViYXI+XHJcbiAgICAgICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eyAnT0JKRUNUJyB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgPHJwLXNlbGVjdGVkLW9iamVjdFxyXG4gICAgICAgICAgICAgICAgICBbb2JqZWN0XT1cInNlbGVjdGVkT2JqZWN0XCJcclxuICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0ZWRPYmplY3RDaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRPYmplY3RIdWQoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3JwLXNlbGVjdGVkLW9iamVjdD5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0ZWRXYWxsU2lkZWJhcj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdXQUxMJ3wgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICA8cnAtc2VsZWN0ZWQtd2FsbFxyXG4gICAgICAgICAgICAgICAgICBbd2FsbF09XCJzZWxlY3RlZFdhbGxcIlxyXG4gICAgICAgICAgICAgICAgICBbdGV4dHVyZVBsYW5lXT1cInNlbGVjdGVkRWRnZXNbMF1cIlxyXG4gICAgICAgICAgICAgICAgICBbbWluV2FsbEhlaWdodF09XCJnZXRNaW5XYWxsSGVpZ2h0KHNlbGVjdGVkV2FsbClcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF4V2FsbEhlaWdodF09XCJtYXhXYWxsSGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgW21heFdhbGxUaGlja25lc3NdPVwibWF4V2FsbFRoaWNrbmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgIFttYXhXYWxsTGVuZ3RoXT1cIm1heFdhbGxMZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICBbbWluV2FsbExlbmd0aF09XCJtaW5XYWxsTGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVXYWxsKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2V0TGVuZ3RoKT1cInNldFdhbGxMZW5ndGgoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzZXRIZWlnaHQpPVwic2V0V2FsbEhlaWdodCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNldFRoaWNrbmVzcyk9XCJzZXRXYWxsVGhpY2tuZXNzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0Q29ybmVyKT1cInNlbGVjdENvcm5lcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNldFRleHR1cmUpPVwic2V0V2FsbFRleHR1cmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzZXRDb2xvcik9XCJzZXRXYWxsQ29sb3IoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3JwLXNlbGVjdGVkLXdhbGw+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3NlbGVjdGVkVGhyZWVkT2JqZWN0U2lkZWJhcj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiIFt0ZXh0Q29udGVudF09XCInU0VUVElOR1MnIHwgbG9jYWxpemVcIj48L2gyPlxyXG4gICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICA8cnAtc2VsZWN0ZWQtdGhyZWVkLW9iamVjdFxyXG4gICAgICAgICAgICAgICAgICBbb2JqZWN0XT1cInNlbGVjdGVkT2JqZWN0XCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dDb3B5XT1cInNob3dDb3B5QnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dEZWxldGVdPVwic2hvd0RlbGV0ZUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93TG9ja109XCJzaG93TG9ja0J1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgIChvblNlbGVjdGVkT2JqZWN0Q2hhbmdlKT1cInVwZGF0ZVNlbGVjdGVkT2JqZWN0SHVkKClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9ycC1zZWxlY3RlZC10aHJlZWQtb2JqZWN0PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNzZWxlY3RlZEZsb29yU2lkZWJhcj5cclxuICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdGTE9PUicgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgICAgICA8cnAtc2VsZWN0ZWQtZmxvb3JcclxuICAgICAgICAgICAgICAgICAgW2Zsb29yXT1cInNlbGVjdGVkRmxvb3JcIlxyXG4gICAgICAgICAgICAgICAgICBbdGV4dHVyZVBsYW5lXT1cInNlbGVjdGVkRmxvb3JcIlxyXG4gICAgICAgICAgICAgICAgICAoc2V0VGV4dHVyZSk9XCJzZXRGbG9vclRleHR1cmUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzZXRDb2xvcik9XCJzZXRGbG9vckNvbG9yKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRGbG9vckNsb3NlZCk9XCJzZWxlY3RlZEZsb29yID0gdW5kZWZpbmVkXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvcnAtc2VsZWN0ZWQtZmxvb3I+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LXdyYXAgbXJwLXNhdmUtZ3JvdXBpbmdcIiAqbmdJZj1cInVzZXJJc0dyb3VwaW5nXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiIChjbGljayk9XCJvbkdyb3VwQ2xpY2soKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jaGVjazwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnR1JPVVBJTkcnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCIgKGNsaWNrKT1cImNhbmNlbEdyb3VwU2VsZWN0aW9uKClcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+Y2FuY2VsPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDQU5DRUwnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZVVybHM6IFsnLi9yb29tLXBsYW5uZXIuY29tcG9uZW50LnNjc3MnXS8qLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoKi9cclxufSlcclxuZXhwb3J0IGNsYXNzIFJvb21QbGFubmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFBsdWdpbkludGVyZmFjZSB7XHJcbiAgQFZpZXdDaGlsZChGbG9vcnBsYW5uZXJDb21wb25lbnQsIHtzdGF0aWM6IHRydWV9KVxyXG4gIHB1YmxpYyBmbG9vcnBsYW5uZXI6IEZsb29ycGxhbm5lckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvbkxpYnJhcnknLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb25MaWJyYXJ5OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uQWNjZXNzb2lyZXMnLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb25BY2Nlc3NvaXJlczogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvblNldHRpbmdzJywge3N0YXRpYzogdHJ1ZX0pIHRvb2xiYXJJY29uU2V0dGluZ3M6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb24yZFZpZXcnLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb24yZFZpZXc6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb24zZFZpZXcnLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb24zZFZpZXc6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnY2F0ZWdvcmllc1NpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgY2F0ZWdvcmllc1NpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnYWNjZXNzb2lyZXNDYXRlZ29yaWVzU2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBhY2Nlc3NvaXJlc0NhdGVnb3JpZXNTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbVNoYXBlQ3JlYXRvclNpZGVCYXInLCB7c3RhdGljOiB0cnVlfSkgY3VzdG9tU2hhcGVDcmVhdG9yU2lkZUJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdjdXN0b21DeWxpbmRlckNyZWF0b3JTaWRlQmFyJywge3N0YXRpYzogdHJ1ZX0pIGN1c3RvbUN5bGluZGVyQ3JlYXRvclNpZGVCYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2V0dGluZ3NTaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNldHRpbmdzU2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdsaWJyYXJ5U2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBsaWJyYXJ5U2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RlZE9iamVjdFNpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgc2VsZWN0ZWRPYmplY3RTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGVkV2FsbFNpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgc2VsZWN0ZWRXYWxsU2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RlZFRocmVlZE9iamVjdFNpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgc2VsZWN0ZWRUaHJlZWRPYmplY3RTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGVkRmxvb3JTaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlbGVjdGVkRmxvb3JTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uRmFxJywge3N0YXRpYzogdHJ1ZX0pIHRvb2xiYXJJY29uRmFxOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uRmVlZGJhY2snLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb25GZWVkYmFjazogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvbkNhcnQnLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb25DYXJ0OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgbGF5ZXJDbGFzcyA9ICdsYXllcic7XHJcbiAgQElucHV0KCkgaXNMb2FkaW5nOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgZG9uZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2hvd1BsdWdpbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBmb2N1c0NvbnRyb2xzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwdWJsaWMgcmVhZG9ubHkgaWNvbjogdHlwZW9mIEljb25FbnVtID0gSWNvbkVudW07XHJcbiAgcHVibGljIHJlYWRvbmx5IGljb25OYW1lOiB0eXBlb2YgSWNvbk5hbWUgPSBJY29uTmFtZTtcclxuICBwdWJsaWMgcmVhZG9ubHkgdmlld01vZGVzOiB0eXBlb2YgVmlld01vZGUgPSBWaWV3TW9kZTtcclxuXHJcbiAgb2JqZWN0czogVGhyZWVkTW9kZWxbXTtcclxuICBjdXN0b21PYmplY3RzOiBUaHJlZWRNb2RlbFtdO1xyXG4gIGxpYnJhcnlPYmplY3RzOiBUaHJlZWRNb2RlbFtdO1xyXG4gIGNhdGVnb3JpZXM6IENhdGVnb3J5W107XHJcbiAgYWNjZXNzb2lyZUNhdGVnb3JpZXM6IENhdGVnb3J5W107XHJcbiAgc2VsZWN0ZWRDYXRlZ29yeTogQ2F0ZWdvcnk7XHJcbiAgc2hvd0NvbnRleHRNZW51OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgc2VsZWN0ZWRXYWxsOiBXYWxsO1xyXG4gIHNlbGVjdGVkRWRnZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkRmxvb3I6IEZsb29yUGxhbmVJdGVtO1xyXG4gIHNlbGVjdGVkUm9vbTogUm9vbTtcclxuICBzZWxlY3RlZE9iamVjdDogSXRlbSB8IEl0ZW1Hcm91cDtcclxuXHJcbiAgcHVibGljIHdhbGxMZW5ndGhJbmZvRGlhbG9nRW5hYmxlZCA9IHRydWU7XHJcbiAgcHVibGljIG1heFdhbGxIZWlnaHQ6IG51bWJlcjtcclxuICBwdWJsaWMgbWF4V2FsbFRoaWNrbmVzczogbnVtYmVyO1xyXG4gIHB1YmxpYyBtYXhXYWxsTGVuZ3RoOiBudW1iZXI7XHJcbiAgcHVibGljIG1pbldhbGxMZW5ndGg6IG51bWJlcjtcclxuICBwdWJsaWMgZGVza3RvcFNpemVTY3JlZW46IGJvb2xlYW47XHJcbiAgcHVibGljIHRhYmxldFNpemVTY3JlZW46IGJvb2xlYW47XHJcbiAgcHVibGljIHBob25lU2l6ZVNjcmVlbjogYm9vbGVhbjtcclxuICBwdWJsaWMgY29udGV4dE1lbnVNb3VzZUV2ZW50OiBNb3VzZUV2ZW50O1xyXG4gIHB1YmxpYyBzaG93U2V0dGluZ3NCdXR0b246IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dDb25maWd1cmF0aW9uQnV0dG9uOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzaG93RGVsZXRlQnV0dG9uOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzaG93TG9ja0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIHNob3dBUkJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIHNob3dDb3B5QnV0dG9uOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzaG93R3JvdXBNZW51OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dHcm91cEVkaXRNZW51QnV0dG9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93SWNvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VySXNHcm91cGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93Q29udmVyc2lvbkJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhZGRTZWxlY3RlZENsYXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNhbGFibGVPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9hY3RpdmVDYXRlZ29yeVNpZGViYXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwcml2YXRlIF9tb2RlID0gVmlld01vZGUuUm9vbVBsYW4zRDtcclxuICBwcml2YXRlIF9jYXRhbG9nSXNTaG93bjogYm9vbGVhbjtcclxuICBwcml2YXRlIF9ibG9ja0xlZnRTaWRlQmFyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGljb25TZXJ2aWNlOiBIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZSxcclxuICAgIHB1YmxpYyB2aWV3TW9kZVNlcnZpY2U6IFZpZXdNb2RlU2VydmljZSxcclxuICAgIHB1YmxpYyBtb2RlbHNTZXJ2aWNlOiBNb2RlbHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHJlc2V0c1NlcnZpY2U6IFByZXNldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwU2VydmljZTogSG9tZWRlY29yYXRvckFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY3JlZW5BbmFseXNpczogU2NyZWVuU2l6ZUFuYWx5c2lzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgX3V0aWxzU2VydmljZTogVXRpbHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF9jb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vcnBsYW5TZXJ2aWNlOiBGbG9vcnBsYW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9odWRTZXJ2aWNlOiBIdWRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJpYWxpemF0aW9uU2VydmljZTogSXRlbVNlcmlhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbGlnaHRzU2VydmljZTogTGlnaHRzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FyU2VydmljZTogQXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIGl0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9nb29nbGVUYWdNYW5hZ2VyOiBHb29nbGVUYWdNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Blcm1hbmVudFN0b3JlU2VydmljZTogUGVybWFuZW50U3RvcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwRXZlbnRTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29ubmVjdG9yU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3JBZGFwdGVyU2VydmljZTogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9wcmVzZXRzU2VydmljZS5yZWdpc3Rlcih0aGlzKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyBoYW5kbGVEb2NLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkRWRnZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFdhbGwgJiYgdGhpcy5zZWxlY3RlZEVkZ2UgP1xyXG4gICAgICBbdGhpcy5zZWxlY3RlZFdhbGxbdGhpcy5zZWxlY3RlZEVkZ2VdXSA6XHJcbiAgICAgIFt0aGlzLnNlbGVjdGVkV2FsbCAmJiB0aGlzLnNlbGVjdGVkV2FsbC5iYWNrRWRnZSxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkV2FsbCAmJiB0aGlzLnNlbGVjdGVkV2FsbC5mcm9udEVkZ2VcclxuICAgICAgXS5maWx0ZXIoZWRnZSA9PiBlZGdlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5tYXhXYWxsSGVpZ2h0ID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5NYXhXYWxsSGVpZ2h0KTtcclxuICAgIHRoaXMubWF4V2FsbFRoaWNrbmVzcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuTWF4V2FsbFRoaWNrbmVzcyk7XHJcbiAgICB0aGlzLm1heFdhbGxMZW5ndGggPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5Lk1heFdhbGxMZW5ndGgpO1xyXG4gICAgdGhpcy5taW5XYWxsTGVuZ3RoID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5NaW5XYWxsTGVuZ3RoKTtcclxuXHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb25MaWJyYXJ5LFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiAyMDBcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJJY29uQWNjZXNzb2lyZXMsXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDIwMFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb24yZFZpZXcsXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDQwMFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb24zZFZpZXcsXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDQwMFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb25TZXR0aW5ncyxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogNTAwXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbkZhcSxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogNjAwXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbkZlZWRiYWNrLFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiA3MDBcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJJY29uQ2FydCxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogMTAwMFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9hcHBTZXJ2aWNlLmNhdGVnb3JpZXNMb2FkZWQuc3Vic2NyaWJlKChjYXRlZ29yaWVzOiBDYXRlZ29yeVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGNhdGVnb3JpZXMpIHtcclxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IHRoaXMuX2FwcFNlcnZpY2UuZ2V0Q2F0ZWdvcmllcygnYXJjaGl0ZWN0dXJlJyk7XHJcbiAgICAgICAgICB0aGlzLmFjY2Vzc29pcmVDYXRlZ29yaWVzID0gdGhpcy5fYXBwU2VydmljZS5nZXRDYXRlZ29yaWVzKCdhY2Nlc3NvaXJlcycpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMudmlld01vZGVTZXJ2aWNlLnZpZXdNb2RlQ2hhbmdlZC5zdWJzY3JpYmUoKG1vZGU6IFZpZXdNb2RlKSA9PiB0aGlzLl92aWV3TW9kZUNoYW5nZWQobW9kZSkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU2V0MkRWaWV3LCAoe3NlbmRVcGRhdGVzfSkgPT4gdGhpcy51cGRhdGVNb2RlKFZpZXdNb2RlLkZsb29yUGxhbjJELCBzZW5kVXBkYXRlcykpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU2V0M0RWaWV3LCAoe3NlbmRVcGRhdGVzfSkgPT4gdGhpcy51cGRhdGVNb2RlKFZpZXdNb2RlLlJvb21QbGFuM0QsIHNlbmRVcGRhdGVzKSksXHJcbiAgICAgIHRoaXMuX2luaXRTY3JlZW5TaXplSGFuZGxpbmcoKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkdyb3VwTW9kZUNoYW5nZWQsICh7c2hvd0dyb3VwTWVudX0pID0+IHtcclxuICAgICAgICB0aGlzLnNob3dHcm91cE1lbnUgPSBzaG93R3JvdXBNZW51O1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkl0ZW1TZWxlY3RlZCwgKGl0ZW0pID0+IHRoaXMub2JqZWN0U2VsZWN0ZWQoaXRlbSkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuSXRlbVVuc2VsZWN0ZWQsIChpdGVtKSA9PiB0aGlzLm9iamVjdFVuc2VsZWN0ZWQoKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5MZWZ0U2lkZWJhckNsb3NlQ2xpY2tlZCwgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkV2FsbCA9IHVuZGVmaW5lZDtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlKSxcclxuICAgICAgdGhpcy5fcm9vbVNlcnZpY2Uud2FsbFNlbGVjdGVkLnN1YnNjcmliZSgoc2VsZWN0ZWRXYWxsRXZlbnQ6IFNlbGVjdGVkV2FsbEV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG9vcikge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTGVmdFNpZGViYXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmxvb3IgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0V2FsbChzZWxlY3RlZFdhbGxFdmVudCk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9yb29tU2VydmljZS5mbG9vclNlbGVjdGVkLnN1YnNjcmliZSgoc2VsZWN0ZWRGbG9vckV2ZW50OiBTZWxlY3RlZEZsb29yRXZlbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFdhbGwpIHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdhbGwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0Rmxvb3Ioc2VsZWN0ZWRGbG9vckV2ZW50KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmNvcHlJdGVtLnN1YnNjcmliZSgoaXRlbTogSXRlbSkgPT4gdGhpcy5fY29weUl0ZW0oaXRlbSkpLFxyXG4gICAgICB0aGlzLl9pdGVtU2VydmljZS5kZWxldGVJdGVtLnN1YnNjcmliZSgoaXRlbTogSXRlbSkgPT4gdGhpcy5fcmVtb3ZlT2JqZWN0KGl0ZW0pKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlNob3dQcm9kdWN0Q2F0YWxvZywgKCkgPT4gdGhpcy5fY2F0YWxvZ0lzU2hvd24gPSB0cnVlKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZywgKCkgPT4gdGhpcy5fY2F0YWxvZ0lzU2hvd24gPSBmYWxzZSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5CbG9ja0xlZnRTaWRlYmFyLCAoYmxvY2spID0+IHRoaXMuX2Jsb2NrTGVmdFNpZGVCYXIgPSBibG9jayksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TaG93RnVybml0dXJlU2lkZWJhciwgKGNhdGVnb3J5OiBDYXRlZ29yeSkgPT4gdGhpcy5zaG93TGlicmFyeUNhdGVnb3J5KGNhdGVnb3J5KSksXHJcbiAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5vYmplY3RNb3ZpbmdPclJvdGF0aW5nLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnNob3dBUkJ1dHRvbiA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd0FyQnV0dG9uICYmIGF3YWl0IHRoaXMuX2FyU2VydmljZS5hclN1cHBvcnRlZCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy50b29sYmFySWNvbkxpYnJhcnkgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvb2xiYXJJY29uQWNjZXNzb2lyZXMgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvb2xiYXJJY29uU2V0dGluZ3MgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvb2xiYXJJY29uMmRWaWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50b29sYmFySWNvbjNkVmlldyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuY2F0ZWdvcmllc1NpZGViYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmFjY2Vzc29pcmVzQ2F0ZWdvcmllc1NpZGViYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmN1c3RvbVNoYXBlQ3JlYXRvclNpZGVCYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmN1c3RvbUN5bGluZGVyQ3JlYXRvclNpZGVCYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNldHRpbmdzU2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMubGlicmFyeVNpZGViYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0U2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsU2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRUaHJlZWRPYmplY3RTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZsb29yU2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFNjcmVlblNpemVIYW5kbGluZygpOiBTdWJzY3JpcHRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NjcmVlbkFuYWx5c2lzLnNjcmVlblNpemVDaGFuZ2VkLnN1YnNjcmliZSgoaW5mbzogU2NyZWVuU2l6ZUluZm8pID0+IHtcclxuICAgICAgdGhpcy5kZXNrdG9wU2l6ZVNjcmVlbiA9IGluZm8uaXNEZXNrdG9wU2l6ZTtcclxuICAgICAgdGhpcy50YWJsZXRTaXplU2NyZWVuID0gaW5mby5pc1RhYmxldFNpemU7XHJcbiAgICAgIHRoaXMucGhvbmVTaXplU2NyZWVuID0gaW5mby5pc1Bob25lU2l6ZTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5kZXNrdG9wU2l6ZVNjcmVlbiAmJiAodGhpcy52aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSB8fCB0aGlzLnZpZXdNb2RlU2VydmljZS5pc1ZSVmlld0FjdGl2ZSgpKSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlTW9kZShWaWV3TW9kZS5Sb29tUGxhbjNELCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF92aWV3TW9kZUNoYW5nZWQobW9kZTogVmlld01vZGUpIHtcclxuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gIH1cclxuXHJcbiAgb2JqZWN0U2VsZWN0ZWQob2JqZWN0OiBJdGVtIHwgSXRlbUdyb3VwKSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNhbGFibGVPYmplY3QgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QgPSBvYmplY3Q7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBJdGVtR3JvdXApIHtcclxuICAgICAgdGhpcy5zaG93R3JvdXBNZW51ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zaG93R3JvdXBFZGl0TWVudUJ1dHRvbnMgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgSXRlbSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdC5tZXRhZGF0YSAmJiB0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhLmdvb2RJZCkge1xyXG4gICAgICAgIHRoaXMuc2FsYWJsZU9iamVjdCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zaG93R3JvdXBNZW51ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd1NldHRpbmdzQnV0dG9uID0gdGhpcy5faGFzU2V0dGluZ3ModGhpcy5zZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgIHRoaXMuc2hvd0NvbmZpZ3VyYXRpb25CdXR0b24gPSB0aGlzLl9pc0NvbmZpZ3VyYWJsZSh0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgdGhpcy5zaG93RGVsZXRlQnV0dG9uID0gdGhpcy5faXNEZWxldGFibGUodGhpcy5zZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgIHRoaXMuc2hvd0NvcHlCdXR0b24gPSB0aGlzLl9pc0NvcHlhYmxlKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICB0aGlzLnNob3dDb252ZXJzaW9uQnV0dG9uID0gdGhpcy5faXNDb252ZXJzaW9uSXRlbSh0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhLmNvbnZlcnNpb25HVE1TZW5kKSB7XHJcbiAgICAgICAgdGhpcy5hZGRTZWxlY3RlZENsYXNzID0gdGhpcy5zZWxlY3RlZE9iamVjdC5tZXRhZGF0YS5jb252ZXJzaW9uR1RNU2VuZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFkZFNlbGVjdGVkQ2xhc3MgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3V0aWxzU2VydmljZS5mb3JjZUNoYW5nZURldGVjdGlvbih0aGlzLl9jZCwgdGhpcywgJ3NlbGVjdGVkT2JqZWN0Jyk7XHJcbiAgICB0aGlzLnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBzaG93U2VsZWN0ZWRPYmplY3RTaWRlYmFyKCkge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nKTtcclxuXHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGE7XHJcbiAgICBpZiAobWV0YWRhdGEgJiYgKGlzQ3VzdG9tU2hhcGVUeXBlKG1ldGFkYXRhLml0ZW1UeXBlKSB8fCBpc0N1c3RvbVNoYXBlV2FsbFR5cGUobWV0YWRhdGEuaXRlbVR5cGUpKSkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLmN1c3RvbVNoYXBlQ3JlYXRvclNpZGVCYXIpO1xyXG4gICAgfSBlbHNlIGlmIChtZXRhZGF0YSAmJiAoaXNDdXN0b21DeWxpbmRlclR5cGUobWV0YWRhdGEuaXRlbVR5cGUpIHx8IGlzQ3VzdG9tQ3lsaW5kZXJXYWxsVHlwZShtZXRhZGF0YS5pdGVtVHlwZSkpKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuY3VzdG9tQ3lsaW5kZXJDcmVhdG9yU2lkZUJhcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLnNlbGVjdGVkT2JqZWN0U2lkZWJhcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlQ29uZmlndXJhdGlvbkJ1dHRvbkNsaWNrKGJ0bjogQ3VzdG9tQnV0dG9uKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgYnRuLmhhbmRsZXIodGhpcy5zZWxlY3RlZE9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBvYmplY3RVbnNlbGVjdGVkKCkge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5zaG93R3JvdXBNZW51ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dHcm91cEVkaXRNZW51QnV0dG9ucyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWRPYmplY3RIdWQoKSB7XHJcbiAgICB0aGlzLl9odWRTZXJ2aWNlLnVwZGF0ZVNlbGVjdGVkSXRlbUh1ZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZURlbGV0ZU9iamVjdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0ICYmIHRoaXMuX2lzRGVsZXRhYmxlKHRoaXMuc2VsZWN0ZWRPYmplY3QpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRPYmplY3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdGVkT2JqZWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuX3JlbW92ZU9iamVjdCh0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuICAgIHRoaXMub2JqZWN0VW5zZWxlY3RlZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZUxvY2tTZWxlY3RlZE9iamVjdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0LmxvY2tlZCA9ICF0aGlzLnNlbGVjdGVkT2JqZWN0LmxvY2tlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZU9iamVjdChvYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXApIHtcclxuICAgIGlmIChpc1dhbGxUeXBlKG9iamVjdC51c2VyRGF0YS5pdGVtVHlwZSkpIHtcclxuICAgICAgY29uc3QgY3VycmVudFdhbGwgPSAoPFdhbGxJdGVtPm9iamVjdCkuY3VycmVudFdhbGw7XHJcbiAgICAgIGlmIChjdXJyZW50V2FsbCkge1xyXG4gICAgICAgIGN1cnJlbnRXYWxsLnJlbW92ZUl0ZW0oPEl0ZW0+b2JqZWN0KTtcclxuICAgICAgICBjdXJyZW50V2FsbC5yZW1vdmVPbkl0ZW0oPEl0ZW0+b2JqZWN0KTtcclxuICAgICAgICBjdXJyZW50V2FsbC5maXJlUmVkcmF3KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaXNGdXJuaXR1cmVUeXBlKG9iamVjdC51c2VyRGF0YS5pdGVtVHlwZSkpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZW1vdmVTZWxlY3RlZEZ1cm5pdHVyZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChvYmplY3QuY2FuQmVSZW1vdmVkKCkpIHtcclxuICAgICAgdGhpcy5fcmVtb3ZlSXRlbShvYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb2JqZWN0LnJlbW92ZWQoKTtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbW92ZUl0ZW0ob2JqZWN0OiBJdGVtIHwgSXRlbUdyb3VwKSB7XHJcbiAgICB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKG9iamVjdCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3JlbW92ZU9iamVjdCd9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvcHlTZWxlY3RlZE9iamVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9jb3B5SXRlbSh0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2NvcHlJdGVtKG9yaWdpbmFsOiBJdGVtIHwgSXRlbUdyb3VwKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBpc0N1c3RvbVNoYXBlSXRlbTogYm9vbGVhbiA9IG9yaWdpbmFsIGluc3RhbmNlb2YgQ3VzdG9tU2hhcGVGbG9vckl0ZW07XHJcbiAgICBjb25zdCBpc0N1c3RvbVNoYXBlV2FsbEl0ZW06IGJvb2xlYW4gPSBvcmlnaW5hbCBpbnN0YW5jZW9mIEN1c3RvbVNoYXBlV2FsbEl0ZW07XHJcbiAgICBjb25zdCBpc0N1c3RvbUN5bGluZGVySXRlbTogYm9vbGVhbiA9IG9yaWdpbmFsIGluc3RhbmNlb2YgQ3VzdG9tQ3lsaW5kZXJGbG9vckl0ZW07XHJcbiAgICBjb25zdCBpc0N1c3RvbUN5bGluZGVyV2FsbEl0ZW06IGJvb2xlYW4gPSBvcmlnaW5hbCBpbnN0YW5jZW9mIEN1c3RvbUN5bGluZGVyV2FsbEl0ZW07XHJcbiAgICBjb25zdCBpc1Jlc2l6YWJsZURvb3JPcldpbmRvdzogYm9vbGVhbiA9IG9yaWdpbmFsIGluc3RhbmNlb2YgSW5XYWxsSXRlbSAmJiBvcmlnaW5hbC5pc0N1c3RvbTtcclxuICAgIGlmIChpc0N1c3RvbVNoYXBlSXRlbSB8fCBpc0N1c3RvbVNoYXBlV2FsbEl0ZW0gfHwgaXNDdXN0b21DeWxpbmRlckl0ZW0gfHwgaXNDdXN0b21DeWxpbmRlcldhbGxJdGVtIHx8IGlzUmVzaXphYmxlRG9vck9yV2luZG93KSB7XHJcbiAgICAgIGNvbnN0IGNvcHkgPSAob3JpZ2luYWwgYXMgQ3VzdG9tU2hhcGVGbG9vckl0ZW0gfCBJbldhbGxJdGVtKS5jbG9uZUl0ZW0oKTtcclxuICAgICAgdGhpcy5faXRlbVNlcnZpY2UuYWRkSXRlbShjb3B5KTtcclxuICAgICAgaWYgKGNvcHkgaW5zdGFuY2VvZiBXYWxsSXRlbSkge1xyXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RXYWxsRWRnZSA9IHRoaXMuX3Jvb21TZXJ2aWNlLmdldENsb3Nlc3RXYWxsRWRnZShvcmlnaW5hbC5wb3NpdGlvbi54LCBvcmlnaW5hbC5wb3NpdGlvbi56KTtcclxuICAgICAgICBjb3B5LnBsYWNlT25FZGdlKGNsb3Nlc3RXYWxsRWRnZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXREcmFnLCBjb3B5KTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TdGFydERyYWcsIG9yaWdpbmFsLnBvc2l0aW9uKTtcclxuICAgIH0gZWxzZSBpZiAob3JpZ2luYWwudXNlckRhdGEgJiYgb3JpZ2luYWwudXNlckRhdGEuaXRlbUlkZW50aWZpZXIpIHtcclxuICAgICAgaWYgKG9yaWdpbmFsLm1ldGFkYXRhLnRoaXJkUGFydHlNb2RlbCkge1xyXG4gICAgICAgIC8vIFdoZW4gaXQncyBhIHRoaXJkIHBhcnR5IG1vZGVsLCB3ZSBzaG91bGQganVzdCBjbG9uZSB0aGUgT2JqZWN0KDNEKVxyXG4gICAgICAgIC8vIGNvbnN0IGNsb25lID0gb3JpZ2luYWwuY2xvbmUoKTtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkNsb25lVGhpcmRQYXJ0eU1vZGVsLCBvcmlnaW5hbCBhcyBJdGVtKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkNvcHlJT25lRnVybml0dXJlSW50b1NjZW5lQnlTS1UsIG9yaWdpbmFsIGFzIEl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkcmFnZ2VkRGF0YTogRHJhZ2dlZERhdGEgPSB7XHJcbiAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZSxcclxuICAgICAgICB0eXBlOiBvcmlnaW5hbC5tZXRhZGF0YS5pdGVtVHlwZSxcclxuICAgICAgICBpT25lOiBmYWxzZSxcclxuICAgICAgICBvdmVycmlkZXM6IHtcclxuICAgICAgICAgIHJvdGF0aW9uOiBvcmlnaW5hbC5yb3RhdGlvbiAmJiBvcmlnaW5hbC5yb3RhdGlvbi5jbG9uZSgpLFxyXG4gICAgICAgICAgLy8gc2NhbGU6IG9yaWdpbmFsLnNjYWxlICYmIG9yaWdpbmFsLnNjYWxlLmNsb25lKCksXHJcbiAgICAgICAgICBvcGVuaW5nOiAob3JpZ2luYWwgYXMgYW55KS5vcGVuaW5nLFxyXG4gICAgICAgICAgdGV4dHVyZTogKG9yaWdpbmFsIGFzIGFueSkudGV4dHVyZSxcclxuICAgICAgICAgIGlzQ29weTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXREcmFnLCBkcmFnZ2VkRGF0YSk7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU3RhcnREcmFnLCBvcmlnaW5hbC5wb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB6b29tUmVzZXQoKSB7XHJcbiAgICB0aGlzLmZsb29ycGxhbm5lci56b29tUmVzZXQoKTtcclxuICB9XHJcblxyXG4gIGdldCBjYW50Wm9vbU91dCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29ycGxhbm5lci5jYW50Wm9vbU91dDtcclxuICB9XHJcblxyXG4gIGdldCBjYW50Wm9vbUluKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JwbGFubmVyLmNhbnRab29tSW47XHJcbiAgfVxyXG5cclxuICB6b29tT3V0KCkge1xyXG4gICAgdGhpcy5mbG9vcnBsYW5uZXIuem9vbU91dCgpO1xyXG4gIH1cclxuXHJcbiAgem9vbUluKCkge1xyXG4gICAgdGhpcy5mbG9vcnBsYW5uZXIuem9vbUluKCk7XHJcbiAgfVxyXG5cclxuICB1bnNlbGVjdEFsbCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IG51bGw7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWRnZSA9IG51bGw7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbCA9IG51bGw7XHJcbiAgICB0aGlzLnNlbGVjdGVkT2JqZWN0ID0gbnVsbDtcclxuICAgIGlmICghdGhpcy5fYmxvY2tMZWZ0U2lkZUJhcikge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMZWZ0U2lkZWJhcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlTW9kZSh2YWx1ZTogVmlld01vZGUsIHNlbmRVcGRhdGVzID0gZmFsc2UpIHtcclxuICAgIHRoaXMuX21vZGUgPSB2YWx1ZTtcclxuICAgIGlmIChzZW5kVXBkYXRlcykge1xyXG4gICAgICB0aGlzLnZpZXdNb2RlU2VydmljZS5zZXRWaWV3TW9kZSh0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldFNpemUoKSwgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5nZXRDZW50ZXIoKSwgdmFsdWUpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlZpZXdNb2RlQ2hhbmdlZCwgdmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0xpYnJhcnlDYXRlZ29yaWVzKCkge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2cpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5jYXRlZ29yaWVzU2lkZWJhcik7XHJcbiAgICB0aGlzLl9hY3RpdmVDYXRlZ29yeVNpZGViYXJUZW1wbGF0ZSA9IHRoaXMuY2F0ZWdvcmllc1NpZGViYXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0FjY2Vzc29pcmVDYXRlZ29yaWVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2cpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5hY2Nlc3NvaXJlc0NhdGVnb3JpZXNTaWRlYmFyKTtcclxuICAgIHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlID0gdGhpcy5hY2Nlc3NvaXJlc0NhdGVnb3JpZXNTaWRlYmFyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dBY3RpdmVDYXRlZ29yeVNpZGViYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZyk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLl9hY3RpdmVDYXRlZ29yeVNpZGViYXJUZW1wbGF0ZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzaG93TGlicmFyeUNhdGVnb3J5KGNhdGVnb3J5OiBDYXRlZ29yeSkge1xyXG4gICAgdGhpcy5vYmplY3RzID0gYXdhaXQgdGhpcy5tb2RlbHNTZXJ2aWNlLmdldEl0ZW1zRnJvbUNhdGVnb3J5KGNhdGVnb3J5LmlkKTtcclxuICAgIHRoaXMuY3VzdG9tT2JqZWN0cyA9IHRoaXMub2JqZWN0cy5maWx0ZXIob2JqZWN0ID0+IG9iamVjdC5pc0N1c3RvbSk7XHJcbiAgICB0aGlzLmxpYnJhcnlPYmplY3RzID0gdGhpcy5vYmplY3RzLmZpbHRlcihvYmplY3QgPT4gIW9iamVjdC5pc0N1c3RvbSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPSBjYXRlZ29yeTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMubGlicmFyeVNpZGViYXIpO1xyXG4gIH1cclxuXHJcbiAgc2hvd1NldHRpbmdzKCkge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2cpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5zZXR0aW5nc1NpZGViYXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5GYXEodXJsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB3aW5kb3cub3Blbih1cmwsIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmZhcVVybCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0ZhcSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNob3dJY29uID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuZmFxVXJsICE9PSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlbkZlZWRiYWNrKHVybDogc3RyaW5nKSB7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsIHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmZlZWRiYWNrVXJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhZGRBbGxUb0NhcnQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0ZlZWRiYWNrKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0ljb24gPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5mZWVkYmFja1VybCAhPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RhYmxlcyA9IFtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVkZ2UgJiYgdGhpcy5zZWxlY3RlZFdhbGwgJiYgdGhpcy5zZWxlY3RlZFdhbGxbdGhpcy5zZWxlY3RlZEVkZ2VdLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkV2FsbCxcclxuICAgICAgdGhpcy5zZWxlY3RlZEZsb29yLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0XHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc2VsZWN0YWJsZSA9IHNlbGVjdGFibGVzWzBdO1xyXG4gICAgaWYgKHNlbGVjdGFibGUpIHtcclxuICAgICAgdGhpcy5fbW9kZSA9IFZpZXdNb2RlLlJvb21QbGFuM0Q7XHJcbiAgICAgIHRoaXMuc2hvd1BsdWdpbi5lbWl0KHNlbGVjdGFibGUpO1xyXG4gICAgfSBlbHNlIGlmICghc2VsZWN0YWJsZSkge1xyXG4gICAgICB0aGlzLmRvbmUuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZEVkZ2VXYWxsUGxhY2VtZW50KHdhbGwsIGVkZ2UpIHtcclxuICAgIGNvbnN0IGVkZ2VQbGFjZW1lbnRzID0gWydmcm9udEVkZ2UnLCAnYmFja0VkZ2UnXTtcclxuICAgIHJldHVybiBlZGdlUGxhY2VtZW50cy5yZWR1Y2UoKHBsYWNlbWVudCwgcCkgPT4ge1xyXG4gICAgICBpZiAod2FsbFtwXSA9PT0gZWRnZSkge1xyXG4gICAgICAgIHBsYWNlbWVudCA9IHA7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHBsYWNlbWVudDtcclxuICAgIH0sIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFdhbGwoc2VsZWN0ZWRXYWxsRXZlbnQ6IFNlbGVjdGVkV2FsbEV2ZW50KSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbCA9IHNlbGVjdGVkV2FsbEV2ZW50LndhbGw7XHJcbiAgICB0aGlzLmNvbnRleHRNZW51TW91c2VFdmVudCA9IHNlbGVjdGVkV2FsbEV2ZW50LmV2ZW50O1xyXG4gICAgaWYgKHNlbGVjdGVkV2FsbEV2ZW50LndhbGwpIHtcclxuICAgICAgaWYgKHNlbGVjdGVkV2FsbEV2ZW50LmVkZ2UpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRWRnZSA9IHRoaXMuZmluZEVkZ2VXYWxsUGxhY2VtZW50KHNlbGVjdGVkV2FsbEV2ZW50LndhbGwsIHNlbGVjdGVkV2FsbEV2ZW50LmVkZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0ZWRXYWxsU2lkZWJhcigpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dTZWxlY3RlZFdhbGxTaWRlYmFyKCkge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2VsZWN0ZWRXYWxsU2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1NlbGVjdGVkVGhyZWVkT2JqZWN0U2lkZWJhcigpIHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLnNlbGVjdGVkVGhyZWVkT2JqZWN0U2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGbG9vcihzZWxlY3RlZEZsb29yRXZlbnQ6IFNlbGVjdGVkRmxvb3JFdmVudCkge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvb20gPSBzZWxlY3RlZEZsb29yRXZlbnQucm9vbTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IHNlbGVjdGVkRmxvb3JFdmVudC5yb29tLmZsb29yUGxhbmU7XHJcbiAgICB0aGlzLmNvbnRleHRNZW51TW91c2VFdmVudCA9IHNlbGVjdGVkRmxvb3JFdmVudC5ldmVudDtcclxuICAgIGlmIChzZWxlY3RlZEZsb29yRXZlbnQucm9vbSkge1xyXG4gICAgICBpZiAodGhpcy52aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NlbGVjdGVkRmxvb3JTaWRlYmFyKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1NlbGVjdGVkRmxvb3JTaWRlYmFyKCkge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2VsZWN0ZWRGbG9vclNpZGViYXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldEZsb29yVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9yb29tU2VydmljZS5zZXRGbG9vclRleHR1cmUodGhpcy5zZWxlY3RlZFJvb20sIHRleHR1cmUpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICdmbG9vclRleHR1cmUnLCBwYXRjaDogZmFsc2V9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGbG9vckNvbG9yKGNvbG9yOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Jvb21TZXJ2aWNlLnNldEZsb29yQ29sb3IodGhpcy5zZWxlY3RlZFJvb20sIGNvbG9yKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnZmxvb3JDb2xvcicsIHBhdGNoOiBmYWxzZX0pO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlV2FsbCh3YWxsOiBXYWxsKSB7XHJcbiAgICB3YWxsLnJlbW92ZSgpO1xyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS5yZW1vdmVXYWxsKHdhbGwpO1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICdyZW1vdmVXYWxsJ30pO1xyXG4gIH1cclxuXHJcbiAgc2V0V2FsbExlbmd0aCh7bGVuZ3RoLCBhdEVuZCwgZWRnZX06IHsgbGVuZ3RoOiBudW1iZXIsIGF0RW5kOiBib29sZWFuLCBlZGdlPzogSGFsZkVkZ2UgfSkge1xyXG4gICAgY29uc3Qgd2FsbCA9IHRoaXMuc2VsZWN0ZWRXYWxsO1xyXG4gICAgY29uc3Qgb3JpZ0xlbmd0aCA9IGVkZ2UgPyBlZGdlLmludGVyaW9yRGlzdGFuY2UoKSA6IHdhbGwubGVuZ3RoO1xyXG4gICAgY29uc3Qgc3RhcnQgPSBhdEVuZCA/IHdhbGwuZ2V0U3RhcnQoKSA6IHdhbGwuZ2V0RW5kKCk7XHJcbiAgICBjb25zdCBlbmQgPSBhdEVuZCA/IHdhbGwuZ2V0RW5kKCkgOiB3YWxsLmdldFN0YXJ0KCk7XHJcbiAgICBjb25zdCBkeCA9IGVuZC54IC0gc3RhcnQueDtcclxuICAgIGNvbnN0IGR5ID0gZW5kLnkgLSBzdGFydC55O1xyXG4gICAgY29uc3QgayA9IGxlbmd0aCAvIG9yaWdMZW5ndGg7XHJcbiAgICBlbmQubW92ZShrICogZHggKyBzdGFydC54LCBrICogZHkgKyBzdGFydC55KTtcclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UudXBkYXRlKCk7XHJcbiAgICB0aGlzLl9yb29tU2VydmljZS51cGRhdGVGbG9vcnNBbmRFZGdlcygpLnRoZW4oKCkgPT4gdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFNb3ZlbWVudENoYW5nZWQubmV4dCgpKTtcclxuICAgIHRoaXMuX2xpZ2h0c1NlcnZpY2UudXBkYXRlQWxsT2Zmc2V0cygpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICd3YWxsTGVuZ3RoJ30pO1xyXG5cclxuICAgIGlmICh0aGlzLndhbGxMZW5ndGhJbmZvRGlhbG9nRW5hYmxlZCAmJiB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LlNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHMpKSB7XHJcbiAgICAgIGlmIChlZGdlICYmIE1hdGgucm91bmQoZWRnZS5pbnRlcmlvckRpc3RhbmNlKCkpICE9PSBsZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnNob3dXYWxsTGVuZ3RoSW5mb0RpYWxvZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93V2FsbExlbmd0aEluZm9EaWFsb2coKSB7XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2cub3BlbihJbmZvRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogJ0luZm8nLFxyXG4gICAgICAgIG1lc3NhZ2U6XHJcbiAgICAgICAgICBgUmVzdWx0aW5nIGxlbmd0aCBvZiB3YWxsIHNsaWdodGx5IGRpZmZlcnMgZnJvbSBsZW5ndGggeW91IHNwZWNpZmllZC5cclxuICAgICAgICAgIFRvIGZ1cnRoZXIgcmVmaW5lIGxlbmd0aCBvZiB0aGUgd2FsbCwgdXNlIDJEIGZsb29ycGxhbiBibHVlcHJpbnQuYFxyXG4gICAgICB9LFxyXG4gICAgICBtYXhXaWR0aDogJzUwMHB4J1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGRvbnRTaG93QWdhaW4gPT4ge1xyXG4gICAgICB0aGlzLndhbGxMZW5ndGhJbmZvRGlhbG9nRW5hYmxlZCA9ICFkb250U2hvd0FnYWluO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgc2V0V2FsbEhlaWdodChoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWxlY3RlZFdhbGwuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgdGhpcy5fcm9vbVNlcnZpY2UudXBkYXRlQ2VpbGluZ3MoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsLmZpcmVSZWRyYXcoKTtcclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UudXBkYXRlKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3dhbGxIZWlnaHQnfSk7XHJcbiAgfVxyXG5cclxuICBzZXRXYWxsVGhpY2tuZXNzKHRoaWNrbmVzczogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbC50aGlja25lc3MgPSB0aGlja25lc3M7XHJcbiAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5fcm9vbVNlcnZpY2UudXBkYXRlRmxvb3JzQW5kRWRnZXMoKS50aGVuKCgpID0+IHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLm5leHQoKSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbC5maXJlUmVkcmF3KCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3dhbGxUaGlja25lc3MnfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0V2FsbFRleHR1cmUodGV4dHVyZTogVGV4dHVyZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gdGhpcy5zZWxlY3RlZEVkZ2VzLmZvckVhY2goYXN5bmMgKGVkZ2UpID0+IGF3YWl0IGVkZ2Uuc2V0VGV4dHVyZSh0ZXh0dXJlKSk7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuc2VsZWN0ZWRFZGdlcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYXdhaXQgdGhpcy5zZWxlY3RlZEVkZ2VzW2ldLnNldFRleHR1cmUodGV4dHVyZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICd3YWxsVGV4dHVyZScsIHBhdGNoOiBmYWxzZX0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFdhbGxDb2xvcihjb2xvcjogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWRnZXMuZm9yRWFjaChhc3luYyAoZWRnZSkgPT4gYXdhaXQgZWRnZS5zZXRDb2xvcihjb2xvcikpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnd2FsbENvbG9yJywgcGF0Y2g6IGZhbHNlfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDb3JuZXIoY29ybmVyOiBDb3JuZXIpIHtcclxuICAgIHRoaXMuZmxvb3JwbGFubmVyLnNlbGVjdENvcm5lcihjb3JuZXIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluV2FsbEhlaWdodCh3YWxsOiBXYWxsKTogbnVtYmVyIHtcclxuICAgIGlmICghd2FsbCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIGxldCByZXN1bHQgPSAwO1xyXG4gICAgY29uc3QgY2FzdGVkV2FsbDogYW55ID0gd2FsbDtcclxuXHJcbiAgICBpZiAoY2FzdGVkV2FsbC5pdGVtcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2FzdGVkV2FsbC5pdGVtcykge1xyXG4gICAgICAgIHJlc3VsdCA9IE1hdGgubWF4KHJlc3VsdCwgaXRlbS5oYWxmU2l6ZS55ICsgaXRlbS5wb3NpdGlvbi55KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjYXN0ZWRXYWxsLm9uSXRlbXMpIHtcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNhc3RlZFdhbGwub25JdGVtcykge1xyXG4gICAgICAgIHJlc3VsdCA9IE1hdGgubWF4KHJlc3VsdCwgaXRlbS5oYWxmU2l6ZS55ICsgaXRlbS5wb3NpdGlvbi55KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBNYXRoLmNlaWwocmVzdWx0KTtcclxuICB9XHJcblxyXG4gIGdldE1pbkdsb2JhbFdhbGxIZWlnaHQoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHdhbGxzID0gdGhpcy5fcm9vbVNlcnZpY2Uud2FsbHM7XHJcbiAgICBpZiAoIXdhbGxzKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIC4uLndhbGxzLm1hcCh0aGlzLmdldE1pbldhbGxIZWlnaHQpKTtcclxuICB9XHJcblxyXG4gIHdhbGxzSGVpZ2h0VXBkYXRlZChoZWlnaHQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5fcm9vbVNlcnZpY2UudXBkYXRlV2FsbEhlaWdodHMoaGVpZ2h0KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnd2FsbEhlaWdodCd9KTtcclxuICB9XHJcblxyXG4gIHNldERyYWdnZWQob2JqZWN0OiBNb2RlbEludGVyZmFjZSkge1xyXG4gICAgY29uc3QgZHJhZ2dlZERhdGE6IERyYWdnZWREYXRhID0ge1xyXG4gICAgICBuYW1lOiBvYmplY3QubmFtZSxcclxuICAgICAgdHlwZTogK29iamVjdC50eXBlLFxyXG4gICAgICBpT25lOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0RHJhZywgZHJhZ2dlZERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcmVsZWFzZURyYWdnZWQoKSB7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkV4aXREcmFnKTtcclxuICB9XHJcblxyXG4gIGxvYWRGbG9vclBsYW4oZGF0YSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy51bnNlbGVjdEFsbCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UubG9hZEZsb29ycGxhbihkYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydEFSU2Vzc2lvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgIGNvbnN0IGFyT2JqZWN0ID0gdGhpcy5zZWxlY3RlZE9iamVjdC5jbG9uZVZpc2libGUoKTtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFyTW9kZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5hZGRPYmplY3QoYXJPYmplY3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZFRvQ2FydChvYmplY3Q6IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKG9iamVjdC5tZXRhZGF0YSkge1xyXG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgICBhd2FpdCB0aGlzLl9jb25uZWN0b3JBZGFwdGVyU2VydmljZS5pbml0Q29ubmVjdG9yKFxyXG4gICAgICAgIG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzID8gb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3Muc2V0dGluZ3MgOiB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncyxcclxuICAgICAgICBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncyA/IG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzLm5hbWUgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MgJiYgb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2UgPyBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZS5zb3VyY2VJZCA6IG51bGxcclxuICAgICAgKTtcclxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yU2VydmljZS5hZGRUb0NhcnQoK29iamVjdC5tZXRhZGF0YS5nb29kSWQsIG9iamVjdC5tZXRhZGF0YS5nb29kVHlwZSwgMSwgK29iamVjdC5tZXRhZGF0YS5pdGVtSWQpO1xyXG4gICAgICBpZiAob2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MpIHtcclxuICAgICAgICBjb25zdCBleHRlcm5hbFNvdXJjZTogRXh0ZXJuYWxTb3VyY2VBcnRpY2xlQWRkSW50ZXJmYWNlID0ge1xyXG4gICAgICAgICAgYXJ0aWNsZToganNvbixcclxuICAgICAgICAgIHF1YW50aXR5OiAxLFxyXG4gICAgICAgICAgY2F0YWxvZ0RlZmluaXRpb246IG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzLmNhdGFsb2dEZWZpbml0aW9uLFxyXG4gICAgICAgICAgZXh0ZXJuYWxTb3VyY2U6IG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzLmV4dGVybmFsU291cmNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuYWRkRXh0ZXJuYWxTb3VyY2VUb0NhcnQubmV4dChleHRlcm5hbFNvdXJjZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLmFkZFRvQ2FydC5uZXh0KHthcnRpY2xlOiBqc29uLCBxdWFudGl0eTogMX0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkSXRlbXMoZGF0YSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbU1vZGVsIG9mIGRhdGEpIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IG5ldyBWZWN0b3IzKGl0ZW1Nb2RlbC54cG9zLCBpdGVtTW9kZWwueXBvcywgaXRlbU1vZGVsLnpwb3MpO1xyXG4gICAgICAgIGNvbnN0IG92ZXJyaWRlcyA9IHtcclxuICAgICAgICAgIHdpZHRoOiBpdGVtTW9kZWwud2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGl0ZW1Nb2RlbC5oZWlnaHQsXHJcbiAgICAgICAgICB0ZXh0dXJlOiBpdGVtTW9kZWwudGV4dHVyZSxcclxuICAgICAgICAgIHJvdGF0aW9uOiBuZXcgRXVsZXIoMCwgaXRlbU1vZGVsLnJvdGF0aW9uLCAwKSxcclxuICAgICAgICAgIG9wZW5pbmc6IGl0ZW1Nb2RlbC5vcGVuaW5nLFxyXG4gICAgICAgICAgZnJhbWVDb2xvcjogaXRlbU1vZGVsLmZyYW1lQ29sb3IsXHJcbiAgICAgICAgICBkb29yQ29sb3I6IGl0ZW1Nb2RlbC5kb29yQ29sb3IsXHJcbiAgICAgICAgICB3aW5kb3dDb2xvcjogaXRlbU1vZGVsLndpbmRvd0NvbG9yLFxyXG4gICAgICAgICAgbG9ja2VkOiBpdGVtTW9kZWwubG9ja2VkLFxyXG4gICAgICAgICAgaXNHbGFzczogaXRlbU1vZGVsLmlzR2xhc3NcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IG1vZGVsRGF0YSA9IGF3YWl0IHRoaXMubW9kZWxzU2VydmljZS5nZXQoaXRlbU1vZGVsLml0ZW1fbmFtZSwgb3ZlcnJpZGVzKTtcclxuICAgICAgICBpZiAobW9kZWxEYXRhKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbVNlcnZpY2UuYWRkSnNvbkl0ZW0obW9kZWxEYXRhLCBwb3NpdGlvbik7XHJcbiAgICAgICAgICBpZiAoaXRlbU1vZGVsLml0ZW1Hcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZWF0dGFjaFRvSXRlbUdyb3VwKGl0ZW1Nb2RlbC5pdGVtR3JvdXAsIGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBXYWxsSXRlbSkge1xyXG4gICAgICAgICAgICBjb25zdCBjbG9zZXN0V2FsbEVkZ2UgPSB0aGlzLl9yb29tU2VydmljZS5nZXRDbG9zZXN0V2FsbEVkZ2UocG9zaXRpb24ueCwgcG9zaXRpb24ueik7XHJcbiAgICAgICAgICAgIGl0ZW0ucGxhY2VPbkVkZ2UoY2xvc2VzdFdhbGxFZGdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKGBVbmFibGUgdG8gZ2V0IG1vZGVsIGZvciAke2l0ZW1Nb2RlbC5pdGVtX25hbWV9IGZyb20gTW9kZWxzU2VydmljZWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZE9iamVjdHMoe2l0ZW1zLCBmbG9vcnBsYW59KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBQcm9taXNlLmFsbChbXHJcbiAgICAgIHRoaXMubG9hZEl0ZW1zKGl0ZW1zKSxcclxuICAgICAgdGhpcy5sb2FkRmxvb3JQbGFuKGZsb29ycGxhbiksXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5U2NlbmVJbnN0YW5jZShzYXZlQXM6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24pID0+IHJlc29sdmUoKSk7XHJcbiAgfVxyXG5cclxuICBnZXRPYmplY3RzKCkge1xyXG4gICAgY29uc3QgaXRlbXNUb1NhdmUgPSB0aGlzLl9pdGVtU2VydmljZS5nZXROb25GdXJuaXR1cmUoKS5tYXAoaSA9PiB0aGlzLl9pdGVtU2VyaWFsaXphdGlvblNlcnZpY2UuaXRlbVRvT2JqZWN0KGkpKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZsb29ycGxhbjogdGhpcy5fZmxvb3JwbGFuU2VydmljZS5zYXZlRmxvb3JwbGFuKCksXHJcbiAgICAgIGl0ZW1zOiBpdGVtc1RvU2F2ZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGhhc0N1c3RvbU9iamVjdHMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXN0b21PYmplY3RzLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25PYmplY3RMaWJyYXJ5Q2xpY2sob2JqZWN0OiBNb2RlbEludGVyZmFjZSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWxlYXNlRHJhZ2dlZCgpO1xyXG4gICAgdGhpcy5zZXREcmFnZ2VkKG9iamVjdCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlN0YXJ0RHJhZywge3g6IDAsIHk6IDB9KTtcclxuICAgIGlmIChvYmplY3QubmFtZSA9PT0gJ1dhbGt0aHJvdWdoIENhbWVyYScpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTGVmdFNpZGViYXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Hcm91cENsaWNrKCkge1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5Hcm91cE9iamVjdHMpO1xyXG4gICAgdGhpcy51c2VySXNHcm91cGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNhbmNlbEdyb3VwU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VySXNHcm91cGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5DYW5jZWxHcm91cE9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBvblVuR3JvdXBDbGljaygpIHtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuVW5ncm91cE9iamVjdHMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlQ29udGV4dE1lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0R3JvdXBTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy51c2VySXNHcm91cGluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBPYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmRDb252ZXJzaW9uVG9UYWdNYW5hZ2VyKCk6IHZvaWQge1xyXG4gICAgY29uc3QgYXJ0aWNsZTogSXRlbSB8IEl0ZW1Hcm91cCA9IHRoaXMuc2VsZWN0ZWRPYmplY3Q7XHJcbiAgICBsZXQgY29udmVyc2lvbkFjdGlvbjogc3RyaW5nO1xyXG4gICAgaWYgKGFydGljbGUgaW5zdGFuY2VvZiBJdGVtKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhLmNvbnZlcnNpb25HVE1TZW5kKSB7XHJcbiAgICAgICAgY29udmVyc2lvbkFjdGlvbiA9ICdyZW1vdmUnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGEuY29udmVyc2lvbkdUTVNlbmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFkZFNlbGVjdGVkQ2xhc3MgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb252ZXJzaW9uQWN0aW9uID0gJ2FkZCc7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9iamVjdC5tZXRhZGF0YS5jb252ZXJzaW9uR1RNU2VuZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZGRTZWxlY3RlZENsYXNzID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9nb29nbGVUYWdNYW5hZ2VyLnNlbmRQcm9kdWN0Q29udmVyc2lvbihhcnRpY2xlLm1ldGFkYXRhLCBjb252ZXJzaW9uQWN0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhc1NldHRpbmdzKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaXNDdXN0b21TaGFwZTogYm9vbGVhbiA9IGl0ZW0ubWV0YWRhdGEgJiYgKFxyXG4gICAgICBpc0N1c3RvbVNoYXBlVHlwZShpdGVtLm1ldGFkYXRhLml0ZW1UeXBlKSB8fFxyXG4gICAgICBpc0N1c3RvbVNoYXBlV2FsbFR5cGUoaXRlbS5tZXRhZGF0YS5pdGVtVHlwZSkgfHxcclxuICAgICAgaXNDdXN0b21DeWxpbmRlclR5cGUoaXRlbS5tZXRhZGF0YS5pdGVtVHlwZSkgfHxcclxuICAgICAgaXNDdXN0b21DeWxpbmRlcldhbGxUeXBlKGl0ZW0ubWV0YWRhdGEuaXRlbVR5cGUpXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGFzQ29uZmlndXJhYmxlVGV4dHVyZTogYm9vbGVhbiA9ICEhaXRlbSAmJiAhIShpdGVtLm1ldGFkYXRhICYmIGl0ZW0ubWV0YWRhdGEudGV4dHVyZSk7XHJcbiAgICBjb25zdCBoYXNPcGVuaW5nQXR0cmlidXRlOiBib29sZWFuID0gISFpdGVtICYmICEhaXRlbS5vcGVuaW5nO1xyXG4gICAgY29uc3QgaXNTY2FsYWJsZTogYm9vbGVhbiA9ICEhaXRlbSAmJiAhIShpdGVtLm1ldGFkYXRhICYmIGl0ZW0ubWV0YWRhdGEuc2NhbGFibGUpO1xyXG5cclxuICAgIHJldHVybiBpc0N1c3RvbVNoYXBlIHx8IGhhc0NvbmZpZ3VyYWJsZVRleHR1cmUgfHwgaGFzT3BlbmluZ0F0dHJpYnV0ZSB8fCBpc1NjYWxhYmxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNDb25maWd1cmFibGUoaXRlbTogSXRlbSB8IEl0ZW1Hcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEoaXRlbSBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkgJiYgISFpdGVtICYmICEhaXRlbS5tZXRhZGF0YSAmJiAhIWl0ZW0ubWV0YWRhdGEuaXRlbUlkZW50aWZpZXIgJiYgaXRlbS5jb25maWd1cmFibGUgJiZcclxuICAgICAgIWl0ZW0uYWxsd2F5c0NvbmZpZ3VyZU1vZGUgJiYgIWl0ZW0ub2Jzb2xldGU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0NvbnZlcnNpb25JdGVtKGl0ZW06IEl0ZW0gfCBJdGVtR3JvdXApOiBib29sZWFuIHtcclxuICAgIGlmIChpdGVtLm1ldGFkYXRhLmlvbmUpIHtcclxuICAgICAgcmV0dXJuIGl0ZW0ubWV0YWRhdGEuaW9uZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzRGVsZXRhYmxlKGl0ZW06IEl0ZW0gfCBJdGVtR3JvdXApOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhKGl0ZW0gaW5zdGFuY2VvZiBSb29tIHx8IGl0ZW0gaW5zdGFuY2VvZiBXYWxsKSAmJlxyXG4gICAgICAoKGl0ZW0gaW5zdGFuY2VvZiBJdGVtICYmIGl0ZW0uY2FuRGVsZXRlKSB8fCAhKGl0ZW0gaW5zdGFuY2VvZiBJdGVtKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0NvcHlhYmxlKGl0ZW06IEl0ZW0gfCBJdGVtR3JvdXApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGlzTm90Um9vbU9yV2FsbE9yRGVjb3JhdGlvbjogYm9vbGVhbiA9ICEoaXRlbSBpbnN0YW5jZW9mIFJvb20gfHwgaXRlbSBpbnN0YW5jZW9mIFdhbGwgfHwgaXRlbSBpbnN0YW5jZW9mIEZsb29yUGxhbmVJdGVtKTtcclxuICAgIGNvbnN0IGlzQ29weWFibGVJdGVtOiBib29sZWFuID0gKChpdGVtIGluc3RhbmNlb2YgSXRlbSAmJiBpdGVtLmNhbkNvcHkgJiYgIWl0ZW0ub2Jzb2xldGUpIHx8ICEoaXRlbSBpbnN0YW5jZW9mIEl0ZW0pKSAmJlxyXG4gICAgICAhdGhpcy5faXRlbVNlcnZpY2UuZ2V0V2Fsa3Rocm91Z2hDYW1lcmEoKTtcclxuICAgIHJldHVybiBpc05vdFJvb21PcldhbGxPckRlY29yYXRpb24gJiYgaXNDb3B5YWJsZUl0ZW07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZWF0dGFjaFRvSXRlbUdyb3VwKGl0ZW1Hcm91cCwgb2JqZWN0KSB7XHJcbiAgICB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKG9iamVjdCk7XHJcbiAgICBpdGVtR3JvdXAuYWRkSXRlbShvYmplY3QpO1xyXG4gICAgaXRlbUdyb3VwLmNyZWF0ZUJvdW5kYXJ5Qm94KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICghZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5zaGlmdEtleSkge1xyXG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcclxuICAgICAgICBjYXNlIEtleS5DOlxyXG4gICAgICAgICAgaWYgKHRoaXMuX21vZGUgIT09IFZpZXdNb2RlLkZsb29yUGxhbjJEICYmICF0aGlzLl90ZXh0SW5wdXRBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNob3dQcm9kdWN0Q2F0YWxvZyk7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgS2V5LkE6XHJcbiAgICAgICAgICAvLyBpZiAodGhpcy5fYWN0aXZlQ2F0ZWdvcnlTaWRlYmFyVGVtcGxhdGUgIT09IG51bGwgJiYgdGhpcy5fYWN0aXZlQ2F0ZWdvcnlTaWRlYmFyVGVtcGxhdGUgPT09IHRoaXMuY2F0ZWdvcmllc1NpZGViYXIpIHtcclxuICAgICAgICAgIC8vICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTGVmdFNpZGViYXIpO1xyXG4gICAgICAgICAgLy8gICB0aGlzLl9hY3RpdmVDYXRlZ29yeVNpZGViYXJUZW1wbGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAvLyB9IGVsc2VcclxuICAgICAgICAgIGlmICh0aGlzLl9tb2RlICE9PSBWaWV3TW9kZS5GbG9vclBsYW4yRCAmJiAhdGhpcy5fY2F0YWxvZ0lzU2hvd24gJiYgIXRoaXMuX3RleHRJbnB1dEFjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpYnJhcnlDYXRlZ29yaWVzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEtleS5WOlxyXG4gICAgICAgICAgaWYgKCF0aGlzLl9jYXRhbG9nSXNTaG93biAmJiAhdGhpcy5fdGV4dElucHV0QWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX21vZGUgPT09IFZpZXdNb2RlLlJvb21QbGFuM0QpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGUoVmlld01vZGUuRmxvb3JQbGFuMkQsIHRydWUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZShWaWV3TW9kZS5Sb29tUGxhbjNELCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBLZXkuRXNjOlxyXG4gICAgICAgICAgaWYgKHRoaXMuX21vZGUgIT09IFZpZXdNb2RlLkZsb29yUGxhbjJEKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3RleHRJbnB1dEFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGlucHV0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChpbnB1dHNbMF0udHlwZSA9PT0gJ3RleHQnICYmIGlucHV0c1tpXSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
1695
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS1wbGFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvcm9vbS1wbGFubmVyL3Jvb20tcGxhbm5lci9yb29tLXBsYW5uZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFFckMsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHM0QsT0FBTyxFQUNMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsVUFBVSxFQUNYLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFtQixVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBb0J4RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFJakUsT0FBTyxFQUFD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LDhCQUE4QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDWCxlQUFlO3NCQUE1RCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDQyxjQUFjO3NCQUExRCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDUyxxQkFBcUI7c0JBQXhFLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNBLG1CQUFtQjtzQkFBcEUsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ1UsMkJBQTJCO3NCQUFwRixTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDTCxvQkFBb0I7c0JBQXRFLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNKLGNBQWM7c0JBQTFELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNPLG1CQUFtQjtzQkFBcEUsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0YsZUFBZTtzQkFBNUQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBRXRCLFVBQVU7c0JBQS9CLFdBQVc7dUJBQUMsT0FBTztnQkFDWCxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBa0ZBLGdCQUFnQjtzQkFEdEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7RXVsZXIsIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtQbHVnaW5JbnRlcmZhY2V9IGZyb20gJy4uLy4uL3BsdWdpbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0Zsb29ycGxhbm5lckNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvZmxvb3JwbGFubmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SWNvbkVudW19IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9pY29uLmVudW0nO1xyXG5pbXBvcnQge0ljb25OYW1lfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi1uYW1lLmVudW0nO1xyXG5pbXBvcnQge1ZpZXdNb2RlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vdmlldy1tb2RlLmVudW0nO1xyXG5pbXBvcnQge1RocmVlZE1vZGVsfSBmcm9tICcuLi8uLi9jb3JlM2QvbW9kZWwvdGhyZWVkLW1vZGVsJztcclxuaW1wb3J0IHtDYXRlZ29yeX0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC9jYXRlZ29yeSc7XHJcbmltcG9ydCB7XHJcbiAgaXNDdXN0b21DeWxpbmRlclR5cGUsXHJcbiAgaXNDdXN0b21DeWxpbmRlcldhbGxUeXBlLFxyXG4gIGlzQ3VzdG9tU2hhcGVUeXBlLFxyXG4gIGlzQ3VzdG9tU2hhcGVXYWxsVHlwZSxcclxuICBpc0Z1cm5pdHVyZVR5cGUsXHJcbiAgaXNXYWxsVHlwZVxyXG59IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9mYWN0b3J5JztcclxuaW1wb3J0IHtDb3JuZXIsIEhhbGZFZGdlLCBJbldhbGxJdGVtLCBSb29tLCBXYWxsLCBXYWxsSXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL3dhbGwtb2JqZWN0cyc7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0nO1xyXG5pbXBvcnQge0l0ZW1Hcm91cH0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0tZ3JvdXAnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1pY29uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZpZXdNb2RlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ZpZXctbW9kZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtNb2RlbHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9tb2RlbHMuc2VydmljZSc7XHJcbmltcG9ydCB7UHJlc2V0c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7U2NyZWVuU2l6ZUFuYWx5c2lzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NjcmVlbi1zaXplLWFuYWx5c2lzL3NjcmVlbi1zaXplLWFuYWx5c2lzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29ycGxhblNlcnZpY2V9IGZyb20gJy4uL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL3NlcnZpY2UvZmxvb3JwbGFuLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7SHVkU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvaHVkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Jvb21TZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9zZXJ2aWNlL3Jvb20uc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJpYWxpemF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2l0ZW0tc2VyaWFsaXphdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtMaWdodHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9saWdodHMuc2VydmljZSc7XHJcbmltcG9ydCB7QXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlM2Qvc2VydmljZS9hci5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7U2VsZWN0ZWRXYWxsRXZlbnR9IGZyb20gJy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL3NlbGVjdGVkLXdhbGwtZXZlbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtTZWxlY3RlZEZsb29yRXZlbnR9IGZyb20gJy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL3NlbGVjdGVkLWZsb29yLWV2ZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7U2NyZWVuU2l6ZUluZm99IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zY3JlZW4tc2l6ZS1hbmFseXNpcy9zY3JlZW4tc2l6ZS1pbmZvJztcclxuaW1wb3J0IHtDdXN0b21TaGFwZUZsb29ySXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1zaGFwZS1mbG9vci1pdGVtJztcclxuaW1wb3J0IHtDdXN0b21TaGFwZVdhbGxJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvY3VzdG9tLXNoYXBlLXdhbGwtaXRlbSc7XHJcbmltcG9ydCB7Q3VzdG9tQ3lsaW5kZXJGbG9vckl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9jdXN0b20tY3lsaW5kZXItZmxvb3ItaXRlbSc7XHJcbmltcG9ydCB7Q3VzdG9tQ3lsaW5kZXJXYWxsSXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1jeWxpbmRlci13YWxsLWl0ZW0nO1xyXG5pbXBvcnQge0RyYWdnZWREYXRhfSBmcm9tICcuLi8uLi9jb3JlM2QvaW50ZXJmYWNlL2RyYWdnZWQtZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1RleHR1cmV9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWwvdGV4dHVyZSc7XHJcbmltcG9ydCB7SW5mb0RpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2luZm8tZGlhbG9nL2luZm8tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TW9kZWxJbnRlcmZhY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9pbnRlcmZhY2UvbW9kZWwuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtLZXl9IGZyb20gJy4uL2NvbnN0L2tleSc7XHJcbmltcG9ydCB7Rmxvb3JQbGFuZUl0ZW19IGZyb20gJy4uLy4uL2NvcmUzZC9pdGVtcy9mbG9vci1wbGFuZS1pdGVtJztcclxuaW1wb3J0IHtHb29nbGVUYWdNYW5hZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9nb29nbGUtdGFnLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7UGVybWFuZW50U3RvcmVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvcGVybWFuZW50LXN0b3JlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0N1c3RvbUJ1dHRvbn0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC9jdXN0b20tYnV0dG9uJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0V4dGVybmFsU291cmNlQXJ0aWNsZUFkZEludGVyZmFjZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvaW50ZXJmYWNlL2V4dGVybmFsLXNvdXJjZS1hcnRpY2xlLWFkZC5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC1yb29tLXBsYW5uZXInLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJSb29tUGxhbm5lclwiPlxyXG4gICAgICAgICAgPGZsb29yLXBsYW5uZXJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCIhdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRXYWxsQ2hhbmdlKT1cInNlbGVjdFdhbGwoJGV2ZW50KVwiPjwvZmxvb3ItcGxhbm5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8cnAtY29udGV4dC1tZW51XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgJiYgc2hvd0NvbnRleHRNZW51ICYmIHNlbGVjdGVkV2FsbFwiXHJcbiAgICAgICAgICAgICAgW29wZW5Nb3VzZUV2ZW50XT1cImNvbnRleHRNZW51TW91c2VFdmVudFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LXdyYXAgXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2hvd1NlbGVjdGVkV2FsbFNpZGViYXIoKVwiIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCIgc3ZnSWNvbj1cIm1hZ2ljLXdhbmRcIj48L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDT05GSUdVUkUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9ycC1jb250ZXh0LW1lbnU+XHJcblxyXG4gICAgICA8cnAtY29udGV4dC1tZW51XHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgJiYgc2hvd0NvbnRleHRNZW51ICYmIHNlbGVjdGVkRmxvb3JcIlxyXG4gICAgICAgICAgICAgIFtvcGVuTW91c2VFdmVudF09XCJjb250ZXh0TWVudU1vdXNlRXZlbnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS13cmFwXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwic2hvd1NlbGVjdGVkRmxvb3JTaWRlYmFyKClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0gXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIiBzdmdJY29uPVwibWFnaWMtd2FuZFwiPjwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPTkZJR1VSRScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3JwLWNvbnRleHQtbWVudT5cclxuXHJcbiAgICAgIDxycC1pdGVtLWNvbnRleHQtbWVudVxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpICYmIHNob3dDb250ZXh0TWVudSAmJiAhc2hvd0dyb3VwTWVudVwiXHJcbiAgICAgICAgICAgICAgW2l0ZW1dPVwic2VsZWN0ZWRPYmplY3RcIlxyXG4gICAgICAgICAgICAgIChkZWxldGVQcmVzc2VkKT1cImhhbmRsZURlbGV0ZU9iamVjdCgpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1jbG9zZVwiIChjbGljayk9XCJjbG9zZUNvbnRleHRNZW51KClcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zZS1pY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmNsb3NlPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRoaXMuc2VsZWN0ZWRPYmplY3RcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8cD57eyB0aGlzLnNlbGVjdGVkT2JqZWN0Lm5hbWUgfX08L3A+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTZXR0aW5nc0J1dHRvblwiIChjbGljayk9XCJzaG93U2VsZWN0ZWRPYmplY3RTaWRlYmFyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCIgc3ZnSWNvbj1cIm1hZ2ljLXdhbmRcIj48L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDT05GSUdVUkUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDb25maWd1cmF0aW9uQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGN1c3RvbUJ1dHRvbiBvZiBtb2RlbHNTZXJ2aWNlLmN1c3RvbUJ1dHRvbnNcIiAoY2xpY2spPVwiaGFuZGxlQ29uZmlndXJhdGlvbkJ1dHRvbkNsaWNrKGN1c3RvbUJ1dHRvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbSBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxjby1pY29uIFtpY29uRGF0YV09XCJpY29uU2VydmljZS5nZXRJY29uKGljb24uTWFnaWNXYW5kKVwiPjwvY28taWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NPTkZJR1VSRScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dDb3B5QnV0dG9uXCIgKGNsaWNrKT1cImNvcHlTZWxlY3RlZE9iamVjdCgpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5maWxlX2NvcHk8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdDT1BZJyB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlQnV0dG9uXCIgKGNsaWNrKT1cInJlbW92ZVNlbGVjdGVkT2JqZWN0KClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmRlbGV0ZTwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ1JFTU9WRScgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0NvbmZpZ3VyYXRpb25CdXR0b25cIiAoY2xpY2spPVwic2hvd1NlbGVjdGVkVGhyZWVkT2JqZWN0U2lkZWJhcigpXCJcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb25cIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+c2V0dGluZ3M8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdTRVRUSU5HUycgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0xvY2tCdXR0b24gJiYgc2VsZWN0ZWRPYmplY3RcIiAoY2xpY2spPVwidG9nZ2xlTG9ja1NlbGVjdGVkT2JqZWN0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIiBbdGV4dENvbnRlbnRdPVwic2VsZWN0ZWRPYmplY3QubG9ja2VkID8gJ2xvY2snIDogJ2xvY2tfb3BlbidcIj48L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7IChzZWxlY3RlZE9iamVjdC5sb2NrZWQgPyAnVU5MT0NLJyA6ICdMT0NLJykgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dHcm91cEVkaXRNZW51QnV0dG9uc1wiIChjbGljayk9XCJzdGFydEdyb3VwU2VsZWN0aW9uKClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmxpbms8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdHUk9VUCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dDb252ZXJzaW9uQnV0dG9uICYmIHNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zaG93Q29udmVyc2lvbkJ1dHRvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRDb252ZXJzaW9uVG9UYWdNYW5hZ2VyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFkZFNlbGVjdGVkQ2xhc3MgPyAnY29udmVyc2lvbi1idXR0b24tc2VsZWN0ZWQnIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmFkZF9zaG9wcGluZ19jYXJ0PC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnQ09OVkVSU0lPTicgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGljb24tc2VsZWN0ZWRcIj48bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FSQnV0dG9uXCIgKGNsaWNrKT1cInN0YXJ0QVJTZXNzaW9uKClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPndlZWtlbmQ8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdBUicgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YnV0dG9uLWVsZXZhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZE9iamVjdCAmJiBzZWxlY3RlZE9iamVjdC5lbGV2YXRpb25BZGp1c3RhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cInNlbGVjdGVkT2JqZWN0XCI+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24tZWxldmF0aW9uPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzYWxhYmxlT2JqZWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhcl9fZGl2aWRlciBjb250ZXh0LW1lbnVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImFkZFRvQ2FydChzZWxlY3RlZE9iamVjdClcIiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW0gYWRkLXRvLWNhcnQtYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiIFtzdmdJY29uXT1cIidjYXJ0LXNob3BwaW5nLXJlZ3VsYXInXCI+PC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdBRERfVE9fQ0FSVCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvcnAtaXRlbS1jb250ZXh0LW1lbnU+XHJcblxyXG4gICAgICA8cnAtaXRlbS1jb250ZXh0LW1lbnUgKm5nSWY9XCIhdmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkgJiYgc2hvd0NvbnRleHRNZW51ICYmIHNob3dHcm91cE1lbnUgJiYgIXVzZXJJc0dyb3VwaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cInNlbGVjdGVkT2JqZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVQcmVzc2VkKT1cImhhbmRsZURlbGV0ZU9iamVjdCgpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd0dyb3VwRWRpdE1lbnVCdXR0b25zXCIgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5saW5rPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj57eyAnR1JPVVAnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dHcm91cEVkaXRNZW51QnV0dG9uc1wiIChjbGljayk9XCJvblVuR3JvdXBDbGljaygpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5saW5rX29mZjwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ1VOR1JPVVAnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dHcm91cEVkaXRNZW51QnV0dG9uc1wiIChjbGljayk9XCJyZW1vdmVTZWxlY3RlZE9iamVjdCgpXCIgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5kZWxldGU8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdSRU1PVkUnIHwgbG9jYWxpemUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dMb2NrQnV0dG9uICYmIHNlbGVjdGVkT2JqZWN0ICYmIHNob3dHcm91cEVkaXRNZW51QnV0dG9uc1wiIChjbGljayk9XCJ0b2dnbGVMb2NrU2VsZWN0ZWRPYmplY3QoKVwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiIFt0ZXh0Q29udGVudF09XCJzZWxlY3RlZE9iamVjdC5sb2NrZWQgPyAnbG9jaycgOiAnbG9ja19vcGVuJ1wiPjwvbWF0LWljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgKHNlbGVjdGVkT2JqZWN0LmxvY2tlZCA/ICdVTkxPQ0snIDogJ0xPQ0snKSB8IGxvY2FsaXplIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvcnAtaXRlbS1jb250ZXh0LW1lbnU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uTGlicmFyeT5cclxuICAgICAgICAgIDxycC10b29sYmFyLWljb25cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpIHx8IHZpZXdNb2RlU2VydmljZS5pc1dhbGtUaHJvdWdoVmlld0FjdGl2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgbWF0SWNvbj1cImhvbWVcIlxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3tpY29uTmFtZS5BcmNoaXRlY3R1cmUgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2hvd0xpYnJhcnlDYXRlZ29yaWVzKClcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uQWNjZXNzb2lyZXM+XHJcbiAgICAgICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ2aWV3TW9kZVNlcnZpY2UuaXMyZFZpZXdBY3RpdmUoKSB8fCB2aWV3TW9kZVNlcnZpY2UuaXNXYWxrVGhyb3VnaFZpZXdBY3RpdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgIG1hdEljb249XCJsb2NhbF9mbG9yaXN0XCJcclxuICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7aWNvbk5hbWUuQWNjZXNzb3JpZXMgfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic2hvd0FjY2Vzc29pcmVDYXRlZ29yaWVzKClcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uMmRWaWV3PlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sYmFyX19kaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgPHJwLXRvb2xiYXItaWNvblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICBzdmdJY29uPVwiY3ViZS11bmZvbGRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e2ljb25OYW1lLlR3b2RGbG9vcnBsYW4gfCBsb2NhbGl6ZX19XCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpIHx8ICFkZXNrdG9wU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInVwZGF0ZU1vZGUodmlld01vZGVzLkZsb29yUGxhbjJELCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93TGFiZWxdPVwicGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbGJhckljb24zZFZpZXc+XHJcbiAgICAgICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgICAgICAgICAgIHN2Z0ljb249XCJjdWJlLW91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3tpY29uTmFtZS5UaHJlZWRSb29tcGxhbiB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidmlld01vZGVTZXJ2aWNlLmlzM2RWaWV3QWN0aXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJ1cGRhdGVNb2RlKHZpZXdNb2Rlcy5Sb29tUGxhbjNELCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93TGFiZWxdPVwicGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxycC16b29tLWNvbnRyb2xzXHJcbiAgICAgICAgICAgICAgW3Zpc2libGVdPVwidmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKClcIlxyXG4gICAgICAgICAgICAgIChvblpvb21Jbik9XCJ6b29tSW4oKVwiXHJcbiAgICAgICAgICAgICAgKG9uWm9vbVJlc2V0KT1cInpvb21SZXNldCgpXCJcclxuICAgICAgICAgICAgICAob25ab29tT3V0KT1cInpvb21PdXQoKVwiXHJcbiAgICAgID48L3JwLXpvb20tY29udHJvbHM+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uU2V0dGluZ3M+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2xiYXJfX2RpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgICAgICAgICAgIG1hdEljb249XCJzZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e2ljb25OYW1lLlNldHRpbmdzIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNob3dTZXR0aW5ncygpXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICAgICAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0b29sYmFySWNvbkZhcT5cclxuICAgICAgICAgIDxycC10b29sYmFyLWljb25cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmFxKClcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRJY29uPVwiaGVscFwiXHJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e2ljb25OYW1lLkZhcSB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvcGVuRmFxKHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmZhcVVybClcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cInBob25lU2l6ZVNjcmVlblwiXHJcbiAgICAgICAgICA+PC9ycC10b29sYmFyLWljb24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uRmVlZGJhY2s+XHJcbiAgICAgICAgICA8cnAtdG9vbGJhci1pY29uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0ZlZWRiYWNrKClcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRJY29uPVwiY2hhdF9idWJibGVcIlxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwPVwie3tpY29uTmFtZS5GZWVkYmFjayB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJvcGVuRmVlZGJhY2sodGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuZmVlZGJhY2tVcmwpXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJwaG9uZVNpemVTY3JlZW5cIlxyXG4gICAgICAgICAgPjwvcnAtdG9vbGJhci1pY29uPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI3Rvb2xiYXJJY29uQ2FydD5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbGJhcl9fZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgIDxycC10b29sYmFyLWljb24gY2xhc3M9XCJhZGQtdG8tY2FydC1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICBzdmdJY29uPVwiY2FydC1zaG9wcGluZy1yZWd1bGFyXCJcclxuICAgICAgICAgICAgICAgICAgdG9vbHRpcD1cInt7J0FERF9UT19DQVJUJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgICAgICAgICAgICAob25DbGljayk9XCJhZGRBbGxUb0NhcnQoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93TGFiZWxdPVwicGhvbmVTaXplU2NyZWVuXCJcclxuICAgICAgICAgID48L3JwLXRvb2xiYXItaWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbGJhcl9fZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2V0dGluZ3NTaWRlYmFyPlxyXG4gICAgICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3sgJ1NFVFRJTkdTJyB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgPHJwLXNldHRpbmdzXHJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZUNhbWVyYURpc2FibGVkXT1cInZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpIHx8IGl0ZW1TZXJ2aWNlLmdldFdhbGt0aHJvdWdoQ2FtZXJhKClcIlxyXG4gICAgICAgICAgICAgICAgICBbbWluV2FsbEhlaWdodF09XCJnZXRNaW5HbG9iYWxXYWxsSGVpZ2h0KClcIlxyXG4gICAgICAgICAgICAgICAgICAob25XYWxsc0hlaWdodFVwZGF0ZSk9XCJ3YWxsc0hlaWdodFVwZGF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3JwLXNldHRpbmdzPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNjYXRlZ29yaWVzU2lkZWJhcj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdBUkNISVRFQ1RVUkUnIHwgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICA8cnAtY2F0ZWdvcnktbGlicmFyeVxyXG4gICAgICAgICAgICAgICAgICBbY2F0ZWdvcmllc109XCJjYXRlZ29yaWVzXCJcclxuICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5Q2xpY2spPVwic2hvd0xpYnJhcnlDYXRlZ29yeSgkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvcnAtY2F0ZWdvcnktbGlicmFyeT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjYWNjZXNzb2lyZXNDYXRlZ29yaWVzU2lkZWJhcj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdBQ0NFU1NPSVJFUycgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgIDxycC1jYXRlZ29yeS1saWJyYXJ5XHJcbiAgICAgICAgICAgICAgICAgIFtjYXRlZ29yaWVzXT1cImFjY2Vzc29pcmVDYXRlZ29yaWVzXCJcclxuICAgICAgICAgICAgICAgICAgKGNhdGVnb3J5Q2xpY2spPVwic2hvd0xpYnJhcnlDYXRlZ29yeSgkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvcnAtY2F0ZWdvcnktbGlicmFyeT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tU2hhcGVDcmVhdG9yU2lkZUJhcj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdDVVNUT01fU0hBUEVfQ1JFQVRPUicgfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgIDxycC1jdXN0b20tc2hhcGUtY3JlYXRvciBbc2hhcGVdPVwic2VsZWN0ZWRPYmplY3RcIj48L3JwLWN1c3RvbS1zaGFwZS1jcmVhdG9yPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21DeWxpbmRlckNyZWF0b3JTaWRlQmFyPlxyXG4gICAgICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3sgJ0NVU1RPTV9TSEFQRV9DUkVBVE9SJyB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgPGN1c3RvbS1jeWxpbmRlci1jcmVhdG9yIFtzaGFwZV09XCJzZWxlY3RlZE9iamVjdFwiPjwvY3VzdG9tLWN5bGluZGVyLWNyZWF0b3I+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI2xpYnJhcnlTaWRlYmFyPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwid2l0aC1zY3JvbGxhYmxlLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICA8aGVhZGVyIGNsYXNzPVwiZHJhd2VyX19oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNob3dBY3RpdmVDYXRlZ29yeVNpZGViYXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmFycm93X2JhY2tfaW9zPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7IHNlbGVjdGVkQ2F0ZWdvcnkubmFtZSB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1hdC1ib2R5XCIgKm5nSWY9XCJzZWxlY3RlZENhdGVnb3J5LmRlc2NyaXB0aW9uXCI+e3sgc2VsZWN0ZWRDYXRlZ29yeS5kZXNjcmlwdGlvbiB8IGxvY2FsaXplIH19PC9wPlxyXG4gICAgICAgICAgICAgIDxzZWN0aW9uIGZ4RmxleD1cImdyb3dcIiAqbmdJZj1cImxpYnJhcnlPYmplY3RzPy5sZW5ndGggPiAwIHx8IGhhc0N1c3RvbU9iamVjdHMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQ3VzdG9tT2JqZWN0cygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+e3sgJ0NVU1RPTScgfCBsb2NhbGl6ZSB9fTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cnAtb2JqZWN0LWxpYnJhcnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29iamVjdHNdPVwiY3VzdG9tT2JqZWN0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXREcmFnZ2VkKT1cInNldERyYWdnZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWxlYXNlRHJhZ2dlZCk9XCJyZWxlYXNlRHJhZ2dlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uT2JqZWN0Q2xpY2spPVwib25PYmplY3RMaWJyYXJ5Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3JwLW9iamVjdC1saWJyYXJ5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlicmFyeU9iamVjdHM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTJcIj57eyAnTElCUkFSWScgfCBsb2NhbGl6ZSB9fTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cnAtb2JqZWN0LWxpYnJhcnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29iamVjdHNdPVwibGlicmFyeU9iamVjdHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0RHJhZ2dlZCk9XCJzZXREcmFnZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVsZWFzZURyYWdnZWQpPVwicmVsZWFzZURyYWdnZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbk9iamVjdENsaWNrKT1cIm9uT2JqZWN0TGlicmFyeUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9ycC1vYmplY3QtbGlicmFyeT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3NlbGVjdGVkT2JqZWN0U2lkZWJhcj5cclxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkcmF3ZXJfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7ICdPQkpFQ1QnIHwgbG9jYWxpemUgfX08L2gyPlxyXG4gICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICA8cnAtc2VsZWN0ZWQtb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgIFtvYmplY3RdPVwic2VsZWN0ZWRPYmplY3RcIlxyXG4gICAgICAgICAgICAgICAgICAob25TZWxlY3RlZE9iamVjdENoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZE9iamVjdEh1ZCgpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvcnAtc2VsZWN0ZWQtb2JqZWN0PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNzZWxlY3RlZFdhbGxTaWRlYmFyPlxyXG4gICAgICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3sgJ1dBTEwnfCBsb2NhbGl6ZSB9fTwvaDI+XHJcbiAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgIDxycC1zZWxlY3RlZC13YWxsXHJcbiAgICAgICAgICAgICAgICAgIFt3YWxsXT1cInNlbGVjdGVkV2FsbFwiXHJcbiAgICAgICAgICAgICAgICAgIFt0ZXh0dXJlUGxhbmVdPVwic2VsZWN0ZWRFZGdlc1swXVwiXHJcbiAgICAgICAgICAgICAgICAgIFttaW5XYWxsSGVpZ2h0XT1cImdldE1pbldhbGxIZWlnaHQoc2VsZWN0ZWRXYWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXhXYWxsSGVpZ2h0XT1cIm1heFdhbGxIZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF4V2FsbFRoaWNrbmVzc109XCJtYXhXYWxsVGhpY2tuZXNzXCJcclxuICAgICAgICAgICAgICAgICAgW21heFdhbGxMZW5ndGhdPVwibWF4V2FsbExlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgIFttaW5XYWxsTGVuZ3RoXT1cIm1pbldhbGxMZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZVdhbGwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzZXRMZW5ndGgpPVwic2V0V2FsbExlbmd0aCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNldEhlaWdodCk9XCJzZXRXYWxsSGVpZ2h0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2V0VGhpY2tuZXNzKT1cInNldFdhbGxUaGlja25lc3MoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzZWxlY3RDb3JuZXIpPVwic2VsZWN0Q29ybmVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2V0VGV4dHVyZSk9XCJzZXRXYWxsVGV4dHVyZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNldENvbG9yKT1cInNldFdhbGxDb2xvcigkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvcnAtc2VsZWN0ZWQtd2FsbD5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0ZWRUaHJlZWRPYmplY3RTaWRlYmFyPlxyXG4gICAgICAgICAgPGhlYWRlciBjbGFzcz1cImRyYXdlcl9faGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCIgW3RleHRDb250ZW50XT1cIidTRVRUSU5HUycgfCBsb2NhbGl6ZVwiPjwvaDI+XHJcbiAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgIDxycC1zZWxlY3RlZC10aHJlZWQtb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgIFtvYmplY3RdPVwic2VsZWN0ZWRPYmplY3RcIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0NvcHldPVwic2hvd0NvcHlCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICBbc2hvd0RlbGV0ZV09XCJzaG93RGVsZXRlQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3dMb2NrXT1cInNob3dMb2NrQnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0ZWRPYmplY3RDaGFuZ2UpPVwidXBkYXRlU2VsZWN0ZWRPYmplY3RIdWQoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3JwLXNlbGVjdGVkLXRocmVlZC1vYmplY3Q+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgI3NlbGVjdGVkRmxvb3JTaWRlYmFyPlxyXG4gICAgICAgICAgPGgyIGNsYXNzPVwibWF0LXRpdGxlXCI+e3sgJ0ZMT09SJyB8IGxvY2FsaXplIH19PC9oMj5cclxuICAgICAgICAgIDxycC1zZWxlY3RlZC1mbG9vclxyXG4gICAgICAgICAgICAgICAgICBbZmxvb3JdPVwic2VsZWN0ZWRGbG9vclwiXHJcbiAgICAgICAgICAgICAgICAgIFt0ZXh0dXJlUGxhbmVdPVwic2VsZWN0ZWRGbG9vclwiXHJcbiAgICAgICAgICAgICAgICAgIChzZXRUZXh0dXJlKT1cInNldEZsb29yVGV4dHVyZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKHNldENvbG9yKT1cInNldEZsb29yQ29sb3IoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEZsb29yQ2xvc2VkKT1cInNlbGVjdGVkRmxvb3IgPSB1bmRlZmluZWRcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9ycC1zZWxlY3RlZC1mbG9vcj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicnAtaXRlbS1jb250ZXh0LW1lbnUtd3JhcCBtcnAtc2F2ZS1ncm91cGluZ1wiICpuZ0lmPVwidXNlcklzR3JvdXBpbmdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycC1pdGVtLWNvbnRleHQtbWVudS1pdGVtXCIgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uXCI+PG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmNoZWNrPC9tYXQtaWNvbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPnt7ICdHUk9VUElORycgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwLWl0ZW0tY29udGV4dC1tZW51LWl0ZW1cIiAoY2xpY2spPVwiY2FuY2VsR3JvdXBTZWxlY3Rpb24oKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPjxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jYW5jZWw8L21hdC1pY29uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+e3sgJ0NBTkNFTCcgfCBsb2NhbGl6ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICBgLFxyXG4gIHN0eWxlVXJsczogWycuL3Jvb20tcGxhbm5lci5jb21wb25lbnQuc2NzcyddLyosXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gqL1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUm9vbVBsYW5uZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgUGx1Z2luSW50ZXJmYWNlIHtcclxuICBAVmlld0NoaWxkKEZsb29ycGxhbm5lckNvbXBvbmVudCwge3N0YXRpYzogdHJ1ZX0pXHJcbiAgcHVibGljIGZsb29ycGxhbm5lcjogRmxvb3JwbGFubmVyQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uTGlicmFyeScsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbkxpYnJhcnk6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb25BY2Nlc3NvaXJlcycsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbkFjY2Vzc29pcmVzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uU2V0dGluZ3MnLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb25TZXR0aW5nczogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvbjJkVmlldycsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbjJkVmlldzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sYmFySWNvbjNkVmlldycsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbjNkVmlldzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdjYXRlZ29yaWVzU2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBjYXRlZ29yaWVzU2lkZWJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdhY2Nlc3NvaXJlc0NhdGVnb3JpZXNTaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIGFjY2Vzc29pcmVzQ2F0ZWdvcmllc1NpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnY3VzdG9tU2hhcGVDcmVhdG9yU2lkZUJhcicsIHtzdGF0aWM6IHRydWV9KSBjdXN0b21TaGFwZUNyZWF0b3JTaWRlQmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbUN5bGluZGVyQ3JlYXRvclNpZGVCYXInLCB7c3RhdGljOiB0cnVlfSkgY3VzdG9tQ3lsaW5kZXJDcmVhdG9yU2lkZUJhcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzZXR0aW5nc1NpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgc2V0dGluZ3NTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2xpYnJhcnlTaWRlYmFyJywge3N0YXRpYzogdHJ1ZX0pIGxpYnJhcnlTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGVkT2JqZWN0U2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBzZWxlY3RlZE9iamVjdFNpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRXYWxsU2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBzZWxlY3RlZFdhbGxTaWRlYmFyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGVkVGhyZWVkT2JqZWN0U2lkZWJhcicsIHtzdGF0aWM6IHRydWV9KSBzZWxlY3RlZFRocmVlZE9iamVjdFNpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRGbG9vclNpZGViYXInLCB7c3RhdGljOiB0cnVlfSkgc2VsZWN0ZWRGbG9vclNpZGViYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb25GYXEnLCB7c3RhdGljOiB0cnVlfSkgdG9vbGJhckljb25GYXE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhckljb25GZWVkYmFjaycsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbkZlZWRiYWNrOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXJJY29uQ2FydCcsIHtzdGF0aWM6IHRydWV9KSB0b29sYmFySWNvbkNhcnQ6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBsYXllckNsYXNzID0gJ2xheWVyJztcclxuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBkb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzaG93UGx1Z2luID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGZvY3VzQ29udHJvbHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHB1YmxpYyByZWFkb25seSBpY29uOiB0eXBlb2YgSWNvbkVudW0gPSBJY29uRW51bTtcclxuICBwdWJsaWMgcmVhZG9ubHkgaWNvbk5hbWU6IHR5cGVvZiBJY29uTmFtZSA9IEljb25OYW1lO1xyXG4gIHB1YmxpYyByZWFkb25seSB2aWV3TW9kZXM6IHR5cGVvZiBWaWV3TW9kZSA9IFZpZXdNb2RlO1xyXG5cclxuICBvYmplY3RzOiBUaHJlZWRNb2RlbFtdO1xyXG4gIGN1c3RvbU9iamVjdHM6IFRocmVlZE1vZGVsW107XHJcbiAgbGlicmFyeU9iamVjdHM6IFRocmVlZE1vZGVsW107XHJcbiAgY2F0ZWdvcmllczogQ2F0ZWdvcnlbXTtcclxuICBhY2Nlc3NvaXJlQ2F0ZWdvcmllczogQ2F0ZWdvcnlbXTtcclxuICBzZWxlY3RlZENhdGVnb3J5OiBDYXRlZ29yeTtcclxuICBzaG93Q29udGV4dE1lbnU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBzZWxlY3RlZFdhbGw6IFdhbGw7XHJcbiAgc2VsZWN0ZWRFZGdlOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRGbG9vcjogRmxvb3JQbGFuZUl0ZW07XHJcbiAgc2VsZWN0ZWRSb29tOiBSb29tO1xyXG4gIHNlbGVjdGVkT2JqZWN0OiBJdGVtIHwgSXRlbUdyb3VwO1xyXG5cclxuICBwdWJsaWMgd2FsbExlbmd0aEluZm9EaWFsb2dFbmFibGVkID0gdHJ1ZTtcclxuICBwdWJsaWMgbWF4V2FsbEhlaWdodDogbnVtYmVyO1xyXG4gIHB1YmxpYyBtYXhXYWxsVGhpY2tuZXNzOiBudW1iZXI7XHJcbiAgcHVibGljIG1heFdhbGxMZW5ndGg6IG51bWJlcjtcclxuICBwdWJsaWMgbWluV2FsbExlbmd0aDogbnVtYmVyO1xyXG4gIHB1YmxpYyBkZXNrdG9wU2l6ZVNjcmVlbjogYm9vbGVhbjtcclxuICBwdWJsaWMgdGFibGV0U2l6ZVNjcmVlbjogYm9vbGVhbjtcclxuICBwdWJsaWMgcGhvbmVTaXplU2NyZWVuOiBib29sZWFuO1xyXG4gIHB1YmxpYyBjb250ZXh0TWVudU1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQ7XHJcbiAgcHVibGljIHNob3dTZXR0aW5nc0J1dHRvbjogYm9vbGVhbjtcclxuICBwdWJsaWMgc2hvd0NvbmZpZ3VyYXRpb25CdXR0b246IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dEZWxldGVCdXR0b246IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dMb2NrQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2hvd0FSQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2hvd0NvcHlCdXR0b246IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dHcm91cE1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0dyb3VwRWRpdE1lbnVCdXR0b25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dJY29uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHVzZXJJc0dyb3VwaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dDb252ZXJzaW9uQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFkZFNlbGVjdGVkQ2xhc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2FsYWJsZU9iamVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHByaXZhdGUgX21vZGUgPSBWaWV3TW9kZS5Sb29tUGxhbjNEO1xyXG4gIHByaXZhdGUgX2NhdGFsb2dJc1Nob3duOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX2Jsb2NrTGVmdFNpZGVCYXIgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgaWNvblNlcnZpY2U6IEhvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHZpZXdNb2RlU2VydmljZTogVmlld01vZGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIG1vZGVsc1NlcnZpY2U6IE1vZGVsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcmVzZXRzU2VydmljZTogUHJlc2V0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjcmVlbkFuYWx5c2lzOiBTY3JlZW5TaXplQW5hbHlzaXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfdXRpbHNTZXJ2aWNlOiBVdGlsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Zsb29ycGxhblNlcnZpY2U6IEZsb29ycGxhblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcclxuICAgIHByaXZhdGUgX2h1ZFNlcnZpY2U6IEh1ZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yb29tU2VydmljZTogUm9vbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcmlhbGl6YXRpb25TZXJ2aWNlOiBJdGVtU2VyaWFsaXphdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9saWdodHNTZXJ2aWNlOiBMaWdodHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXJTZXJ2aWNlOiBBclNlcnZpY2UsXHJcbiAgICBwdWJsaWMgaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHVibGljIHNldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2dvb2dsZVRhZ01hbmFnZXI6IEdvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcGVybWFuZW50U3RvcmVTZXJ2aWNlOiBQZXJtYW5lbnRTdG9yZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBFdmVudFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3JTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3ByZXNldHNTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgcHVibGljIGhhbmRsZURvY0tleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRFZGdlcygpIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkV2FsbCAmJiB0aGlzLnNlbGVjdGVkRWRnZSA/XHJcbiAgICAgIFt0aGlzLnNlbGVjdGVkV2FsbFt0aGlzLnNlbGVjdGVkRWRnZV1dIDpcclxuICAgICAgW3RoaXMuc2VsZWN0ZWRXYWxsICYmIHRoaXMuc2VsZWN0ZWRXYWxsLmJhY2tFZGdlLFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXYWxsICYmIHRoaXMuc2VsZWN0ZWRXYWxsLmZyb250RWRnZVxyXG4gICAgICBdLmZpbHRlcihlZGdlID0+IGVkZ2UpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm1heFdhbGxIZWlnaHQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5Lk1heFdhbGxIZWlnaHQpO1xyXG4gICAgdGhpcy5tYXhXYWxsVGhpY2tuZXNzID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5NYXhXYWxsVGhpY2tuZXNzKTtcclxuICAgIHRoaXMubWF4V2FsbExlbmd0aCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuTWF4V2FsbExlbmd0aCk7XHJcbiAgICB0aGlzLm1pbldhbGxMZW5ndGggPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5Lk1pbldhbGxMZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbkxpYnJhcnksXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDIwMFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb25BY2Nlc3NvaXJlcyxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogMjAwXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbjJkVmlldyxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogNDAwXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvbjNkVmlldyxcclxuICAgICAgcG9zaXRpb246ICd0b3AnLFxyXG4gICAgICBwcmlvcml0eTogNDAwXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVnaXN0ZXJUb29sYmFySWNvbiwge1xyXG4gICAgICB0ZW1wbGF0ZTogdGhpcy50b29sYmFySWNvblNldHRpbmdzLFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiA1MDBcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJJY29uRmFxLFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiA2MDBcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZWdpc3RlclRvb2xiYXJJY29uLCB7XHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRvb2xiYXJJY29uRmVlZGJhY2ssXHJcbiAgICAgIHBvc2l0aW9uOiAndG9wJyxcclxuICAgICAgcHJpb3JpdHk6IDcwMFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlZ2lzdGVyVG9vbGJhckljb24sIHtcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudG9vbGJhckljb25DYXJ0LFxyXG4gICAgICBwb3NpdGlvbjogJ3RvcCcsXHJcbiAgICAgIHByaW9yaXR5OiAxMDAwXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX2FwcFNlcnZpY2UuY2F0ZWdvcmllc0xvYWRlZC5zdWJzY3JpYmUoKGNhdGVnb3JpZXM6IENhdGVnb3J5W10pID0+IHtcclxuICAgICAgICBpZiAoY2F0ZWdvcmllcykge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzID0gdGhpcy5fYXBwU2VydmljZS5nZXRDYXRlZ29yaWVzKCdhcmNoaXRlY3R1cmUnKTtcclxuICAgICAgICAgIHRoaXMuYWNjZXNzb2lyZUNhdGVnb3JpZXMgPSB0aGlzLl9hcHBTZXJ2aWNlLmdldENhdGVnb3JpZXMoJ2FjY2Vzc29pcmVzJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy52aWV3TW9kZVNlcnZpY2Uudmlld01vZGVDaGFuZ2VkLnN1YnNjcmliZSgobW9kZTogVmlld01vZGUpID0+IHRoaXMuX3ZpZXdNb2RlQ2hhbmdlZChtb2RlKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TZXQyRFZpZXcsICh7c2VuZFVwZGF0ZXN9KSA9PiB0aGlzLnVwZGF0ZU1vZGUoVmlld01vZGUuRmxvb3JQbGFuMkQsIHNlbmRVcGRhdGVzKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5TZXQzRFZpZXcsICh7c2VuZFVwZGF0ZXN9KSA9PiB0aGlzLnVwZGF0ZU1vZGUoVmlld01vZGUuUm9vbVBsYW4zRCwgc2VuZFVwZGF0ZXMpKSxcclxuICAgICAgdGhpcy5faW5pdFNjcmVlblNpemVIYW5kbGluZygpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuR3JvdXBNb2RlQ2hhbmdlZCwgKHtzaG93R3JvdXBNZW51fSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd0dyb3VwTWVudSA9IHNob3dHcm91cE1lbnU7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuSXRlbVNlbGVjdGVkLCAoaXRlbSkgPT4gdGhpcy5vYmplY3RTZWxlY3RlZChpdGVtKSksXHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnN1YnNjcmliZShNZXNzYWdlVHlwZS5JdGVtVW5zZWxlY3RlZCwgKGl0ZW0pID0+IHRoaXMub2JqZWN0VW5zZWxlY3RlZCgpKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkxlZnRTaWRlYmFyQ2xvc2VDbGlja2VkLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29yID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXYWxsID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFNb3ZlbWVudENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2UpLFxyXG4gICAgICB0aGlzLl9yb29tU2VydmljZS53YWxsU2VsZWN0ZWQuc3Vic2NyaWJlKChzZWxlY3RlZFdhbGxFdmVudDogU2VsZWN0ZWRXYWxsRXZlbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZsb29yKSB7XHJcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMZWZ0U2lkZWJhcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RXYWxsKHNlbGVjdGVkV2FsbEV2ZW50KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3Jvb21TZXJ2aWNlLmZsb29yU2VsZWN0ZWQuc3Vic2NyaWJlKChzZWxlY3RlZEZsb29yRXZlbnQ6IFNlbGVjdGVkRmxvb3JFdmVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkV2FsbCkge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTGVmdFNpZGViYXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkV2FsbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RGbG9vcihzZWxlY3RlZEZsb29yRXZlbnQpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5faXRlbVNlcnZpY2UuY29weUl0ZW0uc3Vic2NyaWJlKChpdGVtOiBJdGVtKSA9PiB0aGlzLl9jb3B5SXRlbShpdGVtKSksXHJcbiAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmRlbGV0ZUl0ZW0uc3Vic2NyaWJlKChpdGVtOiBJdGVtKSA9PiB0aGlzLl9yZW1vdmVPYmplY3QoaXRlbSkpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuU2hvd1Byb2R1Y3RDYXRhbG9nLCAoKSA9PiB0aGlzLl9jYXRhbG9nSXNTaG93biA9IHRydWUpLFxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5zdWJzY3JpYmUoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nLCAoKSA9PiB0aGlzLl9jYXRhbG9nSXNTaG93biA9IGZhbHNlKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkJsb2NrTGVmdFNpZGViYXIsIChibG9jaykgPT4gdGhpcy5fYmxvY2tMZWZ0U2lkZUJhciA9IGJsb2NrKSxcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlNob3dGdXJuaXR1cmVTaWRlYmFyLCAoY2F0ZWdvcnk6IENhdGVnb3J5KSA9PiB0aGlzLnNob3dMaWJyYXJ5Q2F0ZWdvcnkoY2F0ZWdvcnkpKSxcclxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLm9iamVjdE1vdmluZ09yUm90YXRpbmcuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2UpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc2hvd0FSQnV0dG9uID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93QXJCdXR0b24gJiYgYXdhaXQgdGhpcy5fYXJTZXJ2aWNlLmFyU3VwcG9ydGVkKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLnRvb2xiYXJJY29uTGlicmFyeSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudG9vbGJhckljb25BY2Nlc3NvaXJlcyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudG9vbGJhckljb25TZXR0aW5ncyA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudG9vbGJhckljb24yZFZpZXcgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRvb2xiYXJJY29uM2RWaWV3ID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jYXRlZ29yaWVzU2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuYWNjZXNzb2lyZXNDYXRlZ29yaWVzU2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuY3VzdG9tU2hhcGVDcmVhdG9yU2lkZUJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuY3VzdG9tQ3lsaW5kZXJDcmVhdG9yU2lkZUJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2V0dGluZ3NTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5saWJyYXJ5U2lkZWJhciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zZWxlY3RlZFdhbGxTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRocmVlZE9iamVjdFNpZGViYXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmxvb3JTaWRlYmFyID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5fYWN0aXZlQ2F0ZWdvcnlTaWRlYmFyVGVtcGxhdGUgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0U2NyZWVuU2l6ZUhhbmRsaW5nKCk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2NyZWVuQW5hbHlzaXMuc2NyZWVuU2l6ZUNoYW5nZWQuc3Vic2NyaWJlKChpbmZvOiBTY3JlZW5TaXplSW5mbykgPT4ge1xyXG4gICAgICB0aGlzLmRlc2t0b3BTaXplU2NyZWVuID0gaW5mby5pc0Rlc2t0b3BTaXplO1xyXG4gICAgICB0aGlzLnRhYmxldFNpemVTY3JlZW4gPSBpbmZvLmlzVGFibGV0U2l6ZTtcclxuICAgICAgdGhpcy5waG9uZVNpemVTY3JlZW4gPSBpbmZvLmlzUGhvbmVTaXplO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmRlc2t0b3BTaXplU2NyZWVuICYmICh0aGlzLnZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpIHx8IHRoaXMudmlld01vZGVTZXJ2aWNlLmlzVlJWaWV3QWN0aXZlKCkpKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNb2RlKFZpZXdNb2RlLlJvb21QbGFuM0QsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ZpZXdNb2RlQ2hhbmdlZChtb2RlOiBWaWV3TW9kZSkge1xyXG4gICAgdGhpcy5fbW9kZSA9IG1vZGU7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgfVxyXG5cclxuICBvYmplY3RTZWxlY3RlZChvYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXApIHtcclxuICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuc2FsYWJsZU9iamVjdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZE9iamVjdCA9IG9iamVjdDtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkge1xyXG4gICAgICB0aGlzLnNob3dHcm91cE1lbnUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3dHcm91cEVkaXRNZW51QnV0dG9ucyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QgaW5zdGFuY2VvZiBJdGVtKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhICYmIHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGEuZ29vZElkKSB7XHJcbiAgICAgICAgdGhpcy5zYWxhYmxlT2JqZWN0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNob3dHcm91cE1lbnUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93U2V0dGluZ3NCdXR0b24gPSB0aGlzLl9oYXNTZXR0aW5ncyh0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgdGhpcy5zaG93Q29uZmlndXJhdGlvbkJ1dHRvbiA9IHRoaXMuX2lzQ29uZmlndXJhYmxlKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgICB0aGlzLnNob3dEZWxldGVCdXR0b24gPSB0aGlzLl9pc0RlbGV0YWJsZSh0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgdGhpcy5zaG93Q29weUJ1dHRvbiA9IHRoaXMuX2lzQ29weWFibGUodGhpcy5zZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgIHRoaXMuc2hvd0NvbnZlcnNpb25CdXR0b24gPSB0aGlzLl9pc0NvbnZlcnNpb25JdGVtKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGEuY29udmVyc2lvbkdUTVNlbmQpIHtcclxuICAgICAgICB0aGlzLmFkZFNlbGVjdGVkQ2xhc3MgPSB0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhLmNvbnZlcnNpb25HVE1TZW5kO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWRkU2VsZWN0ZWRDbGFzcyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdXRpbHNTZXJ2aWNlLmZvcmNlQ2hhbmdlRGV0ZWN0aW9uKHRoaXMuX2NkLCB0aGlzLCAnc2VsZWN0ZWRPYmplY3QnKTtcclxuICAgIHRoaXMuc2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHNob3dTZWxlY3RlZE9iamVjdFNpZGViYXIoKSB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlUHJvZHVjdENhdGFsb2cpO1xyXG5cclxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5zZWxlY3RlZE9iamVjdC5tZXRhZGF0YTtcclxuICAgIGlmIChtZXRhZGF0YSAmJiAoaXNDdXN0b21TaGFwZVR5cGUobWV0YWRhdGEuaXRlbVR5cGUpIHx8IGlzQ3VzdG9tU2hhcGVXYWxsVHlwZShtZXRhZGF0YS5pdGVtVHlwZSkpKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuY3VzdG9tU2hhcGVDcmVhdG9yU2lkZUJhcik7XHJcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhICYmIChpc0N1c3RvbUN5bGluZGVyVHlwZShtZXRhZGF0YS5pdGVtVHlwZSkgfHwgaXNDdXN0b21DeWxpbmRlcldhbGxUeXBlKG1ldGFkYXRhLml0ZW1UeXBlKSkpIHtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5jdXN0b21DeWxpbmRlckNyZWF0b3JTaWRlQmFyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2VsZWN0ZWRPYmplY3RTaWRlYmFyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVDb25maWd1cmF0aW9uQnV0dG9uQ2xpY2soYnRuOiBDdXN0b21CdXR0b24pOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICBidG4uaGFuZGxlcih0aGlzLnNlbGVjdGVkT2JqZWN0KTtcclxuICB9XHJcblxyXG4gIG9iamVjdFVuc2VsZWN0ZWQoKSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNob3dHcm91cE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0dyb3VwRWRpdE1lbnVCdXR0b25zID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWxlY3RlZE9iamVjdEh1ZCgpIHtcclxuICAgIHRoaXMuX2h1ZFNlcnZpY2UudXBkYXRlU2VsZWN0ZWRJdGVtSHVkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRGVsZXRlT2JqZWN0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QgJiYgdGhpcy5faXNEZWxldGFibGUodGhpcy5zZWxlY3RlZE9iamVjdCkpIHtcclxuICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZE9iamVjdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2VsZWN0ZWRPYmplY3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fcmVtb3ZlT2JqZWN0KHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG4gICAgdGhpcy5vYmplY3RVbnNlbGVjdGVkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9nZ2xlTG9ja1NlbGVjdGVkT2JqZWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkT2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QubG9ja2VkID0gIXRoaXMuc2VsZWN0ZWRPYmplY3QubG9ja2VkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlT2JqZWN0KG9iamVjdDogSXRlbSB8IEl0ZW1Hcm91cCkge1xyXG4gICAgaWYgKGlzV2FsbFR5cGUob2JqZWN0LnVzZXJEYXRhLml0ZW1UeXBlKSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50V2FsbCA9ICg8V2FsbEl0ZW0+b2JqZWN0KS5jdXJyZW50V2FsbDtcclxuICAgICAgaWYgKGN1cnJlbnRXYWxsKSB7XHJcbiAgICAgICAgY3VycmVudFdhbGwucmVtb3ZlSXRlbSg8SXRlbT5vYmplY3QpO1xyXG4gICAgICAgIGN1cnJlbnRXYWxsLnJlbW92ZU9uSXRlbSg8SXRlbT5vYmplY3QpO1xyXG4gICAgICAgIGN1cnJlbnRXYWxsLmZpcmVSZWRyYXcoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpc0Z1cm5pdHVyZVR5cGUob2JqZWN0LnVzZXJEYXRhLml0ZW1UeXBlKSkge1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlbW92ZVNlbGVjdGVkRnVybml0dXJlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKG9iamVjdC5jYW5CZVJlbW92ZWQoKSkge1xyXG4gICAgICB0aGlzLl9yZW1vdmVJdGVtKG9iamVjdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYmplY3QucmVtb3ZlZCgpO1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVtb3ZlSXRlbShvYmplY3Q6IEl0ZW0gfCBJdGVtR3JvdXApIHtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUl0ZW0ob2JqZWN0KTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAncmVtb3ZlT2JqZWN0J30pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29weVNlbGVjdGVkT2JqZWN0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuX2NvcHlJdGVtKHRoaXMuc2VsZWN0ZWRPYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY29weUl0ZW0ob3JpZ2luYWw6IEl0ZW0gfCBJdGVtR3JvdXApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGlzQ3VzdG9tU2hhcGVJdGVtOiBib29sZWFuID0gb3JpZ2luYWwgaW5zdGFuY2VvZiBDdXN0b21TaGFwZUZsb29ySXRlbTtcclxuICAgIGNvbnN0IGlzQ3VzdG9tU2hhcGVXYWxsSXRlbTogYm9vbGVhbiA9IG9yaWdpbmFsIGluc3RhbmNlb2YgQ3VzdG9tU2hhcGVXYWxsSXRlbTtcclxuICAgIGNvbnN0IGlzQ3VzdG9tQ3lsaW5kZXJJdGVtOiBib29sZWFuID0gb3JpZ2luYWwgaW5zdGFuY2VvZiBDdXN0b21DeWxpbmRlckZsb29ySXRlbTtcclxuICAgIGNvbnN0IGlzQ3VzdG9tQ3lsaW5kZXJXYWxsSXRlbTogYm9vbGVhbiA9IG9yaWdpbmFsIGluc3RhbmNlb2YgQ3VzdG9tQ3lsaW5kZXJXYWxsSXRlbTtcclxuICAgIGNvbnN0IGlzUmVzaXphYmxlRG9vck9yV2luZG93OiBib29sZWFuID0gb3JpZ2luYWwgaW5zdGFuY2VvZiBJbldhbGxJdGVtICYmIG9yaWdpbmFsLmlzQ3VzdG9tO1xyXG4gICAgaWYgKGlzQ3VzdG9tU2hhcGVJdGVtIHx8IGlzQ3VzdG9tU2hhcGVXYWxsSXRlbSB8fCBpc0N1c3RvbUN5bGluZGVySXRlbSB8fCBpc0N1c3RvbUN5bGluZGVyV2FsbEl0ZW0gfHwgaXNSZXNpemFibGVEb29yT3JXaW5kb3cpIHtcclxuICAgICAgY29uc3QgY29weSA9IChvcmlnaW5hbCBhcyBDdXN0b21TaGFwZUZsb29ySXRlbSB8IEluV2FsbEl0ZW0pLmNsb25lSXRlbSgpO1xyXG4gICAgICB0aGlzLl9pdGVtU2VydmljZS5hZGRJdGVtKGNvcHkpO1xyXG4gICAgICBpZiAoY29weSBpbnN0YW5jZW9mIFdhbGxJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgY2xvc2VzdFdhbGxFZGdlID0gdGhpcy5fcm9vbVNlcnZpY2UuZ2V0Q2xvc2VzdFdhbGxFZGdlKG9yaWdpbmFsLnBvc2l0aW9uLngsIG9yaWdpbmFsLnBvc2l0aW9uLnopO1xyXG4gICAgICAgIGNvcHkucGxhY2VPbkVkZ2UoY2xvc2VzdFdhbGxFZGdlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldERyYWcsIGNvcHkpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlN0YXJ0RHJhZywgb3JpZ2luYWwucG9zaXRpb24pO1xyXG4gICAgfSBlbHNlIGlmIChvcmlnaW5hbC51c2VyRGF0YSAmJiBvcmlnaW5hbC51c2VyRGF0YS5pdGVtSWRlbnRpZmllcikge1xyXG4gICAgICBpZiAob3JpZ2luYWwubWV0YWRhdGEudGhpcmRQYXJ0eU1vZGVsKSB7XHJcbiAgICAgICAgLy8gV2hlbiBpdCdzIGEgdGhpcmQgcGFydHkgbW9kZWwsIHdlIHNob3VsZCBqdXN0IGNsb25lIHRoZSBPYmplY3QoM0QpXHJcbiAgICAgICAgLy8gY29uc3QgY2xvbmUgPSBvcmlnaW5hbC5jbG9uZSgpO1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQ2xvbmVUaGlyZFBhcnR5TW9kZWwsIG9yaWdpbmFsIGFzIEl0ZW0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQ29weUlPbmVGdXJuaXR1cmVJbnRvU2NlbmVCeVNLVSwgb3JpZ2luYWwgYXMgSXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGRyYWdnZWREYXRhOiBEcmFnZ2VkRGF0YSA9IHtcclxuICAgICAgICBuYW1lOiBvcmlnaW5hbC5uYW1lLFxyXG4gICAgICAgIHR5cGU6IG9yaWdpbmFsLm1ldGFkYXRhLml0ZW1UeXBlLFxyXG4gICAgICAgIGlPbmU6IGZhbHNlLFxyXG4gICAgICAgIG92ZXJyaWRlczoge1xyXG4gICAgICAgICAgcm90YXRpb246IG9yaWdpbmFsLnJvdGF0aW9uICYmIG9yaWdpbmFsLnJvdGF0aW9uLmNsb25lKCksXHJcbiAgICAgICAgICAvLyBzY2FsZTogb3JpZ2luYWwuc2NhbGUgJiYgb3JpZ2luYWwuc2NhbGUuY2xvbmUoKSxcclxuICAgICAgICAgIG9wZW5pbmc6IChvcmlnaW5hbCBhcyBhbnkpLm9wZW5pbmcsXHJcbiAgICAgICAgICB0ZXh0dXJlOiAob3JpZ2luYWwgYXMgYW55KS50ZXh0dXJlLFxyXG4gICAgICAgICAgaXNDb3B5OiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldERyYWcsIGRyYWdnZWREYXRhKTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TdGFydERyYWcsIG9yaWdpbmFsLnBvc2l0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHpvb21SZXNldCgpIHtcclxuICAgIHRoaXMuZmxvb3JwbGFubmVyLnpvb21SZXNldCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhbnRab29tT3V0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JwbGFubmVyLmNhbnRab29tT3V0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhbnRab29tSW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vcnBsYW5uZXIuY2FudFpvb21JbjtcclxuICB9XHJcblxyXG4gIHpvb21PdXQoKSB7XHJcbiAgICB0aGlzLmZsb29ycGxhbm5lci56b29tT3V0KCk7XHJcbiAgfVxyXG5cclxuICB6b29tSW4oKSB7XHJcbiAgICB0aGlzLmZsb29ycGxhbm5lci56b29tSW4oKTtcclxuICB9XHJcblxyXG4gIHVuc2VsZWN0QWxsKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZsb29yID0gbnVsbDtcclxuICAgIHRoaXMuc2VsZWN0ZWRFZGdlID0gbnVsbDtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsID0gbnVsbDtcclxuICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QgPSBudWxsO1xyXG4gICAgaWYgKCF0aGlzLl9ibG9ja0xlZnRTaWRlQmFyKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVNb2RlKHZhbHVlOiBWaWV3TW9kZSwgc2VuZFVwZGF0ZXMgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5fbW9kZSA9IHZhbHVlO1xyXG4gICAgaWYgKHNlbmRVcGRhdGVzKSB7XHJcbiAgICAgIHRoaXMudmlld01vZGVTZXJ2aWNlLnNldFZpZXdNb2RlKHRoaXMuX2Zsb29ycGxhblNlcnZpY2UuZ2V0U2l6ZSgpLCB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLmdldENlbnRlcigpLCB2YWx1ZSk7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuVmlld01vZGVDaGFuZ2VkLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93TGlicmFyeUNhdGVnb3JpZXMoKSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZyk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLmNhdGVnb3JpZXNTaWRlYmFyKTtcclxuICAgIHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlID0gdGhpcy5jYXRlZ29yaWVzU2lkZWJhcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93QWNjZXNzb2lyZUNhdGVnb3JpZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZyk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLmFjY2Vzc29pcmVzQ2F0ZWdvcmllc1NpZGViYXIpO1xyXG4gICAgdGhpcy5fYWN0aXZlQ2F0ZWdvcnlTaWRlYmFyVGVtcGxhdGUgPSB0aGlzLmFjY2Vzc29pcmVzQ2F0ZWdvcmllc1NpZGViYXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0FjdGl2ZUNhdGVnb3J5U2lkZWJhcigpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNob3dMaWJyYXJ5Q2F0ZWdvcnkoY2F0ZWdvcnk6IENhdGVnb3J5KSB7XHJcbiAgICB0aGlzLm9iamVjdHMgPSBhd2FpdCB0aGlzLm1vZGVsc1NlcnZpY2UuZ2V0SXRlbXNGcm9tQ2F0ZWdvcnkoY2F0ZWdvcnkuaWQpO1xyXG4gICAgdGhpcy5jdXN0b21PYmplY3RzID0gdGhpcy5vYmplY3RzLmZpbHRlcihvYmplY3QgPT4gb2JqZWN0LmlzQ3VzdG9tKTtcclxuICAgIHRoaXMubGlicmFyeU9iamVjdHMgPSB0aGlzLm9iamVjdHMuZmlsdGVyKG9iamVjdCA9PiAhb2JqZWN0LmlzQ3VzdG9tKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9IGNhdGVnb3J5O1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5saWJyYXJ5U2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVQcm9kdWN0Q2F0YWxvZyk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNldExlZnRTaWRlYmFyLCB0aGlzLnNldHRpbmdzU2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3BlbkZhcSh1cmw6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5vcGVuKHVybCwgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuZmFxVXJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93RmFxKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0ljb24gPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5mYXFVcmwgIT09IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvcGVuRmVlZGJhY2sodXJsOiBzdHJpbmcpIHtcclxuICAgIHdpbmRvdy5vcGVuKHVybCwgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuZmVlZGJhY2tVcmwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEFsbFRvQ2FydCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93RmVlZGJhY2soKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaG93SWNvbiA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmZlZWRiYWNrVXJsICE9PSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVzID0gW1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRWRnZSAmJiB0aGlzLnNlbGVjdGVkV2FsbCAmJiB0aGlzLnNlbGVjdGVkV2FsbFt0aGlzLnNlbGVjdGVkRWRnZV0sXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRXYWxsLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkRmxvb3IsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3RcclxuICAgIF07XHJcbiAgICBjb25zdCBzZWxlY3RhYmxlID0gc2VsZWN0YWJsZXNbMF07XHJcbiAgICBpZiAoc2VsZWN0YWJsZSkge1xyXG4gICAgICB0aGlzLl9tb2RlID0gVmlld01vZGUuUm9vbVBsYW4zRDtcclxuICAgICAgdGhpcy5zaG93UGx1Z2luLmVtaXQoc2VsZWN0YWJsZSk7XHJcbiAgICB9IGVsc2UgaWYgKCFzZWxlY3RhYmxlKSB7XHJcbiAgICAgIHRoaXMuZG9uZS5lbWl0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kRWRnZVdhbGxQbGFjZW1lbnQod2FsbCwgZWRnZSkge1xyXG4gICAgY29uc3QgZWRnZVBsYWNlbWVudHMgPSBbJ2Zyb250RWRnZScsICdiYWNrRWRnZSddO1xyXG4gICAgcmV0dXJuIGVkZ2VQbGFjZW1lbnRzLnJlZHVjZSgocGxhY2VtZW50LCBwKSA9PiB7XHJcbiAgICAgIGlmICh3YWxsW3BdID09PSBlZGdlKSB7XHJcbiAgICAgICAgcGxhY2VtZW50ID0gcDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGxhY2VtZW50O1xyXG4gICAgfSwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0V2FsbChzZWxlY3RlZFdhbGxFdmVudDogU2VsZWN0ZWRXYWxsRXZlbnQpIHtcclxuICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsID0gc2VsZWN0ZWRXYWxsRXZlbnQud2FsbDtcclxuICAgIHRoaXMuY29udGV4dE1lbnVNb3VzZUV2ZW50ID0gc2VsZWN0ZWRXYWxsRXZlbnQuZXZlbnQ7XHJcbiAgICBpZiAoc2VsZWN0ZWRXYWxsRXZlbnQud2FsbCkge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRXYWxsRXZlbnQuZWRnZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFZGdlID0gdGhpcy5maW5kRWRnZVdhbGxQbGFjZW1lbnQoc2VsZWN0ZWRXYWxsRXZlbnQud2FsbCwgc2VsZWN0ZWRXYWxsRXZlbnQuZWRnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudmlld01vZGVTZXJ2aWNlLmlzMmRWaWV3QWN0aXZlKCkpIHtcclxuICAgICAgICB0aGlzLnNob3dTZWxlY3RlZFdhbGxTaWRlYmFyKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RlZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1NlbGVjdGVkV2FsbFNpZGViYXIoKSB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5zZWxlY3RlZFdhbGxTaWRlYmFyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93U2VsZWN0ZWRUaHJlZWRPYmplY3RTaWRlYmFyKCkge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2V0TGVmdFNpZGViYXIsIHRoaXMuc2VsZWN0ZWRUaHJlZWRPYmplY3RTaWRlYmFyKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEZsb29yKHNlbGVjdGVkRmxvb3JFdmVudDogU2VsZWN0ZWRGbG9vckV2ZW50KSB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm9vbSA9IHNlbGVjdGVkRmxvb3JFdmVudC5yb29tO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZsb29yID0gc2VsZWN0ZWRGbG9vckV2ZW50LnJvb20uZmxvb3JQbGFuZTtcclxuICAgIHRoaXMuY29udGV4dE1lbnVNb3VzZUV2ZW50ID0gc2VsZWN0ZWRGbG9vckV2ZW50LmV2ZW50O1xyXG4gICAgaWYgKHNlbGVjdGVkRmxvb3JFdmVudC5yb29tKSB7XHJcbiAgICAgIGlmICh0aGlzLnZpZXdNb2RlU2VydmljZS5pczJkVmlld0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0ZWRGbG9vclNpZGViYXIoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGVkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93U2VsZWN0ZWRGbG9vclNpZGViYXIoKSB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXRMZWZ0U2lkZWJhciwgdGhpcy5zZWxlY3RlZEZsb29yU2lkZWJhcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0Rmxvb3JUZXh0dXJlKHRleHR1cmU6IFRleHR1cmUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX3Jvb21TZXJ2aWNlLnNldEZsb29yVGV4dHVyZSh0aGlzLnNlbGVjdGVkUm9vbSwgdGV4dHVyZSk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ2Zsb29yVGV4dHVyZScsIHBhdGNoOiBmYWxzZX0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEZsb29yQ29sb3IoY29sb3I6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fcm9vbVNlcnZpY2Uuc2V0Rmxvb3JDb2xvcih0aGlzLnNlbGVjdGVkUm9vbSwgY29sb3IpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICdmbG9vckNvbG9yJywgcGF0Y2g6IGZhbHNlfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVXYWxsKHdhbGw6IFdhbGwpIHtcclxuICAgIHdhbGwucmVtb3ZlKCk7XHJcbiAgICB0aGlzLl9mbG9vcnBsYW5TZXJ2aWNlLnJlbW92ZVdhbGwod2FsbCk7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3JlbW92ZVdhbGwnfSk7XHJcbiAgfVxyXG5cclxuICBzZXRXYWxsTGVuZ3RoKHtsZW5ndGgsIGF0RW5kLCBlZGdlfTogeyBsZW5ndGg6IG51bWJlciwgYXRFbmQ6IGJvb2xlYW4sIGVkZ2U/OiBIYWxmRWRnZSB9KSB7XHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5zZWxlY3RlZFdhbGw7XHJcbiAgICBjb25zdCBvcmlnTGVuZ3RoID0gZWRnZSA/IGVkZ2UuaW50ZXJpb3JEaXN0YW5jZSgpIDogd2FsbC5sZW5ndGg7XHJcbiAgICBjb25zdCBzdGFydCA9IGF0RW5kID8gd2FsbC5nZXRTdGFydCgpIDogd2FsbC5nZXRFbmQoKTtcclxuICAgIGNvbnN0IGVuZCA9IGF0RW5kID8gd2FsbC5nZXRFbmQoKSA6IHdhbGwuZ2V0U3RhcnQoKTtcclxuICAgIGNvbnN0IGR4ID0gZW5kLnggLSBzdGFydC54O1xyXG4gICAgY29uc3QgZHkgPSBlbmQueSAtIHN0YXJ0Lnk7XHJcbiAgICBjb25zdCBrID0gbGVuZ3RoIC8gb3JpZ0xlbmd0aDtcclxuICAgIGVuZC5tb3ZlKGsgKiBkeCArIHN0YXJ0LngsIGsgKiBkeSArIHN0YXJ0LnkpO1xyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS51cGRhdGUoKTtcclxuICAgIHRoaXMuX3Jvb21TZXJ2aWNlLnVwZGF0ZUZsb29yc0FuZEVkZ2VzKCkudGhlbigoKSA9PiB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYU1vdmVtZW50Q2hhbmdlZC5uZXh0KCkpO1xyXG4gICAgdGhpcy5fbGlnaHRzU2VydmljZS51cGRhdGVBbGxPZmZzZXRzKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3dhbGxMZW5ndGgnfSk7XHJcblxyXG4gICAgaWYgKHRoaXMud2FsbExlbmd0aEluZm9EaWFsb2dFbmFibGVkICYmIHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd0RldGFpbGVkV2FsbE1lYXN1cmVtZW50cykpIHtcclxuICAgICAgaWYgKGVkZ2UgJiYgTWF0aC5yb3VuZChlZGdlLmludGVyaW9yRGlzdGFuY2UoKSkgIT09IGxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1dhbGxMZW5ndGhJbmZvRGlhbG9nKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dXYWxsTGVuZ3RoSW5mb0RpYWxvZygpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZy5vcGVuKEluZm9EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHRpdGxlOiAnSW5mbycsXHJcbiAgICAgICAgbWVzc2FnZTpcclxuICAgICAgICAgIGBSZXN1bHRpbmcgbGVuZ3RoIG9mIHdhbGwgc2xpZ2h0bHkgZGlmZmVycyBmcm9tIGxlbmd0aCB5b3Ugc3BlY2lmaWVkLlxyXG4gICAgICAgICAgVG8gZnVydGhlciByZWZpbmUgbGVuZ3RoIG9mIHRoZSB3YWxsLCB1c2UgMkQgZmxvb3JwbGFuIGJsdWVwcmludC5gXHJcbiAgICAgIH0sXHJcbiAgICAgIG1heFdpZHRoOiAnNTAwcHgnXHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3N1YnMucHVzaChkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoZG9udFNob3dBZ2FpbiA9PiB7XHJcbiAgICAgIHRoaXMud2FsbExlbmd0aEluZm9EaWFsb2dFbmFibGVkID0gIWRvbnRTaG93QWdhaW47XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBzZXRXYWxsSGVpZ2h0KGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkV2FsbC5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB0aGlzLl9yb29tU2VydmljZS51cGRhdGVDZWlsaW5ncygpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFdhbGwuZmlyZVJlZHJhdygpO1xyXG4gICAgdGhpcy5fZmxvb3JwbGFuU2VydmljZS51cGRhdGUoKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnd2FsbEhlaWdodCd9KTtcclxuICB9XHJcblxyXG4gIHNldFdhbGxUaGlja25lc3ModGhpY2tuZXNzOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsLnRoaWNrbmVzcyA9IHRoaWNrbmVzcztcclxuICAgIHRoaXMuX2Zsb29ycGxhblNlcnZpY2UudXBkYXRlKCk7XHJcbiAgICB0aGlzLl9yb29tU2VydmljZS51cGRhdGVGbG9vcnNBbmRFZGdlcygpLnRoZW4oKCkgPT4gdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmFNb3ZlbWVudENoYW5nZWQubmV4dCgpKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRXYWxsLmZpcmVSZWRyYXcoKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuU2F2ZVN0YXRlLCB7YWN0aW9uOiAnd2FsbFRoaWNrbmVzcyd9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRXYWxsVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyB0aGlzLnNlbGVjdGVkRWRnZXMuZm9yRWFjaChhc3luYyAoZWRnZSkgPT4gYXdhaXQgZWRnZS5zZXRUZXh0dXJlKHRleHR1cmUpKTtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5zZWxlY3RlZEVkZ2VzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBhd2FpdCB0aGlzLnNlbGVjdGVkRWRnZXNbaV0uc2V0VGV4dHVyZSh0ZXh0dXJlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NjZW5lU2VydmljZS5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNhdmVTdGF0ZSwge2FjdGlvbjogJ3dhbGxUZXh0dXJlJywgcGF0Y2g6IGZhbHNlfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2V0V2FsbENvbG9yKGNvbG9yOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuc2VsZWN0ZWRFZGdlcy5mb3JFYWNoKGFzeW5jIChlZGdlKSA9PiBhd2FpdCBlZGdlLnNldENvbG9yKGNvbG9yKSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICd3YWxsQ29sb3InLCBwYXRjaDogZmFsc2V9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdENvcm5lcihjb3JuZXI6IENvcm5lcikge1xyXG4gICAgdGhpcy5mbG9vcnBsYW5uZXIuc2VsZWN0Q29ybmVyKGNvcm5lcik7XHJcbiAgfVxyXG5cclxuICBnZXRNaW5XYWxsSGVpZ2h0KHdhbGw6IFdhbGwpOiBudW1iZXIge1xyXG4gICAgaWYgKCF3YWxsKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBjb25zdCBjYXN0ZWRXYWxsOiBhbnkgPSB3YWxsO1xyXG5cclxuICAgIGlmIChjYXN0ZWRXYWxsLml0ZW1zKSB7XHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjYXN0ZWRXYWxsLml0ZW1zKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gTWF0aC5tYXgocmVzdWx0LCBpdGVtLmhhbGZTaXplLnkgKyBpdGVtLnBvc2l0aW9uLnkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhc3RlZFdhbGwub25JdGVtcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2FzdGVkV2FsbC5vbkl0ZW1zKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gTWF0aC5tYXgocmVzdWx0LCBpdGVtLmhhbGZTaXplLnkgKyBpdGVtLnBvc2l0aW9uLnkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE1hdGguY2VpbChyZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWluR2xvYmFsV2FsbEhlaWdodCgpOiBudW1iZXIge1xyXG4gICAgY29uc3Qgd2FsbHMgPSB0aGlzLl9yb29tU2VydmljZS53YWxscztcclxuICAgIGlmICghd2FsbHMpIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgLi4ud2FsbHMubWFwKHRoaXMuZ2V0TWluV2FsbEhlaWdodCkpO1xyXG4gIH1cclxuXHJcbiAgd2FsbHNIZWlnaHRVcGRhdGVkKGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9yb29tU2VydmljZS51cGRhdGVXYWxsSGVpZ2h0cyhoZWlnaHQpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlU3RhdGUsIHthY3Rpb246ICd3YWxsSGVpZ2h0J30pO1xyXG4gIH1cclxuXHJcbiAgc2V0RHJhZ2dlZChvYmplY3Q6IE1vZGVsSW50ZXJmYWNlKSB7XHJcbiAgICBjb25zdCBkcmFnZ2VkRGF0YTogRHJhZ2dlZERhdGEgPSB7XHJcbiAgICAgIG5hbWU6IG9iamVjdC5uYW1lLFxyXG4gICAgICB0eXBlOiArb2JqZWN0LnR5cGUsXHJcbiAgICAgIGlPbmU6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TZXREcmFnLCBkcmFnZ2VkRGF0YSk7XHJcbiAgfVxyXG5cclxuICByZWxlYXNlRHJhZ2dlZCgpIHtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuRXhpdERyYWcpO1xyXG4gIH1cclxuXHJcbiAgbG9hZEZsb29yUGxhbihkYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fZmxvb3JwbGFuU2VydmljZS5sb2FkRmxvb3JwbGFuKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXJ0QVJTZXNzaW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPYmplY3QpIHtcclxuICAgICAgY29uc3QgYXJPYmplY3QgPSB0aGlzLnNlbGVjdGVkT2JqZWN0LmNsb25lVmlzaWJsZSgpO1xyXG4gICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYXJNb2RlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5fc2NlbmVTZXJ2aWNlLmFkZE9iamVjdChhck9iamVjdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYWRkVG9DYXJ0KG9iamVjdDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAob2JqZWN0Lm1ldGFkYXRhKSB7XHJcbiAgICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLmluaXRDb25uZWN0b3IoXHJcbiAgICAgICAgb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MgPyBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncyA6IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLFxyXG4gICAgICAgIG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzID8gb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MubmFtZSA6IHVuZGVmaW5lZCxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncyAmJiBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZSA/IG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzLmV4dGVybmFsU291cmNlLnNvdXJjZUlkIDogbnVsbFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3JTZXJ2aWNlLmFkZFRvQ2FydChcclxuICAgICAgICArb2JqZWN0Lm1ldGFkYXRhLmdvb2RJZCwgb2JqZWN0Lm1ldGFkYXRhLmdvb2RUeXBlLCAxLCArb2JqZWN0Lm1ldGFkYXRhLml0ZW1JZCwgISEob2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MgJiYgb2JqZWN0Lm1ldGFkYXRhLmV4dGVybmFsU2V0dGluZ3MuZXh0ZXJuYWxTb3VyY2UpKTtcclxuICAgICAgaWYgKG9iamVjdC5tZXRhZGF0YS5leHRlcm5hbFNldHRpbmdzKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxTb3VyY2U6IEV4dGVybmFsU291cmNlQXJ0aWNsZUFkZEludGVyZmFjZSA9IHtcclxuICAgICAgICAgIGFydGljbGU6IGpzb24sXHJcbiAgICAgICAgICBxdWFudGl0eTogMSxcclxuICAgICAgICAgIGNhdGFsb2dEZWZpbml0aW9uOiBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5jYXRhbG9nRGVmaW5pdGlvbixcclxuICAgICAgICAgIGV4dGVybmFsU291cmNlOiBvYmplY3QubWV0YWRhdGEuZXh0ZXJuYWxTZXR0aW5ncy5leHRlcm5hbFNvdXJjZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLmFkZEV4dGVybmFsU291cmNlVG9DYXJ0Lm5leHQoZXh0ZXJuYWxTb3VyY2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FwcEV2ZW50U2VydmljZS5hZGRUb0NhcnQubmV4dCh7YXJ0aWNsZToganNvbiwgcXVhbnRpdHk6IDF9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZEl0ZW1zKGRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGl0ZW1Nb2RlbCBvZiBkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBuZXcgVmVjdG9yMyhpdGVtTW9kZWwueHBvcywgaXRlbU1vZGVsLnlwb3MsIGl0ZW1Nb2RlbC56cG9zKTtcclxuICAgICAgICBjb25zdCBvdmVycmlkZXMgPSB7XHJcbiAgICAgICAgICB3aWR0aDogaXRlbU1vZGVsLndpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBpdGVtTW9kZWwuaGVpZ2h0LFxyXG4gICAgICAgICAgdGV4dHVyZTogaXRlbU1vZGVsLnRleHR1cmUsXHJcbiAgICAgICAgICByb3RhdGlvbjogbmV3IEV1bGVyKDAsIGl0ZW1Nb2RlbC5yb3RhdGlvbiwgMCksXHJcbiAgICAgICAgICBvcGVuaW5nOiBpdGVtTW9kZWwub3BlbmluZyxcclxuICAgICAgICAgIGZyYW1lQ29sb3I6IGl0ZW1Nb2RlbC5mcmFtZUNvbG9yLFxyXG4gICAgICAgICAgZG9vckNvbG9yOiBpdGVtTW9kZWwuZG9vckNvbG9yLFxyXG4gICAgICAgICAgd2luZG93Q29sb3I6IGl0ZW1Nb2RlbC53aW5kb3dDb2xvcixcclxuICAgICAgICAgIGxvY2tlZDogaXRlbU1vZGVsLmxvY2tlZCxcclxuICAgICAgICAgIGlzR2xhc3M6IGl0ZW1Nb2RlbC5pc0dsYXNzXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBtb2RlbERhdGEgPSBhd2FpdCB0aGlzLm1vZGVsc1NlcnZpY2UuZ2V0KGl0ZW1Nb2RlbC5pdGVtX25hbWUsIG92ZXJyaWRlcyk7XHJcbiAgICAgICAgaWYgKG1vZGVsRGF0YSkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2l0ZW1TZXJ2aWNlLmFkZEpzb25JdGVtKG1vZGVsRGF0YSwgcG9zaXRpb24pO1xyXG4gICAgICAgICAgaWYgKGl0ZW1Nb2RlbC5pdGVtR3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVhdHRhY2hUb0l0ZW1Hcm91cChpdGVtTW9kZWwuaXRlbUdyb3VwLCBpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgV2FsbEl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc3QgY2xvc2VzdFdhbGxFZGdlID0gdGhpcy5fcm9vbVNlcnZpY2UuZ2V0Q2xvc2VzdFdhbGxFZGdlKHBvc2l0aW9uLngsIHBvc2l0aW9uLnopO1xyXG4gICAgICAgICAgICBpdGVtLnBsYWNlT25FZGdlKGNsb3Nlc3RXYWxsRWRnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihgVW5hYmxlIHRvIGdldCBtb2RlbCBmb3IgJHtpdGVtTW9kZWwuaXRlbV9uYW1lfSBmcm9tIE1vZGVsc1NlcnZpY2VgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRPYmplY3RzKHtpdGVtcywgZmxvb3JwbGFufSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLmxvYWRJdGVtcyhpdGVtcyksXHJcbiAgICAgIHRoaXMubG9hZEZsb29yUGxhbihmbG9vcnBsYW4pLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29weVNjZW5lSW5zdGFuY2Uoc2F2ZUFzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiByZXNvbHZlKCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2JqZWN0cygpIHtcclxuICAgIGNvbnN0IGl0ZW1zVG9TYXZlID0gdGhpcy5faXRlbVNlcnZpY2UuZ2V0Tm9uRnVybml0dXJlKCkubWFwKGkgPT4gdGhpcy5faXRlbVNlcmlhbGl6YXRpb25TZXJ2aWNlLml0ZW1Ub09iamVjdChpKSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmbG9vcnBsYW46IHRoaXMuX2Zsb29ycGxhblNlcnZpY2Uuc2F2ZUZsb29ycGxhbigpLFxyXG4gICAgICBpdGVtczogaXRlbXNUb1NhdmVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBoYXNDdXN0b21PYmplY3RzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tT2JqZWN0cy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uT2JqZWN0TGlicmFyeUNsaWNrKG9iamVjdDogTW9kZWxJbnRlcmZhY2UpOiB2b2lkIHtcclxuICAgIHRoaXMucmVsZWFzZURyYWdnZWQoKTtcclxuICAgIHRoaXMuc2V0RHJhZ2dlZChvYmplY3QpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TdGFydERyYWcsIHt4OiAwLCB5OiAwfSk7XHJcbiAgICBpZiAob2JqZWN0Lm5hbWUgPT09ICdXYWxrdGhyb3VnaCBDYW1lcmEnKSB7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uR3JvdXBDbGljaygpIHtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuR3JvdXBPYmplY3RzKTtcclxuICAgIHRoaXMudXNlcklzR3JvdXBpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxHcm91cFNlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlcklzR3JvdXBpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQ2FuY2VsR3JvdXBPYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgb25Vbkdyb3VwQ2xpY2soKSB7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlVuZ3JvdXBPYmplY3RzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZUNvbnRleHRNZW51KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGFydEdyb3VwU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMudXNlcklzR3JvdXBpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TdGFydEdyb3VwT2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kQ29udmVyc2lvblRvVGFnTWFuYWdlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFydGljbGU6IEl0ZW0gfCBJdGVtR3JvdXAgPSB0aGlzLnNlbGVjdGVkT2JqZWN0O1xyXG4gICAgbGV0IGNvbnZlcnNpb25BY3Rpb246IHN0cmluZztcclxuICAgIGlmIChhcnRpY2xlIGluc3RhbmNlb2YgSXRlbSkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZE9iamVjdC5tZXRhZGF0YS5jb252ZXJzaW9uR1RNU2VuZCkge1xyXG4gICAgICAgIGNvbnZlcnNpb25BY3Rpb24gPSAncmVtb3ZlJztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT2JqZWN0Lm1ldGFkYXRhLmNvbnZlcnNpb25HVE1TZW5kID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hZGRTZWxlY3RlZENsYXNzID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29udmVyc2lvbkFjdGlvbiA9ICdhZGQnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPYmplY3QubWV0YWRhdGEuY29udmVyc2lvbkdUTVNlbmQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWRkU2VsZWN0ZWRDbGFzcyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fZ29vZ2xlVGFnTWFuYWdlci5zZW5kUHJvZHVjdENvbnZlcnNpb24oYXJ0aWNsZS5tZXRhZGF0YSwgY29udmVyc2lvbkFjdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYXNTZXR0aW5ncyhpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGlzQ3VzdG9tU2hhcGU6IGJvb2xlYW4gPSBpdGVtLm1ldGFkYXRhICYmIChcclxuICAgICAgaXNDdXN0b21TaGFwZVR5cGUoaXRlbS5tZXRhZGF0YS5pdGVtVHlwZSkgfHxcclxuICAgICAgaXNDdXN0b21TaGFwZVdhbGxUeXBlKGl0ZW0ubWV0YWRhdGEuaXRlbVR5cGUpIHx8XHJcbiAgICAgIGlzQ3VzdG9tQ3lsaW5kZXJUeXBlKGl0ZW0ubWV0YWRhdGEuaXRlbVR5cGUpIHx8XHJcbiAgICAgIGlzQ3VzdG9tQ3lsaW5kZXJXYWxsVHlwZShpdGVtLm1ldGFkYXRhLml0ZW1UeXBlKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGhhc0NvbmZpZ3VyYWJsZVRleHR1cmU6IGJvb2xlYW4gPSAhIWl0ZW0gJiYgISEoaXRlbS5tZXRhZGF0YSAmJiBpdGVtLm1ldGFkYXRhLnRleHR1cmUpO1xyXG4gICAgY29uc3QgaGFzT3BlbmluZ0F0dHJpYnV0ZTogYm9vbGVhbiA9ICEhaXRlbSAmJiAhIWl0ZW0ub3BlbmluZztcclxuICAgIGNvbnN0IGlzU2NhbGFibGU6IGJvb2xlYW4gPSAhIWl0ZW0gJiYgISEoaXRlbS5tZXRhZGF0YSAmJiBpdGVtLm1ldGFkYXRhLnNjYWxhYmxlKTtcclxuXHJcbiAgICByZXR1cm4gaXNDdXN0b21TaGFwZSB8fCBoYXNDb25maWd1cmFibGVUZXh0dXJlIHx8IGhhc09wZW5pbmdBdHRyaWJ1dGUgfHwgaXNTY2FsYWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzQ29uZmlndXJhYmxlKGl0ZW06IEl0ZW0gfCBJdGVtR3JvdXApOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhKGl0ZW0gaW5zdGFuY2VvZiBJdGVtR3JvdXApICYmICEhaXRlbSAmJiAhIWl0ZW0ubWV0YWRhdGEgJiYgISFpdGVtLm1ldGFkYXRhLml0ZW1JZGVudGlmaWVyICYmIGl0ZW0uY29uZmlndXJhYmxlICYmXHJcbiAgICAgICFpdGVtLmFsbHdheXNDb25maWd1cmVNb2RlICYmICFpdGVtLm9ic29sZXRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNDb252ZXJzaW9uSXRlbShpdGVtOiBJdGVtIHwgSXRlbUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXRlbS5tZXRhZGF0YS5pb25lKSB7XHJcbiAgICAgIHJldHVybiBpdGVtLm1ldGFkYXRhLmlvbmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0RlbGV0YWJsZShpdGVtOiBJdGVtIHwgSXRlbUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIShpdGVtIGluc3RhbmNlb2YgUm9vbSB8fCBpdGVtIGluc3RhbmNlb2YgV2FsbCkgJiZcclxuICAgICAgKChpdGVtIGluc3RhbmNlb2YgSXRlbSAmJiBpdGVtLmNhbkRlbGV0ZSkgfHwgIShpdGVtIGluc3RhbmNlb2YgSXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNDb3B5YWJsZShpdGVtOiBJdGVtIHwgSXRlbUdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpc05vdFJvb21PcldhbGxPckRlY29yYXRpb246IGJvb2xlYW4gPSAhKGl0ZW0gaW5zdGFuY2VvZiBSb29tIHx8IGl0ZW0gaW5zdGFuY2VvZiBXYWxsIHx8IGl0ZW0gaW5zdGFuY2VvZiBGbG9vclBsYW5lSXRlbSk7XHJcbiAgICBjb25zdCBpc0NvcHlhYmxlSXRlbTogYm9vbGVhbiA9ICgoaXRlbSBpbnN0YW5jZW9mIEl0ZW0gJiYgaXRlbS5jYW5Db3B5ICYmICFpdGVtLm9ic29sZXRlKSB8fCAhKGl0ZW0gaW5zdGFuY2VvZiBJdGVtKSkgJiZcclxuICAgICAgIXRoaXMuX2l0ZW1TZXJ2aWNlLmdldFdhbGt0aHJvdWdoQ2FtZXJhKCk7XHJcbiAgICByZXR1cm4gaXNOb3RSb29tT3JXYWxsT3JEZWNvcmF0aW9uICYmIGlzQ29weWFibGVJdGVtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVhdHRhY2hUb0l0ZW1Hcm91cChpdGVtR3JvdXAsIG9iamVjdCkge1xyXG4gICAgdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbShvYmplY3QpO1xyXG4gICAgaXRlbUdyb3VwLmFkZEl0ZW0ob2JqZWN0KTtcclxuICAgIGl0ZW1Hcm91cC5jcmVhdGVCb3VuZGFyeUJveCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XHJcbiAgICAgICAgY2FzZSBLZXkuQzpcclxuICAgICAgICAgIGlmICh0aGlzLl9tb2RlICE9PSBWaWV3TW9kZS5GbG9vclBsYW4yRCAmJiAhdGhpcy5fdGV4dElucHV0QWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TaG93UHJvZHVjdENhdGFsb2cpO1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMZWZ0U2lkZWJhcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEtleS5BOlxyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlICE9PSBudWxsICYmIHRoaXMuX2FjdGl2ZUNhdGVnb3J5U2lkZWJhclRlbXBsYXRlID09PSB0aGlzLmNhdGVnb3JpZXNTaWRlYmFyKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgICAgICAgIC8vICAgdGhpcy5fYWN0aXZlQ2F0ZWdvcnlTaWRlYmFyVGVtcGxhdGUgPSBudWxsO1xyXG4gICAgICAgICAgLy8gfSBlbHNlXHJcbiAgICAgICAgICBpZiAodGhpcy5fbW9kZSAhPT0gVmlld01vZGUuRmxvb3JQbGFuMkQgJiYgIXRoaXMuX2NhdGFsb2dJc1Nob3duICYmICF0aGlzLl90ZXh0SW5wdXRBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dMaWJyYXJ5Q2F0ZWdvcmllcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBLZXkuVjpcclxuICAgICAgICAgIGlmICghdGhpcy5fY2F0YWxvZ0lzU2hvd24gJiYgIXRoaXMuX3RleHRJbnB1dEFjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tb2RlID09PSBWaWV3TW9kZS5Sb29tUGxhbjNEKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlKFZpZXdNb2RlLkZsb29yUGxhbjJELCB0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU1vZGUoVmlld01vZGUuUm9vbVBsYW4zRCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgS2V5LkVzYzpcclxuICAgICAgICAgIGlmICh0aGlzLl9tb2RlICE9PSBWaWV3TW9kZS5GbG9vclBsYW4yRCkge1xyXG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkhpZGVMZWZ0U2lkZWJhcik7XHJcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZVByb2R1Y3RDYXRhbG9nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90ZXh0SW5wdXRBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpbnB1dHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaW5wdXRzWzBdLnR5cGUgPT09ICd0ZXh0JyAmJiBpbnB1dHNbaV0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19
|