tango-app-ui-store-builder 1.2.4 → 1.2.6
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/esm2022/lib/components/collection-update-ai/collection-update-ai.component.mjs +3 -2
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +3 -2
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.mjs +3 -2
- package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +41 -4
- package/esm2022/lib/components/custom-select/custom-select.component.mjs +14 -5
- package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +3 -2
- package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +3 -2
- package/esm2022/lib/components/fixture-template-table/find-and-replace/find-and-replace.component.mjs +3 -2
- package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +2 -3
- package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +3 -2
- package/esm2022/lib/components/manage-plano/verification-table/verification-table.component.mjs +2 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +87 -13
- package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +4 -3
- package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +114 -4
- package/esm2022/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.mjs +7 -2
- package/esm2022/lib/components/onboard-store-plano/onboard-fixture/onboard-fixture.component.mjs +3 -3
- package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +255 -25
- package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +162 -3
- package/esm2022/lib/components/plano-library/fixture-library/fixture-library.component.mjs +3 -4
- package/esm2022/lib/components/plano-library/vm-library/vm-library.component.mjs +3 -4
- package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +88 -0
- package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +4 -5
- package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +239 -0
- package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +98 -3
- package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +5 -4
- package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +135 -33
- package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +325 -0
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +3 -3
- package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +3 -2
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +3 -2
- package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +3 -2
- package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +1 -1
- package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +3 -2
- package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +3 -2
- package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +2 -3
- package/esm2022/lib/components/popups/delete-confirmation/delete-confirmation.component.mjs +10 -3
- package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -4
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -3
- package/esm2022/lib/data/fixture-template.data.mjs +12 -1
- package/esm2022/lib/functions/plano.function.mjs +13 -1
- package/esm2022/lib/services/store-builder.service.mjs +35 -1
- package/esm2022/lib/tango-store-builder-routing.module.mjs +16 -1
- package/esm2022/lib/tango-store-builder.module.mjs +10 -1
- package/fesm2022/tango-app-ui-store-builder.mjs +1914 -401
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/create-fixture/create-fixture.component.d.ts +3 -0
- package/lib/components/custom-select/custom-select.component.d.ts +5 -2
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
- package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +7 -1
- package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +14 -1
- package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +19 -2
- package/lib/components/plano-configurations/plano-configurations.component.d.ts +19 -1
- package/lib/components/plano-tools/cad-files/cad-files.component.d.ts +30 -0
- package/lib/components/plano-tools/move-bucket/move-bucket.component.d.ts +64 -0
- package/lib/components/plano-tools/plano-data-export/plano-data-export.component.d.ts +26 -0
- package/lib/components/plano-tools/store-exports/store-exports.component.d.ts +28 -3
- package/lib/components/plano-tools/swap-template/swap-template.component.d.ts +83 -0
- package/lib/components/popups/delete-confirmation/delete-confirmation.component.d.ts +3 -1
- package/lib/data/fixture-template.data.d.ts +8 -0
- package/lib/functions/plano.function.d.ts +1 -0
- package/lib/services/store-builder.service.d.ts +26 -0
- package/lib/tango-store-builder.module.d.ts +56 -53
- package/package.json +1 -1
|
@@ -9,6 +9,7 @@ import { Subject, takeUntil } from 'rxjs';
|
|
|
9
9
|
import * as fabric from "fabric";
|
|
10
10
|
import { StoreFixtureComponent } from '../../components/store-fixture/store-fixture.component';
|
|
11
11
|
import { BatchConfirmationModalComponent } from './batch-confirmation-modal/batch-confirmation-modal.component';
|
|
12
|
+
import { getFixtureCanvasLabel } from '../../../../functions/plano.function';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
14
|
import * as i1 from "../../../../services/store-builder.service";
|
|
14
15
|
import * as i2 from "../../services/data.service";
|
|
@@ -2103,7 +2104,7 @@ export class PrepareTemplateComponent {
|
|
|
2103
2104
|
});
|
|
2104
2105
|
let fontSize = 5;
|
|
2105
2106
|
let bottomText;
|
|
2106
|
-
const textContent =
|
|
2107
|
+
const textContent = getFixtureCanvasLabel(fixtureData);
|
|
2107
2108
|
const createBottomText = (fs) => new fabric.Textbox(textContent, {
|
|
2108
2109
|
left: topX + topWidth / 2,
|
|
2109
2110
|
top: secondBoxY + innerBoxHeight / 2,
|
|
@@ -2847,4 +2848,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2847
2848
|
type: ViewChild,
|
|
2848
2849
|
args: ['previewCanvasContainer']
|
|
2849
2850
|
}] } });
|
|
2850
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3ByZXBhcmUtdGVtcGxhdGUvcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3ByZXBhcmUtdGVtcGxhdGUvcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQyxTQUFTLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztB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b0IsRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsQ0FBQyxhQUc1SSxDQUFDLGFBQWEsQ0FBQztxVUFnQ0UsZ0JBQWdCO3NCQUEzQyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ1cseUJBQXlCO3NCQUE3RCxTQUFTO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgVGl0bGVDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3JlYWN0aXZlLXNlbGVjdC9yZWFjdGl2ZS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RvcmVTZWxlY3RDb21wb25lbnQsIFN0b3JlT3B0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdG9yZS1zZWxlY3Qvc3RvcmUtc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0b3JlRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3N0b3JlLWRyb3Bkb3duL3N0b3JlLWRyb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvblVwZGF0ZUFpRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yZSwgRmluZFJlcGxhY2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmluZC1yZXBsYWNlLm1vZGVsJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIGZhYnJpYyBmcm9tIFwiZmFicmljXCI7XHJcbmltcG9ydCB7IFN0b3JlRml4dHVyZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc3RvcmUtZml4dHVyZS9zdG9yZS1maXh0dXJlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZtTGlicmFyeUxpc3QgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQmF0Y2hDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4vYmF0Y2gtY29uZmlybWF0aW9uLW1vZGFsL2JhdGNoLWNvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcHJlcGFyZS10ZW1wbGF0ZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVTZWxlY3RDb21wb25lbnQsIFN0b3JlU2VsZWN0Q29tcG9uZW50LCBTdG9yZURyb3Bkb3duQ29tcG9uZW50LCBTdG9yZUZpeHR1cmVDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcmVwYXJlLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcycsXHJcbiAgcHJvdmlkZXJzOiBbVGl0bGVDYXNlUGlwZV1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBQcmVwYXJlVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgc2VhcmNoTW9kZXMgPSBbXHJcbiAgICB7IHZhbHVlOiAnc3RvcmUnLCBsYWJlbDogJ1N0b3JlcycgfSxcclxuICAgIHsgdmFsdWU6ICdjbHVzdGVyJywgbGFiZWw6ICdDbHVzdGVycycgfSxcclxuICBdO1xyXG4gIHNlbGVjdGVkTW9kZSA9IG5ldyBGb3JtQ29udHJvbCgnc3RvcmUnKTtcclxuICB0YXJnZXQgPSBuZXcgRm9ybUNvbnRyb2woJ2JvdGgnKTtcclxuICBmaW5kUHJvbXB0ID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICByZXBsYWNlUHJvbXB0ID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAvLyBsaWItcmVhY3RpdmUtc2VsZWN0IGJpbmRzIHZpYSBDb250cm9sVmFsdWVBY2Nlc3NvciBhbmQgZW1pdHMgdGhlIHNlbGVjdGVkIElELCBub3QgdGhlIGZ1bGwgb2JqZWN0LlxyXG4gIC8vIEtlZXAgdGhlIEZvcm1Db250cm9sIHR5cGVkIGFzIGEgc3RyaW5nICh0aGUgX2lkKSBhbmQgbG9vayB1cCB0aGUgZnVsbCByZWNvcmQgdmlhIGdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIC8gZ2V0UmVwbGFjZVZtU2VsZWN0aW9uKCkuXHJcbiAgcmVwbGFjZUJyYW5kID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gIHJlcGxhY2VWbSA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuICBcclxuICBzdG9yZU9wdGlvbnM6IFN0b3JlT3B0aW9uW10gPSBbXTtcclxuICBjbHVzdGVyRGF0YTogYW55W10gPSBbXTtcclxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2F2aW5nRHJhZnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBiYXRjaFByb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBcclxuICBzZWxlY3RlZFN0b3JlczogU3RvcmVPcHRpb25bXSA9IFtdO1xyXG4gIGZpbmRSZXBsYWNlRGF0YTogRmluZFJlcGxhY2UgfCBudWxsID0gbnVsbDtcclxuICBzZWxlY3RlZFN0b3JlRm9yUHJldmlldzogYW55ID0gbnVsbDtcclxuICBzdG9yZUxpc3RGb3JEcm9wZG93bjogYW55W10gPSBbXTtcclxuICBzdG9yZURyb3Bkb3duSXRlbXM6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRTdG9yZVZhbHVlczogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gQ2FudmFzIHByb3BlcnRpZXNcclxuICBAVmlld0NoaWxkKCdwcmV2aWV3Q2FudmFzJykgcHJldmlld0NhbnZhc1JlZiE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ3ByZXZpZXdDYW52YXNDb250YWluZXInKSBwcmV2aWV3Q2FudmFzQ29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgcHJldmlld0NhbnZhcyE6IGZhYnJpYy5DYW52YXM7XHJcbiAgcGxhbm9EYXRhOiBhbnk7XHJcbiAgZmxvb3JEYXRhOiBhbnk7XHJcbiAgd2FsbFRoaWNrbmVzcyA9IDMwO1xyXG4gIHZlcnRpY2FsTWFyZ2luID0gKDEuMjUgLyAxMDApICogdGhpcy50b1BpeGVscygxNTI0LCBcIm1tXCIpO1xyXG4gIGNkblVybDogc3RyaW5nID0gJyc7XHJcbiAgYWN0aXZlSGlnaGxpZ2h0OiBmYWJyaWMuUmVjdCB8IG51bGwgPSBudWxsO1xyXG4gIGNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRGaXh0dXJlOiBhbnk7XHJcbiAgc2VsZWN0ZWRGaXh0dXJlRGF0YTogYW55ID0gbnVsbDtcclxuICBvcmlnaW5hbEZpeHR1cmVEYXRhOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgb3JpZ2luYWxGaXh0dXJlc01hcDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuICBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcclxuICBjYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgZmluZExvYWRpbmcgPSBmYWxzZTtcclxuICByZXBsYWNlTG9hZGluZyA9IGZhbHNlO1xyXG4gIGZpbmRFeGVjdXRlZCA9IGZhbHNlO1xyXG4gIHJlcGxhY2VFeGVjdXRlZCA9IGZhbHNlO1xyXG4gIGlzRmluZFByb21wdEZyb21BcGkgPSBmYWxzZTtcclxuICBhbGxGaXh0dXJlSW5zdGFuY2VzOiBhbnlbXSA9IFtdO1xyXG4gIHZtTGlzdDogVm1MaWJyYXJ5TGlzdFtdID0gW107XHJcbiAgYnJhbmRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHJlcGxhY2VWbUxpc3Q6IGFueVtdID0gW107XHJcbiAgY2xpZW50SWQ6IHN0cmluZyA9ICcnO1xyXG4gIGhpZGVNZXRhZGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHByZXZpb3VzU2VhcmNoTW9kZTogJ3N0b3JlJyB8ICdjbHVzdGVyJyB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgaXNJbml0aWFsTG9hZCA9IHRydWU7XHJcbiAgcHJpdmF0ZSBoYXNSZXN0b3JlZERhdGEgPSBmYWxzZTtcclxuICBwcml2YXRlIGlzVXBkYXRpbmdGcm9tU2VydmljZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcblxyXG4gIGdldCBoYXNTdG9yZXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEodGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3JlcyAmJiB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMubGVuZ3RoID4gMCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3JlQ291bnQgfHwgdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3Jlcz8ubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Rml4dHVyZURhdGEoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgfHwgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rml4dHVyZUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5nZXRDdXJyZW50Rml4dHVyZURhdGEoKTtcclxuICAgIHJldHVybiBmaXh0dXJlPy5oZWFkZXI/LmxhYmVsIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rml4dHVyZUNhdGVnb3J5KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5nZXRDdXJyZW50Rml4dHVyZURhdGEoKTtcclxuICAgIHJldHVybiBmaXh0dXJlPy5maXh0dXJlQ2F0ZWdvcnkgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXRGaXh0dXJlV2lkdGgoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmdldEN1cnJlbnRGaXh0dXJlRGF0YSgpO1xyXG4gICAgaWYgKCFmaXh0dXJlPy5maXh0dXJlV2lkdGgpIHJldHVybiAnJztcclxuICAgIGNvbnN0IHdpZHRoID0gZml4dHVyZS5maXh0dXJlV2lkdGgudmFsdWU7XHJcbiAgICBjb25zdCB1bml0ID0gZml4dHVyZS5maXh0dXJlV2lkdGgudW5pdCB8fCAnbW0nO1xyXG4gICAgbGV0IGRpbWVuc2lvblN0ciA9IGAke3dpZHRofSR7dW5pdH1gO1xyXG4gICAgLy8gQ29udmVydCB0byBmZWV0IGlmIG5lZWRlZCAoMTIwMG1tID0gNGZ0KVxyXG4gICAgaWYgKHVuaXQgPT09ICdtbScgJiYgd2lkdGggPT09IDEyMDApIHtcclxuICAgICAgZGltZW5zaW9uU3RyID0gYCR7d2lkdGh9JHt1bml0fS80ZnRgO1xyXG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAnbW0nICYmIHdpZHRoID4gMCkge1xyXG4gICAgICBjb25zdCBmZWV0ID0gTWF0aC5yb3VuZCh3aWR0aCAvIDMwMCk7XHJcbiAgICAgIGlmIChmZWV0ID4gMCkge1xyXG4gICAgICAgIGRpbWVuc2lvblN0ciA9IGAke3dpZHRofSR7dW5pdH0vJHtmZWV0fWZ0YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpbWVuc2lvblN0cjtcclxuICB9XHJcblxyXG4gIGdldFNoZWxmQ291bnQoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmdldEN1cnJlbnRGaXh0dXJlRGF0YSgpO1xyXG4gICAgcmV0dXJuIGZpeHR1cmU/LnNoZWxmQ29uZmlnPy5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIGdldEZpeHR1cmVDYXBhY2l0eSgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZ2V0Q3VycmVudEZpeHR1cmVEYXRhKCk7XHJcbiAgICByZXR1cm4gZml4dHVyZT8uZml4dHVyZUNhcGFjaXR5IHx8IDA7XHJcbiAgfVxyXG5cclxuICBnZXRPcmlnaW5hbEZpeHR1cmVGb3JEaXNwbGF5KCk6IGFueSB7XHJcbiAgICAvLyBJZiBvcmlnaW5hbEZpeHR1cmVEYXRhIGV4aXN0cywgdXNlIGl0XHJcbiAgICBpZiAodGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGE7XHJcbiAgICB9XHJcbiAgICAvLyBJZiBub3QsIHRyeSB0byBnZXQgZnJvbSBtYXAgdXNpbmcgc2VsZWN0ZWRGaXh0dXJlRGF0YSBJRFxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uX2lkKSB7XHJcbiAgICAgIGNvbnN0IHN0b3JlZE9yaWdpbmFsID0gdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmdldCh0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuX2lkKTtcclxuICAgICAgaWYgKHN0b3JlZE9yaWdpbmFsKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0b3JlZE9yaWdpbmFsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBGYWxsYmFjayB0byBzZWxlY3RlZEZpeHR1cmVEYXRhIChmb3IgZmluZC1vbmx5IGNhc2UpXHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkU2hvd0JlZm9yZUFmdGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgLy8gU2hvdyBCZWZvcmUvQWZ0ZXIgb25seSB3aGVuIHNlbGVjdGVkRml4dHVyZURhdGEgZXhpc3RzIEFORCBpdCBoYXMgZmluZCBkYXRhXHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiB0aGlzIGZpeHR1cmUgaGFzIGZpbmQgZGF0YSAoZmluZFJlc3BvbnNlRGF0YSBleGlzdHMgZm9yIHRoaXMgc3BlY2lmaWMgZml4dHVyZSlcclxuICAgIGlmICh0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzICYmIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMuZmluZChcclxuICAgICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgICApO1xyXG4gICAgICAvLyBTaG93IEJlZm9yZS9BZnRlciBpZiBmaW5kUmVzcG9uc2VEYXRhIGV4aXN0cyBhbmQgbWF0Y2hlcyB0aGUgY3VycmVudCBmaXh0dXJlXHJcbiAgICAgIGlmIChzdG9yZT8uZmluZFJlc3BvbnNlRGF0YSAmJiBzdG9yZS5maW5kUmVzcG9uc2VEYXRhID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuX2lkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEFsc28gY2hlY2sgaWYgZmluZEV4ZWN1dGVkIGZsYWcgaXMgc2V0IEFORCB3ZSBoYXZlIG9yaWdpbmFsRml4dHVyZURhdGEgb3IgaXQncyBpbiB0aGUgbWFwXHJcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBmaW5kIHdhcyBqdXN0IGV4ZWN1dGVkXHJcbiAgICBpZiAodGhpcy5maW5kRXhlY3V0ZWQpIHtcclxuICAgICAgY29uc3QgZml4dHVyZUlkID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLl9pZDtcclxuICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBvcmlnaW5hbCBmaXh0dXJlIHN0b3JlZCAoZWl0aGVyIGluIG9yaWdpbmFsRml4dHVyZURhdGEgb3IgbWFwKVxyXG4gICAgICBpZiAodGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhIHx8IHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0FmdGVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAvLyBFbmFibGUgQWZ0ZXIgb25seSB3aGVuIHJlcGxhY2VSZXNwb25zZURhdGEgZXhpc3RzIGZvciB0aGUgY3VycmVudCBmaXh0dXJlXHJcbiAgICAvLyBBZnRlciBjbGlja2luZyBcIlJ1blwiIG9uIGZpbmQsIHRoZSBmaXh0dXJlIHNob3VsZCBiZSBkaXNhYmxlZCB1bnRpbCByZXBsYWNlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZVxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEpIHtcclxuICAgICAgcmV0dXJuIHRydWU7IC8vIERpc2FibGUgaWYgbm8gZml4dHVyZSBkYXRhXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIENoZWNrIGlmIHJlcGxhY2VSZXNwb25zZURhdGEgZXhpc3RzIGZvciBjdXJyZW50IHN0b3JlXHJcbiAgICAvLyByZXBsYWNlUmVzcG9uc2VEYXRhIGlzIGFuIG9iamVjdCB3aXRoIHZtQ29uZmlnIGFuZC9vciBzaGVsZkNvbmZpZyB3aGVuIHJlcGxhY2UgaXMgZXhlY3V0ZWRcclxuICAgIGlmICh0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzICYmIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMuZmluZChcclxuICAgICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgICApO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2hlY2sgaWYgcmVwbGFjZVJlc3BvbnNlRGF0YSBleGlzdHMgYW5kIGlzIGFuIG9iamVjdCAoaGFzIHZtQ29uZmlnIG9yIHNoZWxmQ29uZmlnKVxyXG4gICAgICBpZiAoc3RvcmU/LnJlcGxhY2VSZXNwb25zZURhdGEgJiYgdHlwZW9mIHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgLy8gVmVyaWZ5IGl0IGhhcyBhdCBsZWFzdCBvbmUgY29uZmlnIHByb3BlcnR5ICh2bUNvbmZpZyBvciBzaGVsZkNvbmZpZylcclxuICAgICAgICBpZiAoc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS52bUNvbmZpZyB8fCBzdG9yZS5yZXBsYWNlUmVzcG9uc2VEYXRhLnNoZWxmQ29uZmlnKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlcGxhY2UgcmVzcG9uc2UgYXZhaWxhYmxlLCBlbmFibGUgQWZ0ZXJcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQWxzbyBjaGVjayByZXBsYWNlRXhlY3V0ZWQgZmxhZyBhcyBhIGZhbGxiYWNrIChmb3IgaW1tZWRpYXRlIHVwZGF0ZXMgYWZ0ZXIgcmVwbGFjZSlcclxuICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCAmJiB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBSZXBsYWNlIHdhcyBqdXN0IGV4ZWN1dGVkLCBlbmFibGUgQWZ0ZXJcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gRGVmYXVsdDogZGlzYWJsZSBBZnRlciBpZiBubyByZXBsYWNlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc3RvcmVCdWlsZGVyU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IENvbGxlY3Rpb25VcGRhdGVBaURhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aXRsZUNhc2U6IFRpdGxlQ2FzZVBpcGUsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXHJcbiAgKSB7fVxyXG5cclxuXHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gR2V0IGNsaWVudCBJRCBhbmQgQ0ROIFVSTFxyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICAgIHRoaXMuY2RuVXJsID0gZW52LnBsYW5vZ3JhbUNETiB8fCAnJztcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YS5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIGFzIHN0cmluZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChoZWFkZXJEYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGEuY2xpZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jbGllbnRJZCkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkUmVwbGFjZUxpYnJhcmllcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGRhdGEgc2VydmljZSB0byByZXN0b3JlIHNhdmVkIGRhdGFcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0RmluZFJlcGxhY2VEYXRhKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wcyBieSBza2lwcGluZyB1cGRhdGVzIHdoZW4gd2UncmUgdXBkYXRpbmcgZnJvbSBmb3JtIGNoYW5nZXNcclxuICAgICAgICBpZiAodGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5maW5kUmVwbGFjZURhdGEgPSBkYXRhO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChkYXRhICYmICF0aGlzLmhhc1Jlc3RvcmVkRGF0YSkge1xyXG4gICAgICAgICAgLy8gUmVzdG9yZSBhbGwgZm9ybSB2YWx1ZXMgb24gZmlyc3QgZGF0YSBsb2FkXHJcbiAgICAgICAgICAvLyBEb24ndCBjYWxsIHVwZGF0ZVN0b3JlRHJvcGRvd25JdGVtcyBoZXJlIGFzIHJlc3RvcmVGb3JtVmFsdWVzIHdpbGwgaGFuZGxlIGl0XHJcbiAgICAgICAgICB0aGlzLnJlc3RvcmVGb3JtVmFsdWVzKGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5oYXNSZXN0b3JlZERhdGEgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0aGlzLmhhc1Jlc3RvcmVkRGF0YSkge1xyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSBzdG9yZSBkcm9wZG93biBpdGVtcyB3aGVuIHN0b3JlcyBjaGFuZ2UgKGFmdGVyIGluaXRpYWwgcmVzdG9yZSlcclxuICAgICAgICAgIHRoaXMudXBkYXRlU3RvcmVEcm9wZG93bkl0ZW1zKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIElmIGRhdGEgYWxyZWFkeSByZXN0b3JlZCwgb25seSBoYW5kbGUgc2VhcmNoTW9kZSBjaGFuZ2VzXHJcbiAgICAgICAgICBpZiAoZGF0YS5zZWFyY2hNb2RlICYmIGRhdGEuc2VhcmNoTW9kZSAhPT0gdGhpcy5wcmV2aW91c1NlYXJjaE1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGUuc2V0VmFsdWUoZGF0YS5zZWFyY2hNb2RlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hNb2RlID0gZGF0YS5zZWFyY2hNb2RlO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTdG9yZXNPckNsdXN0ZXJzKGRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgY3VycmVudGx5IHByZXZpZXdlZCBzdG9yZSBpcyBzdGlsbCBpbiB0aGUgbGlzdFxyXG4gICAgICAgICAgaWYgKGRhdGEuc3RvcmVzICYmIGRhdGEuc3RvcmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50U3RvcmVTdGlsbEluTGlzdCA9IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgJiYgXHJcbiAgICAgICAgICAgICAgZGF0YS5zdG9yZXMuc29tZSgoc3RvcmU6IFN0b3JlKSA9PiBcclxuICAgICAgICAgICAgICAgIChzdG9yZS5zdG9yZUlkIHx8IHN0b3JlLnN0b3JlTmFtZSkgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgc3RvcmUuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBJZiBjdXJyZW50IHN0b3JlIHdhcyByZW1vdmVkIG9yIG5vIHN0b3JlIGlzIHNlbGVjdGVkLCBzd2l0Y2ggdG8gZmlyc3Qgc3RvcmVcclxuICAgICAgICAgICAgaWYgKCFpc0N1cnJlbnRTdG9yZVN0aWxsSW5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3U3RvcmUgPSB0aGlzLnN0b3JlRHJvcGRvd25JdGVtc1swXTtcclxuICAgICAgICAgICAgICBpZiAobmV3U3RvcmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgPSBuZXdTdG9yZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIGZpbmRSZXNwb25zZURhdGEgYW5kIHJlcGxhY2VSZXNwb25zZURhdGEgZm9yIHRoZSBzZWxlY3RlZCBzdG9yZSBpZiBhdmFpbGFibGVcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZVN0b3JlUmVzcG9uc2VEYXRhKG5ld1N0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIExvYWQgcGxhbm9ncmFtIGZvciB0aGUgc2VsZWN0ZWQgc3RvcmVcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZShuZXdTdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuc3RvcmVzICYmIGRhdGEuc3RvcmVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAvLyBJZiBhbGwgc3RvcmVzIGFyZSByZW1vdmVkLCBjbGVhciB0aGUgcHJldmlld1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghZGF0YSAmJiB0aGlzLmlzSW5pdGlhbExvYWQpIHtcclxuICAgICAgICAgIC8vIExvYWQgaW5pdGlhbCBkYXRhIGlmIG5vIHNhdmVkIGRhdGFcclxuICAgICAgICAgIHRoaXMubG9hZFN0b3Jlc09yQ2x1c3RlcnMoKTtcclxuICAgICAgICAgIHRoaXMuaXNJbml0aWFsTG9hZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIHNhdmUgZHJhZnQgbG9hZGluZyBzdGF0ZVxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5nZXRMb2FkaW5nU3RhdGUoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGlzTG9hZGluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2aW5nRHJhZnQgPSBpc0xvYWRpbmc7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciBtb2RlIGNoYW5nZXNcclxuICAgIHRoaXMuc2VsZWN0ZWRNb2RlLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKG5ld01vZGUpID0+IHtcclxuICAgICAgICBpZiAobmV3TW9kZSAhPT0gdGhpcy5wcmV2aW91c1NlYXJjaE1vZGUgJiYgIXRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzU2VhcmNoTW9kZSA9IG5ld01vZGUgYXMgJ3N0b3JlJyB8ICdjbHVzdGVyJztcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gR2V0IGN1cnJlbnQgZGF0YSB0byBwcmVzZXJ2ZSBzZWxlY3RlZENsdXN0ZXJzIGlmIHN3aXRjaGluZyB0byBjbHVzdGVyIG1vZGVcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5kYXRhU2VydmljZS5nZXRDdXJyZW50RGF0YSgpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBVcGRhdGUgZGF0YSBzZXJ2aWNlIHdpdGggbmV3IHNlYXJjaE1vZGVcclxuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IFxyXG4gICAgICAgICAgICBzZWFyY2hNb2RlOiBuZXdNb2RlIGFzICdzdG9yZScgfCAnY2x1c3RlcicsXHJcbiAgICAgICAgICAgIHN0b3JlczogW10sIC8vIENsZWFyIHN0b3JlcyB3aGVuIG1vZGUgY2hhbmdlc1xyXG4gICAgICAgICAgICBzZWxlY3RlZENsdXN0ZXJzOiBuZXdNb2RlID09PSAnc3RvcmUnID8gdW5kZWZpbmVkIDogY3VycmVudERhdGE/LnNlbGVjdGVkQ2x1c3RlcnNcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLmxvYWRTdG9yZXNPckNsdXN0ZXJzKCk7XHJcbiAgICAgICAgICAvLyBDbGVhciBzZWxlY3RlZCBzdG9yZXMgd2hlbiBtb2RlIGNoYW5nZXMgbWFudWFsbHlcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbXTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gQ2xlYXIgcHJldmlldyB3aGVuIG1vZGUgY2hhbmdlc1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVWYWx1ZXMoKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmNsZWFyKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFJlc2V0IGZsYWdzXHJcbiAgICAgICAgICB0aGlzLmZpbmRFeGVjdXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciB0YXJnZXQgY2hhbmdlcyAtIGRlYm91bmNlIHRvIHByZXZlbnQgZXhjZXNzaXZlIHVwZGF0ZXNcclxuICAgIHRoaXMudGFyZ2V0LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlICYmICF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgdGFyZ2V0OiB2YWx1ZSBhcyAnbWVyY2gnIHwgJ3ZtJyB8ICdib3RoJyB9KTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBXYXRjaCBmb3IgZmluZCBwcm9tcHQgY2hhbmdlcyAtIGRlYm91bmNlIHRvIHByZXZlbnQgZXhjZXNzaXZlIHVwZGF0ZXNcclxuICAgIHRoaXMuZmluZFByb21wdC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIC8vIFJlc2V0IGZpbmRFeGVjdXRlZCBmbGFnIHdoZW4gdXNlciBlZGl0cyB0aGUgZmluZCBwcm9tcHRcclxuICAgICAgICBpZiAodGhpcy5maW5kRXhlY3V0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZmluZEV4ZWN1dGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFJlc2V0IGlzRmluZFByb21wdEZyb21BcGkgZmxhZyB3aGVuIHVzZXIgZWRpdHMgdGhlIGZpbmQgcHJvbXB0XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGaW5kUHJvbXB0RnJvbUFwaSkge1xyXG4gICAgICAgICAgdGhpcy5pc0ZpbmRQcm9tcHRGcm9tQXBpID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UpIHtcclxuICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IGZpbmRQcm9tcHQ6IHZhbHVlIHx8ICcnIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciByZXBsYWNlIHByb21wdCBjaGFuZ2VzIC0gZGVib3VuY2UgdG8gcHJldmVudCBleGNlc3NpdmUgdXBkYXRlc1xyXG4gICAgdGhpcy5yZXBsYWNlUHJvbXB0LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgLy8gUmVzZXQgcmVwbGFjZUV4ZWN1dGVkIGZsYWcgd2hlbiB1c2VyIGVkaXRzIHRoZSByZXBsYWNlIHByb21wdFxyXG4gICAgICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UpIHtcclxuICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IHJlcGxhY2VQcm9tcHQ6IHZhbHVlIHx8ICcnIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciByZXBsYWNlQnJhbmQgY2hhbmdlcyAoZm9ybSBjb250cm9sIGhvbGRzIHRoZSBicmFuZCBfaWQpXHJcbiAgICB0aGlzLnJlcGxhY2VCcmFuZC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZUJyYW5kOiB0aGlzLmdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciByZXBsYWNlVm0gY2hhbmdlcyAoZm9ybSBjb250cm9sIGhvbGRzIHRoZSB2bSBfaWQpXHJcbiAgICB0aGlzLnJlcGxhY2VWbS52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZVZtOiB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVwbGFjZUJyYW5kU2VsZWN0aW9uKCk6IHsgX2lkOiBzdHJpbmc7IGJyYW5kTmFtZTogc3RyaW5nIH0gfCBudWxsIHtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5yZXBsYWNlQnJhbmQudmFsdWU7XHJcbiAgICBpZiAoIWlkKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5icmFuZExpc3QuZmluZCgoYjogYW55KSA9PiBiLl9pZCA9PT0gaWQpO1xyXG4gICAgcmV0dXJuIGZvdW5kID8geyBfaWQ6IGZvdW5kLl9pZCwgYnJhbmROYW1lOiBmb3VuZC5icmFuZE5hbWUgfSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRSZXBsYWNlVm1TZWxlY3Rpb24oKTogeyBfaWQ6IHN0cmluZzsgdm1OYW1lOiBzdHJpbmc7IHZtVHlwZT86IHN0cmluZzsgdm1CcmFuZD86IHN0cmluZyB9IHwgbnVsbCB7XHJcbiAgICBjb25zdCBpZCA9IHRoaXMucmVwbGFjZVZtLnZhbHVlO1xyXG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBmb3VuZCA9IHRoaXMucmVwbGFjZVZtTGlzdC5maW5kKCh2OiBhbnkpID0+IHYuX2lkID09PSBpZCk7XHJcbiAgICByZXR1cm4gZm91bmRcclxuICAgICAgPyB7IF9pZDogZm91bmQuX2lkLCB2bU5hbWU6IGZvdW5kLnZtTmFtZSwgdm1UeXBlOiBmb3VuZC52bVR5cGUsIHZtQnJhbmQ6IGZvdW5kLnZtQnJhbmQgfVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRSZXBsYWNlTGlicmFyaWVzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNsaWVudElkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCF0aGlzLmJyYW5kTGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFJlcGxhY2VCcmFuZExpc3QodGhpcy5jbGllbnRJZClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uY29kZSA9PT0gMjAwICYmIEFycmF5LmlzQXJyYXkocmVzPy5kYXRhKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYnJhbmRMaXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgICAgLy8gU3luYyB0aGUgZGF0YSBzZXJ2aWNlIHdpdGggdGhlIHJlc29sdmVkIG9iamVjdCBub3cgdGhhdCB0aGUgbGlzdCBpcyBhdmFpbGFibGVcclxuICAgICAgICAgICAgICBpZiAodGhpcy5yZXBsYWNlQnJhbmQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IHJlcGxhY2VCcmFuZDogdGhpcy5nZXRSZXBsYWNlQnJhbmRTZWxlY3Rpb24oKSB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBicmFuZCBsaXN0OicsIGVycilcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucmVwbGFjZVZtTGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFJlcGxhY2VWbUxpc3QodGhpcy5jbGllbnRJZClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uY29kZSA9PT0gMjAwICYmIEFycmF5LmlzQXJyYXkocmVzPy5kYXRhKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVwbGFjZVZtTGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnJlcGxhY2VWbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZVZtOiB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHJlcGxhY2Ugdm0gbGlzdDonLCBlcnIpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZWVkc1JlcGxhY2VCcmFuZCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHQgPSB0aGlzLnRhcmdldC52YWx1ZTtcclxuICAgIHJldHVybiB0ID09PSAnbWVyY2gnIHx8IHQgPT09ICdib3RoJztcclxuICB9XHJcblxyXG4gIG5lZWRzUmVwbGFjZVZtKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdCA9IHRoaXMudGFyZ2V0LnZhbHVlO1xyXG4gICAgcmV0dXJuIHQgPT09ICd2bScgfHwgdCA9PT0gJ2JvdGgnO1xyXG4gIH1cclxuXHJcbiAgaGFzUmVwbGFjZVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgJiYgIXRoaXMucmVwbGFjZUJyYW5kLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm5lZWRzUmVwbGFjZVZtKCkgJiYgIXRoaXMucmVwbGFjZVZtLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgfHwgdGhpcy5uZWVkc1JlcGxhY2VWbSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXN0b3JlRm9ybVZhbHVlcyhkYXRhOiBGaW5kUmVwbGFjZSk6IHZvaWQge1xyXG4gICAgLy8gUmVzdG9yZSBzZWFyY2hNb2RlXHJcbiAgICBpZiAoZGF0YS5zZWFyY2hNb2RlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlLnNldFZhbHVlKGRhdGEuc2VhcmNoTW9kZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLnByZXZpb3VzU2VhcmNoTW9kZSA9IGRhdGEuc2VhcmNoTW9kZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gUmVzdG9yZSB0YXJnZXRcclxuICAgIGlmIChkYXRhLnRhcmdldCkge1xyXG4gICAgICB0aGlzLnRhcmdldC5zZXRWYWx1ZShkYXRhLnRhcmdldCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBSZXN0b3JlIGZpbmRQcm9tcHRcclxuICAgIGlmIChkYXRhLmZpbmRQcm9tcHQpIHtcclxuICAgICAgdGhpcy5maW5kUHJvbXB0LnNldFZhbHVlKGRhdGEuZmluZFByb21wdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLmlzRmluZFByb21wdEZyb21BcGkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBSZXN0b3JlIHJlcGxhY2VQcm9tcHRcclxuICAgIGlmIChkYXRhLnJlcGxhY2VQcm9tcHQpIHtcclxuICAgICAgdGhpcy5yZXBsYWNlUHJvbXB0LnNldFZhbHVlKGRhdGEucmVwbGFjZVByb21wdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc3RvcmUgcmVwbGFjZUJyYW5kIC8gcmVwbGFjZVZtIOKAlCBmb3JtIGNvbnRyb2xzIGhvbGQgdGhlIF9pZCBvbmx5XHJcbiAgICBpZiAoZGF0YS5yZXBsYWNlQnJhbmQ/Ll9pZCkge1xyXG4gICAgICB0aGlzLnJlcGxhY2VCcmFuZC5zZXRWYWx1ZShkYXRhLnJlcGxhY2VCcmFuZC5faWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGlmIChkYXRhLnJlcGxhY2VWbT8uX2lkKSB7XHJcbiAgICAgIHRoaXMucmVwbGFjZVZtLnNldFZhbHVlKGRhdGEucmVwbGFjZVZtLl9pZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBMb2FkIHN0b3Jlcy9jbHVzdGVycyBhbmQgcmVzdG9yZSBzZWxlY3Rpb25zXHJcbiAgICBpZiAoZGF0YS5zZWFyY2hNb2RlKSB7XHJcbiAgICAgIHRoaXMubG9hZFN0b3Jlc09yQ2x1c3RlcnMoZGF0YSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRTdG9yZXNPckNsdXN0ZXJzKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFNldCBpbml0aWFsIHNlbGVjdGVkIHN0b3JlIGZvciBwcmV2aWV3XHJcbiAgICBpZiAoZGF0YS5zdG9yZXMgJiYgZGF0YS5zdG9yZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBTa2lwIHBsYW5vZ3JhbSBsb2FkIGhlcmUgYXMgd2UnbGwgbG9hZCBpdCBleHBsaWNpdGx5IGJlbG93XHJcbiAgICAgIHRoaXMudXBkYXRlU3RvcmVEcm9wZG93bkl0ZW1zKHRydWUpO1xyXG4gICAgICBpZiAodGhpcy5zdG9yZURyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgPSB0aGlzLnN0b3JlRHJvcGRvd25JdGVtc1swXTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVWYWx1ZXMoKTtcclxuICAgICAgICAvLyBMb2FkIHBsYW5vZ3JhbSBhZnRlciB2aWV3IGlzIGluaXRpYWxpemVkXHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZUNhbnZhcygpICYmIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGxhbm9ncmFtRm9yU3RvcmUodGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUmV0cnkgaWYgY2FudmFzIG5vdCByZWFkeVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkgJiYgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUGxhbm9ncmFtRm9yU3RvcmUodGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuaXNJbml0aWFsTG9hZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdG9yZURyb3Bkb3duSXRlbXMoc2tpcFBsYW5vZ3JhbUxvYWQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzKSB7XHJcbiAgICAgIHRoaXMuc3RvcmVEcm9wZG93bkl0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZVZhbHVlcyA9IFtdO1xyXG4gICAgICAvLyBJZiBubyBzdG9yZXMsIGNsZWFyIHByZXZpZXdcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5maW5kUmVwbGFjZURhdGEuc3RvcmVzLm1hcCgoc3RvcmU6IFN0b3JlKSA9PiAoe1xyXG4gICAgICBzdG9yZUlkOiBzdG9yZS5zdG9yZUlkIHx8IHN0b3JlLnN0b3JlTmFtZSxcclxuICAgICAgc3RvcmVOYW1lOiBzdG9yZS5zdG9yZU5hbWUsXHJcbiAgICAgIF9pZDogc3RvcmUuc3RvcmVJZCB8fCBzdG9yZS5zdG9yZU5hbWVcclxuICAgIH0pKTtcclxuICAgIFxyXG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudGx5IHByZXZpZXdlZCBzdG9yZSBpcyBzdGlsbCBpbiB0aGUgbGlzdFxyXG4gICAgY29uc3QgaXNDdXJyZW50U3RvcmVTdGlsbEluTGlzdCA9IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgJiYgXHJcbiAgICAgIG5ld0l0ZW1zLnNvbWUoKGl0ZW06IGFueSkgPT4gXHJcbiAgICAgICAgaXRlbS5zdG9yZUlkID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlSWQgfHxcclxuICAgICAgICBpdGVtLnN0b3JlTmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVcclxuICAgICAgKTtcclxuICAgIFxyXG4gICAgLy8gT25seSB1cGRhdGUgaWYgaXRlbXMgYWN0dWFsbHkgY2hhbmdlZFxyXG4gICAgY29uc3QgaXRlbXNDaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkobmV3SXRlbXMpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLnN0b3JlRHJvcGRvd25JdGVtcyk7XHJcbiAgICBpZiAoaXRlbXNDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuc3RvcmVEcm9wZG93bkl0ZW1zID0gbmV3SXRlbXM7XHJcbiAgICAgIFxyXG4gICAgICAvLyBJZiBjdXJyZW50IHN0b3JlIHdhcyByZW1vdmVkLCBzd2l0Y2ggdG8gZmlyc3Qgc3RvcmUgaW4gdGhlIGxpc3RcclxuICAgICAgaWYgKCFpc0N1cnJlbnRTdG9yZVN0aWxsSW5MaXN0ICYmIG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBmaXJzdFN0b3JlID0gbmV3SXRlbXNbMF07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyA9IGZpcnN0U3RvcmU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUmVzdG9yZSBmaW5kUmVzcG9uc2VEYXRhIGFuZCByZXBsYWNlUmVzcG9uc2VEYXRhIGZvciB0aGUgc2VsZWN0ZWQgc3RvcmUgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgdGhpcy5yZXN0b3JlU3RvcmVSZXNwb25zZURhdGEoZmlyc3RTdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIExvYWQgcGxhbm9ncmFtIGZvciB0aGUgbmV3IHN0b3JlICh1bmxlc3Mgc2tpcHBlZCBkdXJpbmcgaW5pdGlhbCByZXN0b3JlKVxyXG4gICAgICAgIGlmICghc2tpcFBsYW5vZ3JhbUxvYWQpIHtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZShmaXJzdFN0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZVZhbHVlcyA9IFt0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZVZhbHVlcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gQ2FudmFzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2hlbiBzdG9yZSBpcyBzZWxlY3RlZCBhbmQgY2FudmFzIGVsZW1lbnQgaXMgYXZhaWxhYmxlXHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplQ2FudmFzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMucHJldmlld0NhbnZhcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gQWxyZWFkeSBpbml0aWFsaXplZFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzUmVmPy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Q2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXModGhpcy5wcmV2aWV3Q2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgICAgIHNlbGVjdGlvbkZ1bGx5Q29udGFpbmVkOiB0cnVlLFxyXG4gICAgICAgICAgcGVyUGl4ZWxUYXJnZXRGaW5kOiB0cnVlLFxyXG4gICAgICAgICAgdGFyZ2V0RmluZFRvbGVyYW5jZTogNSxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldHVwWm9vbUhhbmRsZXJzKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIGNhbnZhczonLCBlcnJvcik7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvblN0b3JlU2VsZWN0ZWRGb3JQcmV2aWV3KHN0b3JlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChzdG9yZSAmJiAoIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgfHwgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZUlkICE9PSBzdG9yZS5zdG9yZUlkKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gc3RvcmU7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2xlYXIgc2VsZWN0ZWQgZml4dHVyZSB3aGVuIHN3aXRjaGluZyBzdG9yZXNcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuY2xlYXIoKTsgLy8gQ2xlYXIgdGhlIG1hcCB3aGVuIHN3aXRjaGluZyBzdG9yZXNcclxuICAgICAgXHJcbiAgICAgIC8vIFJlc3RvcmUgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSBmb3IgdGhlIHNlbGVjdGVkIHN0b3JlIGlmIGF2YWlsYWJsZVxyXG4gICAgICB0aGlzLnJlc3RvcmVTdG9yZVJlc3BvbnNlRGF0YShzdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICBcclxuICAgICAgLy8gRm9yY2UgY2hhbmdlIGRldGVjdGlvbiB0byBlbnN1cmUgY2FudmFzIGVsZW1lbnQgaXMgaW4gRE9NXHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEluaXRpYWxpemUgY2FudmFzIGlmIG5vdCBhbHJlYWR5IGRvbmUsIHRoZW4gbG9hZCBwbGFub2dyYW1cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZUNhbnZhcygpKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZShzdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBSZXRyeSBhZnRlciBhIHNob3J0IGRlbGF5IGlmIGNhbnZhcyBlbGVtZW50IG5vdCByZWFkeVxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVDYW52YXMoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZFBsYW5vZ3JhbUZvclN0b3JlKHN0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCA1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZXN0b3JlIGZpbmRSZXNwb25zZURhdGEgYW5kIHJlcGxhY2VSZXNwb25zZURhdGEgZm9yIGEgc3BlY2lmaWMgc3RvcmVcclxuICBwcml2YXRlIHJlc3RvcmVTdG9yZVJlc3BvbnNlRGF0YShzdG9yZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLnN0b3Jlcy5maW5kKFxyXG4gICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSBzdG9yZU5hbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFzdG9yZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmluZFJlc3BvbnNlRGF0YSBpcyBhIHN0cmluZyAoZml4dHVyZSBfaWQpXHJcbiAgICAvLyByZXBsYWNlUmVzcG9uc2VEYXRhIGlzIGFuIG9iamVjdCB3aXRoIHZtQ29uZmlnIGFuZC9vciBzaGVsZkNvbmZpZ1xyXG4gICAgY29uc3QgZml4dHVyZUlkID0gc3RvcmUuZmluZFJlc3BvbnNlRGF0YTtcclxuICAgIGlmICghZml4dHVyZUlkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7IGZpeHR1cmVJZCwgZml4dHVyZVR5cGU6IHVuZGVmaW5lZCB9O1xyXG4gICAgLy8gV2UnbGwgcmUtaHlkcmF0ZSBzZWxlY3RlZEZpeHR1cmVEYXRhIGZyb20gdGhlIGxvYWRlZCBwbGFub2dyYW0gKGZsb29yRGF0YSkgYWZ0ZXIgbG9hZC5cclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBBcHBseSBzdG9yZWQgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSB0byBmbG9vciBkYXRhXHJcbiAgcHJpdmF0ZSBhcHBseVN0b3JlZFJlc3BvbnNlRGF0YSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3JlcyB8fCAhdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyB8fCAhdGhpcy5mbG9vckRhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5maW5kUmVwbGFjZURhdGEuc3RvcmVzLmZpbmQoXHJcbiAgICAgIChzOiBTdG9yZSkgPT4gcy5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghc3RvcmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZpbmRSZXNwb25zZURhdGEgaXMgYSBzdHJpbmcgKGZpeHR1cmUgX2lkKSAtIHVzZSBpdCB0byBmaW5kIHRoZSBmaXh0dXJlXHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSBzdG9yZS5maW5kUmVzcG9uc2VEYXRhO1xyXG4gICAgaWYgKCFmaXh0dXJlSWQpIHJldHVybjtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBmaXh0dXJlIGluIGZsb29yRGF0YVxyXG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkKTtcclxuICAgIGlmICghZml4dHVyZSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIEFwcGx5IHJlcGxhY2VSZXNwb25zZURhdGEgY29uZmlncyBpZiBhdmFpbGFibGUgKG1lcmdlIHdpdGggZXhpc3RpbmcgZml4dHVyZSlcclxuICAgIGlmIChzdG9yZS5yZXBsYWNlUmVzcG9uc2VEYXRhKSB7XHJcbiAgICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBmaXh0dXJlIChiZWZvcmUgcmVwbGFjZSkgZm9yIGJlZm9yZS9hZnRlciBjb21wYXJpc29uXHJcbiAgICAgIC8vIE9ubHkgc3RvcmUgaWYgbm90IGFscmVhZHkgaW4gbWFwIChwcmVzZXJ2ZSBpbml0aWFsIHBsYW5vZ3JhbSBmaXh0dXJlKVxyXG4gICAgICBpZiAoIXRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRml4dHVyZSA9IHN0cnVjdHVyZWRDbG9uZShmaXh0dXJlKTtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuc2V0KGZpeHR1cmVJZCwgb3JpZ2luYWxGaXh0dXJlKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsRml4dHVyZURhdGEgZnJvbSBtYXAgdG8gZW5zdXJlIGl0J3MgYWx3YXlzIHRoZSBpbml0aWFsIHBsYW5vZ3JhbSBmaXh0dXJlXHJcbiAgICAgIGNvbnN0IHN0b3JlZE9yaWdpbmFsID0gdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmdldChmaXh0dXJlSWQpO1xyXG4gICAgICBpZiAoc3RvcmVkT3JpZ2luYWwpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoc3RvcmVkT3JpZ2luYWwpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCB1cGRhdGVkRml4dHVyZTogYW55ID0geyAuLi5maXh0dXJlIH07XHJcbiAgICAgIFxyXG4gICAgICAvLyBNZXJnZSB2bUNvbmZpZyBpZiBwcmVzZW50IGluIHJlcGxhY2VSZXNwb25zZURhdGFcclxuICAgICAgaWYgKHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEudm1Db25maWcpIHtcclxuICAgICAgICB1cGRhdGVkRml4dHVyZS52bUNvbmZpZyA9IHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEudm1Db25maWc7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIE1lcmdlIHNoZWxmQ29uZmlnIGlmIHByZXNlbnQgaW4gcmVwbGFjZVJlc3BvbnNlRGF0YVxyXG4gICAgICBpZiAoc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIHVwZGF0ZWRGaXh0dXJlLnNoZWxmQ29uZmlnID0gc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS5zaGVsZkNvbmZpZztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBmaXh0dXJlIGluIGZsb29yRGF0YVxyXG4gICAgICB0aGlzLnVwZGF0ZUFpUmVzcG9uc2VGaXh0dXJlKHVwZGF0ZWRGaXh0dXJlKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFNldCBzZWxlY3RlZCBmaXh0dXJlIGRhdGEgKGFmdGVyIHJlcGxhY2UpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgIGZpeHR1cmVJZDogdXBkYXRlZEZpeHR1cmUuX2lkLFxyXG4gICAgICAgIGZpeHR1cmVUeXBlOiB1cGRhdGVkRml4dHVyZS5maXh0dXJlVHlwZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gdXBkYXRlZEZpeHR1cmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBObyByZXBsYWNlUmVzcG9uc2VEYXRhLCBjbGVhciBvcmlnaW5hbCBmaXh0dXJlIGFuZCBqdXN0IHNldCB0aGUgc2VsZWN0ZWQgZml4dHVyZSBmcm9tIGZpbmRSZXNwb25zZURhdGFcclxuICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgZml4dHVyZUlkOiBmaXh0dXJlLl9pZCxcclxuICAgICAgICBmaXh0dXJlVHlwZTogZml4dHVyZS5maXh0dXJlVHlwZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gZml4dHVyZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkOiBzdHJpbmcpOiBhbnkgfCBudWxsIHtcclxuICAgIGlmICghZml4dHVyZUlkIHx8ICF0aGlzLmZsb29yRGF0YSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24gfHwgW10pIHtcclxuICAgICAgaWYgKGVsZW1lbnQ/LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBBcnJheS5pc0FycmF5KGVsZW1lbnQuZml4dHVyZXMpKSB7XHJcbiAgICAgICAgY29uc3QgaGl0ID0gZWxlbWVudC5maXh0dXJlcy5maW5kKChmeDogYW55KSA9PiBmeD8uX2lkID09PSBmaXh0dXJlSWQpO1xyXG4gICAgICAgIGlmIChoaXQpIHJldHVybiBoaXQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGZ4IG9mIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgfHwgW10pIHtcclxuICAgICAgaWYgKGZ4Py5faWQgPT09IGZpeHR1cmVJZCkgcmV0dXJuIGZ4O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZFBsYW5vZ3JhbUZvclN0b3JlKHN0b3JlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXN0b3JlTmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0Nhbm5vdCBsb2FkIHBsYW5vZ3JhbTogc3RvcmVOYW1lIG5vdCBhdmFpbGFibGUnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBQcmV2ZW50IGR1cGxpY2F0ZSBjb25jdXJyZW50IGNhbGxzXHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdQbGFub2dyYW0pIHtcclxuICAgICAgY29uc29sZS5sb2coJ1BsYW5vZ3JhbSBsb2FkIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHNraXBwaW5nIGR1cGxpY2F0ZSBjYWxsJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLnByZXZpZXdDYW52YXMpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdDYW52YXMgbm90IGluaXRpYWxpemVkLCBhdHRlbXB0aW5nIHRvIGluaXRpYWxpemUuLi4nKTtcclxuICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVDYW52YXMoKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIGNhbnZhcycpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gR2V0IHBsYW5vSWQgZnJvbSBzdG9yZSBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0UGxhbm9JZCh7IHN0b3JlczogW3N0b3JlTmFtZS50b1VwcGVyQ2FzZSgpXSB9KS50b1Byb21pc2UoKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwICYmIHJlc3BvbnNlPy5kYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcGxhbm9JZCA9IHJlc3BvbnNlLmRhdGFbMF0uX2lkO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyhwbGFub0lkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ05vIHBsYW5vZ3JhbSBmb3VuZCBmb3Igc3RvcmU6Jywgc3RvcmVOYW1lKTtcclxuICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBwbGFub2dyYW06JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmdQbGFub2dyYW0gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFN0b3Jlc09yQ2x1c3RlcnMoc2F2ZWREYXRhPzogRmluZFJlcGxhY2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaE1vZGUgPSB0aGlzLnNlbGVjdGVkTW9kZS52YWx1ZSBhcyAnc3RvcmUnIHwgJ2NsdXN0ZXInO1xyXG4gICAgaWYgKCFzZWFyY2hNb2RlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRTdG9yZU9yQ2x1c3Rlckxpc3QoeyBzZWFyY2hNb2RlIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5jb2RlID09PSAyMDAgJiYgcmVzcG9uc2U/LmRhdGEgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZS5kYXRhKSkge1xyXG4gICAgICAgICAgICBpZiAoc2VhcmNoTW9kZSA9PT0gJ3N0b3JlJykge1xyXG4gICAgICAgICAgICAgIC8vIEZvciBzdG9yZSBtb2RlLCB1c2UgZGF0YSBkaXJlY3RseVxyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gcmVzcG9uc2UuZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWxcclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jbHVzdGVyRGF0YSA9IFtdOyAvLyBDbGVhciBjbHVzdGVyIGRhdGFcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvLyBSZXN0b3JlIHNhdmVkIHNlbGVjdGlvbnMgZm9yIHN0b3JlIG1vZGVcclxuICAgICAgICAgICAgICBpZiAoc2F2ZWREYXRhPy5zdG9yZXMgJiYgc2F2ZWREYXRhLnN0b3Jlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVTdG9yZVNlbGVjdGlvbnMoc2F2ZWREYXRhLnN0b3Jlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIEZvciBjbHVzdGVyIG1vZGUsIHNob3cgY2x1c3RlcnMgaW4gdGhlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgLy8gU3RvcmUgZnVsbCBjbHVzdGVyIGRhdGEgZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgICAgICAgIHRoaXMuY2x1c3RlckRhdGEgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gcmVzcG9uc2UuZGF0YS5tYXAoKGNsdXN0ZXI6IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGlkOiBjbHVzdGVyLmlkLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGNsdXN0ZXIubGFiZWxcclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gUmVzdG9yZSBzYXZlZCBzZWxlY3Rpb25zIGZvciBjbHVzdGVyIG1vZGVcclxuICAgICAgICAgICAgICBpZiAoc2F2ZWREYXRhPy5zdG9yZXMgJiYgc2F2ZWREYXRhLnN0b3Jlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVDbHVzdGVyU2VsZWN0aW9ucyhzYXZlZERhdGEuc3RvcmVzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2x1c3RlckRhdGEgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBzdG9yZXMvY2x1c3RlcnM6JywgZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzdG9yZVN0b3JlU2VsZWN0aW9ucyhzYXZlZFN0b3JlczogU3RvcmVbXSk6IHZvaWQge1xyXG4gICAgLy8gTWF0Y2ggc2F2ZWQgc3RvcmVzIGJ5IHN0b3JlTmFtZVxyXG4gICAgY29uc3Qgc2F2ZWRTdG9yZU5hbWVzID0gbmV3IFNldChzYXZlZFN0b3Jlcy5tYXAocyA9PiBzLnN0b3JlTmFtZSkpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IHRoaXMuc3RvcmVPcHRpb25zLmZpbHRlcihvcHRpb24gPT4gXHJcbiAgICAgIHNhdmVkU3RvcmVOYW1lcy5oYXMob3B0aW9uLmxhYmVsKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlc3RvcmVDbHVzdGVyU2VsZWN0aW9ucyhfc2F2ZWRTdG9yZXM6IFN0b3JlW10pOiB2b2lkIHtcclxuICAgIC8vIFJlc3RvcmUgY2x1c3RlciBzZWxlY3Rpb24gT05MWSBmcm9tIHNlbGVjdGVkQ2x1c3RlcnMgKG5vIGRlcml2YXRpb24gZnJvbSBzdG9yZXMpXHJcbiAgICBjb25zdCBzYXZlZENsdXN0ZXJzID0gdGhpcy5maW5kUmVwbGFjZURhdGE/LnNlbGVjdGVkQ2x1c3RlcnMgfHwgW107XHJcbiAgICBpZiAoIXNhdmVkQ2x1c3RlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNhdmVkQ2x1c3RlcklkcyA9IG5ldyBTZXQoc2F2ZWRDbHVzdGVycy5tYXAoYyA9PiBjLmlkKSk7XHJcbiAgICBjb25zdCBzZWxlY3RlZENsdXN0ZXJzOiBTdG9yZU9wdGlvbltdID0gW107XHJcblxyXG4gICAgdGhpcy5jbHVzdGVyRGF0YS5mb3JFYWNoKChjbHVzdGVyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHNhdmVkQ2x1c3Rlcklkcy5oYXMoY2x1c3Rlci5pZCkpIHtcclxuICAgICAgICBzZWxlY3RlZENsdXN0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgaWQ6IGNsdXN0ZXIuaWQsXHJcbiAgICAgICAgICBsYWJlbDogY2x1c3Rlci5sYWJlbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gc2VsZWN0ZWRDbHVzdGVycztcclxuICB9XHJcblxyXG4gIG9uU3RvcmVzU2VsZWN0ZWQoc3RvcmVzOiBTdG9yZU9wdGlvbltdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gc3RvcmVzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25SZXZpZXdBbmRSZXBsYWNlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uX2lkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZpbmQgcmVwbGFjZSBJRCBhdmFpbGFibGUnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNob3cgY29uZmlybWF0aW9uIG1vZGFsXHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQmF0Y2hDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogJ21kJyxcclxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICB3aW5kb3dDbGFzczogJ2JhdGNoLWNvbmZpcm1hdGlvbi1tb2RhbCdcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFBhc3Mgc3RvcmUgY291bnQgdG8gbW9kYWxcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnN0b3JlQ291bnQgPSB0aGlzLmdldFN0b3JlQ291bnQoKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RhbFJlZi5yZXN1bHQ7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAvLyBVc2VyIGNvbmZpcm1lZCwgcHJvY2VlZCB3aXRoIGJhdGNoIHByb2Nlc3NcclxuICAgICAgICB0aGlzLnByb2NlZWRXaXRoQmF0Y2hQcm9jZXNzKCk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vIFVzZXIgZGlzbWlzc2VkIHRoZSBtb2RhbFxyXG4gICAgICBjb25zb2xlLmxvZygnQmF0Y2ggY29uZmlybWF0aW9uIG1vZGFsIGRpc21pc3NlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZWVkV2l0aEJhdGNoUHJvY2VzcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUmVwbGFjZURhdGE/Ll9pZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyBmaW5kIHJlcGxhY2UgSUQgYXZhaWxhYmxlJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5iYXRjaFByb2Nlc3NpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgZmluZFJlcGxhY2VJZCA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLl9pZDtcclxuICAgIFxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmJhdGNoRmluZFJlcGxhY2UoeyBmaW5kUmVwbGFjZUlkIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5iYXRjaFByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vIFJlZmV0Y2ggZmluZCByZXBsYWNlIGRhdGEgdG8gdXBkYXRlIFVJXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UubG9hZEFuZFNldEZpbmRSZXBsYWNlRGF0YUJ5SWQoZmluZFJlcGxhY2VJZCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgYmF0Y2ggZmluZCByZXBsYWNlOicsIHJlc3BvbnNlPy5tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5iYXRjaFByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIGJhdGNoIGZpbmQgcmVwbGFjZTonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQXBwbHkoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWFyY2hNb2RlID0gdGhpcy5zZWxlY3RlZE1vZGUudmFsdWUgYXMgJ3N0b3JlJyB8ICdjbHVzdGVyJztcclxuICAgIGxldCBzdG9yZXM6IFN0b3JlW10gPSBbXTtcclxuICAgIGxldCBzZWxlY3RlZENsdXN0ZXJzOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgICBcclxuICAgIGlmIChzZWFyY2hNb2RlID09PSAnc3RvcmUnKSB7XHJcbiAgICAgIC8vIEZvciBzdG9yZSBtb2RlLCBjb252ZXJ0IHNlbGVjdGVkIHN0b3JlcyBkaXJlY3RseVxyXG4gICAgICBzdG9yZXMgPSB0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcCgoc3RvcmVPcHRpb246IFN0b3JlT3B0aW9uKSA9PiAoe1xyXG4gICAgICAgIHN0b3JlTmFtZTogc3RvcmVPcHRpb24ubGFiZWwsXHJcbiAgICAgIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZvciBjbHVzdGVyIG1vZGUsIHNhdmUgc2VsZWN0ZWQgY2x1c3RlcnMgYW5kIGV4dHJhY3QgYWxsIHN0b3JlcyBmcm9tIHNlbGVjdGVkIGNsdXN0ZXJzXHJcbiAgICAgIHNlbGVjdGVkQ2x1c3RlcnMgPSB0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcCgoc3RvcmVPcHRpb246IFN0b3JlT3B0aW9uKSA9PiAoe1xyXG4gICAgICAgIGlkOiBzdG9yZU9wdGlvbi5pZCxcclxuICAgICAgICBsYWJlbDogc3RvcmVPcHRpb24ubGFiZWxcclxuICAgICAgfSkpO1xyXG4gICAgICBcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDbHVzdGVySWRzID0gbmV3IFNldCh0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcChzID0+IHMuaWQpKTtcclxuICAgICAgc3RvcmVzID0gW107XHJcbiAgICAgIFxyXG4gICAgICAvLyBGaW5kIHNlbGVjdGVkIGNsdXN0ZXJzIGFuZCBleHRyYWN0IHRoZWlyIHN0b3Jlc1xyXG4gICAgICB0aGlzLmNsdXN0ZXJEYXRhLmZvckVhY2goKGNsdXN0ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZENsdXN0ZXJJZHMuaGFzKGNsdXN0ZXIuaWQpICYmIGNsdXN0ZXIuc3RvcmVzICYmIEFycmF5LmlzQXJyYXkoY2x1c3Rlci5zdG9yZXMpKSB7XHJcbiAgICAgICAgICBjbHVzdGVyLnN0b3Jlcy5mb3JFYWNoKChzdG9yZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHN0b3Jlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBzdG9yZU5hbWU6IHN0b3JlLmxhYmVsICxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBkYXRhIHNlcnZpY2Ugd2l0aCBhbGwgY3VycmVudCB2YWx1ZXNcclxuICAgIGNvbnN0IHVwZGF0ZURhdGE6IGFueSA9IHtcclxuICAgICAgc2VhcmNoTW9kZTogc2VhcmNoTW9kZSxcclxuICAgICAgc3RvcmVzOiBzdG9yZXMsXHJcbiAgICAgIHN0b3JlQ291bnQ6IHN0b3Jlcy5sZW5ndGgsXHJcbiAgICAgIHRhcmdldDogdGhpcy50YXJnZXQudmFsdWUgYXMgJ21lcmNoJyB8ICd2bScgfCAnYm90aCcsXHJcbiAgICAgIGZpbmRQcm9tcHQ6IHRoaXMuZmluZFByb21wdC52YWx1ZSB8fCAnJyxcclxuICAgICAgcmVwbGFjZVByb21wdDogdGhpcy5yZXBsYWNlUHJvbXB0LnZhbHVlIHx8ICcnLFxyXG4gICAgICByZXBsYWNlQnJhbmQ6IHRoaXMuZ2V0UmVwbGFjZUJyYW5kU2VsZWN0aW9uKCksXHJcbiAgICAgIHJlcGxhY2VWbTogdGhpcy5nZXRSZXBsYWNlVm1TZWxlY3Rpb24oKVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGQgc2VsZWN0ZWRDbHVzdGVycyBvbmx5IHdoZW4gc2VhcmNoTW9kZSBpcyBjbHVzdGVyXHJcbiAgICBpZiAoc2VhcmNoTW9kZSA9PT0gJ2NsdXN0ZXInICYmIHNlbGVjdGVkQ2x1c3RlcnMpIHtcclxuICAgICAgdXBkYXRlRGF0YS5zZWxlY3RlZENsdXN0ZXJzID0gc2VsZWN0ZWRDbHVzdGVycztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEodXBkYXRlRGF0YSk7XHJcblxyXG4gICAgLy8gVHJpZ2dlciBzYXZlIGFzIGRyYWZ0XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnRyaWdnZXJTYXZlRHJhZnQoKTtcclxuICB9XHJcblxyXG4gIC8vIENhbnZhcyBzZXR1cCBtZXRob2RzXHJcbiAgc2V0dXBab29tSGFuZGxlcnMoY2FudmFzOiBmYWJyaWMuQ2FudmFzKTogdm9pZCB7XHJcbiAgICAvLyBEaXNhYmxlIG9iamVjdCBzZWxlY3Rpb24gZ2xvYmFsbHlcclxuICAgIGNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgIFxyXG4gICAgY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBsZXQgem9vbSA9IGNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuICAgICAgICB6b29tID0gTWF0aC5tYXgoMC4wNSwgTWF0aC5taW4oem9vbSwgNSkpO1xyXG4gICAgICAgIGNhbnZhcy56b29tVG9Qb2ludCh7IHg6IGUub2Zmc2V0WCwgeTogZS5vZmZzZXRZIH0gYXMgZmFicmljLlBvaW50LCB6b29tKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIGNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIC8vIEhhbmRsZSBmaXh0dXJlIGNsaWNrcyAtIHVzZSBmaW5kVGFyZ2V0IHRvIGdldCB0aGUgYWN0dWFsIGdyb3VwXHJcbiAgICAgIGlmIChvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gb3B0LnRhcmdldCBhcyBhbnk7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGZpeHR1cmUgZ3JvdXAgb3IgbmVzdGVkIHdpdGhpbiBvbmVcclxuICAgICAgICBsZXQgZml4dHVyZUdyb3VwID0gb2JqO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFRyYXZlcnNlIHVwIHRvIGZpbmQgdGhlIGZpeHR1cmUgZ3JvdXBcclxuICAgICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xyXG4gICAgICAgIHdoaWxlIChmaXh0dXJlR3JvdXAgJiYgIShmaXh0dXJlR3JvdXAgYXMgYW55KS5maXh0dXJlSWQgJiYgIShmaXh0dXJlR3JvdXAgYXMgYW55KS5vYmpUeXBlICYmIGF0dGVtcHRzIDwgMTApIHtcclxuICAgICAgICAgIGlmICgoZml4dHVyZUdyb3VwIGFzIGFueSkucGFyZW50KSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmVHcm91cCA9IChmaXh0dXJlR3JvdXAgYXMgYW55KS5wYXJlbnQ7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKChmaXh0dXJlR3JvdXAgYXMgYW55KS5ncm91cCkge1xyXG4gICAgICAgICAgICBmaXh0dXJlR3JvdXAgPSAoZml4dHVyZUdyb3VwIGFzIGFueSkuZ3JvdXA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dGVtcHRzKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGZvdW5kIGEgZml4dHVyZSBncm91cFxyXG4gICAgICAgIGlmICgoZml4dHVyZUdyb3VwIGFzIGFueSkub2JqVHlwZSA9PT0gXCJmaXh0dXJlXCIgfHwgKGZpeHR1cmVHcm91cCBhcyBhbnkpLmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgdGhpcy5vbkZpeHR1cmVDbGljayhmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gRm9yIG90aGVyIGVsZW1lbnRzLCBqdXN0IGhpZ2hsaWdodFxyXG4gICAgICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3Qob3B0LnRhcmdldCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmICghb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIGNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSAmJiAhb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBjb25zdCB2cHQgPSBjYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgdnB0WzRdICs9IGUuY2xpZW50WCAtIGxhc3RQb3NYO1xyXG4gICAgICAgIHZwdFs1XSArPSBlLmNsaWVudFkgLSBsYXN0UG9zWTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjYW52YXMub24oXCJtb3VzZTp1cFwiLCAoKSA9PiB7XHJcbiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgY2FudmFzLnNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBhbGwgb2JqZWN0IG1vdmVtZW50ICh3YWxscywgZW50cmFuY2VzLCBmaXh0dXJlcywgb3RoZXIgZWxlbWVudHMpXHJcbiAgICBjYW52YXMub24oXCJvYmplY3Q6bW92aW5nXCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gZS50YXJnZXQ7XHJcbiAgICAgIGlmIChvYmogJiYgKG9iaiBhcyBhbnkpLm9ialR5cGUpIHtcclxuICAgICAgICBlLmUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgLy8gUmVzZXQgcG9zaXRpb25cclxuICAgICAgICBvYmouc2V0Q29vcmRzKCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBhbGwgb2JqZWN0IG1vZGlmaWNhdGlvbnMgKHNjYWxpbmcsIHJvdGF0aW5nLCBldGMuKVxyXG4gICAgY2FudmFzLm9uKFwib2JqZWN0Om1vZGlmaWVkXCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gZS50YXJnZXQ7XHJcbiAgICAgIGlmIChvYmogJiYgKG9iaiBhcyBhbnkpLm9ialR5cGUpIHtcclxuICAgICAgICAvLyBSZXNldCBhbnkgY2hhbmdlc1xyXG4gICAgICAgIG9iai5zZXRDb29yZHMoKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IG9iamVjdCBzY2FsaW5nXHJcbiAgICBjYW52YXMub24oXCJvYmplY3Q6c2NhbGluZ1wiLCAoZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IGUudGFyZ2V0O1xyXG4gICAgICBpZiAob2JqICYmIChvYmogYXMgYW55KS5vYmpUeXBlKSB7XHJcbiAgICAgICAgZS5lLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIG9iai5zZXRDb29yZHMoKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IG9iamVjdCByb3RhdGluZ1xyXG4gICAgY2FudmFzLm9uKFwib2JqZWN0OnJvdGF0aW5nXCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gZS50YXJnZXQ7XHJcbiAgICAgIGlmIChvYmogJiYgKG9iaiBhcyBhbnkpLm9ialR5cGUpIHtcclxuICAgICAgICBlLmUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgb2JqLnNldENvb3JkcygpO1xyXG4gICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0U3RvcmVGaXh0dXJlcyhzdG9yZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5wcmV2aWV3Q2FudmFzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignQ2FudmFzIG5vdCBpbml0aWFsaXplZCcpO1xyXG4gICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYW52YXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRTdG9yZUZpeHR1cmVzKHsgaWQ6IFtzdG9yZUlkXSB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyZXM/LmRhdGE/LlswXT8uZmxvb3JzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucGxhbm9EYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdKTtcclxuICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdLmZsb29yc1swXSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEFwcGx5IHN0b3JlZCBmaW5kUmVzcG9uc2VEYXRhIGFuZCByZXBsYWNlUmVzcG9uc2VEYXRhIGlmIGF2YWlsYWJsZSBmb3IgdGhpcyBzdG9yZVxyXG4gICAgICAgICAgLy8gVGhpcyB1cGRhdGVzIHRoZSBmbG9vckRhdGEgd2l0aCB0aGUgc3RvcmVkIGZpeHR1cmUgY2hhbmdlcyBhbmQgc2V0cyBzZWxlY3RlZEZpeHR1cmVEYXRhXHJcbiAgICAgICAgICB0aGlzLmFwcGx5U3RvcmVkUmVzcG9uc2VEYXRhKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIE9wZW4gcGFuZWwgaWYgd2UgaGF2ZSBzZWxlY3RlZCBmaXh0dXJlIGRhdGFcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gQ29sbGVjdCBhbGwgZml4dHVyZXMgZm9yIHByZXZpZXdcclxuICAgICAgICAgIHRoaXMuY29sbGVjdEFsbEZpeHR1cmVzKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEVuc3VyZSBjYW52YXMgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlbmRlcmluZ1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnByZXZpZXdDYW52YXMpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2FudmFzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdDYW52YXMpIHtcclxuICAgICAgICAgICAgLy8gUmVuZGVyIHRoZSBwbGFub2dyYW0gd2l0aCB0aGUgdXBkYXRlZCBmbG9vckRhdGEgKHdoaWNoIGluY2x1ZGVzIHN0b3JlZCByZXNwb25zZSBkYXRhKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZS1jZW50ZXIgYW5kIGhpZ2hsaWdodCB0aGUgc2VsZWN0ZWQgZml4dHVyZSBpZiBzdG9yZWQgcmVzcG9uc2UgZGF0YSBleGlzdHNcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVDYW52YXModGhpcy5wcmV2aWV3Q2FudmFzLCB0aGlzLnByZXZpZXdDYW52YXNDb250YWluZXJSZWYpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIEhpZ2hsaWdodCB0aGUgZml4dHVyZSBpZiB3ZSBoYXZlIHN0b3JlZCByZXNwb25zZSBkYXRhXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmU/LmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICAgICApIGFzIGZhYnJpYy5Hcm91cCB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGhpcy5wcmV2aWV3Q2FudmFzLCBhY3Rpb25GaXh0dXJlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gQXV0b21hdGljYWxseSB0cmlnZ2VyIGZpbmQgYW5kIHJlcGxhY2UgaWYgcHJvbXB0cyBhcmUgYXZhaWxhYmxlIGFuZCBzdG9yZSBkb2Vzbid0IGhhdmUgcmVzdWx0c1xyXG4gICAgICAgICAgICAgIHRoaXMuYXV0b0ZpbmRBbmRSZXBsYWNlSWZOZWVkZWQoKTtcclxuICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwbGFubzonLCBlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplQ2FudmFzKGNhbnZhczogZmFicmljLkNhbnZhcywgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pik6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSBjb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgIGNhbnZhcy5zZXREaW1lbnNpb25zKHtcclxuICAgICAgd2lkdGg6IGNvbnRhaW5lckVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGNvbnRhaW5lckVsLmNsaWVudEhlaWdodCxcclxuICAgIH0pO1xyXG4gICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZChjYW52YXM6IGZhYnJpYy5DYW52YXMpIHtcclxuICAgIGlmICghY2FudmFzKSByZXR1cm47XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoY2FudmFzKTtcclxuICAgIGlmICghYm91bmRzLndpZHRoIHx8ICFib3VuZHMuaGVpZ2h0KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY2FudmFzVyA9IGNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgY2FudmFzSCA9IGNhbnZhcy5nZXRIZWlnaHQoKTtcclxuICAgIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1cgLyBib3VuZHMud2lkdGg7XHJcbiAgICBjb25zdCBzY2FsZVkgPSBjYW52YXNIIC8gYm91bmRzLmhlaWdodDtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSkgKiAwLjk7XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0VnB0ID0gWy4uLihjYW52YXMudmlld3BvcnRUcmFuc2Zvcm0gfHwgWzEsIDAsIDAsIDEsIDAsIDBdKV0gYXMgZmFicmljLlRNYXQyRDtcclxuICAgIHRhcmdldFZwdFswXSA9IHRhcmdldFpvb207XHJcbiAgICB0YXJnZXRWcHRbM10gPSB0YXJnZXRab29tO1xyXG4gICAgdGFyZ2V0VnB0WzRdID0gY2FudmFzVyAvIDIgLSAoYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyKSAqIHRhcmdldFpvb207XHJcbiAgICB0YXJnZXRWcHRbNV0gPSBjYW52YXNIIC8gMiAtIChib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDIpICogdGFyZ2V0Wm9vbTtcclxuXHJcbiAgICBjb25zdCBzdGFydFZwdCA9IFsuLi5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIGZhYnJpYy51dGlsLmFuaW1hdGUoe1xyXG4gICAgICBzdGFydFZhbHVlOiAwLFxyXG4gICAgICBlbmRWYWx1ZTogMSxcclxuICAgICAgZHVyYXRpb246IDEwMCxcclxuICAgICAgZWFzaW5nOiBmYWJyaWMudXRpbC5lYXNlLmVhc2VPdXRDdWJpYyxcclxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtITtcclxuICAgICAgICB2cHRbMF0gPSBzdGFydFZwdFswXSArICh0YXJnZXRWcHRbMF0gLSBzdGFydFZwdFswXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbM10gPSBzdGFydFZwdFszXSArICh0YXJnZXRWcHRbM10gLSBzdGFydFZwdFszXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNF0gPSBzdGFydFZwdFs0XSArICh0YXJnZXRWcHRbNF0gLSBzdGFydFZwdFs0XSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNV0gPSBzdGFydFZwdFs1XSArICh0YXJnZXRWcHRbNV0gLSBzdGFydFZwdFs1XSkgKiB2YWx1ZTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZ1bGxMYXlvdXRCb3VuZHMoY2FudmFzOiBmYWJyaWMuQ2FudmFzKSB7XHJcbiAgICBjb25zdCBvYmplY3RzID0gY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHJldHVybiB7IGxlZnQ6IDAsIHRvcDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG5cclxuICAgIGxldCBtaW5YID0gSW5maW5pdHksIG1pblkgPSBJbmZpbml0eSwgbWF4WCA9IC1JbmZpbml0eSwgbWF4WSA9IC1JbmZpbml0eTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IG9iaiBvZiBvYmplY3RzKSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCByZWN0LmxlZnQpO1xyXG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcmVjdC50b3ApO1xyXG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCk7XHJcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBsZWZ0OiBtaW5YLCB0b3A6IG1pblksIHdpZHRoOiBtYXhYIC0gbWluWCwgaGVpZ2h0OiBtYXhZIC0gbWluWSB9O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRmxvb3IoY2FudmFzOiBmYWJyaWMuQ2FudmFzKSB7XHJcbiAgICBhd2FpdCB0aGlzLmRyYXdJbml0aWFsQ29udGVudChjYW52YXMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0luaXRpYWxDb250ZW50KGNhbnZhczogZmFicmljLkNhbnZhcyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY2FudmFzLmNsZWFyKCk7XHJcbiAgICBhd2FpdCB0aGlzLmRyYXdMYXlvdXRFbGVtZW50cyhjYW52YXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXV0b21hdGljYWxseSB0cmlnZ2VyIGZpbmQgYW5kIHJlcGxhY2UgaWYgcHJvbXB0cyBhcmUgYXZhaWxhYmxlIGFuZCBzdG9yZSBkb2Vzbid0IGhhdmUgcmVzdWx0c1xyXG4gIHByaXZhdGUgYXV0b0ZpbmRBbmRSZXBsYWNlSWZOZWVkZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgfHwgIXRoaXMuZmluZFJlcGxhY2VEYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiBwcm9tcHRzIGFyZSBhdmFpbGFibGVcclxuICAgIGNvbnN0IGhhc0ZpbmRQcm9tcHQgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5maW5kUHJvbXB0ICYmIHRoaXMuZmluZFJlcGxhY2VEYXRhLmZpbmRQcm9tcHQudHJpbSgpLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgLy8gUmVxdWlyZSBhdCBsZWFzdCBmaW5kIHByb21wdCB0byBhdXRvLWFwcGx5XHJcbiAgICBpZiAoIWhhc0ZpbmRQcm9tcHQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgc3RvcmUgYWxyZWFkeSBoYXMgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXM/LmZpbmQoXHJcbiAgICAgIChzOiBTdG9yZSkgPT4gcy5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFdoZW4gc3dpdGNoaW5nIHN0b3Jlcywgd2Ugd2FudCB0byByZS1hcHBseSBmaW5kIGV2ZW4gaWYgdGhlIHN0b3JlIGFscmVhZHkgaGFzIGZpbmRSZXNwb25zZURhdGFcclxuICAgIC8vIFRoaXMgYWxsb3dzIGF1dG8tYXBwbHkgd2hlbiBvbmx5IGZpbmQgcHJvbXB0IGV4aXN0cyBhbmQgdXNlciBjaGFuZ2VzIHN0b3Jlc1xyXG4gICAgLy8gT25seSBza2lwIGlmIGJvdGggZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSBleGlzdCAoYWxyZWFkeSBmdWxseSBwcm9jZXNzZWQpXHJcbiAgICBpZiAoc3RvcmU/LmZpbmRSZXNwb25zZURhdGEgJiYgc3RvcmU/LnJlcGxhY2VSZXNwb25zZURhdGEpIHtcclxuICAgICAgLy8gU3RvcmUgYWxyZWFkeSBoYXMgYm90aCBmaW5kIGFuZCByZXBsYWNlIHJlc3VsdHMsIHNraXAgdG8gcHJlc2VydmUgdGhlIHN0YXRlXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgdGhlIHByb21wdHMgaW4gdGhlIGZvcm0gY29udHJvbHMgaWYgbm90IGFscmVhZHkgc2V0XHJcbiAgICBpZiAoIXRoaXMuZmluZFByb21wdC52YWx1ZSAmJiB0aGlzLmZpbmRSZXBsYWNlRGF0YS5maW5kUHJvbXB0KSB7XHJcbiAgICAgIHRoaXMuZmluZFByb21wdC5zZXRWYWx1ZSh0aGlzLmZpbmRSZXBsYWNlRGF0YS5maW5kUHJvbXB0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMuaXNGaW5kUHJvbXB0RnJvbUFwaSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucmVwbGFjZUJyYW5kLnZhbHVlICYmIHRoaXMuZmluZFJlcGxhY2VEYXRhLnJlcGxhY2VCcmFuZD8uX2lkKSB7XHJcbiAgICAgIHRoaXMucmVwbGFjZUJyYW5kLnNldFZhbHVlKHRoaXMuZmluZFJlcGxhY2VEYXRhLnJlcGxhY2VCcmFuZC5faWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yZXBsYWNlVm0udmFsdWUgJiYgdGhpcy5maW5kUmVwbGFjZURhdGEucmVwbGFjZVZtPy5faWQpIHtcclxuICAgICAgdGhpcy5yZXBsYWNlVm0uc2V0VmFsdWUodGhpcy5maW5kUmVwbGFjZURhdGEucmVwbGFjZVZtLl9pZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEF1dG9tYXRpY2FsbHkgdHJpZ2dlciBmaW5kIGZpcnN0LCB0aGVuIHJlcGxhY2UgYWZ0ZXIgZmluZCBjb21wbGV0ZXMgKGlmIGEgdmFsaWQgcmVwbGFjZSBzZWxlY3Rpb24gZXhpc3RzKVxyXG4gICAgdGhpcy5hdXRvRmluZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXV0byBmaW5kIC0gd2lsbCB0cmlnZ2VyIHJlcGxhY2UgYWZ0ZXIgY29tcGxldGlvblxyXG4gIHByaXZhdGUgYXV0b0ZpbmQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmluZFByb21wdC52YWx1ZSB8fCAhdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maW5kTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgc2VsZWN0aW9uQ3JpdGVyaWE6IHRoaXMuZmluZFByb21wdC52YWx1ZSxcclxuICAgICAgc3RvcmVzOiBbdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZmluZEZpeHR1cmUocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmluZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGluZGljYXRlcyBcIk5PVCBGT1VORFwiXHJcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAnc3VjY2VzcycgJiYgcmVzLm1lc3NhZ2UgPT09ICdOT1QgRk9VTkQnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0V2FybmluZ1RvYXN0KCdObyBtYXRjaGluZyBmaXh0dXJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gcHJvbXB0Jyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiByZXMuZGF0YSBleGlzdHMgYmVmb3JlIHByb2Nlc3NpbmdcclxuICAgICAgICAgICAgaWYgKCFyZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFdhcm5pbmdUb2FzdCgnTm8gbWF0Y2hpbmcgZml4dHVyZSBmb3VuZCBmb3IgdGhlIGdpdmVuIHByb21wdCcpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBaVJlc3BvbnNlRml4dHVyZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBmb3VuZCBmaXh0dXJlIGZvciBwb3RlbnRpYWwgcmVwbGFjZSBvcGVyYXRpb25cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgZml4dHVyZUlkOiByZXMuZGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgZml4dHVyZVR5cGU6IHJlcy5kYXRhLmZpeHR1cmVUeXBlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFNhdmUgZmluZFJlc3BvbnNlRGF0YSB0byB0aGUgc3BlY2lmaWMgc3RvcmVcclxuICAgICAgICAgICAgdGhpcy5zYXZlRmluZFJlc3BvbnNlRGF0YShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGZsb29yIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgY2FudmFzIHRvIGZ1bGx5IHJlbmRlciBiZWZvcmUgaGlnaGxpZ2h0aW5nXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSByZXMuZGF0YS5faWRcclxuICAgICAgICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRoaXMucHJldmlld0NhbnZhcywgYWN0aW9uRml4dHVyZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIEFmdGVyIGZpbmQgY29tcGxldGVzLCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgcmVwbGFjZSBvbmx5IGlmIGEgdmFsaWQgcmVwbGFjZSBzZWxlY3Rpb24gZXhpc3RzXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNSZXBsYWNlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvUmVwbGFjZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmluZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQXV0byByZXBsYWNlIC0gY2FsbGVkIGFmdGVyIGF1dG8gZmluZCBjb21wbGV0ZXNcclxuICBwcml2YXRlIGF1dG9SZXBsYWNlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmhhc1JlcGxhY2VTZWxlY3Rpb24oKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2V0IHRoZSBmb3VuZCBmaXh0dXJlIElEIGZyb20gdGhlIHN0b3JlJ3MgZmluZFJlc3BvbnNlRGF0YSAobm90IHRoZSBjbGlja2VkIGZpeHR1cmUpXHJcbiAgICBjb25zdCBmb3VuZEZpeHR1cmVJZCA9IHRoaXMuZ2V0Q3VycmVudFN0b3JlRmluZFJlc3BvbnNlRGF0YSgpO1xyXG4gICAgaWYgKCFmb3VuZEZpeHR1cmVJZCkge1xyXG4gICAgICAvLyBGYWxsYmFjayB0byBzZWxlY3RlZCBmaXh0dXJlIGlmIG5vIGZpbmRSZXNwb25zZURhdGEgZXhpc3RzXHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpeHR1cmU/LmZpeHR1cmVJZCAmJiAhdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5faWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2UgdGhlIGZvdW5kIGZpeHR1cmUgSUQgKGZyb20gZmluZFJlc3BvbnNlRGF0YSkgaW5zdGVhZCBvZiB0aGUgY2xpY2tlZCBmaXh0dXJlXHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSBmb3VuZEZpeHR1cmVJZCB8fCB0aGlzLnNlbGVjdGVkRml4dHVyZT8uZml4dHVyZUlkIHx8IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uX2lkO1xyXG5cclxuICAgIC8vIEdldCB0aGUgb3JpZ2luYWwgZml4dHVyZSBkYXRhIGZyb20gdGhlIGZvdW5kIGZpeHR1cmUgKG5vdCB0aGUgY2xpY2tlZCBvbmUpXHJcbiAgICBjb25zdCBmb3VuZEZpeHR1cmUgPSB0aGlzLmdldEZpeHR1cmVCeUlkRnJvbUZsb29yKGZpeHR1cmVJZCk7XHJcbiAgICBjb25zdCBvcmlnaW5hbEZpeHR1cmUgPSBmb3VuZEZpeHR1cmUgPyBzdHJ1Y3R1cmVkQ2xvbmUoZm91bmRGaXh0dXJlKSA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5yZXBsYWNlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVJZCxcclxuICAgICAgdXBkYXRlVHlwZTogdGhpcy50YXJnZXQudmFsdWUsXHJcbiAgICAgIHJlcGxhY2VCcmFuZDogdGhpcy5uZWVkc1JlcGxhY2VCcmFuZCgpID8gdGhpcy5nZXRSZXBsYWNlQnJhbmRTZWxlY3Rpb24oKSA6IG51bGwsXHJcbiAgICAgIHJlcGxhY2VWbTogdGhpcy5uZWVkc1JlcGxhY2VWbSgpID8gdGhpcy5nZXRSZXBsYWNlVm1TZWxlY3Rpb24oKSA6IG51bGwsXHJcbiAgICAgIHVwZGF0aW9uQ3JpdGVyaWE6IHRoaXMucmVwbGFjZVByb21wdC52YWx1ZSB8fCAnJyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLnJlcGxhY2VGaXh0dXJlKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vIE1hcmsgcmVwbGFjZSBhcyBleGVjdXRlZCB0byBkaXNhYmxlIHRoZSBidXR0b25cclxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gU3RvcmUgb3JpZ2luYWwgZml4dHVyZSBmb3IgYmVmb3JlL2FmdGVyIGNvbXBhcmlzb25cclxuICAgICAgICAgICAgLy8gT25seSBzdG9yZSBpZiBub3QgYWxyZWFkeSBpbiBtYXAgKHByZXNlcnZlIGluaXRpYWwgcGxhbm9ncmFtIGZpeHR1cmUpXHJcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbEZpeHR1cmUgJiYgIXRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5zZXQoZml4dHVyZUlkLCBvcmlnaW5hbEZpeHR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWxGaXh0dXJlRGF0YSBmcm9tIG1hcCB0byBlbnN1cmUgaXQncyBhbHdheXMgdGhlIGluaXRpYWwgcGxhbm9ncmFtIGZpeHR1cmVcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuZ2V0KGZpeHR1cmVJZCk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yZWRPcmlnaW5hbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShzdG9yZWRPcmlnaW5hbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWlSZXNwb25zZUZpeHR1cmUocmVzLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgLy8gU2F2ZSByZXBsYWNlUmVzcG9uc2VEYXRhIHRvIHRoZSBzcGVjaWZpYyBzdG9yZVxyXG4gICAgICAgICAgICB0aGlzLnNhdmVSZXBsYWNlUmVzcG9uc2VEYXRhKHJlcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBzZWxlY3RlZCBmaXh0dXJlIGRhdGEgdG8gdGhlIGZvdW5kIGZpeHR1cmUgKGFmdGVyIHJlcGxhY2UpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVJZDogcmVzLmRhdGEuX2lkLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUeXBlOiByZXMuZGF0YS5maXh0dXJlVHlwZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gcmVzLmRhdGE7XHJcblxyXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGZsb29yIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgY2FudmFzIHRvIGZ1bGx5IHJlbmRlciBiZWZvcmUgaGlnaGxpZ2h0aW5nXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBIaWdobGlnaHQgdGhlIGZvdW5kIGZpeHR1cmUgKG5vdCB0aGUgY2xpY2tlZCBvbmUpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSByZXMuZGF0YS5faWRcclxuICAgICAgICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRoaXMucHJldmlld0NhbnZhcywgYWN0aW9uRml4dHVyZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBGaW5kIGFuZCBSZXBsYWNlIGJ1dHRvbiBoYW5kbGVyc1xyXG4gIG9uRmluZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUHJvbXB0LnZhbHVlIHx8ICF0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbmRMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBzZWxlY3Rpb25Dcml0ZXJpYTogdGhpcy5maW5kUHJvbXB0LnZhbHVlLFxyXG4gICAgICBzdG9yZXM6IFt0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZV0sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5maW5kRml4dHVyZShwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maW5kTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICBpZiAocmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaW5kaWNhdGVzIFwiTk9UIEZPVU5EXCJcclxuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXMubWVzc2FnZSA9PT0gJ05PVCBGT1VORCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRXYXJuaW5nVG9hc3QoJ05vIG1hdGNoaW5nIGZpeHR1cmUgZm91bmQgZm9yIHRoZSBnaXZlbiBwcm9tcHQnKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHJlcy5kYXRhIGV4aXN0cyBiZWZvcmUgcHJvY2Vzc2luZ1xyXG4gICAgICAgICAgICBpZiAoIXJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0V2FybmluZ1RvYXN0KCdObyBtYXRjaGluZyBmaXh0dXJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gcHJvbXB0Jyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFpUmVzcG9uc2VGaXh0dXJlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGZvdW5kIGZpeHR1cmUgZm9yIHBvdGVudGlhbCByZXBsYWNlIG9wZXJhdGlvblxyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlSWQgPSByZXMuZGF0YS5faWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVJZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUeXBlOiByZXMuZGF0YS5maXh0dXJlVHlwZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgZml4dHVyZSBmcm9tIGZsb29yRGF0YSBiZWZvcmUgYW55IG1vZGlmaWNhdGlvbnNcclxuICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gc2hvdyBCZWZvcmUvQWZ0ZXIgZXZlbiB3aGVuIG9ubHkgZmluZCBkYXRhIGV4aXN0c1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kRml4dHVyZSA9IHRoaXMuZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkKTtcclxuICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbEZpeHR1cmUgPSBmb3VuZEZpeHR1cmUgPyBzdHJ1Y3R1cmVkQ2xvbmUoZm91bmRGaXh0dXJlKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgLy8gSWYgZm91bmQsIHN0b3JlIGl0IGluIHRoZSBtYXBcclxuICAgICAgICAgICAgICBpZiAob3JpZ2luYWxGaXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuc2V0KGZpeHR1cmVJZCwgb3JpZ2luYWxGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBvcmlnaW5hbEZpeHR1cmVEYXRhIGZvciBkaXNwbGF5XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUob3JpZ2luYWxGaXh0dXJlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gSWYgYWxyZWFkeSBpbiBtYXAsIHJlc3RvcmUgaXRcclxuICAgICAgICAgICAgICBjb25zdCBzdG9yZWRPcmlnaW5hbCA9IHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5nZXQoZml4dHVyZUlkKTtcclxuICAgICAgICAgICAgICBpZiAoc3RvcmVkT3JpZ2luYWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShzdG9yZWRPcmlnaW5hbCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBNYXJrIGZpbmQgYXMgZXhlY3V0ZWQgdG8gZGlzYWJsZSB0aGUgYnV0dG9uXHJcbiAgICAgICAgICAgIHRoaXMuZmluZEV4ZWN1dGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFNhdmUgZmluZFJlc3BvbnNlRGF0YSB0byB0aGUgc3BlY2lmaWMgc3RvcmVcclxuICAgICAgICAgICAgdGhpcy5zYXZlRmluZFJlc3BvbnNlRGF0YShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGZsb29yIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgY2FudmFzIHRvIGZ1bGx5IHJlbmRlciBiZWZvcmUgaGlnaGxpZ2h0aW5nXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSByZXMuZGF0YS5faWRcclxuICAgICAgICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRoaXMucHJldmlld0NhbnZhcywgYWN0aW9uRml4dHVyZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maW5kTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25SZXBsYWNlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmhhc1JlcGxhY2VTZWxlY3Rpb24oKSkge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRXYXJuaW5nVG9hc3QoXHJcbiAgICAgICAgdGhpcy5uZWVkc1JlcGxhY2VCcmFuZCgpICYmIHRoaXMubmVlZHNSZXBsYWNlVm0oKVxyXG4gICAgICAgICAgPyAnUGxlYXNlIHNlbGVjdCBhIGJyYW5kIGFuZCBhIFZNIHRvIHJlcGxhY2Ugd2l0aCdcclxuICAgICAgICAgIDogdGhpcy5uZWVkc1JlcGxhY2VCcmFuZCgpXHJcbiAgICAgICAgICAgID8gJ1BsZWFzZSBzZWxlY3QgYSBicmFuZCB0byByZXBsYWNlIHdpdGgnXHJcbiAgICAgICAgICAgIDogJ1BsZWFzZSBzZWxlY3QgYSBWTSB0byByZXBsYWNlIHdpdGgnXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHZXQgdGhlIGZvdW5kIGZpeHR1cmUgSUQgZnJvbSB0aGUgc3RvcmUncyBmaW5kUmVzcG9uc2VEYXRhIChub3QgdGhlIGNsaWNrZWQgZml4dHVyZSlcclxuICAgIGNvbnN0IGZvdW5kRml4dHVyZUlkID0gdGhpcy5nZXRDdXJyZW50U3RvcmVGaW5kUmVzcG9uc2VEYXRhKCk7XHJcbiAgICBpZiAoIWZvdW5kRml4dHVyZUlkKSB7XHJcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHNlbGVjdGVkIGZpeHR1cmUgaWYgbm8gZmluZFJlc3BvbnNlRGF0YSBleGlzdHNcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRml4dHVyZT8uZml4dHVyZUlkICYmICF0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE/Ll9pZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFVzZSB0aGUgZm91bmQgZml4dHVyZSBJRCAoZnJvbSBmaW5kUmVzcG9uc2VEYXRhKSBpbnN0ZWFkIG9mIHRoZSBjbGlja2VkIGZpeHR1cmVcclxuICAgIGNvbnN0IGZpeHR1cmVJZCA9IGZvdW5kRml4dHVyZUlkIHx8IHRoaXMuc2VsZWN0ZWRGaXh0dXJlPy5maXh0dXJlSWQgfHwgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5faWQ7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBvcmlnaW5hbCBmaXh0dXJlIGRhdGEgZnJvbSB0aGUgZm91bmQgZml4dHVyZSAobm90IHRoZSBjbGlja2VkIG9uZSlcclxuICAgIGNvbnN0IGZvdW5kRml4dHVyZSA9IHRoaXMuZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkKTtcclxuICAgIGNvbnN0IG9yaWdpbmFsRml4dHVyZSA9IGZvdW5kRml4dHVyZSA/IHN0cnVjdHVyZWRDbG9uZShmb3VuZEZpeHR1cmUpIDogbnVsbDtcclxuXHJcbiAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIGZpeHR1cmVJZDogZml4dHVyZUlkLFxyXG4gICAgICB1cGRhdGVUeXBlOiB0aGlzLnRhcmdldC52YWx1ZSxcclxuICAgICAgcmVwbGFjZUJyYW5kOiB0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgPyB0aGlzLmdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIDogbnVsbCxcclxuICAgICAgcmVwbGFjZVZtOiB0aGlzLm5lZWRzUmVwbGFjZVZtKCkgPyB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpIDogbnVsbCxcclxuICAgICAgdXBkYXRpb25Dcml0ZXJpYTogdGhpcy5yZXBsYWNlUHJvbXB0LnZhbHVlIHx8ICcnLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UucmVwbGFjZUZpeHR1cmUocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVwbGFjZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgLy8gTWFyayByZXBsYWNlIGFzIGV4ZWN1dGVkIHRvIGRpc2FibGUgdGhlIGJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VFeGVjdXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTdG9yZSBvcmlnaW5hbCBmaXh0dXJlIGZvciBiZWZvcmUvYWZ0ZXIgY29tcGFyaXNvblxyXG4gICAgICAgICAgICAvLyBPbmx5IHN0b3JlIGlmIG5vdCBhbHJlYWR5IGluIG1hcCAocHJlc2VydmUgaW5pdGlhbCBwbGFub2dyYW0gZml4dHVyZSlcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsRml4dHVyZSAmJiAhdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmhhcyhmaXh0dXJlSWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLnNldChmaXh0dXJlSWQsIG9yaWdpbmFsRml4dHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbEZpeHR1cmVEYXRhIGZyb20gbWFwIHRvIGVuc3VyZSBpdCdzIGFsd2F5cyB0aGUgaW5pdGlhbCBwbGFub2dyYW0gZml4dHVyZVxyXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRPcmlnaW5hbCA9IHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5nZXQoZml4dHVyZUlkKTtcclxuICAgICAgICAgICAgaWYgKHN0b3JlZE9yaWdpbmFsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gc3RydWN0dXJlZENsb25lKHN0b3JlZE9yaWdpbmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBaVJlc3BvbnNlRml4dHVyZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTYXZlIHJlcGxhY2VSZXNwb25zZURhdGEgdG8gdGhlIHNwZWNpZmljIHN0b3JlXHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZVJlcGxhY2VSZXNwb25zZURhdGEocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gVXBkYXRlIHNlbGVjdGVkIGZpeHR1cmUgZGF0YSB0byB0aGUgZm91bmQgZml4dHVyZSAoYWZ0ZXIgcmVwbGFjZSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgZml4dHVyZUlkOiByZXMuZGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgZml4dHVyZVR5cGU6IHJlcy5kYXRhLmZpeHR1cmVUeXBlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgZmxvb3IgYW5kIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxvb3IodGhpcy5wcmV2aWV3Q2FudmFzKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAvLyBXYWl0IGZvciBjYW52YXMgdG8gZnVsbHkgcmVuZGVyIGJlZm9yZSBoaWdobGlnaHRpbmdcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEhpZ2hsaWdodCB0aGUgZm91bmQgZml4dHVyZSAobm90IHRoZSBjbGlja2VkIG9uZSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZpeHR1cmUgPSB0aGlzLnByZXZpZXdDYW52YXMuZ2V0T2JqZWN0cygpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IHJlcy5kYXRhLl9pZFxyXG4gICAgICAgICAgICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRml4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGhpcy5wcmV2aWV3Q2FudmFzLCBhY3Rpb25GaXh0dXJlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IGZpbmRSZXNwb25zZURhdGEgZm9yIGN1cnJlbnQgc3RvcmVcclxuICBnZXRDdXJyZW50U3RvcmVGaW5kUmVzcG9uc2VEYXRhKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzIHx8ICF0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMuZmluZChcclxuICAgICAgKHM6IFN0b3JlKSA9PiBzLnN0b3JlTmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVcclxuICAgICk7XHJcbiAgICByZXR1cm4gc3RvcmU/LmZpbmRSZXNwb25zZURhdGEgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIFNhdmUgZmluZFJlc3BvbnNlRGF0YSB0byBzcGVjaWZpYyBzdG9yZSBhbmQgdHJpZ2dlciBzYXZlIGFzIGRyYWZ0XHJcbiAgcHJpdmF0ZSBzYXZlRmluZFJlc3BvbnNlRGF0YShyZXNwb25zZURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YSB8fCAhdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXBkYXRlZFN0b3JlcyA9ICh0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMgfHwgW10pLm1hcCgoc3RvcmU6IFN0b3JlKSA9PiB7XHJcbiAgICAgIGlmIChzdG9yZS5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnN0b3JlLFxyXG4gICAgICAgICAgZmluZFJlc3BvbnNlRGF0YTogcmVzcG9uc2VEYXRhPy5faWRcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdG9yZTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBsb2NhbCBmaW5kUmVwbGFjZURhdGEgaW1tZWRpYXRlbHlcclxuICAgIHRoaXMuZmluZFJlcGxhY2VEYXRhID0ge1xyXG4gICAgICAuLi50aGlzLmZpbmRSZXBsYWNlRGF0YSxcclxuICAgICAgc3RvcmVzOiB1cGRhdGVkU3RvcmVzXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBzZXJ2aWNlXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEoe1xyXG4gICAgICBzdG9yZXM6IHVwZGF0ZWRTdG9yZXNcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFRyaWdnZXIgc2F2ZSBhcyBkcmFmdFxyXG4gICAgdGhpcy5kYXRhU2VydmljZS50cmlnZ2VyU2F2ZURyYWZ0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBTYXZlIHJlcGxhY2VSZXNwb25zZURhdGEgdG8gc3BlY2lmaWMgc3RvcmUgYW5kIHRyaWdnZXIgc2F2ZSBhcyBkcmFmdFxyXG4gIC8vIE9ubHkgc2F2ZXMgdm1Db25maWcgYW5kL29yIHNoZWxmQ29uZmlnIGJhc2VkIG9uIHRhcmdldFxyXG4gIHByaXZhdGUgc2F2ZVJlcGxhY2VSZXNwb25zZURhdGEocmVzcG9uc2VEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUmVwbGFjZURhdGEgfHwgIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0LnZhbHVlIGFzICdtZXJjaCcgfCAndm0nIHwgJ2JvdGgnO1xyXG4gICAgY29uc3QgcmVwbGFjZURhdGE6IHsgdm1Db25maWc/OiBhbnlbXTsgc2hlbGZDb25maWc/OiBhbnlbXSB9ID0ge307XHJcblxyXG4gICAgLy8gRXh0cmFjdCBvbmx5IHRoZSByZWxldmFudCBjb25maWdzIGJhc2VkIG9uIHRhcmdldFxyXG4gICAgaWYgKHRhcmdldCA9PT0gJ3ZtJyB8fCB0YXJnZXQgPT09ICdib3RoJykge1xyXG4gICAgICBpZiAocmVzcG9uc2VEYXRhPy52bUNvbmZpZykge1xyXG4gICAgICAgIHJlcGxhY2VEYXRhLnZtQ29uZmlnID0gcmVzcG9uc2VEYXRhLnZtQ29uZmlnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0YXJnZXQgPT09ICdtZXJjaCcgfHwgdGFyZ2V0ID09PSAnYm90aCcpIHtcclxuICAgICAgaWYgKHJlc3BvbnNlRGF0YT8uc2hlbGZDb25maWcpIHtcclxuICAgICAgICByZXBsYWNlRGF0YS5zaGVsZkNvbmZpZyA9IHJlc3BvbnNlRGF0YS5zaGVsZkNvbmZpZztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVwZGF0ZWRTdG9yZXMgPSAodGhpcy5maW5kUmVwbGFjZURhdGEuc3RvcmVzIHx8IFtdKS5tYXAoKHN0b3JlOiBTdG9yZSkgPT4ge1xyXG4gICAgICBpZiAoc3RvcmUuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5zdG9yZSxcclxuICAgICAgICAgIHJlcGxhY2VSZXNwb25zZURhdGE6IHJlcGxhY2VEYXRhXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3RvcmU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgbG9jYWwgZmluZFJlcGxhY2VEYXRhIGltbWVkaWF0ZWx5XHJcbiAgICB0aGlzLmZpbmRSZXBsYWNlRGF0YSA9IHtcclxuICAgICAgLi4udGhpcy5maW5kUmVwbGFjZURhdGEsXHJcbiAgICAgIHN0b3JlczogdXBkYXRlZFN0b3Jlc1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGRhdGEgc2VydmljZVxyXG4gICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHtcclxuICAgICAgc3RvcmVzOiB1cGRhdGVkU3RvcmVzXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBUcmlnZ2VyIHNhdmUgYXMgZHJhZnRcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UudHJpZ2dlclNhdmVEcmFmdCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQWlSZXNwb25zZUZpeHR1cmUoZml4dHVyZTogYW55KSB7XHJcbiAgICBsZXQgbWF0Y2hGb3VuZCA9IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2ldO1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ3dhbGwnICYmIEFycmF5LmlzQXJyYXkoZWxlbWVudC5maXh0dXJlcykpIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQuZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IGZ4ID0gZWxlbWVudC5maXh0dXJlc1tqXTtcclxuICAgICAgICAgIGlmIChmeC5faWQgPT09IGZpeHR1cmUuX2lkKSB7XHJcbiAgICAgICAgICAgIC8vIFByZXNlcnZlIGV4aXN0aW5nIHZtQ29uZmlnIGlmIHRoZSBuZXcgZml4dHVyZSBkb2Vzbid0IGhhdmUgaXRcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdWbUNvbmZpZyA9IGZ4LnZtQ29uZmlnIHx8IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRml4dHVyZSA9IHsgXHJcbiAgICAgICAgICAgICAgLi4uZml4dHVyZSxcclxuICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB2bUNvbmZpZyBmcm9tIGV4aXN0aW5nIGZpeHR1cmUgaWYgbmV3IGZpeHR1cmUgZG9lc24ndCBoYXZlIGl0XHJcbiAgICAgICAgICAgICAgdm1Db25maWc6IGZpeHR1cmUudm1Db25maWcgfHwgZXhpc3RpbmdWbUNvbmZpZ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2ldLmZpeHR1cmVzW2pdID0gdXBkYXRlZEZpeHR1cmU7XHJcbiAgICAgICAgICAgIG1hdGNoRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHVwZGF0ZWRGaXh0dXJlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF0Y2hGb3VuZCkgcmV0dXJuO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZnggPSB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZVtpXTtcclxuICAgICAgaWYgKGZ4Ll9pZCA9PT0gZml4dHVyZS5faWQpIHtcclxuICAgICAgICAvLyBQcmVzZXJ2ZSBleGlzdGluZyB2bUNvbmZpZyBpZiB0aGUgbmV3IGZpeHR1cmUgZG9lc24ndCBoYXZlIGl0XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdWbUNvbmZpZyA9IGZ4LnZtQ29uZmlnIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaXh0dXJlID0geyBcclxuICAgICAgICAgIC4uLmZpeHR1cmUsXHJcbiAgICAgICAgICAvLyBQcmVzZXJ2ZSB2bUNvbmZpZyBmcm9tIGV4aXN0aW5nIGZpeHR1cmUgaWYgbmV3IGZpeHR1cmUgZG9lc24ndCBoYXZlIGl0XHJcbiAgICAgICAgICB2bUNvbmZpZzogZml4dHVyZS52bUNvbmZpZyB8fCBleGlzdGluZ1ZtQ29uZmlnXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ldID0gdXBkYXRlZEZpeHR1cmU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB1cGRhdGVkRml4dHVyZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0Rml4dHVyZShjYW52YXM6IGZhYnJpYy5DYW52YXMsIGdyb3VwOiBhbnksIGJsaW5rOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KGNhbnZhcyk7XHJcbiAgICB0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuICAgIGNvbnN0IHJlYWxXaWR0aCA9IGdyb3VwLndpZHRoISAqIGdyb3VwLnNjYWxlWCE7XHJcbiAgICBjb25zdCByZWFsSGVpZ2h0ID0gZ3JvdXAuaGVpZ2h0ISAqIGdyb3VwLnNjYWxlWSE7XHJcblxyXG4gICAgY29uc3QgcmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGNlbnRlci54LFxyXG4gICAgICB0b3A6IGNlbnRlci55LFxyXG4gICAgICB3aWR0aDogcmVhbFdpZHRoICsgOCxcclxuICAgICAgaGVpZ2h0OiByZWFsSGVpZ2h0ICsgOCxcclxuICAgICAgcng6IDUsXHJcbiAgICAgIHJ5OiA1LFxyXG4gICAgICBzdHJva2U6IFwiIzAwYWFmZlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMyxcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBncm91cC5hbmdsZSB8fCAwLFxyXG4gICAgICBvcGFjaXR5OiBibGluayA/IDAgOiAxLFxyXG4gICAgfSk7XHJcblxyXG4gICAgKHJlY3QgYXMgYW55KS5kYXRhID0geyB0eXBlOiBcImZpeHR1cmUtaGlnaGxpZ2h0XCIgfTtcclxuICAgIGNhbnZhcy5hZGQocmVjdCk7XHJcbiAgICBjYW52YXMubW92ZU9iamVjdFRvKHJlY3QsIGNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMSk7XHJcbiAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgdGhpcy5hY3RpdmVIaWdobGlnaHQgPSByZWN0O1xyXG5cclxuICAgIGlmICghYmxpbmspIHJldHVybjtcclxuXHJcbiAgICBsZXQgY3ljbGVzID0gMDtcclxuICAgIGNvbnN0IGJsaW5rT25jZSA9ICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodChjYW52YXMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICByZWN0LmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sIHtcclxuICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgIG9uQ2hhbmdlOiAoKSA9PiBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpLFxyXG4gICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KGNhbnZhcyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlY3QuYW5pbWF0ZSh7IG9wYWNpdHk6IDAgfSwge1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogKCkgPT4gY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKSxcclxuICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodChjYW52YXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjeWNsZXMrKztcclxuICAgICAgICAgICAgICBpZiAoY3ljbGVzIDwgMjApIHtcclxuICAgICAgICAgICAgICAgIGJsaW5rT25jZSgpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICAgICAgcmVjdC5zZXQoeyBvcGFjaXR5OiAxIH0pO1xyXG4gICAgICAgICAgICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIGJsaW5rT25jZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSGlnaGxpZ2h0KGNhbnZhczogZmFicmljLkNhbnZhcykge1xyXG4gICAgdGhpcy5jYW5jZWxIaWdobGlnaHRCbGluayA9IHRydWU7XHJcbiAgICBjYW52YXMuZ2V0T2JqZWN0cygpLmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICBpZiAoKG9iaiBhcyBhbnkpLmRhdGE/LnR5cGUgPT09IFwiZml4dHVyZS1oaWdobGlnaHRcIikge1xyXG4gICAgICAgIGNhbnZhcy5yZW1vdmUob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IG51bGw7XHJcbiAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gUGxhbm9ncmFtIHJlbmRlcmluZyBtZXRob2RzIChzaW1wbGlmaWVkIHZlcnNpb25zIGZyb20gY29sbGVjdGlvbi11cGRhdGUtYWkpXHJcbiAgdG9QaXhlbHModmFsdWU6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpIHtcclxuICAgIGxldCBwaXhlbHM6IG51bWJlcjtcclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKHBpeGVscy50b0ZpeGVkKDQpKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdMYXlvdXRFbGVtZW50cyhjYW52YXM6IGZhYnJpYy5DYW52YXMpIHtcclxuICAgIGlmICghdGhpcy5mbG9vckRhdGEpIHJldHVybjtcclxuICAgIFxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuICAgICAgbGV0IHdhbGw7XHJcblxyXG4gICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24gPz89IHsgeDogMCwgeTogMCwgdW5pdDogXCJmdFwiIH07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBlbGVtZW50LnVuaXQpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgZWxlbWVudC51bml0KTtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMud2FsbFRoaWNrbmVzcztcclxuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5kaXN0YW5jZSwgZWxlbWVudC51bml0KTtcclxuICAgICAgICB3YWxsID0gYXdhaXQgdGhpcy5kcmF3V2FsbChjYW52YXMsIHgsIHksIGhlaWdodCwgd2lkdGgsIGVsZW1lbnQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICAgIHRoaXMuZHJhd0VudHJhbmNlKGNhbnZhcywgeCwgeSwgODAsIDc1LCA0MCwgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cHM6IGZhYnJpYy5Hcm91cFtdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5maXh0dXJlcz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBlbGVtZW50LmZpeHR1cmVzW2pdO1xyXG4gICAgICAgICAgY29uc3QgZnggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LCBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCk7XHJcbiAgICAgICAgICBjb25zdCBmeSA9IHRoaXMudG9QaXhlbHMoZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0KTtcclxuICAgICAgICAgIGNvbnN0IGZoID0gdGhpcy50b1BpeGVscyhmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgICAgICAgIGNvbnN0IGZ3ID0gdGhpcy50b1BpeGVscyhmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCk7XHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlT2JqID0gYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShjYW52YXMsIGZ4LCBmeSwgZmgsIGZ3LCBmaXh0dXJlKTtcclxuICAgICAgICAgIGZpeHR1cmVHcm91cHMucHVzaChmaXh0dXJlT2JqIGFzIGZhYnJpYy5Hcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC5pc0xvY2tlZCAmJiB3YWxsKSB7XHJcbiAgICAgICAgICBjYW52YXMucmVtb3ZlKHdhbGwpO1xyXG4gICAgICAgICAgZml4dHVyZUdyb3Vwcy5mb3JFYWNoKChmKSA9PiBjYW52YXMucmVtb3ZlKGYpKTtcclxuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFt3YWxsLCAuLi5maXh0dXJlR3JvdXBzXSwge1xyXG4gICAgICAgICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBsb2NrTW92ZW1lbnRYOiB0cnVlLFxyXG4gICAgICAgICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICAgICAgICBsb2NrUm90YXRpb246IHRydWUsXHJcbiAgICAgICAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29tYmluZWRHcm91cC5zZXQoeyBpc0xvY2tlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgIGNhbnZhcy5hZGQoY29tYmluZWRHcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSBlbGVtZW50Lm90aGVyRWxlbWVudHNbal07XHJcbiAgICAgICAgICBjb25zdCBveCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKTtcclxuICAgICAgICAgIGNvbnN0IG95ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICAgICAgY29uc3Qgb2EgPSBvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuICAgICAgICAgIGNvbnN0IG9oID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCk7XHJcbiAgICAgICAgICBjb25zdCBvdyA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0KTtcclxuICAgICAgICAgIHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoY2FudmFzLCBveCwgb3ksIG9hLCBvdywgb2gsIG90aGVyRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LCBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LCBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCk7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQpO1xyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoY2FudmFzLCB4LCB5LCBoLCB3LCBmaXh0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzW2pdO1xyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCBhID0gb3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24uYW5nbGU7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLCBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0KTtcclxuICAgICAgdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChjYW52YXMsIHgsIHksIGEsIHcsIGgsIG90aGVyRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3V2FsbChcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBmaWxsQ29sb3IgPSBcIiNGNkZDRkZcIjtcclxuICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gXCIjRDBENUREXCI7XHJcbiAgICBjb25zdCBsYWJlbENvbG9yID0gXCIjMDA5QkYzXCI7XHJcbiAgICBsZXQgdGV4dCA9IGAke3RoaXMudGl0bGVDYXNlLnRyYW5zZm9ybShlbGVtZW50RGF0YS5lbGVtZW50VHlwZSl9ICR7ZWxlbWVudERhdGEuZWxlbWVudE51bWJlclxyXG4gICAgICB9YDtcclxuXHJcbiAgICBjb25zdCB3YWxsID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgdG9wOiAwLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBmaWxsOiBmaWxsQ29sb3IsXHJcbiAgICAgIHN0cm9rZTogc3Ryb2tlQ29sb3IsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgc3Ryb2tlVW5pZm9ybTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCBjZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSBoZWlnaHQgPiB3aWR0aDtcclxuXHJcbiAgICBjb25zdCBsYWJlbCA9IG5ldyBmYWJyaWMuRmFicmljVGV4dCh0ZXh0LCB7XHJcbiAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgZm9udFNpemU6IDEwLFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBpc1ZlcnRpY2FsID8gLTkwIDogMCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSA1O1xyXG4gICAgY29uc3QgZWxlbWVudHM6IGZhYnJpYy5PYmplY3RbXSA9IFt3YWxsLCBsYWJlbF07XHJcblxyXG4gICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgY29uc3QgdGV4dFdpZHRoID0gbGFiZWwud2lkdGggfHwgMDtcclxuICAgICAgY29uc3QgdG9wQXJyb3dZID0gNTtcclxuICAgICAgY29uc3QgdG9wQXJyb3dFbmRZID0gY2VudGVyWSAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKHRvcEFycm93RW5kWSA+IHRvcEFycm93WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2NlbnRlclgsIHRvcEFycm93WSwgY2VudGVyWCwgdG9wQXJyb3dFbmRZXSwge1xyXG4gICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogdG9wQXJyb3dZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBib3R0b21BcnJvd1N0YXJ0WSA9IGNlbnRlclkgKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dFbmRZID0gaGVpZ2h0IC0gNTtcclxuXHJcbiAgICAgIGlmIChib3R0b21BcnJvd0VuZFkgPiBib3R0b21BcnJvd1N0YXJ0WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtjZW50ZXJYLCBib3R0b21BcnJvd1N0YXJ0WSwgY2VudGVyWCwgYm90dG9tQXJyb3dFbmRZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBjZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGJvdHRvbUFycm93RW5kWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAxODAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dTdGFydFggPSA1O1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dFbmRYID0gY2VudGVyWCAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKGxlZnRBcnJvd0VuZFggPiBsZWZ0QXJyb3dTdGFydFggKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFtsZWZ0QXJyb3dTdGFydFgsIGNlbnRlclksIGxlZnRBcnJvd0VuZFgsIGNlbnRlclldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogbGVmdEFycm93U3RhcnRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogLTkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmlnaHRBcnJvd1N0YXJ0WCA9IGNlbnRlclggKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgcmlnaHRBcnJvd0VuZFggPSB3aWR0aCAtIDU7XHJcblxyXG4gICAgICBpZiAocmlnaHRBcnJvd0VuZFggPiByaWdodEFycm93U3RhcnRYICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW3JpZ2h0QXJyb3dTdGFydFgsIGNlbnRlclksIHJpZ2h0QXJyb3dFbmRYLCBjZW50ZXJZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiByaWdodEFycm93RW5kWCxcclxuICAgICAgICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoZWxlbWVudHMsIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1JvdGF0aW9uOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRYOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgIGFuZ2xlOiBlbGVtZW50RGF0YS5hbmdsZSxcclxuICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gZWxlbWVudERhdGEuZWxlbWVudFR5cGU7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudERhdGE7XHJcblxyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIC8vIElmIG5ld2x5IGFkZGVkLCBmb2N1cyBpdCBvbmNlXHJcbiAgICBpZiAoKGVsZW1lbnREYXRhIGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChncm91cCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSBjYXRjaCB7IH1cclxuICAgICAgZGVsZXRlIChlbGVtZW50RGF0YSBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdFbnRyYW5jZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIGFycm93V2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IGJvZHlXaWR0aCA9IHdpZHRoIC0gYXJyb3dXaWR0aDtcclxuXHJcbiAgICBjb25zdCBwYXRoRGF0YSA9IFtcclxuICAgICAgYE0gMCAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9IDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHstaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke3dpZHRofSAke2hlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0ICsgaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHR9YCxcclxuICAgICAgYEwgMCAke2hlaWdodH1gLFxyXG4gICAgICBgWmAsXHJcbiAgICBdLmpvaW4oXCIgXCIpO1xyXG5cclxuICAgIGNvbnN0IGFycm93ID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIGZpbGw6IFwiIzAzQTlGNFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gaGVpZ2h0IC0gNjtcclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHQoXCJFbnRyYW5jZVwiLCB7XHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiQXJpYWxcIixcclxuICAgICAgZm9udFdlaWdodDogXCJib2xkXCIsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgbGVmdDogMTUsXHJcbiAgICAgIHRvcDogaGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDIwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGlmICh0ZXh0Qm91bmRzLmhlaWdodCA+IG1heFRleHRIZWlnaHQpIHtcclxuICAgICAgY29uc3Qgc2NhbGUgPSBtYXhUZXh0SGVpZ2h0IC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvdywgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdGbGlwOiB0cnVlLFxyXG4gICAgICBsb2NrUm90YXRpb246IHRydWUsXHJcbiAgICAgIGxvY2tNb3ZlbWVudFg6IHRydWUsXHJcbiAgICAgIGxvY2tNb3ZlbWVudFk6IHRydWUsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcImRlZmF1bHRcIixcclxuICAgICAgYW5nbGU6IGVsZW1lbnREYXRhLmFuZ2xlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnREYXRhO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0ZpeHR1cmUoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBmaXh0dXJlRGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICAvLyBNYXRjaCBmaXh0dXJlIHBhbGV0dGUvbG9naWMgdXNlZCBpbiBgL21hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXJvbGxvdXRgIChgcGxhbm8tcm9sbG91dC5jb21wb25lbnQudHNgKVxyXG5cclxuXHJcbiAgICBsZXQgcHJpbWFyeVN0cm9rZSA9IFwiI2E1YTZhOFwiO1xyXG4gICAgbGV0IHByaW1hcnlGaWxsID0gXCIjZjNmNGY4XCI7XHJcbiAgICBsZXQgaGVhZGVyQ29sb3IgPSBcIiMxMDE4MjhcIjtcclxuICAgIGxldCB2bUZpbGwgPSBcIiNhNWE2YThcIjtcclxuICAgIGxldCBmb290ZXJGaWxsID0gXCIjZjNmNGY4XCI7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhPy5jb21wbGV0ZSA9PT0gdHJ1ZSAmJiAhZml4dHVyZURhdGE/LmFwcHJvdmFsU3RhdHVzKSB7XHJcbiAgICAgIHByaW1hcnlTdHJva2UgPSBcIiM2Q0U5QTZcIjtcclxuICAgICAgcHJpbWFyeUZpbGwgPSBcIiM2Q0U5QTZcIjtcclxuICAgICAgZm9vdGVyRmlsbCA9IFwiIzZDRTlBNlwiO1xyXG4gICAgICB2bUZpbGwgPSBcIiM2OTM4RUZcIjtcclxuICAgICAgaGVhZGVyQ29sb3IgPSBcIiMxMDE4MjhcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGE/Lmlzc3VlID09PSB0cnVlKSB7XHJcbiAgICAgIHByaW1hcnlTdHJva2UgPSBcIiNEOTJEMjBcIjtcclxuICAgICAgcHJpbWFyeUZpbGwgPSBcIiNEOTJEMjBcIjtcclxuICAgICAgaGVhZGVyQ29sb3IgPSBcIiNGRkZcIjtcclxuICAgICAgZm9vdGVyRmlsbCA9IFwiI0ZFRTRFMlwiO1xyXG4gICAgICB2bUZpbGwgPSBcIiM2OTM4RUZcIjtcclxuICAgIH1cclxuICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlTmFtZSA9PT0gXCJzcGFjZVwiKSByZXR1cm47XHJcbiAgICBjb25zdCByYWRpdXMgPSA1O1xyXG4gICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRvcFgsXHJcbiAgICAgIHRvcDogdG9wWSxcclxuICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRvcEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaW5uZXJUb3BCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB0b3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgRml4dHVyZSAke2ZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlclxyXG4gICAgICAgID8gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyICtcclxuICAgICAgICAoZml4dHVyZURhdGE/LmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgID8gXCIgLSBGWC1cIiArIGZpeHR1cmVEYXRhLmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgIDogXCJcIilcclxuICAgICAgICA6IFwibmV3XCJcclxuICAgICAgfWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogdG9wWSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNlY29uZEJveFkgPSB0b3BZICsgaW5uZXJCb3hIZWlnaHQ7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3R0b21Cb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IFwiIzM0NDA1NFwiLFxyXG4gICAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgbGV0IGJvdHRvbVRleHQ7XHJcblxyXG4gICAgY29uc3QgdGV4dENvbnRlbnQgPSBgJHtmaXh0dXJlRGF0YT8uZml4dHVyZU5hbWV9IC0gJHtmaXh0dXJlRGF0YT8uZml4dHVyZVdpZHRoLnZhbHVlfSAke2ZpeHR1cmVEYXRhPy5maXh0dXJlV2lkdGgudW5pdH1gO1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZUJvdHRvbVRleHQgPSAoZnM6IGFueSkgPT5cclxuICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIGJvdHRvbVRleHQgPSBjcmVhdGVCb3R0b21UZXh0KGZvbnRTaXplKTtcclxuICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgfSB3aGlsZSAoYm90dG9tVGV4dC5oZWlnaHQgPiBpbm5lckJveEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB0b3BZICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCBtaWRDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICB0b3A6IG1pZFksXHJcbiAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBtaWRIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNoZWxmQ291bnQgPSBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8ubGVuZ3RoO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKHNoZWxmQ291bnQgKyAyKTtcclxuICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WX0gJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgICBRICR7bWlkWH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogcHJpbWFyeUZpbGwsXHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGZpcnN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmhlYWRlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5oZWFkZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogZmlyc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNyxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICBmaWxsOiBoZWFkZXJDb2xvcixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzaGVsdmVzOiBmYWJyaWMuT2JqZWN0W10gPSBbXTtcclxuICAgIGNvbnN0IHNoZWxmSGVpZ2h0ID0gbWlkSGVpZ2h0IC0gMiAqIGJveEhlaWdodDtcclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMVwiKSB7XHJcbiAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogc2hlbGZIZWlnaHQsXHJcbiAgICAgICAgLy8gc3Ryb2tlOiAnIzUxQzFGRicsXHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0ID0gZml4dHVyZURhdGE/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgIC8vIFdyYXAgdGV4dCB3aXRoaW4gZml4dHVyZSB3aWR0aCBhbmQgc2hyaW5rIHRvIGZpdCB2ZXJ0aWNhbCBzcGFjZVxyXG4gICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IHNoZWxmSGVpZ2h0ICogMC44O1xyXG4gICAgICBsZXQgZm9udFNpemVMMSA9IDY7XHJcblxyXG4gICAgICBjb25zdCBjcmVhdGVXcmFwcGVkVGV4dGJveCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGxldCB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZUwxID4gMikge1xyXG4gICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgaGVpZ2h0OiB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIDIsXHJcbiAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICByeDogMSxcclxuICAgICAgICByeTogMSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzaGVsdmVzLnB1c2goc2hlbGYsIGJhY2tncm91bmQsIHdyYXBwZWRUZXh0KTtcclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hlbGZDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChpICsgMSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0udHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGV4dCA9XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgLy8gTDI6IFNpbmdsZS1saW5lIGVsbGlwc2lzIGFnYWluc3QgZnVsbCBzaGVsZiB3aWR0aFxyXG4gICAgICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gNjtcclxuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBNYXRoLm1heCgwLCBtaWRXaWR0aCAtIGhvcml6b250YWxQYWRkaW5nKTtcclxuICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gYm94SGVpZ2h0ICogMC44O1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb250U2l6ZSA9IDU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSAodDogc3RyaW5nKSA9PlxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UZXh0KHQsIHtcclxuICAgICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBkaXNwbGF5VGV4dCA9IHRleHQ7XHJcbiAgICAgICAgbGV0IG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcblxyXG4gICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgIGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgIGxldCBsZWZ0SWR4ID0gMDtcclxuICAgICAgICAgIGxldCByaWdodElkeCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHdoaWxlIChsZWZ0SWR4IDwgcmlnaHRJZHgpIHtcclxuICAgICAgICAgICAgY29uc3QgbWlkSWR4ID0gTWF0aC5mbG9vcigobGVmdElkeCArIHJpZ2h0SWR4KSAvIDIpO1xyXG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0ZXh0LnNsaWNlKDAsIG1pZElkeCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGNhbmRpZGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgICAgICByaWdodElkeCA9IG1pZElkeDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZWZ0SWR4ID0gbWlkSWR4ICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGlzcGxheVRleHQgPSB0ZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnRJZHggLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1hdGgubWluKG1heFRleHRIZWlnaHQsIG1lYXN1cmVkLmhlaWdodCA/PyAxMCkgKyAyLFxyXG4gICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICByeDogMSxcclxuICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBmaW5hbFRleHQgPSBuZXcgZmFicmljLlRleHQoZGlzcGxheVRleHQsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGJhY2tncm91bmQsIGZpbmFsVGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMM1wiKSB7XHJcbiAgICAgIGNvbnN0IHNlcXVlbnRpYWxHcm91cHM6IHsgem9uZTogc3RyaW5nOyBzaGVsdmVzOiBhbnlbXSB9W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBzaGVsZiBvZiBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBzaGVsZi56b25lIHx8IFwiVW5rbm93blwiO1xyXG4gICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHMucHVzaCh7IHpvbmUsIHNoZWx2ZXM6IFtzaGVsZl0gfSk7XHJcbiAgICAgICAgICBwcmV2aW91c1pvbmUgPSB6b25lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzW3NlcXVlbnRpYWxHcm91cHMubGVuZ3RoIC0gMV0uc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjdXJyZW50U2hlbGZJbmRleCA9IDA7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHNlcXVlbnRpYWxHcm91cHMpIHtcclxuICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBTdGFydEluZGV4ID0gY3VycmVudFNoZWxmSW5kZXg7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBMZW5ndGggPSBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChncm91cFN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBncm91cEJvdHRvbVkgPSBncm91cFRvcFkgKyBib3hIZWlnaHQgKiBncm91cExlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbGZEYXRhID0gc2hlbHZlc0luR3JvdXBbal07XHJcbiAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGN1cnJlbnRTaGVsZkluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2hlbGZSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgICBzdHJva2U6IHByaW1hcnlTdHJva2UsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGZSZWN0KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2hlbGZEYXRhLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmID0gc2hlbGZEYXRhLnByb2R1Y3RQZXJTaGVsZiB8fCAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDE7IGMgPCBwcm9kdWN0UGVyU2hlbGY7IGMrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVYID0gbWlkWCArIGMgKiBjb2x1bW5TcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbExpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY3VycmVudFNoZWxmSW5kZXgrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgIFttaWRYLCBncm91cEJvdHRvbVksIG1pZFggKyBtaWRXaWR0aCwgZ3JvdXBCb3R0b21ZXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC0gbGFiZWxQYWRkaW5nLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwicmlnaHRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2gobGFiZWxUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWCA9IG1pZFggKyBtaWRXaWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJZID0gZ3JvdXBUb3BZICsgKGdyb3VwQm90dG9tWSAtIGdyb3VwVG9wWSkgLyAyO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uQnJhbmRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbkJyYW5kcy5hZGQoYnJhbmQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChbLi4uc2VjdGlvbkJyYW5kc10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNjtcclxuICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBDZW50ZXJUZXh0LCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZURhdGEudm1Db25maWcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB2bSA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnW2ldO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGZUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBzaGVsZkhlaWdodFNwYW4gPSBib3hIZWlnaHQgKiAoZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgIGxldCB2bUhlaWdodFB4OiBudW1iZXIgPSBzaGVsZkhlaWdodFNwYW47XHJcbiAgICAgICAgbGV0IHk6IG51bWJlciA9IHNoZWxmVG9wWTtcclxuXHJcbiAgICAgICAgaWYgKHZtLnlab25lICYmIHZtLnlab25lICE9PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgdm1IZWlnaHRQeCA9IHNoZWxmSGVpZ2h0U3BhbiAvIDM7XHJcblxyXG4gICAgICAgICAgc3dpdGNoICh2bS55Wm9uZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIDIgKiB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgeCA9IG1pZFg7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gbWlkV2lkdGg7XHJcblxyXG4gICAgICAgIGlmICghdm0ueFpvbmUgfHwgdm0ueFpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHNlY3Rpb25XaWR0aCA9IG1pZFdpZHRoIC8gMztcclxuICAgICAgICAgIHN3aXRjaCAodm0ueFpvbmUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYICsgc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWCArIDIgKiBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2bS52bUltYWdlVXJsKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB2bUltYWdlOiBhbnkgPSBhd2FpdCBmYWJyaWMuRmFicmljSW1hZ2UuZnJvbVVSTChcclxuICAgICAgICAgICAgICBgJHt0aGlzLmNkblVybH0ke3ZtLnZtSW1hZ2VVcmx9P3Y9JHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdm1JbWFnZS5zZXQoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHNjYWxlWDogd2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtSW1hZ2UpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgaW1hZ2UgZm9yIFZNOiAke3ZtLnZtSW1hZ2VVcmx9YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgdm1Cb3ggPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIGZpbGw6IHZtRmlsbCxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgICAgICAgIGxldCB2bVRleHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlVm1UZXh0ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh2bS52bU5hbWUgfHwgXCJcIiwge1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB2bVRleHQgPSBjcmVhdGVWbVRleHQoZm9udFNpemUpO1xyXG4gICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICB9IHdoaWxlICh2bVRleHQuaGVpZ2h0ID4gdm1IZWlnaHRQeCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUJveCwgdm1UZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXN0Qm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzaGVsZkNvdW50ICsgMSk7XHJcbiAgICBjb25zdCBsYXN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke21pZFh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7bWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgIH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgfSBcclxuICAgICAgICAgICAgICBMICR7bWlkWH0gJHtsYXN0Qm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBmb290ZXJGaWxsLFxyXG4gICAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBsYXN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmZvb3Rlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWd0aDogYm94SGVpZ2h0LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgYm90dG9tSGVpZ2h0ID0gKDMgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgYm90dG9tWCA9IHggKyAod2lkdGggLSBib3R0b21XaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgYm90dG9tWSA9IG1pZFkgKyBtaWRIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbUNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGJvdHRvbVgsXHJcbiAgICAgIHRvcDogYm90dG9tWSxcclxuICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVRleHRDb250ZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgU2hlbHZlcyAtICR7Zml4dHVyZURhdGEuc2hlbGZDb25maWc/Lmxlbmd0aH0gLiBQcm9kdWN0cyAtICAke2ZpeHR1cmVEYXRhLmZpeHR1cmVDYXBhY2l0eX0gLiBWTSAtICR7Zml4dHVyZURhdGEudm1Db25maWc/Lmxlbmd0aH1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogYm90dG9tWCArIGJvdHRvbVdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuXHJcbiAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFxyXG4gICAgICBbXHJcbiAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICB0b3BDb250YWluZXIsXHJcbiAgICAgICAgaW5uZXJUb3BCb3gsXHJcbiAgICAgICAgdG9wVGV4dCxcclxuICAgICAgICBpbm5lckJvdHRvbUJveCxcclxuICAgICAgICBib3R0b21UZXh0LFxyXG4gICAgICAgIG1pZENvbnRhaW5lcixcclxuICAgICAgICBmaXJzdEJveCxcclxuICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgLi4uc2hlbHZlcyxcclxuICAgICAgICBsYXN0Qm94LFxyXG4gICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgIGJvdHRvbUNvbnRhaW5lcixcclxuICAgICAgICBib3R0b21UZXh0Q29udGVudCxcclxuICAgICAgXSxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgaG92ZXJDdXJzb3I6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgICAgbG9ja01vdmVtZW50WDogdHJ1ZSxcclxuICAgICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICAgIGxvY2tSb3RhdGlvbjogdHJ1ZSxcclxuICAgICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAgICAgYW5nbGU6IGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24/LmFuZ2xlID8/IDAsXHJcbiAgICAgIH1cclxuICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICB3YWxsSW5kZXg6IG51bWJlcjtcclxuICAgICAgZml4dHVyZUluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGlzc3VlOiBib29sZWFuO1xyXG4gICAgICBpc3N1ZURhdGE6IGFueTtcclxuICAgICAgdGFza1R5cGU6IHN0cmluZztcclxuICAgICAgdm1Db25maWc6IFtdO1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVUeXBlID0gZml4dHVyZURhdGEuZml4dHVyZVR5cGU7XHJcbiAgICBmaXh0dXJlR3JvdXAud2FsbEluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI7XHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJZCA9IGZpeHR1cmVEYXRhLl9pZDtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZSA9IGZpeHR1cmVEYXRhLmlzc3VlO1xyXG4gICAgZml4dHVyZUdyb3VwLmlzc3VlRGF0YSA9IGZpeHR1cmVEYXRhLmlzc3VlRGF0YTtcclxuICAgIGZpeHR1cmVHcm91cC50YXNrVHlwZSA9IGZpeHR1cmVEYXRhLnRhc2tUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLnZtQ29uZmlnID0gZml4dHVyZURhdGEudm1Db25maWc7XHJcbiAgICBmaXh0dXJlR3JvdXAub2JqVHlwZSA9IFwiZml4dHVyZVwiO1xyXG5cclxuICAgIC8vIEFkZCBjbGljayBoYW5kbGVyIGRpcmVjdGx5IG9uIHRoZSBmaXh0dXJlIGdyb3VwXHJcbiAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZWRvd25cIiwgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgLy8gVXNlIHRoZSBmaXh0dXJlIGdyb3VwIGl0c2VsZiAod2hpY2ggaGFzIGFsbCB0aGUgZml4dHVyZSBwcm9wZXJ0aWVzKVxyXG4gICAgICAvLyBUaGUgZXZlbnQudGFyZ2V0IG1pZ2h0IGJlIGEgY2hpbGQgZWxlbWVudCwgc28gd2UgdXNlIGZpeHR1cmVHcm91cCBkaXJlY3RseVxyXG4gICAgICBpZiAoZml4dHVyZUdyb3VwICYmIChmaXh0dXJlR3JvdXAgYXMgYW55KS5maXh0dXJlSWQpIHtcclxuICAgICAgICB0aGlzLm9uRml4dHVyZUNsaWNrKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZml4dHVyZUdyb3VwKTtcclxuXHJcbiAgICAvLyBJZiBuZXdseSBhZGRlZCwgZm9jdXMgaXQgb25jZVxyXG4gICAgaWYgKChmaXh0dXJlRGF0YSBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZml4dHVyZUdyb3VwKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHsgfVxyXG4gICAgICBkZWxldGUgKGZpeHR1cmVEYXRhIGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpeHR1cmVHcm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgYTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgZWxlbWVudDogYW55XHJcbiAgKTogZmFicmljLkdyb3VwIHtcclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogMixcclxuICAgICAgcnk6IDIsXHJcbiAgICAgIGZpbGw6IFwiI0RBRjFGRlwiLFxyXG4gICAgICBzdHJva2U6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHRib3goZWxlbWVudC5maXh0dXJlTmFtZSwge1xyXG4gICAgICB3aWR0aDogd2lkdGggLSA4LFxyXG4gICAgICBmb250U2l6ZTogMTQsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICBzcGxpdEJ5R3JhcGhlbWU6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBoZWlnaHQgLSA4KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gKGhlaWdodCAtIDgpIC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFtyZWN0LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGFuZ2xlOiBhLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1JvdGF0aW9uOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRYOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJkZWZhdWx0XCIsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gXCJvdGhlcnNcIjtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50O1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIGlmICgoZWxlbWVudCBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZ3JvdXApO1xyXG4gICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICAgIGRlbGV0ZSAoZWxlbWVudCBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGNvbGxlY3RBbGxGaXh0dXJlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcyA9IFtdO1xyXG4gICAgXHJcbiAgICAvLyBDb2xsZWN0IHdhbGwgZml4dHVyZXNcclxuICAgIGlmICh0aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbikge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmZpeHR1cmVzICYmIEFycmF5LmlzQXJyYXkoZWxlbWVudC5maXh0dXJlcykpIHtcclxuICAgICAgICAgIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5wdXNoKC4uLmVsZW1lbnQuZml4dHVyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBDb2xsZWN0IGZsb29yIGZpeHR1cmVzXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKSkge1xyXG4gICAgICB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMucHVzaCguLi50aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRml4dHVyZUNsaWNrKHRhcmdldDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRhcmdldCB8fCAhdGhpcy5mbG9vckRhdGEpIHJldHVybjtcclxuICAgIFxyXG4gICAgY29uc3QgZml4dHVyZUlkID0gKHRhcmdldCBhcyBhbnkpLmZpeHR1cmVJZDtcclxuICAgIGNvbnN0IGZpeHR1cmVUeXBlID0gKHRhcmdldCBhcyBhbnkpLmZpeHR1cmVUeXBlO1xyXG4gICAgXHJcbiAgICBpZiAoIWZpeHR1cmVJZCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ZpeHR1cmUgY2xpY2s6IE5vIGZpeHR1cmVJZCBmb3VuZCBvbiB0YXJnZXQnLCB0YXJnZXQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEZpbmQgdGhlIGZpeHR1cmUgZGF0YVxyXG4gICAgbGV0IGZpeHR1cmVEYXRhOiBhbnkgPSBudWxsO1xyXG4gICAgXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxJbmRleCA9ICh0YXJnZXQgYXMgYW55KS53YWxsSW5kZXg7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbiAmJiB3YWxsSW5kZXggIT09IHVuZGVmaW5lZCAmJiB3YWxsSW5kZXggIT09IG51bGwpIHtcclxuICAgICAgICAvLyBGaW5kIHdhbGwgYnkgZWxlbWVudE51bWJlciAod2FsbEluZGV4IGlzIHRoZSBlbGVtZW50TnVtYmVyKVxyXG4gICAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAodzogYW55KSA9PiB3LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHdhbGwgJiYgd2FsbC5maXh0dXJlcykge1xyXG4gICAgICAgICAgLy8gQWx3YXlzIHVzZSBmaXh0dXJlSWQgdG8gZmluZCB0aGUgZml4dHVyZSAobW9yZSByZWxpYWJsZSB0aGFuIGluZGV4LWJhc2VkIGxvb2t1cClcclxuICAgICAgICAgIGZpeHR1cmVEYXRhID0gd2FsbC5maXh0dXJlcy5maW5kKChmOiBhbnkpID0+IGYuX2lkID09PSBmaXh0dXJlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIGZpeHR1cmVEYXRhID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZT8uZmluZCgoZjogYW55KSA9PiBmLl9pZCA9PT0gZml4dHVyZUlkKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCFmaXh0dXJlRGF0YSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ZpeHR1cmUgY2xpY2s6IEZpeHR1cmUgZGF0YSBub3QgZm91bmQnLCB7IFxyXG4gICAgICAgIGZpeHR1cmVJZCwgXHJcbiAgICAgICAgZml4dHVyZVR5cGUsIFxyXG4gICAgICAgIHdhbGxJbmRleDogKHRhcmdldCBhcyBhbnkpLndhbGxJbmRleCwgXHJcbiAgICAgICAgZml4dHVyZUluZGV4OiAodGFyZ2V0IGFzIGFueSkuZml4dHVyZUluZGV4LFxyXG4gICAgICAgIGZsb29yRGF0YTogdGhpcy5mbG9vckRhdGEgXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEVuc3VyZSB2bUNvbmZpZyBpcyBhbHdheXMgYW4gYXJyYXkgKGV2ZW4gaWYgZW1wdHkpIHRvIGF2b2lkIGRpc3BsYXkgaXNzdWVzXHJcbiAgICAvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdm1Db25maWcgbWlnaHQgYmUgbnVsbCwgdW5kZWZpbmVkLCBvciBub3QgYW4gYXJyYXlcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaXh0dXJlRGF0YS52bUNvbmZpZykpIHtcclxuICAgICAgZml4dHVyZURhdGEudm1Db25maWcgPSBbXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQ3JlYXRlIGEgZGVlcCBjbG9uZSB0byBlbnN1cmUgY2hhbmdlIGRldGVjdGlvbiB3b3Jrc1xyXG4gICAgY29uc3QgY2xvbmVkRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShmaXh0dXJlRGF0YSk7XHJcbiAgICBcclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVJZCxcclxuICAgICAgZml4dHVyZVR5cGU6IGZpeHR1cmVUeXBlLFxyXG4gICAgICB3YWxsSW5kZXg6ICh0YXJnZXQgYXMgYW55KS53YWxsSW5kZXgsXHJcbiAgICAgIGZpeHR1cmVJbmRleDogKHRhcmdldCBhcyBhbnkpLmZpeHR1cmVJbmRleCxcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgZml4dHVyZSBoYXMgcmVwbGFjZVJlc3BvbnNlRGF0YSAoZm9yIGJlZm9yZS9hZnRlciBjb21wYXJpc29uKVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzPy5maW5kKFxyXG4gICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3Py5zdG9yZU5hbWVcclxuICAgICk7XHJcbiAgICBcclxuICAgIC8vIElmIHRoaXMgZml4dHVyZSBtYXRjaGVzIHRoZSBmaW5kUmVzcG9uc2VEYXRhIGFuZCBoYXMgcmVwbGFjZVJlc3BvbnNlRGF0YSxcclxuICAgIC8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGZpeHR1cmUgZGF0YSBmb3IgYmVmb3JlL2FmdGVyIGNvbXBhcmlzb25cclxuICAgIGlmIChzdG9yZT8uZmluZFJlc3BvbnNlRGF0YSA9PT0gZml4dHVyZUlkICYmIHN0b3JlPy5yZXBsYWNlUmVzcG9uc2VEYXRhKSB7XHJcbiAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWxGaXh0dXJlRGF0YSBmcm9tIHRoZSBtYXAgKHBlcnNpc3RzIGV2ZW4gd2hlbiBjbGlja2luZyBvdGhlciBmaXh0dXJlcylcclxuICAgICAgY29uc3Qgc3RvcmVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuZ2V0KGZpeHR1cmVJZCk7XHJcbiAgICAgIGlmIChzdG9yZWRPcmlnaW5hbCkge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShzdG9yZWRPcmlnaW5hbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gSWYgbm90IGluIG1hcCAoc2hvdWxkbid0IGhhcHBlbiBpZiBhcHBseVN0b3JlZFJlc3BvbnNlRGF0YSByYW4pLCBcclxuICAgICAgICAvLyB1c2UgY3VycmVudCBmaXh0dXJlIGFzIGZhbGxiYWNrXHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gc3RydWN0dXJlZENsb25lKGNsb25lZERhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBObyByZXBsYWNlIGRhdGEgZm9yIHRoaXMgZml4dHVyZSwgY2xlYXIgb3JpZ2luYWxcclxuICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gRm9yY2UgY2hhbmdlIGRldGVjdGlvbiBieSBjcmVhdGluZyBhIG5ldyBvYmplY3QgcmVmZXJlbmNlXHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gY2xvbmVkRGF0YTtcclxuICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICBcclxuICAgICAgLy8gUmUtY2VudGVyIHBsYW5vZ3JhbSB3aGVuIHBhbmVsIG9wZW5zIChzaW1pbGFyIHRvIG1hbmFnZS1wbGFub2dyYW0pXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdDYW52YXMgJiYgdGhpcy5wcmV2aWV3Q2FudmFzQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZUNhbnZhcyh0aGlzLnByZXZpZXdDYW52YXMsIHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZik7XHJcbiAgICAgICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQodGhpcy5wcmV2aWV3Q2FudmFzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDQwMCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVJpZ2h0UGFuZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCA9ICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZDtcclxuICAgIFxyXG4gICAgLy8gUmVzaXplIGNhbnZhcyB3aGVuIHBhbmVsIGlzIHRvZ2dsZWRcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzICYmIHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplQ2FudmFzKHRoaXMucHJldmlld0NhbnZhcywgdGhpcy5wcmV2aWV3Q2FudmFzQ29udGFpbmVyUmVmKTtcclxuICAgICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQodGhpcy5wcmV2aWV3Q2FudmFzKTtcclxuICAgICAgfVxyXG4gICAgfSwgNDAwKTtcclxuICB9XHJcblxyXG4gIG9uSGlkZU1ldGFkYXRhVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzKSB7XHJcbiAgICAgIHRoaXMucHJldmlld0NhbnZhcy5kaXNwb3NlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm1haW4tY2FyZFwiPlxyXG4gICAgPGZvcm0+XHJcbiAgICAgICAgPCEtLSBTZWN0aW9uIDE6IEFkZCBTdG9yZXMgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLW51bWJlclwiPjE8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkFkZCBzdG9yZXM8L2gyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlLWlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZS1kcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwic2VhcmNoTW9kZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkTW9kZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmUtc2VsZWN0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzdG9yZU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5pdGlhbFNlbGVjdGVkXT1cInNlbGVjdGVkU3RvcmVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm9uU3RvcmVzU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGliLXN0b3JlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFwcGx5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkFwcGx5KClcIiBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBmaW5kTG9hZGluZyB8fCByZXBsYWNlTG9hZGluZyB8fCBzYXZpbmdEcmFmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzYXZpbmdEcmFmdCA/ICdTYXZpbmcuLi4nIDogJ0FwcGx5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDwhLS0gU2VjdGlvbiAyOiBDaG9vc2UgVGFyZ2V0IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXJvd1wiICpuZ0lmPVwiaGFzU3RvcmVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLW51bWJlclwiPjI8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkNob29zZSB0YXJnZXQ8L2gyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldC1idXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGFyZ2V0LWJ0blwiIFtjbGFzcy5hY3RpdmVdPVwidGFyZ2V0LnZhbHVlID09PSAnYm90aCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0YXJnZXRcIiB2YWx1ZT1cImJvdGhcIiBbZm9ybUNvbnRyb2xdPVwidGFyZ2V0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJvdGhcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRhcmdldC1idG5cIiBbY2xhc3MuYWN0aXZlXT1cInRhcmdldC52YWx1ZSA9PT0gJ21lcmNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInRhcmdldFwiIHZhbHVlPVwibWVyY2hcIiBbZm9ybUNvbnRyb2xdPVwidGFyZ2V0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE1lcmNoYW5kaXNlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0YXJnZXQtYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YXJnZXQudmFsdWUgPT09ICd2bSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0YXJnZXRcIiB2YWx1ZT1cInZtXCIgW2Zvcm1Db250cm9sXT1cInRhcmdldFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWaXN1YWwgTWVyY2hhbmRpc2VcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcGxhY2Utc2VsZWN0aW9uLXN0YWNrXCIgKm5nSWY9XCJuZWVkc1JlcGxhY2VCcmFuZCgpIHx8IG5lZWRzUmVwbGFjZVZtKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibmVlZHNSZXBsYWNlQnJhbmQoKVwiIGNsYXNzPVwicmVwbGFjZS1zZWxlY3Rpb24tcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVwbGFjZS1zZWxlY3Rpb24tdGFnXCI+TWVyY2hhbmRpc2UgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi1kcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidicmFuZE5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGaWVsZF09XCInYnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJicmFuZExpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyZXBsYWNlQnJhbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJuZWVkc1JlcGxhY2VWbSgpXCIgY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi10YWdcIj5WaXN1YWwgTWVyY2hhbmRpc2UgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi1kcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIid2bU5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGaWVsZF09XCIndm1OYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ViVGV4dEZpZWxkXT1cIid2bVR5cGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInJlcGxhY2VWbUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyZXBsYWNlVm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDwhLS0gU2VjdGlvbiAzOiBGaW5kIGFuZCBSZXBsYWNlIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXJvd1wiICpuZ0lmPVwiaGFzU3RvcmVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLW51bWJlclwiPjM8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlByb3ZpZGUgYW4gaW5zdHJ1Y3Rpb24gdG8gZmluZCBhbmQgcmVwbGFjZSBpbiB0aGUgc2VsZWN0ZWQgc3RvcmU8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIEZpbmQgYW5kIFJlcGxhY2UgSW5wdXRzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaW5kLXJlcGxhY2Utd3JhcHBlclwiICpuZ0lmPVwiaGFzU3RvcmVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaW5kLXJlcGxhY2UtYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaW5kLXJlcGxhY2UtbGFiZWxcIj5UYXJnZXQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbmQtcmVwbGFjZS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJJbnN0cnVjdCB3aGF0IHRvIGZpbmQgaXQgaW4gdGhlIHNlbGVjdGVkIHN0b3JlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpbmRQcm9tcHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1idG4tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1maW5kXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZpbmQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmluZExvYWRpbmcgfHwgcmVwbGFjZUxvYWRpbmcgfHwgIXNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3IHx8IChmaW5kUHJvbXB0LnZhbHVlICYmIGZpbmRFeGVjdXRlZCkgfHwgaXNGaW5kUHJvbXB0RnJvbUFwaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmluZExvYWRpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnUnVuJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjdcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjcgMTVcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjYuNzA3MSA4LjA3MTA3QzI3LjA5NzYgNy42ODA1NCAyNy4wOTc2IDcuMDQ3MzggMjYuNzA3MSA2LjY1Njg1TDIwLjM0MzEgMC4yOTI4OTNDMTkuOTUyNiAtMC4wOTc2MzEgMTkuMzE5NSAtMC4wOTc2MzEgMTguOTI4OSAwLjI5Mjg5M0MxOC41Mzg0IDAuNjgzNDE4IDE4LjUzODQgMS4zMTY1OCAxOC45Mjg5IDEuNzA3MTFMMjQuNTg1OCA3LjM2Mzk2TDE4LjkyODkgMTMuMDIwOEMxOC41Mzg0IDEzLjQxMTMgMTguNTM4NCAxNC4wNDQ1IDE4LjkyODkgMTQuNDM1QzE5LjMxOTUgMTQuODI1NiAxOS45NTI2IDE0LjgyNTYgMjAuMzQzMSAxNC40MzVMMjYuNzA3MSA4LjA3MTA3Wk0wIDcuMzYzOTZWOC4zNjM5NkgyNlY3LjM2Mzk2VjYuMzYzOTZIMFY3LjM2Mzk2WlwiIGZpbGw9XCIjOThBMkIzXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbmQtcmVwbGFjZS1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbmQtcmVwbGFjZS1sYWJlbFwiPkNoYW5nZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmluZC1yZXBsYWNlLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB3aGF0IHdvdWxkIHlvdSBsaWtlIHRvIHJlcGxhY2UgaW4gdGhlIHNlbGVjdGVkIGZpeHR1cmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicmVwbGFjZVByb21wdFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJ0bi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tcmVwbGFjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlcGxhY2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWZpbmRQcm9tcHQudmFsdWUgfHwgIWhhc1JlcGxhY2VTZWxlY3Rpb24oKSB8fCBmaW5kTG9hZGluZyB8fCByZXBsYWNlTG9hZGluZyB8fCAhZ2V0Q3VycmVudFN0b3JlRmluZFJlc3BvbnNlRGF0YSgpIHx8IHJlcGxhY2VFeGVjdXRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVwbGFjZUxvYWRpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnVXBkYXRlJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIFByZXZpZXcgU2VjdGlvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy13cmFwcGVyXCIgW25nU3R5bGVdPVwieydkaXNwbGF5JzogaGFzU3RvcmVzID8gJ2Jsb2NrJyA6ICdub25lJ31cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTAgcHJldmlldy1sYXlvdXRcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTGVmdCBDb2x1bW46IENhbnZhcyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBbbmdDbGFzc109XCJ7IFxyXG4gICAgICAgICAgICAgICAgICAgICdjb2wtNic6ICFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgJiYgc2VsZWN0ZWRGaXh0dXJlRGF0YSAmJiBzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICAnY29sLTknOiAhaXNSaWdodFBhbmVsQ29sbGFwc2VkICYmIHNlbGVjdGVkRml4dHVyZURhdGEgJiYgIXNob3VsZFNob3dCZWZvcmVBZnRlcigpLCBcclxuICAgICAgICAgICAgICAgICAgICAnY29sLTEyJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkIHx8ICFzZWxlY3RlZEZpeHR1cmVEYXRhIFxyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQgZ2FwLTMgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN0b3JlIERyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLWRyb3Bkb3duIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNTdG9yZXMgJiYgc3RvcmVEcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInN0b3JlRHJvcGRvd25JdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInc3RvcmVJZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEZpZWxkXT1cIidzdG9yZU5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwic2VsZWN0ZWRTdG9yZVZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25TdG9yZVNlbGVjdGVkRm9yUHJldmlldygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXN0b3JlLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb250ZW50IEFyZWEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQcmV2aWV3IFRpdGxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmdy1zZW1pYm9sZCBtYi0xXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjMWQyOTM5O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXZpZXcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnZXRTdG9yZUNvdW50KCkgPiAwXCIgc3R5bGU9XCJmb250LXdlaWdodDogNDAwOyBjb2xvcjogIzY2NzA4NTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7IGdldFN0b3JlQ291bnQoKSB9fSB7eyBnZXRTdG9yZUNvdW50KCkgPT09IDEgPyAnU3RvcmUnIDogJ1N0b3JlcycgfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERlc2NyaXB0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjNDc1NDY3O1wiPkNoZWNrIGlmIHRoZSBwcm9tcHQgZml0IGludG8gdGhlIGV4cGVjdGVkIHJlc3VsdHMgaW4gb3JkZXIgdG8gcHJvY2VlZCB0byByZXZpZXcgYW5kIGFwcHJvdmU8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIENhbnZhcyBDb250YWluZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbnZhcy1jb250YWluZXJcIiAjcHJldmlld0NhbnZhc0NvbnRhaW5lciBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiBzZWxlY3RlZFN0b3JlRm9yUHJldmlldyA/ICdibG9jaycgOiAnbm9uZSd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYW52YXMtbG9hZGluZ1wiICpuZ0lmPVwiY2FudmFzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkxvYWRpbmcuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjYW52YXMgI3ByZXZpZXdDYW52YXM+PC9jYW52YXM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0IENvbHVtbjogRml4dHVyZSBQcmV2aWV3IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtcHJldmlldy1wYW5lbFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkRml4dHVyZURhdGEgJiYgIWlzUmlnaHRQYW5lbENvbGxhcHNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbC02Jzogc2hvdWxkU2hvd0JlZm9yZUFmdGVyKCksICdjb2wtMyc6ICFzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSA/ICc2ODBweCcgOiAnMzQwcHgnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInMtY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBhbmVsIEhlYWRlciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtcHJldmlldy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicHJvZHVjdC1pbWFnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiUHJvZHVjdFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZHVjdC1pbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+e3sgZ2V0Rml4dHVyZUxhYmVsKCkgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwZWNzLWNvbnRhaW5lclwiICpuZ0lmPVwiZ2V0Rml4dHVyZUNhdGVnb3J5KCkgfHwgZ2V0Rml4dHVyZVdpZHRoKCkgfHwgZ2V0U2hlbGZDb3VudCgpID4gMCB8fCBnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BlYy10ZXh0XCIgKm5nSWY9XCJnZXRGaXh0dXJlQ2F0ZWdvcnkoKVwiPnt7IGdldEZpeHR1cmVDYXRlZ29yeSgpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvdFwiICpuZ0lmPVwiZ2V0Rml4dHVyZUNhdGVnb3J5KCkgJiYgKGdldEZpeHR1cmVXaWR0aCgpIHx8IGdldFNoZWxmQ291bnQoKSA+IDAgfHwgZ2V0Rml4dHVyZUNhcGFjaXR5KCkgPiAwKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGVjLXRleHRcIiAqbmdJZj1cImdldEZpeHR1cmVXaWR0aCgpXCI+e3sgZ2V0Rml4dHVyZVdpZHRoKCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90XCIgKm5nSWY9XCJnZXRGaXh0dXJlV2lkdGgoKSAmJiAoZ2V0U2hlbGZDb3VudCgpID4gMCB8fCBnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDApXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwZWMtdGV4dFwiICpuZ0lmPVwiZ2V0U2hlbGZDb3VudCgpID4gMFwiPnt7IGdldFNoZWxmQ291bnQoKSB9fSB7eyBnZXRTaGVsZkNvdW50KCkgPT09IDEgPyAnU2hlbGYnIDogJ1NoZWx2ZXMnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvdFwiICpuZ0lmPVwiZ2V0U2hlbGZDb3VudCgpID4gMCAmJiBnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDBcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BlYy10ZXh0XCIgKm5nSWY9XCJnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDBcIj57eyBnZXRGaXh0dXJlQ2FwYWNpdHkoKSB9fSBDYXBhY2l0eTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiaGlkZU1ldGFkYXRhXCIgWyhuZ01vZGVsKV09XCJoaWRlTWV0YWRhdGFcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiAoY2hhbmdlKT1cIm9uSGlkZU1ldGFkYXRhVG9nZ2xlKClcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbXMtMlwiIGZvcj1cImhpZGVNZXRhZGF0YVwiIHN0eWxlPVwiY29sb3I6IGJsYWNrOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGlkZSBtZXRhZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaXh0dXJlIENvbXBvbmVudCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtcHJldmlldy1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgQmVmb3JlL0FmdGVyIHdoZW4gZmluZCBkYXRhIGV4aXN0cyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKVwiIGNsYXNzPVwiYmVmb3JlLWFmdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZWZvcmUtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cInNlY3Rpb24tbGFiZWwgbWItMFwiPkJlZm9yZTwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLWZpeHR1cmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeHR1cmVdPVwiZ2V0T3JpZ2luYWxGaXh0dXJlRm9yRGlzcGxheSgpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDb2xvcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dWTXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dCQ3NdPVwiIWhpZGVNZXRhZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItc3RvcmUtZml4dHVyZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFmdGVyLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzZWN0aW9uLWxhYmVsIG1iLTBcIj5BZnRlcjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLWZpeHR1cmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeHR1cmVdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q29sb3JzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Vk1zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QkNzXT1cIiFoaWRlTWV0YWRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImlzQWZ0ZXJEaXNhYmxlZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1zdG9yZS1maXh0dXJlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgc2luZ2xlIGZpeHR1cmUgd2hlbiBubyBmaW5kIGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3VsZFNob3dCZWZvcmVBZnRlcigpICYmIHNlbGVjdGVkRml4dHVyZURhdGFcIiBjbGFzcz1cInNpbmdsZS1maXh0dXJlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXh0dXJlLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zdG9yZS1maXh0dXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeHR1cmVdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDb2xvcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZNc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QkNzXT1cIiFoaWRlTWV0YWRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItc3RvcmUtZml4dHVyZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQ29sbGFwc2UgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLWhhbmRsZXIgcmlnaHRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yNzMwOCAxMi42MzZMNC42MzY3MiA4Ljk5OTY0TDguMjczMDggNS4zNjMyOE0xMy4zNjQgMTIuNjM2TDkuNzI3NjMgOC45OTk2NEwxMy4zNjQgNS4zNjMyOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS43MjY5MiA1LjM2Mzk5TDEzLjM2MzMgOS4wMDAzNkw5LjcyNjkyIDEyLjYzNjdNNC42MzYwMSA1LjM2Mzk5TDguMjcyMzcgOS4wMDAzNkw0LjYzNjAxIDEyLjYzNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gTm8gUHJldmlldyBTZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuby1wcmV2aWV3XCIgKm5nSWY9XCJoYXNTdG9yZXMgJiYgIXNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3XCI+XHJcbiAgICAgICAgICAgIDxkaXYgPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjMxNVwiIGhlaWdodD1cIjE1NVwiIHZpZXdCb3g9XCIwIDAgMzE1IDE1NVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAzLjgxIDQ3LjAxOTVDODkuNTQ2MyA0Ny4wMTk3IDc3Ljk4MzQgNTguNTgyNCA3Ny45ODM0IDcyLjg0NTdDNzcuOTgzNCA3OC43NjE3IDczLjk4MDMgODUuNTA1OSA2OC4wNjQzIDg1LjUwNTlINDUuMjU4OEMzMC45OTUzIDg1LjUwNTkgMTkuNDMxNiA5Ny4wNjg2IDE5LjQzMTYgMTExLjMzMkMxOS40MzE2IDEyNS41OTYgMzAuOTk1MyAxMzcuMTU4IDQ1LjI1ODggMTM3LjE1OEgxODMuMzU3QzIwMC4yNDggMTM3LjE1OCAyMTYuMzIgMTIzLjk5MiAyMzMuMjEgMTIzLjk5MkgyOTkuMjQ1QzMwNCAxMjMuOTkyIDMwNy44NTQgMTIwLjEzNyAzMDcuODU0IDExNS4zODNDMzA3Ljg1MyAxMTAuNjI5IDMwMy45OTkgMTA2Ljc3NCAyOTkuMjQ1IDEwNi43NzRIMjExLjYyNUMyMDkuOTggMTA2Ljc3NCAyMDguNTg4IDEwNS41NTMgMjA4LjEyIDEwMy45NzZDMjA3LjM4MSAxMDEuNDg2IDIwOS4wODIgOTguNjcxOSAyMTEuNjc5IDk4LjY3MTlIMjQxLjkwOUMyNTYuMTcyIDk4LjY3MTcgMjY3LjczNSA4Ny4xMDkgMjY3LjczNSA3Mi44NDU3QzI2Ny43MzUgNTguNTgyNCAyNTYuMTcyIDQ3LjAxOTggMjQxLjkwOSA0Ny4wMTk1SDEwMy44MVpcIiBmaWxsPVwiI0VBRUNGMFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjI0MC42OTRcIiBoZWlnaHQ9XCIxNi45OTU2XCIgcng9XCI4LjQ5NzhcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMjQ2LjYwMyA0OC44NTc0KVwiIGZpbGw9XCIjRUFFQ0YwXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI1LjQyMTQ3XCIgY3k9XCI1LjQyMTQ3XCIgcj1cIjUuNDIxNDdcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgNTYuMjk3OSAxMTMuMjgxKVwiIGZpbGw9XCIjNkJDQUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIzLjI1Mjg4XCIgY3k9XCIzLjI1Mjg4XCIgcj1cIjMuMjUyODhcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMjQ0Ljk2NSA2OC44MjYyKVwiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIzLjI1Mjg4XCIgY3k9XCIzLjI1Mjg4XCIgcj1cIjMuMjUyODhcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMjE1LjY4OSAxMy41MjczKVwiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyLjE2ODU5XCIgY3k9XCIyLjE2ODU5XCIgcj1cIjIuMTY4NTlcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMTA0LjAwNiAxMzguMjIxKVwiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI2OC41MDFcIiB5PVwiNDQuMTUyM1wiIHdpZHRoPVwiMTY2Ljk5OVwiIGhlaWdodD1cIjk3LjkzNzFcIiByeD1cIjE1LjEwMTVcIiBmaWxsPVwiIzZCQ0FGRlwiIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIzXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXNrIGlkPVwicGF0aC04LWluc2lkZS0xXzkzNl8xNTAzODNcIiBmaWxsPVwid2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkzLjExNzIgMTlDOTQuMDYyNSAxOSA5NC45ODkyIDE5LjA4MjggOTUuODg4NyAxOS4yNDIyVjExNi43ODRDOTQuOTg5MiAxMTYuNjI1IDk0LjA2MjUgMTE2LjU0MiA5My4xMTcyIDExNi41NDJIODIuNzc0NEM3NC4wNjQyIDExNi41NDIgNjcuMDAzMSAxMjMuNjAzIDY3LjAwMjkgMTMyLjMxM1YzNC43NzE1QzY3LjAwMjkgMjYuMDYxMiA3NC4wNjQxIDE5IDgyLjc3NDQgMTlIOTMuMTE3MlpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXNrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOTMuMTE3MiAxOUM5NC4wNjI1IDE5IDk0Ljk4OTIgMTkuMDgyOCA5NS44ODg3IDE5LjI0MjJWMTE2Ljc4NEM5NC45ODkyIDExNi42MjUgOTQuMDYyNSAxMTYuNTQyIDkzLjExNzIgMTE2LjU0Mkg4Mi43NzQ0Qzc0LjA2NDIgMTE2LjU0MiA2Ny4wMDMxIDEyMy42MDMgNjcuMDAyOSAxMzIuMzEzVjM0Ljc3MTVDNjcuMDAyOSAyNi4wNjEyIDc0LjA2NDEgMTkgODIuNzc0NCAxOUg5My4xMTcyWlwiIGZpbGw9XCIjNkJDQUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOTMuMTE3MiAxOUw5My4xMTczIDE2SDkzLjExNzJWMTlaTTk1Ljg4ODcgMTkuMjQyMkg5OC44ODg3VjE2LjcyNzFMOTYuNDEyMiAxNi4yODgyTDk1Ljg4ODcgMTkuMjQyMlpNOTUuODg4NyAxMTYuNzg0TDk1LjM2NTEgMTE5LjczOEw5OC44ODg3IDEyMC4zNjNWMTE2Ljc4NEg5NS44ODg3Wk05My4xMTcyIDExNi41NDJMOTMuMTE3MyAxMTMuNTQySDkzLjExNzJWMTE2LjU0MlpNNjcuMDAyOSAxMzIuMzEzSDY0LjAwMjlMNzAuMDAyOSAxMzIuMzE0TDY3LjAwMjkgMTMyLjMxM1pNOTMuMTE3MiAxOUw5My4xMTcxIDIyQzkzLjg4NzIgMjIgOTQuNjM4NyAyMi4wNjc0IDk1LjM2NTEgMjIuMTk2MUw5NS44ODg3IDE5LjI0MjJMOTYuNDEyMiAxNi4yODgyQzk1LjMzOTYgMTYuMDk4MSA5NC4yMzc3IDE2IDkzLjExNzMgMTZMOTMuMTE3MiAxOVpNOTUuODg4NyAxOS4yNDIySDkyLjg4ODdWMTE2Ljc4NEg5NS44ODg3SDk4Ljg4ODdWMTkuMjQyMkg5NS44ODg3Wk05NS44ODg3IDExNi43ODRMOTYuNDEyMiAxMTMuODNDOTUuMzM5NiAxMTMuNjQgOTQuMjM3NyAxMTMuNTQyIDkzLjExNzMgMTEzLjU0Mkw5My4xMTcyIDExNi41NDJMOTMuMTE3MSAxMTkuNTQyQzkzLjg4NzIgMTE5LjU0MiA5NC42Mzg3IDExOS42MDkgOTUuMzY1MSAxMTkuNzM4TDk1Ljg4ODcgMTE2Ljc4NFpNOTMuMTE3MiAxMTYuNTQyVjExMy41NDJIODIuNzc0NFYxMTYuNTQyVjExOS41NDJIOTMuMTE3MlYxMTYuNTQyWk04Mi43NzQ0IDExNi41NDJWMTEzLjU0MkM3Mi40MDczIDExMy41NDIgNjQuMDAzMiAxMjEuOTQ3IDY0LjAwMjkgMTMyLjMxM0w2Ny4wMDI5IDEzMi4zMTNMNzAuMDAyOSAxMzIuMzE0QzcwLjAwMzEgMTI1LjI2IDc1LjcyMTIgMTE5LjU0MiA4Mi43NzQ0IDExOS41NDJWMTE2LjU0MlpNNjcuMDAyOSAxMzIuMzEzSDcwLjAwMjlWMzQuNzcxNUg2Ny4wMDI5SDY0LjAwMjlWMTMyLjMxM0g2Ny4wMDI5Wk02Ny4wMDI5IDM0Ljc3MTVINzAuMDAyOUM3MC4wMDI5IDI3LjcxOCA3NS43MjEgMjIgODIuNzc0NCAyMlYxOVYxNkM3Mi40MDcyIDE2IDY0LjAwMjkgMjQuNDA0MyA2NC4wMDI5IDM0Ljc3MTVINjcuMDAyOVpNODIuNzc0NCAxOVYyMkg5My4xMTcyVjE5VjE2SDgyLjc3NDRWMTlaXCIgZmlsbD1cIiMwMEEzRkZcIiBtYXNrPVwidXJsKCNwYXRoLTgtaW5zaWRlLTFfOTM2XzE1MDM4MylcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9XCI3Ni45NjE5XCIgeTE9XCI0Mi42NTIzXCIgeDI9XCI3Ni45NjE5XCIgeTI9XCI4NC40ODgxXCIgc3Ryb2tlPVwiIzk5REFGRlwiIHN0cm9rZS13aWR0aD1cIjMuOTg0MzZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyMTguMjA2XCIgY3k9XCI3MC4xNzU1XCIgcj1cIjMuMjk2NjNcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjExMS43ODdcIiBjeT1cIjU1LjE2N1wiIHI9XCIyLjUyNjM3XCIgZmlsbD1cIiM5OURBRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjk5LjM4NDVcIiBjeT1cIjEyNC45ODZcIiByPVwiMy40NDUwNVwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzNS41MjkgMzMuNDcxN0MxNTEuMjg1IDI0LjM3NDkgMTcxLjQzMiAyOS43NzMyIDE4MC41MjkgNDUuNTI5M0MxODguNTYgNTkuNDM5OCAxODUuMjkxIDc2Ljc3MDcgMTczLjU3MyA4Ni45MDA0TDE5My40NTcgMTIxLjMzOUMxOTQuOTMyIDEyMy44OTQgMTk0LjA1NiAxMjcuMTYxIDE5MS41MDEgMTI4LjYzNkMxODguOTQ2IDEzMC4xMTEgMTg1LjY3OSAxMjkuMjM2IDE4NC4yMDQgMTI2LjY4MUwxNjQuNDY2IDkyLjQ5MzJDMTQ5LjQ0NyA5OC42NTUyIDEzMS44MTQgOTIuOTIgMTIzLjQ3MiA3OC40NzE3QzExNC4zNzUgNjIuNzE1NiAxMTkuNzczIDQyLjU2ODUgMTM1LjUyOSAzMy40NzE3Wk0xNzIuNjk4IDUwLjA1MThDMTY2LjA5OSAzOC42MjA5IDE1MS40ODIgMzQuNzA0MSAxNDAuMDUxIDQxLjMwMzdDMTI4LjYyIDQ3LjkwMzUgMTI0LjcwMyA2Mi41MjA0IDEzMS4zMDMgNzMuOTUxMkMxMzcuOTAyIDg1LjM4MTcgMTUyLjUxOSA4OS4yOTc3IDE2My45NSA4Mi42OTgyQzE3NS4zODEgNzYuMDk4NyAxNzkuMjk3IDYxLjQ4MjYgMTcyLjY5OCA1MC4wNTE4WlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTUzLjAwMVwiIGN5PVwiNTcuMDAxN1wiIHI9XCIyMy44OTk0XCIgdHJhbnNmb3JtPVwicm90YXRlKC0zMCAxNTMuMDAxIDU3LjAwMTcpXCIgZmlsbD1cIiM5OURBRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hc2sgaWQ9XCJwYXRoLTE2LWluc2lkZS0yXzkzNl8xNTAzODNcIiBmaWxsPVwid2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1My4zODQgNDAuOTk1N0MxNTMuNDM1IDM5LjcwMDEgMTUyLjQyMyAzOC41OTI3IDE1MS4xMzEgMzguNzA5NUMxNDguODU4IDM4LjkxNTEgMTQ2LjYzNiAzOS41NDkxIDE0NC41ODYgNDAuNTg1NEMxNDEuODM1IDQxLjk3NiAxMzkuNDg0IDQ0LjA0NSAxMzcuNzU1IDQ2LjU5N0MxMzYuMDI2IDQ5LjE0OSAxMzQuOTc3IDUyLjA5OTYgMTM0LjcwNiA1NS4xNzAxQzEzNC41MDQgNTcuNDU4MyAxMzQuNzM5IDU5Ljc1NjggMTM1LjM5MSA2MS45NDQ3QzEzNS43NjIgNjMuMTg3MiAxMzcuMTY2IDYzLjcxNjkgMTM4LjM1IDYzLjE4OTFDMTM5LjUzNCA2Mi42NjEyIDE0MC4wNDQgNjEuMjc0NiAxMzkuNzMgNjAuMDE2NUMxMzkuMzcgNTguNTczNSAxMzkuMjUxIDU3LjA3NTMgMTM5LjM4MyA1NS41ODNDMTM5LjU4NCA1My4zMDc4IDE0MC4zNjEgNTEuMTIxNCAxNDEuNjQyIDQ5LjIzMDRDMTQyLjkyNCA0Ny4zMzk0IDE0NC42NjYgNDUuODA2MyAxNDYuNzA0IDQ0Ljc3NThDMTQ4LjA0MSA0NC4xIDE0OS40NzcgNDMuNjU1MSAxNTAuOTUgNDMuNDU0MkMxNTIuMjM1IDQzLjI3OTIgMTUzLjMzMyA0Mi4yOTEzIDE1My4zODQgNDAuOTk1N1pcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXNrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUzLjM4NCA0MC45OTU3QzE1My40MzUgMzkuNzAwMSAxNTIuNDIzIDM4LjU5MjcgMTUxLjEzMSAzOC43MDk1QzE0OC44NTggMzguOTE1MSAxNDYuNjM2IDM5LjU0OTEgMTQ0LjU4NiA0MC41ODU0QzE0MS44MzUgNDEuOTc2IDEzOS40ODQgNDQuMDQ1IDEzNy43NTUgNDYuNTk3QzEzNi4wMjYgNDkuMTQ5IDEzNC45NzcgNTIuMDk5NiAxMzQuNzA2IDU1LjE3MDFDMTM0LjUwNCA1Ny40NTgzIDEzNC43MzkgNTkuNzU2OCAxMzUuMzkxIDYxLjk0NDdDMTM1Ljc2MiA2My4xODcyIDEzNy4xNjYgNjMuNzE2OSAxMzguMzUgNjMuMTg5MUMxMzkuNTM0IDYyLjY2MTIgMTQwLjA0NCA2MS4yNzQ2IDEzOS43MyA2MC4wMTY1QzEzOS4zNyA1OC41NzM1IDEzOS4yNTEgNTcuMDc1MyAxMzkuMzgzIDU1LjU4M0MxMzkuNTg0IDUzLjMwNzggMTQwLjM2MSA1MS4xMjE0IDE0MS42NDIgNDkuMjMwNEMxNDIuOTI0IDQ3LjMzOTQgMTQ0LjY2NiA0NS44MDYzIDE0Ni43MDQgNDQuNzc1OEMxNDguMDQxIDQ0LjEgMTQ5LjQ3NyA0My42NTUxIDE1MC45NSA0My40NTQyQzE1Mi4yMzUgNDMuMjc5MiAxNTMuMzMzIDQyLjI5MTMgMTUzLjM4NCA0MC45OTU3WlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiNlwiIG1hc2s9XCJ1cmwoI3BhdGgtMTYtaW5zaWRlLTJfOTM2XzE1MDM4MylcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMzYuNTI5IDI4LjQ3MTdDMTUyLjI4NSAxOS4zNzQ5IDE3Mi40MzIgMjQuNzczMiAxODEuNTI5IDQwLjUyOTNDMTg5LjU2IDU0LjQzOTggMTg2LjI5MSA3MS43NzA3IDE3NC41NzMgODEuOTAwNEwxOTQuNDU3IDExNi4zMzlDMTk1LjkzMiAxMTguODk0IDE5NS4wNTYgMTIyLjE2MSAxOTIuNTAxIDEyMy42MzZDMTg5Ljk0NiAxMjUuMTExIDE4Ni42NzkgMTI0LjIzNiAxODUuMjA0IDEyMS42ODFMMTY1LjQ2NiA4Ny40OTMyQzE1MC40NDcgOTMuNjU1MiAxMzIuODE0IDg3LjkyIDEyNC40NzIgNzMuNDcxN0MxMTUuMzc1IDU3LjcxNTYgMTIwLjc3MyAzNy41Njg1IDEzNi41MjkgMjguNDcxN1pNMTczLjY5OCA0NS4wNTE4QzE2Ny4wOTkgMzMuNjIwOSAxNTIuNDgyIDI5LjcwNDEgMTQxLjA1MSAzNi4zMDM3QzEyOS42MiA0Mi45MDM1IDEyNS43MDMgNTcuNTIwNCAxMzIuMzAzIDY4Ljk1MTJDMTM4LjkwMiA4MC4zODE3IDE1My41MTkgODQuMjk3NyAxNjQuOTUgNzcuNjk4MkMxNzYuMzgxIDcxLjA5ODcgMTgwLjI5NyA1Ni40ODI2IDE3My42OTggNDUuMDUxOFpcIiBmaWxsPVwiIzAwQTNGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGgzPk5vIHByZXZpZXcgeWV0PC9oMz5cclxuICAgICAgICAgICAgPHA+QWRkIGEgZmluZCBhbmQgcmVwbGFjZW1lbnQgdG8gcHJldmlldy48L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbiBTZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uLXNlY3Rpb25cIiAqbmdJZj1cImhhc1N0b3Jlc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFwcGx5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblJldmlld0FuZFJlcGxhY2UoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IGZpbmRMb2FkaW5nIHx8IHJlcGxhY2VMb2FkaW5nIHx8IGJhdGNoUHJvY2Vzc2luZyB8fCAhZmluZFByb21wdC52YWx1ZSB8fCAhaGFzUmVwbGFjZVNlbGVjdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBiYXRjaFByb2Nlc3NpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnUmV2aWV3IEFuZCBSZXBsYWNlJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
2851
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3ByZXBhcmUtdGVtcGxhdGUvcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3ByZXBhcmUtdGVtcGxhdGUvcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQyxTQUFTLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztB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RSxxQkFBcUIsQ0FBQyxhQUc1SSxDQUFDLGFBQWEsQ0FBQztxVUFnQ0UsZ0JBQWdCO3NCQUEzQyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ1cseUJBQXlCO3NCQUE3RCxTQUFTO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgVGl0bGVDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3JlYWN0aXZlLXNlbGVjdC9yZWFjdGl2ZS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RvcmVTZWxlY3RDb21wb25lbnQsIFN0b3JlT3B0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdG9yZS1zZWxlY3Qvc3RvcmUtc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0b3JlRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3N0b3JlLWRyb3Bkb3duL3N0b3JlLWRyb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvblVwZGF0ZUFpRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yZSwgRmluZFJlcGxhY2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmluZC1yZXBsYWNlLm1vZGVsJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIGZhYnJpYyBmcm9tIFwiZmFicmljXCI7XHJcbmltcG9ydCB7IFN0b3JlRml4dHVyZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc3RvcmUtZml4dHVyZS9zdG9yZS1maXh0dXJlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZtTGlicmFyeUxpc3QgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQmF0Y2hDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4vYmF0Y2gtY29uZmlybWF0aW9uLW1vZGFsL2JhdGNoLWNvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBnZXRGaXh0dXJlQ2FudmFzTGFiZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9mdW5jdGlvbnMvcGxhbm8uZnVuY3Rpb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcHJlcGFyZS10ZW1wbGF0ZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVTZWxlY3RDb21wb25lbnQsIFN0b3JlU2VsZWN0Q29tcG9uZW50LCBTdG9yZURyb3Bkb3duQ29tcG9uZW50LCBTdG9yZUZpeHR1cmVDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcmVwYXJlLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcycsXHJcbiAgcHJvdmlkZXJzOiBbVGl0bGVDYXNlUGlwZV1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBQcmVwYXJlVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgc2VhcmNoTW9kZXMgPSBbXHJcbiAgICB7IHZhbHVlOiAnc3RvcmUnLCBsYWJlbDogJ1N0b3JlcycgfSxcclxuICAgIHsgdmFsdWU6ICdjbHVzdGVyJywgbGFiZWw6ICdDbHVzdGVycycgfSxcclxuICBdO1xyXG4gIHNlbGVjdGVkTW9kZSA9IG5ldyBGb3JtQ29udHJvbCgnc3RvcmUnKTtcclxuICB0YXJnZXQgPSBuZXcgRm9ybUNvbnRyb2woJ2JvdGgnKTtcclxuICBmaW5kUHJvbXB0ID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICByZXBsYWNlUHJvbXB0ID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAvLyBsaWItcmVhY3RpdmUtc2VsZWN0IGJpbmRzIHZpYSBDb250cm9sVmFsdWVBY2Nlc3NvciBhbmQgZW1pdHMgdGhlIHNlbGVjdGVkIElELCBub3QgdGhlIGZ1bGwgb2JqZWN0LlxyXG4gIC8vIEtlZXAgdGhlIEZvcm1Db250cm9sIHR5cGVkIGFzIGEgc3RyaW5nICh0aGUgX2lkKSBhbmQgbG9vayB1cCB0aGUgZnVsbCByZWNvcmQgdmlhIGdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIC8gZ2V0UmVwbGFjZVZtU2VsZWN0aW9uKCkuXHJcbiAgcmVwbGFjZUJyYW5kID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gIHJlcGxhY2VWbSA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuICBcclxuICBzdG9yZU9wdGlvbnM6IFN0b3JlT3B0aW9uW10gPSBbXTtcclxuICBjbHVzdGVyRGF0YTogYW55W10gPSBbXTtcclxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2F2aW5nRHJhZnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBiYXRjaFByb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBcclxuICBzZWxlY3RlZFN0b3JlczogU3RvcmVPcHRpb25bXSA9IFtdO1xyXG4gIGZpbmRSZXBsYWNlRGF0YTogRmluZFJlcGxhY2UgfCBudWxsID0gbnVsbDtcclxuICBzZWxlY3RlZFN0b3JlRm9yUHJldmlldzogYW55ID0gbnVsbDtcclxuICBzdG9yZUxpc3RGb3JEcm9wZG93bjogYW55W10gPSBbXTtcclxuICBzdG9yZURyb3Bkb3duSXRlbXM6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRTdG9yZVZhbHVlczogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gQ2FudmFzIHByb3BlcnRpZXNcclxuICBAVmlld0NoaWxkKCdwcmV2aWV3Q2FudmFzJykgcHJldmlld0NhbnZhc1JlZiE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ3ByZXZpZXdDYW52YXNDb250YWluZXInKSBwcmV2aWV3Q2FudmFzQ29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgcHJldmlld0NhbnZhcyE6IGZhYnJpYy5DYW52YXM7XHJcbiAgcGxhbm9EYXRhOiBhbnk7XHJcbiAgZmxvb3JEYXRhOiBhbnk7XHJcbiAgd2FsbFRoaWNrbmVzcyA9IDMwO1xyXG4gIHZlcnRpY2FsTWFyZ2luID0gKDEuMjUgLyAxMDApICogdGhpcy50b1BpeGVscygxNTI0LCBcIm1tXCIpO1xyXG4gIGNkblVybDogc3RyaW5nID0gJyc7XHJcbiAgYWN0aXZlSGlnaGxpZ2h0OiBmYWJyaWMuUmVjdCB8IG51bGwgPSBudWxsO1xyXG4gIGNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRGaXh0dXJlOiBhbnk7XHJcbiAgc2VsZWN0ZWRGaXh0dXJlRGF0YTogYW55ID0gbnVsbDtcclxuICBvcmlnaW5hbEZpeHR1cmVEYXRhOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgb3JpZ2luYWxGaXh0dXJlc01hcDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuICBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcclxuICBjYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgZmluZExvYWRpbmcgPSBmYWxzZTtcclxuICByZXBsYWNlTG9hZGluZyA9IGZhbHNlO1xyXG4gIGZpbmRFeGVjdXRlZCA9IGZhbHNlO1xyXG4gIHJlcGxhY2VFeGVjdXRlZCA9IGZhbHNlO1xyXG4gIGlzRmluZFByb21wdEZyb21BcGkgPSBmYWxzZTtcclxuICBhbGxGaXh0dXJlSW5zdGFuY2VzOiBhbnlbXSA9IFtdO1xyXG4gIHZtTGlzdDogVm1MaWJyYXJ5TGlzdFtdID0gW107XHJcbiAgYnJhbmRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHJlcGxhY2VWbUxpc3Q6IGFueVtdID0gW107XHJcbiAgY2xpZW50SWQ6IHN0cmluZyA9ICcnO1xyXG4gIGhpZGVNZXRhZGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHByZXZpb3VzU2VhcmNoTW9kZTogJ3N0b3JlJyB8ICdjbHVzdGVyJyB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgaXNJbml0aWFsTG9hZCA9IHRydWU7XHJcbiAgcHJpdmF0ZSBoYXNSZXN0b3JlZERhdGEgPSBmYWxzZTtcclxuICBwcml2YXRlIGlzVXBkYXRpbmdGcm9tU2VydmljZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcblxyXG4gIGdldCBoYXNTdG9yZXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEodGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3JlcyAmJiB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMubGVuZ3RoID4gMCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3JlQ291bnQgfHwgdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3Jlcz8ubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Rml4dHVyZURhdGEoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgfHwgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rml4dHVyZUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5nZXRDdXJyZW50Rml4dHVyZURhdGEoKTtcclxuICAgIHJldHVybiBmaXh0dXJlPy5oZWFkZXI/LmxhYmVsIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rml4dHVyZUNhdGVnb3J5KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5nZXRDdXJyZW50Rml4dHVyZURhdGEoKTtcclxuICAgIHJldHVybiBmaXh0dXJlPy5maXh0dXJlQ2F0ZWdvcnkgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXRGaXh0dXJlV2lkdGgoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmdldEN1cnJlbnRGaXh0dXJlRGF0YSgpO1xyXG4gICAgaWYgKCFmaXh0dXJlPy5maXh0dXJlV2lkdGgpIHJldHVybiAnJztcclxuICAgIGNvbnN0IHdpZHRoID0gZml4dHVyZS5maXh0dXJlV2lkdGgudmFsdWU7XHJcbiAgICBjb25zdCB1bml0ID0gZml4dHVyZS5maXh0dXJlV2lkdGgudW5pdCB8fCAnbW0nO1xyXG4gICAgbGV0IGRpbWVuc2lvblN0ciA9IGAke3dpZHRofSR7dW5pdH1gO1xyXG4gICAgLy8gQ29udmVydCB0byBmZWV0IGlmIG5lZWRlZCAoMTIwMG1tID0gNGZ0KVxyXG4gICAgaWYgKHVuaXQgPT09ICdtbScgJiYgd2lkdGggPT09IDEyMDApIHtcclxuICAgICAgZGltZW5zaW9uU3RyID0gYCR7d2lkdGh9JHt1bml0fS80ZnRgO1xyXG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAnbW0nICYmIHdpZHRoID4gMCkge1xyXG4gICAgICBjb25zdCBmZWV0ID0gTWF0aC5yb3VuZCh3aWR0aCAvIDMwMCk7XHJcbiAgICAgIGlmIChmZWV0ID4gMCkge1xyXG4gICAgICAgIGRpbWVuc2lvblN0ciA9IGAke3dpZHRofSR7dW5pdH0vJHtmZWV0fWZ0YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpbWVuc2lvblN0cjtcclxuICB9XHJcblxyXG4gIGdldFNoZWxmQ291bnQoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmdldEN1cnJlbnRGaXh0dXJlRGF0YSgpO1xyXG4gICAgcmV0dXJuIGZpeHR1cmU/LnNoZWxmQ29uZmlnPy5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIGdldEZpeHR1cmVDYXBhY2l0eSgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZ2V0Q3VycmVudEZpeHR1cmVEYXRhKCk7XHJcbiAgICByZXR1cm4gZml4dHVyZT8uZml4dHVyZUNhcGFjaXR5IHx8IDA7XHJcbiAgfVxyXG5cclxuICBnZXRPcmlnaW5hbEZpeHR1cmVGb3JEaXNwbGF5KCk6IGFueSB7XHJcbiAgICAvLyBJZiBvcmlnaW5hbEZpeHR1cmVEYXRhIGV4aXN0cywgdXNlIGl0XHJcbiAgICBpZiAodGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGE7XHJcbiAgICB9XHJcbiAgICAvLyBJZiBub3QsIHRyeSB0byBnZXQgZnJvbSBtYXAgdXNpbmcgc2VsZWN0ZWRGaXh0dXJlRGF0YSBJRFxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uX2lkKSB7XHJcbiAgICAgIGNvbnN0IHN0b3JlZE9yaWdpbmFsID0gdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmdldCh0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuX2lkKTtcclxuICAgICAgaWYgKHN0b3JlZE9yaWdpbmFsKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0b3JlZE9yaWdpbmFsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBGYWxsYmFjayB0byBzZWxlY3RlZEZpeHR1cmVEYXRhIChmb3IgZmluZC1vbmx5IGNhc2UpXHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkU2hvd0JlZm9yZUFmdGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgLy8gU2hvdyBCZWZvcmUvQWZ0ZXIgb25seSB3aGVuIHNlbGVjdGVkRml4dHVyZURhdGEgZXhpc3RzIEFORCBpdCBoYXMgZmluZCBkYXRhXHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiB0aGlzIGZpeHR1cmUgaGFzIGZpbmQgZGF0YSAoZmluZFJlc3BvbnNlRGF0YSBleGlzdHMgZm9yIHRoaXMgc3BlY2lmaWMgZml4dHVyZSlcclxuICAgIGlmICh0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzICYmIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMuZmluZChcclxuICAgICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgICApO1xyXG4gICAgICAvLyBTaG93IEJlZm9yZS9BZnRlciBpZiBmaW5kUmVzcG9uc2VEYXRhIGV4aXN0cyBhbmQgbWF0Y2hlcyB0aGUgY3VycmVudCBmaXh0dXJlXHJcbiAgICAgIGlmIChzdG9yZT8uZmluZFJlc3BvbnNlRGF0YSAmJiBzdG9yZS5maW5kUmVzcG9uc2VEYXRhID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuX2lkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEFsc28gY2hlY2sgaWYgZmluZEV4ZWN1dGVkIGZsYWcgaXMgc2V0IEFORCB3ZSBoYXZlIG9yaWdpbmFsRml4dHVyZURhdGEgb3IgaXQncyBpbiB0aGUgbWFwXHJcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBmaW5kIHdhcyBqdXN0IGV4ZWN1dGVkXHJcbiAgICBpZiAodGhpcy5maW5kRXhlY3V0ZWQpIHtcclxuICAgICAgY29uc3QgZml4dHVyZUlkID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLl9pZDtcclxuICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBvcmlnaW5hbCBmaXh0dXJlIHN0b3JlZCAoZWl0aGVyIGluIG9yaWdpbmFsRml4dHVyZURhdGEgb3IgbWFwKVxyXG4gICAgICBpZiAodGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhIHx8IHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0FmdGVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAvLyBFbmFibGUgQWZ0ZXIgb25seSB3aGVuIHJlcGxhY2VSZXNwb25zZURhdGEgZXhpc3RzIGZvciB0aGUgY3VycmVudCBmaXh0dXJlXHJcbiAgICAvLyBBZnRlciBjbGlja2luZyBcIlJ1blwiIG9uIGZpbmQsIHRoZSBmaXh0dXJlIHNob3VsZCBiZSBkaXNhYmxlZCB1bnRpbCByZXBsYWNlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZVxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEpIHtcclxuICAgICAgcmV0dXJuIHRydWU7IC8vIERpc2FibGUgaWYgbm8gZml4dHVyZSBkYXRhXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIENoZWNrIGlmIHJlcGxhY2VSZXNwb25zZURhdGEgZXhpc3RzIGZvciBjdXJyZW50IHN0b3JlXHJcbiAgICAvLyByZXBsYWNlUmVzcG9uc2VEYXRhIGlzIGFuIG9iamVjdCB3aXRoIHZtQ29uZmlnIGFuZC9vciBzaGVsZkNvbmZpZyB3aGVuIHJlcGxhY2UgaXMgZXhlY3V0ZWRcclxuICAgIGlmICh0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzICYmIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMuZmluZChcclxuICAgICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgICApO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2hlY2sgaWYgcmVwbGFjZVJlc3BvbnNlRGF0YSBleGlzdHMgYW5kIGlzIGFuIG9iamVjdCAoaGFzIHZtQ29uZmlnIG9yIHNoZWxmQ29uZmlnKVxyXG4gICAgICBpZiAoc3RvcmU/LnJlcGxhY2VSZXNwb25zZURhdGEgJiYgdHlwZW9mIHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgLy8gVmVyaWZ5IGl0IGhhcyBhdCBsZWFzdCBvbmUgY29uZmlnIHByb3BlcnR5ICh2bUNvbmZpZyBvciBzaGVsZkNvbmZpZylcclxuICAgICAgICBpZiAoc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS52bUNvbmZpZyB8fCBzdG9yZS5yZXBsYWNlUmVzcG9uc2VEYXRhLnNoZWxmQ29uZmlnKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlcGxhY2UgcmVzcG9uc2UgYXZhaWxhYmxlLCBlbmFibGUgQWZ0ZXJcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQWxzbyBjaGVjayByZXBsYWNlRXhlY3V0ZWQgZmxhZyBhcyBhIGZhbGxiYWNrIChmb3IgaW1tZWRpYXRlIHVwZGF0ZXMgYWZ0ZXIgcmVwbGFjZSlcclxuICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCAmJiB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBSZXBsYWNlIHdhcyBqdXN0IGV4ZWN1dGVkLCBlbmFibGUgQWZ0ZXJcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gRGVmYXVsdDogZGlzYWJsZSBBZnRlciBpZiBubyByZXBsYWNlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc3RvcmVCdWlsZGVyU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IENvbGxlY3Rpb25VcGRhdGVBaURhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aXRsZUNhc2U6IFRpdGxlQ2FzZVBpcGUsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXHJcbiAgKSB7fVxyXG5cclxuXHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gR2V0IGNsaWVudCBJRCBhbmQgQ0ROIFVSTFxyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICAgIHRoaXMuY2RuVXJsID0gZW52LnBsYW5vZ3JhbUNETiB8fCAnJztcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YS5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIGFzIHN0cmluZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChoZWFkZXJEYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGEuY2xpZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jbGllbnRJZCkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkUmVwbGFjZUxpYnJhcmllcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGRhdGEgc2VydmljZSB0byByZXN0b3JlIHNhdmVkIGRhdGFcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0RmluZFJlcGxhY2VEYXRhKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wcyBieSBza2lwcGluZyB1cGRhdGVzIHdoZW4gd2UncmUgdXBkYXRpbmcgZnJvbSBmb3JtIGNoYW5nZXNcclxuICAgICAgICBpZiAodGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5maW5kUmVwbGFjZURhdGEgPSBkYXRhO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChkYXRhICYmICF0aGlzLmhhc1Jlc3RvcmVkRGF0YSkge1xyXG4gICAgICAgICAgLy8gUmVzdG9yZSBhbGwgZm9ybSB2YWx1ZXMgb24gZmlyc3QgZGF0YSBsb2FkXHJcbiAgICAgICAgICAvLyBEb24ndCBjYWxsIHVwZGF0ZVN0b3JlRHJvcGRvd25JdGVtcyBoZXJlIGFzIHJlc3RvcmVGb3JtVmFsdWVzIHdpbGwgaGFuZGxlIGl0XHJcbiAgICAgICAgICB0aGlzLnJlc3RvcmVGb3JtVmFsdWVzKGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5oYXNSZXN0b3JlZERhdGEgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0aGlzLmhhc1Jlc3RvcmVkRGF0YSkge1xyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSBzdG9yZSBkcm9wZG93biBpdGVtcyB3aGVuIHN0b3JlcyBjaGFuZ2UgKGFmdGVyIGluaXRpYWwgcmVzdG9yZSlcclxuICAgICAgICAgIHRoaXMudXBkYXRlU3RvcmVEcm9wZG93bkl0ZW1zKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIElmIGRhdGEgYWxyZWFkeSByZXN0b3JlZCwgb25seSBoYW5kbGUgc2VhcmNoTW9kZSBjaGFuZ2VzXHJcbiAgICAgICAgICBpZiAoZGF0YS5zZWFyY2hNb2RlICYmIGRhdGEuc2VhcmNoTW9kZSAhPT0gdGhpcy5wcmV2aW91c1NlYXJjaE1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGUuc2V0VmFsdWUoZGF0YS5zZWFyY2hNb2RlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hNb2RlID0gZGF0YS5zZWFyY2hNb2RlO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTdG9yZXNPckNsdXN0ZXJzKGRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgY3VycmVudGx5IHByZXZpZXdlZCBzdG9yZSBpcyBzdGlsbCBpbiB0aGUgbGlzdFxyXG4gICAgICAgICAgaWYgKGRhdGEuc3RvcmVzICYmIGRhdGEuc3RvcmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50U3RvcmVTdGlsbEluTGlzdCA9IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgJiYgXHJcbiAgICAgICAgICAgICAgZGF0YS5zdG9yZXMuc29tZSgoc3RvcmU6IFN0b3JlKSA9PiBcclxuICAgICAgICAgICAgICAgIChzdG9yZS5zdG9yZUlkIHx8IHN0b3JlLnN0b3JlTmFtZSkgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgc3RvcmUuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBJZiBjdXJyZW50IHN0b3JlIHdhcyByZW1vdmVkIG9yIG5vIHN0b3JlIGlzIHNlbGVjdGVkLCBzd2l0Y2ggdG8gZmlyc3Qgc3RvcmVcclxuICAgICAgICAgICAgaWYgKCFpc0N1cnJlbnRTdG9yZVN0aWxsSW5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3U3RvcmUgPSB0aGlzLnN0b3JlRHJvcGRvd25JdGVtc1swXTtcclxuICAgICAgICAgICAgICBpZiAobmV3U3RvcmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgPSBuZXdTdG9yZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIGZpbmRSZXNwb25zZURhdGEgYW5kIHJlcGxhY2VSZXNwb25zZURhdGEgZm9yIHRoZSBzZWxlY3RlZCBzdG9yZSBpZiBhdmFpbGFibGVcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZVN0b3JlUmVzcG9uc2VEYXRhKG5ld1N0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIExvYWQgcGxhbm9ncmFtIGZvciB0aGUgc2VsZWN0ZWQgc3RvcmVcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZShuZXdTdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuc3RvcmVzICYmIGRhdGEuc3RvcmVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAvLyBJZiBhbGwgc3RvcmVzIGFyZSByZW1vdmVkLCBjbGVhciB0aGUgcHJldmlld1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghZGF0YSAmJiB0aGlzLmlzSW5pdGlhbExvYWQpIHtcclxuICAgICAgICAgIC8vIExvYWQgaW5pdGlhbCBkYXRhIGlmIG5vIHNhdmVkIGRhdGFcclxuICAgICAgICAgIHRoaXMubG9hZFN0b3Jlc09yQ2x1c3RlcnMoKTtcclxuICAgICAgICAgIHRoaXMuaXNJbml0aWFsTG9hZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIHNhdmUgZHJhZnQgbG9hZGluZyBzdGF0ZVxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5nZXRMb2FkaW5nU3RhdGUoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGlzTG9hZGluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2aW5nRHJhZnQgPSBpc0xvYWRpbmc7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciBtb2RlIGNoYW5nZXNcclxuICAgIHRoaXMuc2VsZWN0ZWRNb2RlLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKG5ld01vZGUpID0+IHtcclxuICAgICAgICBpZiAobmV3TW9kZSAhPT0gdGhpcy5wcmV2aW91c1NlYXJjaE1vZGUgJiYgIXRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzU2VhcmNoTW9kZSA9IG5ld01vZGUgYXMgJ3N0b3JlJyB8ICdjbHVzdGVyJztcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gR2V0IGN1cnJlbnQgZGF0YSB0byBwcmVzZXJ2ZSBzZWxlY3RlZENsdXN0ZXJzIGlmIHN3aXRjaGluZyB0byBjbHVzdGVyIG1vZGVcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5kYXRhU2VydmljZS5nZXRDdXJyZW50RGF0YSgpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBVcGRhdGUgZGF0YSBzZXJ2aWNlIHdpdGggbmV3IHNlYXJjaE1vZGVcclxuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IFxyXG4gICAgICAgICAgICBzZWFyY2hNb2RlOiBuZXdNb2RlIGFzICdzdG9yZScgfCAnY2x1c3RlcicsXHJcbiAgICAgICAgICAgIHN0b3JlczogW10sIC8vIENsZWFyIHN0b3JlcyB3aGVuIG1vZGUgY2hhbmdlc1xyXG4gICAgICAgICAgICBzZWxlY3RlZENsdXN0ZXJzOiBuZXdNb2RlID09PSAnc3RvcmUnID8gdW5kZWZpbmVkIDogY3VycmVudERhdGE/LnNlbGVjdGVkQ2x1c3RlcnNcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLmxvYWRTdG9yZXNPckNsdXN0ZXJzKCk7XHJcbiAgICAgICAgICAvLyBDbGVhciBzZWxlY3RlZCBzdG9yZXMgd2hlbiBtb2RlIGNoYW5nZXMgbWFudWFsbHlcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbXTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gQ2xlYXIgcHJldmlldyB3aGVuIG1vZGUgY2hhbmdlc1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVWYWx1ZXMoKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmNsZWFyKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFJlc2V0IGZsYWdzXHJcbiAgICAgICAgICB0aGlzLmZpbmRFeGVjdXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciB0YXJnZXQgY2hhbmdlcyAtIGRlYm91bmNlIHRvIHByZXZlbnQgZXhjZXNzaXZlIHVwZGF0ZXNcclxuICAgIHRoaXMudGFyZ2V0LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlICYmICF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgdGFyZ2V0OiB2YWx1ZSBhcyAnbWVyY2gnIHwgJ3ZtJyB8ICdib3RoJyB9KTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBXYXRjaCBmb3IgZmluZCBwcm9tcHQgY2hhbmdlcyAtIGRlYm91bmNlIHRvIHByZXZlbnQgZXhjZXNzaXZlIHVwZGF0ZXNcclxuICAgIHRoaXMuZmluZFByb21wdC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIC8vIFJlc2V0IGZpbmRFeGVjdXRlZCBmbGFnIHdoZW4gdXNlciBlZGl0cyB0aGUgZmluZCBwcm9tcHRcclxuICAgICAgICBpZiAodGhpcy5maW5kRXhlY3V0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZmluZEV4ZWN1dGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFJlc2V0IGlzRmluZFByb21wdEZyb21BcGkgZmxhZyB3aGVuIHVzZXIgZWRpdHMgdGhlIGZpbmQgcHJvbXB0XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGaW5kUHJvbXB0RnJvbUFwaSkge1xyXG4gICAgICAgICAgdGhpcy5pc0ZpbmRQcm9tcHRGcm9tQXBpID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UpIHtcclxuICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IGZpbmRQcm9tcHQ6IHZhbHVlIHx8ICcnIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciByZXBsYWNlIHByb21wdCBjaGFuZ2VzIC0gZGVib3VuY2UgdG8gcHJldmVudCBleGNlc3NpdmUgdXBkYXRlc1xyXG4gICAgdGhpcy5yZXBsYWNlUHJvbXB0LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgLy8gUmVzZXQgcmVwbGFjZUV4ZWN1dGVkIGZsYWcgd2hlbiB1c2VyIGVkaXRzIHRoZSByZXBsYWNlIHByb21wdFxyXG4gICAgICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UpIHtcclxuICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IHJlcGxhY2VQcm9tcHQ6IHZhbHVlIHx8ICcnIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciByZXBsYWNlQnJhbmQgY2hhbmdlcyAoZm9ybSBjb250cm9sIGhvbGRzIHRoZSBicmFuZCBfaWQpXHJcbiAgICB0aGlzLnJlcGxhY2VCcmFuZC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZUJyYW5kOiB0aGlzLmdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciByZXBsYWNlVm0gY2hhbmdlcyAoZm9ybSBjb250cm9sIGhvbGRzIHRoZSB2bSBfaWQpXHJcbiAgICB0aGlzLnJlcGxhY2VWbS52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZVZtOiB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVwbGFjZUJyYW5kU2VsZWN0aW9uKCk6IHsgX2lkOiBzdHJpbmc7IGJyYW5kTmFtZTogc3RyaW5nIH0gfCBudWxsIHtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5yZXBsYWNlQnJhbmQudmFsdWU7XHJcbiAgICBpZiAoIWlkKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5icmFuZExpc3QuZmluZCgoYjogYW55KSA9PiBiLl9pZCA9PT0gaWQpO1xyXG4gICAgcmV0dXJuIGZvdW5kID8geyBfaWQ6IGZvdW5kLl9pZCwgYnJhbmROYW1lOiBmb3VuZC5icmFuZE5hbWUgfSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRSZXBsYWNlVm1TZWxlY3Rpb24oKTogeyBfaWQ6IHN0cmluZzsgdm1OYW1lOiBzdHJpbmc7IHZtVHlwZT86IHN0cmluZzsgdm1CcmFuZD86IHN0cmluZyB9IHwgbnVsbCB7XHJcbiAgICBjb25zdCBpZCA9IHRoaXMucmVwbGFjZVZtLnZhbHVlO1xyXG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBmb3VuZCA9IHRoaXMucmVwbGFjZVZtTGlzdC5maW5kKCh2OiBhbnkpID0+IHYuX2lkID09PSBpZCk7XHJcbiAgICByZXR1cm4gZm91bmRcclxuICAgICAgPyB7IF9pZDogZm91bmQuX2lkLCB2bU5hbWU6IGZvdW5kLnZtTmFtZSwgdm1UeXBlOiBmb3VuZC52bVR5cGUsIHZtQnJhbmQ6IGZvdW5kLnZtQnJhbmQgfVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRSZXBsYWNlTGlicmFyaWVzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNsaWVudElkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCF0aGlzLmJyYW5kTGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFJlcGxhY2VCcmFuZExpc3QodGhpcy5jbGllbnRJZClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uY29kZSA9PT0gMjAwICYmIEFycmF5LmlzQXJyYXkocmVzPy5kYXRhKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYnJhbmRMaXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgICAgLy8gU3luYyB0aGUgZGF0YSBzZXJ2aWNlIHdpdGggdGhlIHJlc29sdmVkIG9iamVjdCBub3cgdGhhdCB0aGUgbGlzdCBpcyBhdmFpbGFibGVcclxuICAgICAgICAgICAgICBpZiAodGhpcy5yZXBsYWNlQnJhbmQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IHJlcGxhY2VCcmFuZDogdGhpcy5nZXRSZXBsYWNlQnJhbmRTZWxlY3Rpb24oKSB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBicmFuZCBsaXN0OicsIGVycilcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucmVwbGFjZVZtTGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFJlcGxhY2VWbUxpc3QodGhpcy5jbGllbnRJZClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uY29kZSA9PT0gMjAwICYmIEFycmF5LmlzQXJyYXkocmVzPy5kYXRhKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVwbGFjZVZtTGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnJlcGxhY2VWbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZVZtOiB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHJlcGxhY2Ugdm0gbGlzdDonLCBlcnIpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZWVkc1JlcGxhY2VCcmFuZCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHQgPSB0aGlzLnRhcmdldC52YWx1ZTtcclxuICAgIHJldHVybiB0ID09PSAnbWVyY2gnIHx8IHQgPT09ICdib3RoJztcclxuICB9XHJcblxyXG4gIG5lZWRzUmVwbGFjZVZtKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdCA9IHRoaXMudGFyZ2V0LnZhbHVlO1xyXG4gICAgcmV0dXJuIHQgPT09ICd2bScgfHwgdCA9PT0gJ2JvdGgnO1xyXG4gIH1cclxuXHJcbiAgaGFzUmVwbGFjZVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgJiYgIXRoaXMucmVwbGFjZUJyYW5kLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm5lZWRzUmVwbGFjZVZtKCkgJiYgIXRoaXMucmVwbGFjZVZtLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgfHwgdGhpcy5uZWVkc1JlcGxhY2VWbSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXN0b3JlRm9ybVZhbHVlcyhkYXRhOiBGaW5kUmVwbGFjZSk6IHZvaWQge1xyXG4gICAgLy8gUmVzdG9yZSBzZWFyY2hNb2RlXHJcbiAgICBpZiAoZGF0YS5zZWFyY2hNb2RlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlLnNldFZhbHVlKGRhdGEuc2VhcmNoTW9kZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLnByZXZpb3VzU2VhcmNoTW9kZSA9IGRhdGEuc2VhcmNoTW9kZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gUmVzdG9yZSB0YXJnZXRcclxuICAgIGlmIChkYXRhLnRhcmdldCkge1xyXG4gICAgICB0aGlzLnRhcmdldC5zZXRWYWx1ZShkYXRhLnRhcmdldCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBSZXN0b3JlIGZpbmRQcm9tcHRcclxuICAgIGlmIChkYXRhLmZpbmRQcm9tcHQpIHtcclxuICAgICAgdGhpcy5maW5kUHJvbXB0LnNldFZhbHVlKGRhdGEuZmluZFByb21wdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLmlzRmluZFByb21wdEZyb21BcGkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBSZXN0b3JlIHJlcGxhY2VQcm9tcHRcclxuICAgIGlmIChkYXRhLnJlcGxhY2VQcm9tcHQpIHtcclxuICAgICAgdGhpcy5yZXBsYWNlUHJvbXB0LnNldFZhbHVlKGRhdGEucmVwbGFjZVByb21wdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc3RvcmUgcmVwbGFjZUJyYW5kIC8gcmVwbGFjZVZtIOKAlCBmb3JtIGNvbnRyb2xzIGhvbGQgdGhlIF9pZCBvbmx5XHJcbiAgICBpZiAoZGF0YS5yZXBsYWNlQnJhbmQ/Ll9pZCkge1xyXG4gICAgICB0aGlzLnJlcGxhY2VCcmFuZC5zZXRWYWx1ZShkYXRhLnJlcGxhY2VCcmFuZC5faWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGlmIChkYXRhLnJlcGxhY2VWbT8uX2lkKSB7XHJcbiAgICAgIHRoaXMucmVwbGFjZVZtLnNldFZhbHVlKGRhdGEucmVwbGFjZVZtLl9pZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBMb2FkIHN0b3Jlcy9jbHVzdGVycyBhbmQgcmVzdG9yZSBzZWxlY3Rpb25zXHJcbiAgICBpZiAoZGF0YS5zZWFyY2hNb2RlKSB7XHJcbiAgICAgIHRoaXMubG9hZFN0b3Jlc09yQ2x1c3RlcnMoZGF0YSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRTdG9yZXNPckNsdXN0ZXJzKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFNldCBpbml0aWFsIHNlbGVjdGVkIHN0b3JlIGZvciBwcmV2aWV3XHJcbiAgICBpZiAoZGF0YS5zdG9yZXMgJiYgZGF0YS5zdG9yZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBTa2lwIHBsYW5vZ3JhbSBsb2FkIGhlcmUgYXMgd2UnbGwgbG9hZCBpdCBleHBsaWNpdGx5IGJlbG93XHJcbiAgICAgIHRoaXMudXBkYXRlU3RvcmVEcm9wZG93bkl0ZW1zKHRydWUpO1xyXG4gICAgICBpZiAodGhpcy5zdG9yZURyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgPSB0aGlzLnN0b3JlRHJvcGRvd25JdGVtc1swXTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVWYWx1ZXMoKTtcclxuICAgICAgICAvLyBMb2FkIHBsYW5vZ3JhbSBhZnRlciB2aWV3IGlzIGluaXRpYWxpemVkXHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZUNhbnZhcygpICYmIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGxhbm9ncmFtRm9yU3RvcmUodGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUmV0cnkgaWYgY2FudmFzIG5vdCByZWFkeVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkgJiYgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUGxhbm9ncmFtRm9yU3RvcmUodGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuaXNJbml0aWFsTG9hZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdG9yZURyb3Bkb3duSXRlbXMoc2tpcFBsYW5vZ3JhbUxvYWQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzKSB7XHJcbiAgICAgIHRoaXMuc3RvcmVEcm9wZG93bkl0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZVZhbHVlcyA9IFtdO1xyXG4gICAgICAvLyBJZiBubyBzdG9yZXMsIGNsZWFyIHByZXZpZXdcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5maW5kUmVwbGFjZURhdGEuc3RvcmVzLm1hcCgoc3RvcmU6IFN0b3JlKSA9PiAoe1xyXG4gICAgICBzdG9yZUlkOiBzdG9yZS5zdG9yZUlkIHx8IHN0b3JlLnN0b3JlTmFtZSxcclxuICAgICAgc3RvcmVOYW1lOiBzdG9yZS5zdG9yZU5hbWUsXHJcbiAgICAgIF9pZDogc3RvcmUuc3RvcmVJZCB8fCBzdG9yZS5zdG9yZU5hbWVcclxuICAgIH0pKTtcclxuICAgIFxyXG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudGx5IHByZXZpZXdlZCBzdG9yZSBpcyBzdGlsbCBpbiB0aGUgbGlzdFxyXG4gICAgY29uc3QgaXNDdXJyZW50U3RvcmVTdGlsbEluTGlzdCA9IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgJiYgXHJcbiAgICAgIG5ld0l0ZW1zLnNvbWUoKGl0ZW06IGFueSkgPT4gXHJcbiAgICAgICAgaXRlbS5zdG9yZUlkID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlSWQgfHxcclxuICAgICAgICBpdGVtLnN0b3JlTmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVcclxuICAgICAgKTtcclxuICAgIFxyXG4gICAgLy8gT25seSB1cGRhdGUgaWYgaXRlbXMgYWN0dWFsbHkgY2hhbmdlZFxyXG4gICAgY29uc3QgaXRlbXNDaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkobmV3SXRlbXMpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLnN0b3JlRHJvcGRvd25JdGVtcyk7XHJcbiAgICBpZiAoaXRlbXNDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuc3RvcmVEcm9wZG93bkl0ZW1zID0gbmV3SXRlbXM7XHJcbiAgICAgIFxyXG4gICAgICAvLyBJZiBjdXJyZW50IHN0b3JlIHdhcyByZW1vdmVkLCBzd2l0Y2ggdG8gZmlyc3Qgc3RvcmUgaW4gdGhlIGxpc3RcclxuICAgICAgaWYgKCFpc0N1cnJlbnRTdG9yZVN0aWxsSW5MaXN0ICYmIG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBmaXJzdFN0b3JlID0gbmV3SXRlbXNbMF07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyA9IGZpcnN0U3RvcmU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUmVzdG9yZSBmaW5kUmVzcG9uc2VEYXRhIGFuZCByZXBsYWNlUmVzcG9uc2VEYXRhIGZvciB0aGUgc2VsZWN0ZWQgc3RvcmUgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgdGhpcy5yZXN0b3JlU3RvcmVSZXNwb25zZURhdGEoZmlyc3RTdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIExvYWQgcGxhbm9ncmFtIGZvciB0aGUgbmV3IHN0b3JlICh1bmxlc3Mgc2tpcHBlZCBkdXJpbmcgaW5pdGlhbCByZXN0b3JlKVxyXG4gICAgICAgIGlmICghc2tpcFBsYW5vZ3JhbUxvYWQpIHtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZShmaXJzdFN0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZVZhbHVlcyA9IFt0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZVZhbHVlcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gQ2FudmFzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2hlbiBzdG9yZSBpcyBzZWxlY3RlZCBhbmQgY2FudmFzIGVsZW1lbnQgaXMgYXZhaWxhYmxlXHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplQ2FudmFzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMucHJldmlld0NhbnZhcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gQWxyZWFkeSBpbml0aWFsaXplZFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzUmVmPy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Q2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXModGhpcy5wcmV2aWV3Q2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgICAgIHNlbGVjdGlvbkZ1bGx5Q29udGFpbmVkOiB0cnVlLFxyXG4gICAgICAgICAgcGVyUGl4ZWxUYXJnZXRGaW5kOiB0cnVlLFxyXG4gICAgICAgICAgdGFyZ2V0RmluZFRvbGVyYW5jZTogNSxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldHVwWm9vbUhhbmRsZXJzKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIGNhbnZhczonLCBlcnJvcik7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvblN0b3JlU2VsZWN0ZWRGb3JQcmV2aWV3KHN0b3JlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChzdG9yZSAmJiAoIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgfHwgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZUlkICE9PSBzdG9yZS5zdG9yZUlkKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gc3RvcmU7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2xlYXIgc2VsZWN0ZWQgZml4dHVyZSB3aGVuIHN3aXRjaGluZyBzdG9yZXNcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuY2xlYXIoKTsgLy8gQ2xlYXIgdGhlIG1hcCB3aGVuIHN3aXRjaGluZyBzdG9yZXNcclxuICAgICAgXHJcbiAgICAgIC8vIFJlc3RvcmUgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSBmb3IgdGhlIHNlbGVjdGVkIHN0b3JlIGlmIGF2YWlsYWJsZVxyXG4gICAgICB0aGlzLnJlc3RvcmVTdG9yZVJlc3BvbnNlRGF0YShzdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICBcclxuICAgICAgLy8gRm9yY2UgY2hhbmdlIGRldGVjdGlvbiB0byBlbnN1cmUgY2FudmFzIGVsZW1lbnQgaXMgaW4gRE9NXHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEluaXRpYWxpemUgY2FudmFzIGlmIG5vdCBhbHJlYWR5IGRvbmUsIHRoZW4gbG9hZCBwbGFub2dyYW1cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZUNhbnZhcygpKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZShzdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBSZXRyeSBhZnRlciBhIHNob3J0IGRlbGF5IGlmIGNhbnZhcyBlbGVtZW50IG5vdCByZWFkeVxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVDYW52YXMoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZFBsYW5vZ3JhbUZvclN0b3JlKHN0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCA1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZXN0b3JlIGZpbmRSZXNwb25zZURhdGEgYW5kIHJlcGxhY2VSZXNwb25zZURhdGEgZm9yIGEgc3BlY2lmaWMgc3RvcmVcclxuICBwcml2YXRlIHJlc3RvcmVTdG9yZVJlc3BvbnNlRGF0YShzdG9yZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLnN0b3Jlcy5maW5kKFxyXG4gICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSBzdG9yZU5hbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFzdG9yZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmluZFJlc3BvbnNlRGF0YSBpcyBhIHN0cmluZyAoZml4dHVyZSBfaWQpXHJcbiAgICAvLyByZXBsYWNlUmVzcG9uc2VEYXRhIGlzIGFuIG9iamVjdCB3aXRoIHZtQ29uZmlnIGFuZC9vciBzaGVsZkNvbmZpZ1xyXG4gICAgY29uc3QgZml4dHVyZUlkID0gc3RvcmUuZmluZFJlc3BvbnNlRGF0YTtcclxuICAgIGlmICghZml4dHVyZUlkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7IGZpeHR1cmVJZCwgZml4dHVyZVR5cGU6IHVuZGVmaW5lZCB9O1xyXG4gICAgLy8gV2UnbGwgcmUtaHlkcmF0ZSBzZWxlY3RlZEZpeHR1cmVEYXRhIGZyb20gdGhlIGxvYWRlZCBwbGFub2dyYW0gKGZsb29yRGF0YSkgYWZ0ZXIgbG9hZC5cclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBBcHBseSBzdG9yZWQgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSB0byBmbG9vciBkYXRhXHJcbiAgcHJpdmF0ZSBhcHBseVN0b3JlZFJlc3BvbnNlRGF0YSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3JlcyB8fCAhdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyB8fCAhdGhpcy5mbG9vckRhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5maW5kUmVwbGFjZURhdGEuc3RvcmVzLmZpbmQoXHJcbiAgICAgIChzOiBTdG9yZSkgPT4gcy5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghc3RvcmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZpbmRSZXNwb25zZURhdGEgaXMgYSBzdHJpbmcgKGZpeHR1cmUgX2lkKSAtIHVzZSBpdCB0byBmaW5kIHRoZSBmaXh0dXJlXHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSBzdG9yZS5maW5kUmVzcG9uc2VEYXRhO1xyXG4gICAgaWYgKCFmaXh0dXJlSWQpIHJldHVybjtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBmaXh0dXJlIGluIGZsb29yRGF0YVxyXG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkKTtcclxuICAgIGlmICghZml4dHVyZSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIEFwcGx5IHJlcGxhY2VSZXNwb25zZURhdGEgY29uZmlncyBpZiBhdmFpbGFibGUgKG1lcmdlIHdpdGggZXhpc3RpbmcgZml4dHVyZSlcclxuICAgIGlmIChzdG9yZS5yZXBsYWNlUmVzcG9uc2VEYXRhKSB7XHJcbiAgICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBmaXh0dXJlIChiZWZvcmUgcmVwbGFjZSkgZm9yIGJlZm9yZS9hZnRlciBjb21wYXJpc29uXHJcbiAgICAgIC8vIE9ubHkgc3RvcmUgaWYgbm90IGFscmVhZHkgaW4gbWFwIChwcmVzZXJ2ZSBpbml0aWFsIHBsYW5vZ3JhbSBmaXh0dXJlKVxyXG4gICAgICBpZiAoIXRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRml4dHVyZSA9IHN0cnVjdHVyZWRDbG9uZShmaXh0dXJlKTtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuc2V0KGZpeHR1cmVJZCwgb3JpZ2luYWxGaXh0dXJlKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsRml4dHVyZURhdGEgZnJvbSBtYXAgdG8gZW5zdXJlIGl0J3MgYWx3YXlzIHRoZSBpbml0aWFsIHBsYW5vZ3JhbSBmaXh0dXJlXHJcbiAgICAgIGNvbnN0IHN0b3JlZE9yaWdpbmFsID0gdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmdldChmaXh0dXJlSWQpO1xyXG4gICAgICBpZiAoc3RvcmVkT3JpZ2luYWwpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoc3RvcmVkT3JpZ2luYWwpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCB1cGRhdGVkRml4dHVyZTogYW55ID0geyAuLi5maXh0dXJlIH07XHJcbiAgICAgIFxyXG4gICAgICAvLyBNZXJnZSB2bUNvbmZpZyBpZiBwcmVzZW50IGluIHJlcGxhY2VSZXNwb25zZURhdGFcclxuICAgICAgaWYgKHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEudm1Db25maWcpIHtcclxuICAgICAgICB1cGRhdGVkRml4dHVyZS52bUNvbmZpZyA9IHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEudm1Db25maWc7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIE1lcmdlIHNoZWxmQ29uZmlnIGlmIHByZXNlbnQgaW4gcmVwbGFjZVJlc3BvbnNlRGF0YVxyXG4gICAgICBpZiAoc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIHVwZGF0ZWRGaXh0dXJlLnNoZWxmQ29uZmlnID0gc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS5zaGVsZkNvbmZpZztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBmaXh0dXJlIGluIGZsb29yRGF0YVxyXG4gICAgICB0aGlzLnVwZGF0ZUFpUmVzcG9uc2VGaXh0dXJlKHVwZGF0ZWRGaXh0dXJlKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFNldCBzZWxlY3RlZCBmaXh0dXJlIGRhdGEgKGFmdGVyIHJlcGxhY2UpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgIGZpeHR1cmVJZDogdXBkYXRlZEZpeHR1cmUuX2lkLFxyXG4gICAgICAgIGZpeHR1cmVUeXBlOiB1cGRhdGVkRml4dHVyZS5maXh0dXJlVHlwZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gdXBkYXRlZEZpeHR1cmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBObyByZXBsYWNlUmVzcG9uc2VEYXRhLCBjbGVhciBvcmlnaW5hbCBmaXh0dXJlIGFuZCBqdXN0IHNldCB0aGUgc2VsZWN0ZWQgZml4dHVyZSBmcm9tIGZpbmRSZXNwb25zZURhdGFcclxuICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgZml4dHVyZUlkOiBmaXh0dXJlLl9pZCxcclxuICAgICAgICBmaXh0dXJlVHlwZTogZml4dHVyZS5maXh0dXJlVHlwZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gZml4dHVyZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkOiBzdHJpbmcpOiBhbnkgfCBudWxsIHtcclxuICAgIGlmICghZml4dHVyZUlkIHx8ICF0aGlzLmZsb29yRGF0YSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24gfHwgW10pIHtcclxuICAgICAgaWYgKGVsZW1lbnQ/LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBBcnJheS5pc0FycmF5KGVsZW1lbnQuZml4dHVyZXMpKSB7XHJcbiAgICAgICAgY29uc3QgaGl0ID0gZWxlbWVudC5maXh0dXJlcy5maW5kKChmeDogYW55KSA9PiBmeD8uX2lkID09PSBmaXh0dXJlSWQpO1xyXG4gICAgICAgIGlmIChoaXQpIHJldHVybiBoaXQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGZ4IG9mIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgfHwgW10pIHtcclxuICAgICAgaWYgKGZ4Py5faWQgPT09IGZpeHR1cmVJZCkgcmV0dXJuIGZ4O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZFBsYW5vZ3JhbUZvclN0b3JlKHN0b3JlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXN0b3JlTmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0Nhbm5vdCBsb2FkIHBsYW5vZ3JhbTogc3RvcmVOYW1lIG5vdCBhdmFpbGFibGUnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBQcmV2ZW50IGR1cGxpY2F0ZSBjb25jdXJyZW50IGNhbGxzXHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdQbGFub2dyYW0pIHtcclxuICAgICAgY29uc29sZS5sb2coJ1BsYW5vZ3JhbSBsb2FkIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHNraXBwaW5nIGR1cGxpY2F0ZSBjYWxsJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLnByZXZpZXdDYW52YXMpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdDYW52YXMgbm90IGluaXRpYWxpemVkLCBhdHRlbXB0aW5nIHRvIGluaXRpYWxpemUuLi4nKTtcclxuICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVDYW52YXMoKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIGNhbnZhcycpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gR2V0IHBsYW5vSWQgZnJvbSBzdG9yZSBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0UGxhbm9JZCh7IHN0b3JlczogW3N0b3JlTmFtZS50b1VwcGVyQ2FzZSgpXSB9KS50b1Byb21pc2UoKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwICYmIHJlc3BvbnNlPy5kYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcGxhbm9JZCA9IHJlc3BvbnNlLmRhdGFbMF0uX2lkO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyhwbGFub0lkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ05vIHBsYW5vZ3JhbSBmb3VuZCBmb3Igc3RvcmU6Jywgc3RvcmVOYW1lKTtcclxuICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBwbGFub2dyYW06JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmdQbGFub2dyYW0gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFN0b3Jlc09yQ2x1c3RlcnMoc2F2ZWREYXRhPzogRmluZFJlcGxhY2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaE1vZGUgPSB0aGlzLnNlbGVjdGVkTW9kZS52YWx1ZSBhcyAnc3RvcmUnIHwgJ2NsdXN0ZXInO1xyXG4gICAgaWYgKCFzZWFyY2hNb2RlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRTdG9yZU9yQ2x1c3Rlckxpc3QoeyBzZWFyY2hNb2RlIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5jb2RlID09PSAyMDAgJiYgcmVzcG9uc2U/LmRhdGEgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZS5kYXRhKSkge1xyXG4gICAgICAgICAgICBpZiAoc2VhcmNoTW9kZSA9PT0gJ3N0b3JlJykge1xyXG4gICAgICAgICAgICAgIC8vIEZvciBzdG9yZSBtb2RlLCB1c2UgZGF0YSBkaXJlY3RseVxyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gcmVzcG9uc2UuZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWxcclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jbHVzdGVyRGF0YSA9IFtdOyAvLyBDbGVhciBjbHVzdGVyIGRhdGFcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvLyBSZXN0b3JlIHNhdmVkIHNlbGVjdGlvbnMgZm9yIHN0b3JlIG1vZGVcclxuICAgICAgICAgICAgICBpZiAoc2F2ZWREYXRhPy5zdG9yZXMgJiYgc2F2ZWREYXRhLnN0b3Jlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVTdG9yZVNlbGVjdGlvbnMoc2F2ZWREYXRhLnN0b3Jlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIEZvciBjbHVzdGVyIG1vZGUsIHNob3cgY2x1c3RlcnMgaW4gdGhlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgLy8gU3RvcmUgZnVsbCBjbHVzdGVyIGRhdGEgZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgICAgICAgIHRoaXMuY2x1c3RlckRhdGEgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gcmVzcG9uc2UuZGF0YS5tYXAoKGNsdXN0ZXI6IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGlkOiBjbHVzdGVyLmlkLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGNsdXN0ZXIubGFiZWxcclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gUmVzdG9yZSBzYXZlZCBzZWxlY3Rpb25zIGZvciBjbHVzdGVyIG1vZGVcclxuICAgICAgICAgICAgICBpZiAoc2F2ZWREYXRhPy5zdG9yZXMgJiYgc2F2ZWREYXRhLnN0b3Jlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVDbHVzdGVyU2VsZWN0aW9ucyhzYXZlZERhdGEuc3RvcmVzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2x1c3RlckRhdGEgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBzdG9yZXMvY2x1c3RlcnM6JywgZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzdG9yZVN0b3JlU2VsZWN0aW9ucyhzYXZlZFN0b3JlczogU3RvcmVbXSk6IHZvaWQge1xyXG4gICAgLy8gTWF0Y2ggc2F2ZWQgc3RvcmVzIGJ5IHN0b3JlTmFtZVxyXG4gICAgY29uc3Qgc2F2ZWRTdG9yZU5hbWVzID0gbmV3IFNldChzYXZlZFN0b3Jlcy5tYXAocyA9PiBzLnN0b3JlTmFtZSkpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IHRoaXMuc3RvcmVPcHRpb25zLmZpbHRlcihvcHRpb24gPT4gXHJcbiAgICAgIHNhdmVkU3RvcmVOYW1lcy5oYXMob3B0aW9uLmxhYmVsKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlc3RvcmVDbHVzdGVyU2VsZWN0aW9ucyhfc2F2ZWRTdG9yZXM6IFN0b3JlW10pOiB2b2lkIHtcclxuICAgIC8vIFJlc3RvcmUgY2x1c3RlciBzZWxlY3Rpb24gT05MWSBmcm9tIHNlbGVjdGVkQ2x1c3RlcnMgKG5vIGRlcml2YXRpb24gZnJvbSBzdG9yZXMpXHJcbiAgICBjb25zdCBzYXZlZENsdXN0ZXJzID0gdGhpcy5maW5kUmVwbGFjZURhdGE/LnNlbGVjdGVkQ2x1c3RlcnMgfHwgW107XHJcbiAgICBpZiAoIXNhdmVkQ2x1c3RlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNhdmVkQ2x1c3RlcklkcyA9IG5ldyBTZXQoc2F2ZWRDbHVzdGVycy5tYXAoYyA9PiBjLmlkKSk7XHJcbiAgICBjb25zdCBzZWxlY3RlZENsdXN0ZXJzOiBTdG9yZU9wdGlvbltdID0gW107XHJcblxyXG4gICAgdGhpcy5jbHVzdGVyRGF0YS5mb3JFYWNoKChjbHVzdGVyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHNhdmVkQ2x1c3Rlcklkcy5oYXMoY2x1c3Rlci5pZCkpIHtcclxuICAgICAgICBzZWxlY3RlZENsdXN0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgaWQ6IGNsdXN0ZXIuaWQsXHJcbiAgICAgICAgICBsYWJlbDogY2x1c3Rlci5sYWJlbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gc2VsZWN0ZWRDbHVzdGVycztcclxuICB9XHJcblxyXG4gIG9uU3RvcmVzU2VsZWN0ZWQoc3RvcmVzOiBTdG9yZU9wdGlvbltdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gc3RvcmVzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25SZXZpZXdBbmRSZXBsYWNlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uX2lkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZpbmQgcmVwbGFjZSBJRCBhdmFpbGFibGUnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNob3cgY29uZmlybWF0aW9uIG1vZGFsXHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQmF0Y2hDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogJ21kJyxcclxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICB3aW5kb3dDbGFzczogJ2JhdGNoLWNvbmZpcm1hdGlvbi1tb2RhbCdcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFBhc3Mgc3RvcmUgY291bnQgdG8gbW9kYWxcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnN0b3JlQ291bnQgPSB0aGlzLmdldFN0b3JlQ291bnQoKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RhbFJlZi5yZXN1bHQ7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAvLyBVc2VyIGNvbmZpcm1lZCwgcHJvY2VlZCB3aXRoIGJhdGNoIHByb2Nlc3NcclxuICAgICAgICB0aGlzLnByb2NlZWRXaXRoQmF0Y2hQcm9jZXNzKCk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vIFVzZXIgZGlzbWlzc2VkIHRoZSBtb2RhbFxyXG4gICAgICBjb25zb2xlLmxvZygnQmF0Y2ggY29uZmlybWF0aW9uIG1vZGFsIGRpc21pc3NlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZWVkV2l0aEJhdGNoUHJvY2VzcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUmVwbGFjZURhdGE/Ll9pZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyBmaW5kIHJlcGxhY2UgSUQgYXZhaWxhYmxlJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5iYXRjaFByb2Nlc3NpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgZmluZFJlcGxhY2VJZCA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLl9pZDtcclxuICAgIFxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmJhdGNoRmluZFJlcGxhY2UoeyBmaW5kUmVwbGFjZUlkIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5iYXRjaFByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vIFJlZmV0Y2ggZmluZCByZXBsYWNlIGRhdGEgdG8gdXBkYXRlIFVJXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UubG9hZEFuZFNldEZpbmRSZXBsYWNlRGF0YUJ5SWQoZmluZFJlcGxhY2VJZCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgYmF0Y2ggZmluZCByZXBsYWNlOicsIHJlc3BvbnNlPy5tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5iYXRjaFByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIGJhdGNoIGZpbmQgcmVwbGFjZTonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQXBwbHkoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWFyY2hNb2RlID0gdGhpcy5zZWxlY3RlZE1vZGUudmFsdWUgYXMgJ3N0b3JlJyB8ICdjbHVzdGVyJztcclxuICAgIGxldCBzdG9yZXM6IFN0b3JlW10gPSBbXTtcclxuICAgIGxldCBzZWxlY3RlZENsdXN0ZXJzOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgICBcclxuICAgIGlmIChzZWFyY2hNb2RlID09PSAnc3RvcmUnKSB7XHJcbiAgICAgIC8vIEZvciBzdG9yZSBtb2RlLCBjb252ZXJ0IHNlbGVjdGVkIHN0b3JlcyBkaXJlY3RseVxyXG4gICAgICBzdG9yZXMgPSB0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcCgoc3RvcmVPcHRpb246IFN0b3JlT3B0aW9uKSA9PiAoe1xyXG4gICAgICAgIHN0b3JlTmFtZTogc3RvcmVPcHRpb24ubGFiZWwsXHJcbiAgICAgIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZvciBjbHVzdGVyIG1vZGUsIHNhdmUgc2VsZWN0ZWQgY2x1c3RlcnMgYW5kIGV4dHJhY3QgYWxsIHN0b3JlcyBmcm9tIHNlbGVjdGVkIGNsdXN0ZXJzXHJcbiAgICAgIHNlbGVjdGVkQ2x1c3RlcnMgPSB0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcCgoc3RvcmVPcHRpb246IFN0b3JlT3B0aW9uKSA9PiAoe1xyXG4gICAgICAgIGlkOiBzdG9yZU9wdGlvbi5pZCxcclxuICAgICAgICBsYWJlbDogc3RvcmVPcHRpb24ubGFiZWxcclxuICAgICAgfSkpO1xyXG4gICAgICBcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDbHVzdGVySWRzID0gbmV3IFNldCh0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcChzID0+IHMuaWQpKTtcclxuICAgICAgc3RvcmVzID0gW107XHJcbiAgICAgIFxyXG4gICAgICAvLyBGaW5kIHNlbGVjdGVkIGNsdXN0ZXJzIGFuZCBleHRyYWN0IHRoZWlyIHN0b3Jlc1xyXG4gICAgICB0aGlzLmNsdXN0ZXJEYXRhLmZvckVhY2goKGNsdXN0ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZENsdXN0ZXJJZHMuaGFzKGNsdXN0ZXIuaWQpICYmIGNsdXN0ZXIuc3RvcmVzICYmIEFycmF5LmlzQXJyYXkoY2x1c3Rlci5zdG9yZXMpKSB7XHJcbiAgICAgICAgICBjbHVzdGVyLnN0b3Jlcy5mb3JFYWNoKChzdG9yZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHN0b3Jlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBzdG9yZU5hbWU6IHN0b3JlLmxhYmVsICxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBkYXRhIHNlcnZpY2Ugd2l0aCBhbGwgY3VycmVudCB2YWx1ZXNcclxuICAgIGNvbnN0IHVwZGF0ZURhdGE6IGFueSA9IHtcclxuICAgICAgc2VhcmNoTW9kZTogc2VhcmNoTW9kZSxcclxuICAgICAgc3RvcmVzOiBzdG9yZXMsXHJcbiAgICAgIHN0b3JlQ291bnQ6IHN0b3Jlcy5sZW5ndGgsXHJcbiAgICAgIHRhcmdldDogdGhpcy50YXJnZXQudmFsdWUgYXMgJ21lcmNoJyB8ICd2bScgfCAnYm90aCcsXHJcbiAgICAgIGZpbmRQcm9tcHQ6IHRoaXMuZmluZFByb21wdC52YWx1ZSB8fCAnJyxcclxuICAgICAgcmVwbGFjZVByb21wdDogdGhpcy5yZXBsYWNlUHJvbXB0LnZhbHVlIHx8ICcnLFxyXG4gICAgICByZXBsYWNlQnJhbmQ6IHRoaXMuZ2V0UmVwbGFjZUJyYW5kU2VsZWN0aW9uKCksXHJcbiAgICAgIHJlcGxhY2VWbTogdGhpcy5nZXRSZXBsYWNlVm1TZWxlY3Rpb24oKVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGQgc2VsZWN0ZWRDbHVzdGVycyBvbmx5IHdoZW4gc2VhcmNoTW9kZSBpcyBjbHVzdGVyXHJcbiAgICBpZiAoc2VhcmNoTW9kZSA9PT0gJ2NsdXN0ZXInICYmIHNlbGVjdGVkQ2x1c3RlcnMpIHtcclxuICAgICAgdXBkYXRlRGF0YS5zZWxlY3RlZENsdXN0ZXJzID0gc2VsZWN0ZWRDbHVzdGVycztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEodXBkYXRlRGF0YSk7XHJcblxyXG4gICAgLy8gVHJpZ2dlciBzYXZlIGFzIGRyYWZ0XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnRyaWdnZXJTYXZlRHJhZnQoKTtcclxuICB9XHJcblxyXG4gIC8vIENhbnZhcyBzZXR1cCBtZXRob2RzXHJcbiAgc2V0dXBab29tSGFuZGxlcnMoY2FudmFzOiBmYWJyaWMuQ2FudmFzKTogdm9pZCB7XHJcbiAgICAvLyBEaXNhYmxlIG9iamVjdCBzZWxlY3Rpb24gZ2xvYmFsbHlcclxuICAgIGNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgIFxyXG4gICAgY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBsZXQgem9vbSA9IGNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuICAgICAgICB6b29tID0gTWF0aC5tYXgoMC4wNSwgTWF0aC5taW4oem9vbSwgNSkpO1xyXG4gICAgICAgIGNhbnZhcy56b29tVG9Qb2ludCh7IHg6IGUub2Zmc2V0WCwgeTogZS5vZmZzZXRZIH0gYXMgZmFicmljLlBvaW50LCB6b29tKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIGNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIC8vIEhhbmRsZSBmaXh0dXJlIGNsaWNrcyAtIHVzZSBmaW5kVGFyZ2V0IHRvIGdldCB0aGUgYWN0dWFsIGdyb3VwXHJcbiAgICAgIGlmIChvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gb3B0LnRhcmdldCBhcyBhbnk7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGZpeHR1cmUgZ3JvdXAgb3IgbmVzdGVkIHdpdGhpbiBvbmVcclxuICAgICAgICBsZXQgZml4dHVyZUdyb3VwID0gb2JqO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFRyYXZlcnNlIHVwIHRvIGZpbmQgdGhlIGZpeHR1cmUgZ3JvdXBcclxuICAgICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xyXG4gICAgICAgIHdoaWxlIChmaXh0dXJlR3JvdXAgJiYgIShmaXh0dXJlR3JvdXAgYXMgYW55KS5maXh0dXJlSWQgJiYgIShmaXh0dXJlR3JvdXAgYXMgYW55KS5vYmpUeXBlICYmIGF0dGVtcHRzIDwgMTApIHtcclxuICAgICAgICAgIGlmICgoZml4dHVyZUdyb3VwIGFzIGFueSkucGFyZW50KSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmVHcm91cCA9IChmaXh0dXJlR3JvdXAgYXMgYW55KS5wYXJlbnQ7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKChmaXh0dXJlR3JvdXAgYXMgYW55KS5ncm91cCkge1xyXG4gICAgICAgICAgICBmaXh0dXJlR3JvdXAgPSAoZml4dHVyZUdyb3VwIGFzIGFueSkuZ3JvdXA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dGVtcHRzKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGZvdW5kIGEgZml4dHVyZSBncm91cFxyXG4gICAgICAgIGlmICgoZml4dHVyZUdyb3VwIGFzIGFueSkub2JqVHlwZSA9PT0gXCJmaXh0dXJlXCIgfHwgKGZpeHR1cmVHcm91cCBhcyBhbnkpLmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgdGhpcy5vbkZpeHR1cmVDbGljayhmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gRm9yIG90aGVyIGVsZW1lbnRzLCBqdXN0IGhpZ2hsaWdodFxyXG4gICAgICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3Qob3B0LnRhcmdldCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmICghb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIGNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSAmJiAhb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBjb25zdCB2cHQgPSBjYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgdnB0WzRdICs9IGUuY2xpZW50WCAtIGxhc3RQb3NYO1xyXG4gICAgICAgIHZwdFs1XSArPSBlLmNsaWVudFkgLSBsYXN0UG9zWTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjYW52YXMub24oXCJtb3VzZTp1cFwiLCAoKSA9PiB7XHJcbiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgY2FudmFzLnNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBhbGwgb2JqZWN0IG1vdmVtZW50ICh3YWxscywgZW50cmFuY2VzLCBmaXh0dXJlcywgb3RoZXIgZWxlbWVudHMpXHJcbiAgICBjYW52YXMub24oXCJvYmplY3Q6bW92aW5nXCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gZS50YXJnZXQ7XHJcbiAgICAgIGlmIChvYmogJiYgKG9iaiBhcyBhbnkpLm9ialR5cGUpIHtcclxuICAgICAgICBlLmUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgLy8gUmVzZXQgcG9zaXRpb25cclxuICAgICAgICBvYmouc2V0Q29vcmRzKCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBhbGwgb2JqZWN0IG1vZGlmaWNhdGlvbnMgKHNjYWxpbmcsIHJvdGF0aW5nLCBldGMuKVxyXG4gICAgY2FudmFzLm9uKFwib2JqZWN0Om1vZGlmaWVkXCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gZS50YXJnZXQ7XHJcbiAgICAgIGlmIChvYmogJiYgKG9iaiBhcyBhbnkpLm9ialR5cGUpIHtcclxuICAgICAgICAvLyBSZXNldCBhbnkgY2hhbmdlc1xyXG4gICAgICAgIG9iai5zZXRDb29yZHMoKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IG9iamVjdCBzY2FsaW5nXHJcbiAgICBjYW52YXMub24oXCJvYmplY3Q6c2NhbGluZ1wiLCAoZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IGUudGFyZ2V0O1xyXG4gICAgICBpZiAob2JqICYmIChvYmogYXMgYW55KS5vYmpUeXBlKSB7XHJcbiAgICAgICAgZS5lLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIG9iai5zZXRDb29yZHMoKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IG9iamVjdCByb3RhdGluZ1xyXG4gICAgY2FudmFzLm9uKFwib2JqZWN0OnJvdGF0aW5nXCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gZS50YXJnZXQ7XHJcbiAgICAgIGlmIChvYmogJiYgKG9iaiBhcyBhbnkpLm9ialR5cGUpIHtcclxuICAgICAgICBlLmUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgb2JqLnNldENvb3JkcygpO1xyXG4gICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0U3RvcmVGaXh0dXJlcyhzdG9yZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5wcmV2aWV3Q2FudmFzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignQ2FudmFzIG5vdCBpbml0aWFsaXplZCcpO1xyXG4gICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYW52YXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRTdG9yZUZpeHR1cmVzKHsgaWQ6IFtzdG9yZUlkXSB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyZXM/LmRhdGE/LlswXT8uZmxvb3JzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucGxhbm9EYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdKTtcclxuICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdLmZsb29yc1swXSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEFwcGx5IHN0b3JlZCBmaW5kUmVzcG9uc2VEYXRhIGFuZCByZXBsYWNlUmVzcG9uc2VEYXRhIGlmIGF2YWlsYWJsZSBmb3IgdGhpcyBzdG9yZVxyXG4gICAgICAgICAgLy8gVGhpcyB1cGRhdGVzIHRoZSBmbG9vckRhdGEgd2l0aCB0aGUgc3RvcmVkIGZpeHR1cmUgY2hhbmdlcyBhbmQgc2V0cyBzZWxlY3RlZEZpeHR1cmVEYXRhXHJcbiAgICAgICAgICB0aGlzLmFwcGx5U3RvcmVkUmVzcG9uc2VEYXRhKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIE9wZW4gcGFuZWwgaWYgd2UgaGF2ZSBzZWxlY3RlZCBmaXh0dXJlIGRhdGFcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gQ29sbGVjdCBhbGwgZml4dHVyZXMgZm9yIHByZXZpZXdcclxuICAgICAgICAgIHRoaXMuY29sbGVjdEFsbEZpeHR1cmVzKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEVuc3VyZSBjYW52YXMgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlbmRlcmluZ1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnByZXZpZXdDYW52YXMpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2FudmFzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdDYW52YXMpIHtcclxuICAgICAgICAgICAgLy8gUmVuZGVyIHRoZSBwbGFub2dyYW0gd2l0aCB0aGUgdXBkYXRlZCBmbG9vckRhdGEgKHdoaWNoIGluY2x1ZGVzIHN0b3JlZCByZXNwb25zZSBkYXRhKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZS1jZW50ZXIgYW5kIGhpZ2hsaWdodCB0aGUgc2VsZWN0ZWQgZml4dHVyZSBpZiBzdG9yZWQgcmVzcG9uc2UgZGF0YSBleGlzdHNcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVDYW52YXModGhpcy5wcmV2aWV3Q2FudmFzLCB0aGlzLnByZXZpZXdDYW52YXNDb250YWluZXJSZWYpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIEhpZ2hsaWdodCB0aGUgZml4dHVyZSBpZiB3ZSBoYXZlIHN0b3JlZCByZXNwb25zZSBkYXRhXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmU/LmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICAgICApIGFzIGZhYnJpYy5Hcm91cCB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGhpcy5wcmV2aWV3Q2FudmFzLCBhY3Rpb25GaXh0dXJlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gQXV0b21hdGljYWxseSB0cmlnZ2VyIGZpbmQgYW5kIHJlcGxhY2UgaWYgcHJvbXB0cyBhcmUgYXZhaWxhYmxlIGFuZCBzdG9yZSBkb2Vzbid0IGhhdmUgcmVzdWx0c1xyXG4gICAgICAgICAgICAgIHRoaXMuYXV0b0ZpbmRBbmRSZXBsYWNlSWZOZWVkZWQoKTtcclxuICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwbGFubzonLCBlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplQ2FudmFzKGNhbnZhczogZmFicmljLkNhbnZhcywgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pik6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSBjb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgIGNhbnZhcy5zZXREaW1lbnNpb25zKHtcclxuICAgICAgd2lkdGg6IGNvbnRhaW5lckVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGNvbnRhaW5lckVsLmNsaWVudEhlaWdodCxcclxuICAgIH0pO1xyXG4gICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZChjYW52YXM6IGZhYnJpYy5DYW52YXMpIHtcclxuICAgIGlmICghY2FudmFzKSByZXR1cm47XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoY2FudmFzKTtcclxuICAgIGlmICghYm91bmRzLndpZHRoIHx8ICFib3VuZHMuaGVpZ2h0KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY2FudmFzVyA9IGNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgY2FudmFzSCA9IGNhbnZhcy5nZXRIZWlnaHQoKTtcclxuICAgIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1cgLyBib3VuZHMud2lkdGg7XHJcbiAgICBjb25zdCBzY2FsZVkgPSBjYW52YXNIIC8gYm91bmRzLmhlaWdodDtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSkgKiAwLjk7XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0VnB0ID0gWy4uLihjYW52YXMudmlld3BvcnRUcmFuc2Zvcm0gfHwgWzEsIDAsIDAsIDEsIDAsIDBdKV0gYXMgZmFicmljLlRNYXQyRDtcclxuICAgIHRhcmdldFZwdFswXSA9IHRhcmdldFpvb207XHJcbiAgICB0YXJnZXRWcHRbM10gPSB0YXJnZXRab29tO1xyXG4gICAgdGFyZ2V0VnB0WzRdID0gY2FudmFzVyAvIDIgLSAoYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyKSAqIHRhcmdldFpvb207XHJcbiAgICB0YXJnZXRWcHRbNV0gPSBjYW52YXNIIC8gMiAtIChib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDIpICogdGFyZ2V0Wm9vbTtcclxuXHJcbiAgICBjb25zdCBzdGFydFZwdCA9IFsuLi5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIGZhYnJpYy51dGlsLmFuaW1hdGUoe1xyXG4gICAgICBzdGFydFZhbHVlOiAwLFxyXG4gICAgICBlbmRWYWx1ZTogMSxcclxuICAgICAgZHVyYXRpb246IDEwMCxcclxuICAgICAgZWFzaW5nOiBmYWJyaWMudXRpbC5lYXNlLmVhc2VPdXRDdWJpYyxcclxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtITtcclxuICAgICAgICB2cHRbMF0gPSBzdGFydFZwdFswXSArICh0YXJnZXRWcHRbMF0gLSBzdGFydFZwdFswXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbM10gPSBzdGFydFZwdFszXSArICh0YXJnZXRWcHRbM10gLSBzdGFydFZwdFszXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNF0gPSBzdGFydFZwdFs0XSArICh0YXJnZXRWcHRbNF0gLSBzdGFydFZwdFs0XSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNV0gPSBzdGFydFZwdFs1XSArICh0YXJnZXRWcHRbNV0gLSBzdGFydFZwdFs1XSkgKiB2YWx1ZTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZ1bGxMYXlvdXRCb3VuZHMoY2FudmFzOiBmYWJyaWMuQ2FudmFzKSB7XHJcbiAgICBjb25zdCBvYmplY3RzID0gY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHJldHVybiB7IGxlZnQ6IDAsIHRvcDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG5cclxuICAgIGxldCBtaW5YID0gSW5maW5pdHksIG1pblkgPSBJbmZpbml0eSwgbWF4WCA9IC1JbmZpbml0eSwgbWF4WSA9IC1JbmZpbml0eTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IG9iaiBvZiBvYmplY3RzKSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCByZWN0LmxlZnQpO1xyXG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcmVjdC50b3ApO1xyXG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCk7XHJcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBsZWZ0OiBtaW5YLCB0b3A6IG1pblksIHdpZHRoOiBtYXhYIC0gbWluWCwgaGVpZ2h0OiBtYXhZIC0gbWluWSB9O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRmxvb3IoY2FudmFzOiBmYWJyaWMuQ2FudmFzKSB7XHJcbiAgICBhd2FpdCB0aGlzLmRyYXdJbml0aWFsQ29udGVudChjYW52YXMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0luaXRpYWxDb250ZW50KGNhbnZhczogZmFicmljLkNhbnZhcyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY2FudmFzLmNsZWFyKCk7XHJcbiAgICBhd2FpdCB0aGlzLmRyYXdMYXlvdXRFbGVtZW50cyhjYW52YXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXV0b21hdGljYWxseSB0cmlnZ2VyIGZpbmQgYW5kIHJlcGxhY2UgaWYgcHJvbXB0cyBhcmUgYXZhaWxhYmxlIGFuZCBzdG9yZSBkb2Vzbid0IGhhdmUgcmVzdWx0c1xyXG4gIHByaXZhdGUgYXV0b0ZpbmRBbmRSZXBsYWNlSWZOZWVkZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgfHwgIXRoaXMuZmluZFJlcGxhY2VEYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiBwcm9tcHRzIGFyZSBhdmFpbGFibGVcclxuICAgIGNvbnN0IGhhc0ZpbmRQcm9tcHQgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5maW5kUHJvbXB0ICYmIHRoaXMuZmluZFJlcGxhY2VEYXRhLmZpbmRQcm9tcHQudHJpbSgpLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgLy8gUmVxdWlyZSBhdCBsZWFzdCBmaW5kIHByb21wdCB0byBhdXRvLWFwcGx5XHJcbiAgICBpZiAoIWhhc0ZpbmRQcm9tcHQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgc3RvcmUgYWxyZWFkeSBoYXMgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXM/LmZpbmQoXHJcbiAgICAgIChzOiBTdG9yZSkgPT4gcy5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFdoZW4gc3dpdGNoaW5nIHN0b3Jlcywgd2Ugd2FudCB0byByZS1hcHBseSBmaW5kIGV2ZW4gaWYgdGhlIHN0b3JlIGFscmVhZHkgaGFzIGZpbmRSZXNwb25zZURhdGFcclxuICAgIC8vIFRoaXMgYWxsb3dzIGF1dG8tYXBwbHkgd2hlbiBvbmx5IGZpbmQgcHJvbXB0IGV4aXN0cyBhbmQgdXNlciBjaGFuZ2VzIHN0b3Jlc1xyXG4gICAgLy8gT25seSBza2lwIGlmIGJvdGggZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSBleGlzdCAoYWxyZWFkeSBmdWxseSBwcm9jZXNzZWQpXHJcbiAgICBpZiAoc3RvcmU/LmZpbmRSZXNwb25zZURhdGEgJiYgc3RvcmU/LnJlcGxhY2VSZXNwb25zZURhdGEpIHtcclxuICAgICAgLy8gU3RvcmUgYWxyZWFkeSBoYXMgYm90aCBmaW5kIGFuZCByZXBsYWNlIHJlc3VsdHMsIHNraXAgdG8gcHJlc2VydmUgdGhlIHN0YXRlXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgdGhlIHByb21wdHMgaW4gdGhlIGZvcm0gY29udHJvbHMgaWYgbm90IGFscmVhZHkgc2V0XHJcbiAgICBpZiAoIXRoaXMuZmluZFByb21wdC52YWx1ZSAmJiB0aGlzLmZpbmRSZXBsYWNlRGF0YS5maW5kUHJvbXB0KSB7XHJcbiAgICAgIHRoaXMuZmluZFByb21wdC5zZXRWYWx1ZSh0aGlzLmZpbmRSZXBsYWNlRGF0YS5maW5kUHJvbXB0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMuaXNGaW5kUHJvbXB0RnJvbUFwaSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucmVwbGFjZUJyYW5kLnZhbHVlICYmIHRoaXMuZmluZFJlcGxhY2VEYXRhLnJlcGxhY2VCcmFuZD8uX2lkKSB7XHJcbiAgICAgIHRoaXMucmVwbGFjZUJyYW5kLnNldFZhbHVlKHRoaXMuZmluZFJlcGxhY2VEYXRhLnJlcGxhY2VCcmFuZC5faWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yZXBsYWNlVm0udmFsdWUgJiYgdGhpcy5maW5kUmVwbGFjZURhdGEucmVwbGFjZVZtPy5faWQpIHtcclxuICAgICAgdGhpcy5yZXBsYWNlVm0uc2V0VmFsdWUodGhpcy5maW5kUmVwbGFjZURhdGEucmVwbGFjZVZtLl9pZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEF1dG9tYXRpY2FsbHkgdHJpZ2dlciBmaW5kIGZpcnN0LCB0aGVuIHJlcGxhY2UgYWZ0ZXIgZmluZCBjb21wbGV0ZXMgKGlmIGEgdmFsaWQgcmVwbGFjZSBzZWxlY3Rpb24gZXhpc3RzKVxyXG4gICAgdGhpcy5hdXRvRmluZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXV0byBmaW5kIC0gd2lsbCB0cmlnZ2VyIHJlcGxhY2UgYWZ0ZXIgY29tcGxldGlvblxyXG4gIHByaXZhdGUgYXV0b0ZpbmQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmluZFByb21wdC52YWx1ZSB8fCAhdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maW5kTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgc2VsZWN0aW9uQ3JpdGVyaWE6IHRoaXMuZmluZFByb21wdC52YWx1ZSxcclxuICAgICAgc3RvcmVzOiBbdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZmluZEZpeHR1cmUocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmluZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGluZGljYXRlcyBcIk5PVCBGT1VORFwiXHJcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAnc3VjY2VzcycgJiYgcmVzLm1lc3NhZ2UgPT09ICdOT1QgRk9VTkQnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0V2FybmluZ1RvYXN0KCdObyBtYXRjaGluZyBmaXh0dXJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gcHJvbXB0Jyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiByZXMuZGF0YSBleGlzdHMgYmVmb3JlIHByb2Nlc3NpbmdcclxuICAgICAgICAgICAgaWYgKCFyZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFdhcm5pbmdUb2FzdCgnTm8gbWF0Y2hpbmcgZml4dHVyZSBmb3VuZCBmb3IgdGhlIGdpdmVuIHByb21wdCcpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBaVJlc3BvbnNlRml4dHVyZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBmb3VuZCBmaXh0dXJlIGZvciBwb3RlbnRpYWwgcmVwbGFjZSBvcGVyYXRpb25cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgZml4dHVyZUlkOiByZXMuZGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgZml4dHVyZVR5cGU6IHJlcy5kYXRhLmZpeHR1cmVUeXBlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFNhdmUgZmluZFJlc3BvbnNlRGF0YSB0byB0aGUgc3BlY2lmaWMgc3RvcmVcclxuICAgICAgICAgICAgdGhpcy5zYXZlRmluZFJlc3BvbnNlRGF0YShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGZsb29yIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgY2FudmFzIHRvIGZ1bGx5IHJlbmRlciBiZWZvcmUgaGlnaGxpZ2h0aW5nXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSByZXMuZGF0YS5faWRcclxuICAgICAgICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRoaXMucHJldmlld0NhbnZhcywgYWN0aW9uRml4dHVyZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIEFmdGVyIGZpbmQgY29tcGxldGVzLCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgcmVwbGFjZSBvbmx5IGlmIGEgdmFsaWQgcmVwbGFjZSBzZWxlY3Rpb24gZXhpc3RzXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNSZXBsYWNlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvUmVwbGFjZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmluZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQXV0byByZXBsYWNlIC0gY2FsbGVkIGFmdGVyIGF1dG8gZmluZCBjb21wbGV0ZXNcclxuICBwcml2YXRlIGF1dG9SZXBsYWNlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmhhc1JlcGxhY2VTZWxlY3Rpb24oKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2V0IHRoZSBmb3VuZCBmaXh0dXJlIElEIGZyb20gdGhlIHN0b3JlJ3MgZmluZFJlc3BvbnNlRGF0YSAobm90IHRoZSBjbGlja2VkIGZpeHR1cmUpXHJcbiAgICBjb25zdCBmb3VuZEZpeHR1cmVJZCA9IHRoaXMuZ2V0Q3VycmVudFN0b3JlRmluZFJlc3BvbnNlRGF0YSgpO1xyXG4gICAgaWYgKCFmb3VuZEZpeHR1cmVJZCkge1xyXG4gICAgICAvLyBGYWxsYmFjayB0byBzZWxlY3RlZCBmaXh0dXJlIGlmIG5vIGZpbmRSZXNwb25zZURhdGEgZXhpc3RzXHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpeHR1cmU/LmZpeHR1cmVJZCAmJiAhdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5faWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2UgdGhlIGZvdW5kIGZpeHR1cmUgSUQgKGZyb20gZmluZFJlc3BvbnNlRGF0YSkgaW5zdGVhZCBvZiB0aGUgY2xpY2tlZCBmaXh0dXJlXHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSBmb3VuZEZpeHR1cmVJZCB8fCB0aGlzLnNlbGVjdGVkRml4dHVyZT8uZml4dHVyZUlkIHx8IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uX2lkO1xyXG5cclxuICAgIC8vIEdldCB0aGUgb3JpZ2luYWwgZml4dHVyZSBkYXRhIGZyb20gdGhlIGZvdW5kIGZpeHR1cmUgKG5vdCB0aGUgY2xpY2tlZCBvbmUpXHJcbiAgICBjb25zdCBmb3VuZEZpeHR1cmUgPSB0aGlzLmdldEZpeHR1cmVCeUlkRnJvbUZsb29yKGZpeHR1cmVJZCk7XHJcbiAgICBjb25zdCBvcmlnaW5hbEZpeHR1cmUgPSBmb3VuZEZpeHR1cmUgPyBzdHJ1Y3R1cmVkQ2xvbmUoZm91bmRGaXh0dXJlKSA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5yZXBsYWNlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVJZCxcclxuICAgICAgdXBkYXRlVHlwZTogdGhpcy50YXJnZXQudmFsdWUsXHJcbiAgICAgIHJlcGxhY2VCcmFuZDogdGhpcy5uZWVkc1JlcGxhY2VCcmFuZCgpID8gdGhpcy5nZXRSZXBsYWNlQnJhbmRTZWxlY3Rpb24oKSA6IG51bGwsXHJcbiAgICAgIHJlcGxhY2VWbTogdGhpcy5uZWVkc1JlcGxhY2VWbSgpID8gdGhpcy5nZXRSZXBsYWNlVm1TZWxlY3Rpb24oKSA6IG51bGwsXHJcbiAgICAgIHVwZGF0aW9uQ3JpdGVyaWE6IHRoaXMucmVwbGFjZVByb21wdC52YWx1ZSB8fCAnJyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLnJlcGxhY2VGaXh0dXJlKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vIE1hcmsgcmVwbGFjZSBhcyBleGVjdXRlZCB0byBkaXNhYmxlIHRoZSBidXR0b25cclxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gU3RvcmUgb3JpZ2luYWwgZml4dHVyZSBmb3IgYmVmb3JlL2FmdGVyIGNvbXBhcmlzb25cclxuICAgICAgICAgICAgLy8gT25seSBzdG9yZSBpZiBub3QgYWxyZWFkeSBpbiBtYXAgKHByZXNlcnZlIGluaXRpYWwgcGxhbm9ncmFtIGZpeHR1cmUpXHJcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbEZpeHR1cmUgJiYgIXRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5zZXQoZml4dHVyZUlkLCBvcmlnaW5hbEZpeHR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWxGaXh0dXJlRGF0YSBmcm9tIG1hcCB0byBlbnN1cmUgaXQncyBhbHdheXMgdGhlIGluaXRpYWwgcGxhbm9ncmFtIGZpeHR1cmVcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuZ2V0KGZpeHR1cmVJZCk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yZWRPcmlnaW5hbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShzdG9yZWRPcmlnaW5hbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWlSZXNwb25zZUZpeHR1cmUocmVzLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgLy8gU2F2ZSByZXBsYWNlUmVzcG9uc2VEYXRhIHRvIHRoZSBzcGVjaWZpYyBzdG9yZVxyXG4gICAgICAgICAgICB0aGlzLnNhdmVSZXBsYWNlUmVzcG9uc2VEYXRhKHJlcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBzZWxlY3RlZCBmaXh0dXJlIGRhdGEgdG8gdGhlIGZvdW5kIGZpeHR1cmUgKGFmdGVyIHJlcGxhY2UpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVJZDogcmVzLmRhdGEuX2lkLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUeXBlOiByZXMuZGF0YS5maXh0dXJlVHlwZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gcmVzLmRhdGE7XHJcblxyXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGZsb29yIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgY2FudmFzIHRvIGZ1bGx5IHJlbmRlciBiZWZvcmUgaGlnaGxpZ2h0aW5nXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBIaWdobGlnaHQgdGhlIGZvdW5kIGZpeHR1cmUgKG5vdCB0aGUgY2xpY2tlZCBvbmUpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSByZXMuZGF0YS5faWRcclxuICAgICAgICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRoaXMucHJldmlld0NhbnZhcywgYWN0aW9uRml4dHVyZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBGaW5kIGFuZCBSZXBsYWNlIGJ1dHRvbiBoYW5kbGVyc1xyXG4gIG9uRmluZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUHJvbXB0LnZhbHVlIHx8ICF0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbmRMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBzZWxlY3Rpb25Dcml0ZXJpYTogdGhpcy5maW5kUHJvbXB0LnZhbHVlLFxyXG4gICAgICBzdG9yZXM6IFt0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZV0sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5maW5kRml4dHVyZShwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maW5kTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICBpZiAocmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaW5kaWNhdGVzIFwiTk9UIEZPVU5EXCJcclxuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXMubWVzc2FnZSA9PT0gJ05PVCBGT1VORCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRXYXJuaW5nVG9hc3QoJ05vIG1hdGNoaW5nIGZpeHR1cmUgZm91bmQgZm9yIHRoZSBnaXZlbiBwcm9tcHQnKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHJlcy5kYXRhIGV4aXN0cyBiZWZvcmUgcHJvY2Vzc2luZ1xyXG4gICAgICAgICAgICBpZiAoIXJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0V2FybmluZ1RvYXN0KCdObyBtYXRjaGluZyBmaXh0dXJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gcHJvbXB0Jyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFpUmVzcG9uc2VGaXh0dXJlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGZvdW5kIGZpeHR1cmUgZm9yIHBvdGVudGlhbCByZXBsYWNlIG9wZXJhdGlvblxyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlSWQgPSByZXMuZGF0YS5faWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVJZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUeXBlOiByZXMuZGF0YS5maXh0dXJlVHlwZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgZml4dHVyZSBmcm9tIGZsb29yRGF0YSBiZWZvcmUgYW55IG1vZGlmaWNhdGlvbnNcclxuICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gc2hvdyBCZWZvcmUvQWZ0ZXIgZXZlbiB3aGVuIG9ubHkgZmluZCBkYXRhIGV4aXN0c1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kRml4dHVyZSA9IHRoaXMuZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkKTtcclxuICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbEZpeHR1cmUgPSBmb3VuZEZpeHR1cmUgPyBzdHJ1Y3R1cmVkQ2xvbmUoZm91bmRGaXh0dXJlKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgLy8gSWYgZm91bmQsIHN0b3JlIGl0IGluIHRoZSBtYXBcclxuICAgICAgICAgICAgICBpZiAob3JpZ2luYWxGaXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuc2V0KGZpeHR1cmVJZCwgb3JpZ2luYWxGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBvcmlnaW5hbEZpeHR1cmVEYXRhIGZvciBkaXNwbGF5XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUob3JpZ2luYWxGaXh0dXJlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gSWYgYWxyZWFkeSBpbiBtYXAsIHJlc3RvcmUgaXRcclxuICAgICAgICAgICAgICBjb25zdCBzdG9yZWRPcmlnaW5hbCA9IHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5nZXQoZml4dHVyZUlkKTtcclxuICAgICAgICAgICAgICBpZiAoc3RvcmVkT3JpZ2luYWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShzdG9yZWRPcmlnaW5hbCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBNYXJrIGZpbmQgYXMgZXhlY3V0ZWQgdG8gZGlzYWJsZSB0aGUgYnV0dG9uXHJcbiAgICAgICAgICAgIHRoaXMuZmluZEV4ZWN1dGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFNhdmUgZmluZFJlc3BvbnNlRGF0YSB0byB0aGUgc3BlY2lmaWMgc3RvcmVcclxuICAgICAgICAgICAgdGhpcy5zYXZlRmluZFJlc3BvbnNlRGF0YShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGZsb29yIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgY2FudmFzIHRvIGZ1bGx5IHJlbmRlciBiZWZvcmUgaGlnaGxpZ2h0aW5nXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSByZXMuZGF0YS5faWRcclxuICAgICAgICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRoaXMucHJldmlld0NhbnZhcywgYWN0aW9uRml4dHVyZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maW5kTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25SZXBsYWNlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmhhc1JlcGxhY2VTZWxlY3Rpb24oKSkge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRXYXJuaW5nVG9hc3QoXHJcbiAgICAgICAgdGhpcy5uZWVkc1JlcGxhY2VCcmFuZCgpICYmIHRoaXMubmVlZHNSZXBsYWNlVm0oKVxyXG4gICAgICAgICAgPyAnUGxlYXNlIHNlbGVjdCBhIGJyYW5kIGFuZCBhIFZNIHRvIHJlcGxhY2Ugd2l0aCdcclxuICAgICAgICAgIDogdGhpcy5uZWVkc1JlcGxhY2VCcmFuZCgpXHJcbiAgICAgICAgICAgID8gJ1BsZWFzZSBzZWxlY3QgYSBicmFuZCB0byByZXBsYWNlIHdpdGgnXHJcbiAgICAgICAgICAgIDogJ1BsZWFzZSBzZWxlY3QgYSBWTSB0byByZXBsYWNlIHdpdGgnXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHZXQgdGhlIGZvdW5kIGZpeHR1cmUgSUQgZnJvbSB0aGUgc3RvcmUncyBmaW5kUmVzcG9uc2VEYXRhIChub3QgdGhlIGNsaWNrZWQgZml4dHVyZSlcclxuICAgIGNvbnN0IGZvdW5kRml4dHVyZUlkID0gdGhpcy5nZXRDdXJyZW50U3RvcmVGaW5kUmVzcG9uc2VEYXRhKCk7XHJcbiAgICBpZiAoIWZvdW5kRml4dHVyZUlkKSB7XHJcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHNlbGVjdGVkIGZpeHR1cmUgaWYgbm8gZmluZFJlc3BvbnNlRGF0YSBleGlzdHNcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRml4dHVyZT8uZml4dHVyZUlkICYmICF0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE/Ll9pZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFVzZSB0aGUgZm91bmQgZml4dHVyZSBJRCAoZnJvbSBmaW5kUmVzcG9uc2VEYXRhKSBpbnN0ZWFkIG9mIHRoZSBjbGlja2VkIGZpeHR1cmVcclxuICAgIGNvbnN0IGZpeHR1cmVJZCA9IGZvdW5kRml4dHVyZUlkIHx8IHRoaXMuc2VsZWN0ZWRGaXh0dXJlPy5maXh0dXJlSWQgfHwgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5faWQ7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBvcmlnaW5hbCBmaXh0dXJlIGRhdGEgZnJvbSB0aGUgZm91bmQgZml4dHVyZSAobm90IHRoZSBjbGlja2VkIG9uZSlcclxuICAgIGNvbnN0IGZvdW5kRml4dHVyZSA9IHRoaXMuZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkKTtcclxuICAgIGNvbnN0IG9yaWdpbmFsRml4dHVyZSA9IGZvdW5kRml4dHVyZSA/IHN0cnVjdHVyZWRDbG9uZShmb3VuZEZpeHR1cmUpIDogbnVsbDtcclxuXHJcbiAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIGZpeHR1cmVJZDogZml4dHVyZUlkLFxyXG4gICAgICB1cGRhdGVUeXBlOiB0aGlzLnRhcmdldC52YWx1ZSxcclxuICAgICAgcmVwbGFjZUJyYW5kOiB0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgPyB0aGlzLmdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIDogbnVsbCxcclxuICAgICAgcmVwbGFjZVZtOiB0aGlzLm5lZWRzUmVwbGFjZVZtKCkgPyB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpIDogbnVsbCxcclxuICAgICAgdXBkYXRpb25Dcml0ZXJpYTogdGhpcy5yZXBsYWNlUHJvbXB0LnZhbHVlIHx8ICcnLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UucmVwbGFjZUZpeHR1cmUocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVwbGFjZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgLy8gTWFyayByZXBsYWNlIGFzIGV4ZWN1dGVkIHRvIGRpc2FibGUgdGhlIGJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VFeGVjdXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTdG9yZSBvcmlnaW5hbCBmaXh0dXJlIGZvciBiZWZvcmUvYWZ0ZXIgY29tcGFyaXNvblxyXG4gICAgICAgICAgICAvLyBPbmx5IHN0b3JlIGlmIG5vdCBhbHJlYWR5IGluIG1hcCAocHJlc2VydmUgaW5pdGlhbCBwbGFub2dyYW0gZml4dHVyZSlcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsRml4dHVyZSAmJiAhdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmhhcyhmaXh0dXJlSWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLnNldChmaXh0dXJlSWQsIG9yaWdpbmFsRml4dHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbEZpeHR1cmVEYXRhIGZyb20gbWFwIHRvIGVuc3VyZSBpdCdzIGFsd2F5cyB0aGUgaW5pdGlhbCBwbGFub2dyYW0gZml4dHVyZVxyXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRPcmlnaW5hbCA9IHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5nZXQoZml4dHVyZUlkKTtcclxuICAgICAgICAgICAgaWYgKHN0b3JlZE9yaWdpbmFsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gc3RydWN0dXJlZENsb25lKHN0b3JlZE9yaWdpbmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBaVJlc3BvbnNlRml4dHVyZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTYXZlIHJlcGxhY2VSZXNwb25zZURhdGEgdG8gdGhlIHNwZWNpZmljIHN0b3JlXHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZVJlcGxhY2VSZXNwb25zZURhdGEocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gVXBkYXRlIHNlbGVjdGVkIGZpeHR1cmUgZGF0YSB0byB0aGUgZm91bmQgZml4dHVyZSAoYWZ0ZXIgcmVwbGFjZSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgZml4dHVyZUlkOiByZXMuZGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgZml4dHVyZVR5cGU6IHJlcy5kYXRhLmZpeHR1cmVUeXBlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgZmxvb3IgYW5kIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxvb3IodGhpcy5wcmV2aWV3Q2FudmFzKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAvLyBXYWl0IGZvciBjYW52YXMgdG8gZnVsbHkgcmVuZGVyIGJlZm9yZSBoaWdobGlnaHRpbmdcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEhpZ2hsaWdodCB0aGUgZm91bmQgZml4dHVyZSAobm90IHRoZSBjbGlja2VkIG9uZSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZpeHR1cmUgPSB0aGlzLnByZXZpZXdDYW52YXMuZ2V0T2JqZWN0cygpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IHJlcy5kYXRhLl9pZFxyXG4gICAgICAgICAgICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRml4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGhpcy5wcmV2aWV3Q2FudmFzLCBhY3Rpb25GaXh0dXJlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IGZpbmRSZXNwb25zZURhdGEgZm9yIGN1cnJlbnQgc3RvcmVcclxuICBnZXRDdXJyZW50U3RvcmVGaW5kUmVzcG9uc2VEYXRhKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzIHx8ICF0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMuZmluZChcclxuICAgICAgKHM6IFN0b3JlKSA9PiBzLnN0b3JlTmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVcclxuICAgICk7XHJcbiAgICByZXR1cm4gc3RvcmU/LmZpbmRSZXNwb25zZURhdGEgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIFNhdmUgZmluZFJlc3BvbnNlRGF0YSB0byBzcGVjaWZpYyBzdG9yZSBhbmQgdHJpZ2dlciBzYXZlIGFzIGRyYWZ0XHJcbiAgcHJpdmF0ZSBzYXZlRmluZFJlc3BvbnNlRGF0YShyZXNwb25zZURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YSB8fCAhdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXBkYXRlZFN0b3JlcyA9ICh0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMgfHwgW10pLm1hcCgoc3RvcmU6IFN0b3JlKSA9PiB7XHJcbiAgICAgIGlmIChzdG9yZS5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnN0b3JlLFxyXG4gICAgICAgICAgZmluZFJlc3BvbnNlRGF0YTogcmVzcG9uc2VEYXRhPy5faWRcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdG9yZTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBsb2NhbCBmaW5kUmVwbGFjZURhdGEgaW1tZWRpYXRlbHlcclxuICAgIHRoaXMuZmluZFJlcGxhY2VEYXRhID0ge1xyXG4gICAgICAuLi50aGlzLmZpbmRSZXBsYWNlRGF0YSxcclxuICAgICAgc3RvcmVzOiB1cGRhdGVkU3RvcmVzXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBzZXJ2aWNlXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEoe1xyXG4gICAgICBzdG9yZXM6IHVwZGF0ZWRTdG9yZXNcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFRyaWdnZXIgc2F2ZSBhcyBkcmFmdFxyXG4gICAgdGhpcy5kYXRhU2VydmljZS50cmlnZ2VyU2F2ZURyYWZ0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBTYXZlIHJlcGxhY2VSZXNwb25zZURhdGEgdG8gc3BlY2lmaWMgc3RvcmUgYW5kIHRyaWdnZXIgc2F2ZSBhcyBkcmFmdFxyXG4gIC8vIE9ubHkgc2F2ZXMgdm1Db25maWcgYW5kL29yIHNoZWxmQ29uZmlnIGJhc2VkIG9uIHRhcmdldFxyXG4gIHByaXZhdGUgc2F2ZVJlcGxhY2VSZXNwb25zZURhdGEocmVzcG9uc2VEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUmVwbGFjZURhdGEgfHwgIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0LnZhbHVlIGFzICdtZXJjaCcgfCAndm0nIHwgJ2JvdGgnO1xyXG4gICAgY29uc3QgcmVwbGFjZURhdGE6IHsgdm1Db25maWc/OiBhbnlbXTsgc2hlbGZDb25maWc/OiBhbnlbXSB9ID0ge307XHJcblxyXG4gICAgLy8gRXh0cmFjdCBvbmx5IHRoZSByZWxldmFudCBjb25maWdzIGJhc2VkIG9uIHRhcmdldFxyXG4gICAgaWYgKHRhcmdldCA9PT0gJ3ZtJyB8fCB0YXJnZXQgPT09ICdib3RoJykge1xyXG4gICAgICBpZiAocmVzcG9uc2VEYXRhPy52bUNvbmZpZykge1xyXG4gICAgICAgIHJlcGxhY2VEYXRhLnZtQ29uZmlnID0gcmVzcG9uc2VEYXRhLnZtQ29uZmlnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0YXJnZXQgPT09ICdtZXJjaCcgfHwgdGFyZ2V0ID09PSAnYm90aCcpIHtcclxuICAgICAgaWYgKHJlc3BvbnNlRGF0YT8uc2hlbGZDb25maWcpIHtcclxuICAgICAgICByZXBsYWNlRGF0YS5zaGVsZkNvbmZpZyA9IHJlc3BvbnNlRGF0YS5zaGVsZkNvbmZpZztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVwZGF0ZWRTdG9yZXMgPSAodGhpcy5maW5kUmVwbGFjZURhdGEuc3RvcmVzIHx8IFtdKS5tYXAoKHN0b3JlOiBTdG9yZSkgPT4ge1xyXG4gICAgICBpZiAoc3RvcmUuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5zdG9yZSxcclxuICAgICAgICAgIHJlcGxhY2VSZXNwb25zZURhdGE6IHJlcGxhY2VEYXRhXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3RvcmU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgbG9jYWwgZmluZFJlcGxhY2VEYXRhIGltbWVkaWF0ZWx5XHJcbiAgICB0aGlzLmZpbmRSZXBsYWNlRGF0YSA9IHtcclxuICAgICAgLi4udGhpcy5maW5kUmVwbGFjZURhdGEsXHJcbiAgICAgIHN0b3JlczogdXBkYXRlZFN0b3Jlc1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGRhdGEgc2VydmljZVxyXG4gICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHtcclxuICAgICAgc3RvcmVzOiB1cGRhdGVkU3RvcmVzXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBUcmlnZ2VyIHNhdmUgYXMgZHJhZnRcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UudHJpZ2dlclNhdmVEcmFmdCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQWlSZXNwb25zZUZpeHR1cmUoZml4dHVyZTogYW55KSB7XHJcbiAgICBsZXQgbWF0Y2hGb3VuZCA9IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2ldO1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ3dhbGwnICYmIEFycmF5LmlzQXJyYXkoZWxlbWVudC5maXh0dXJlcykpIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQuZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IGZ4ID0gZWxlbWVudC5maXh0dXJlc1tqXTtcclxuICAgICAgICAgIGlmIChmeC5faWQgPT09IGZpeHR1cmUuX2lkKSB7XHJcbiAgICAgICAgICAgIC8vIFByZXNlcnZlIGV4aXN0aW5nIHZtQ29uZmlnIGlmIHRoZSBuZXcgZml4dHVyZSBkb2Vzbid0IGhhdmUgaXRcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdWbUNvbmZpZyA9IGZ4LnZtQ29uZmlnIHx8IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRml4dHVyZSA9IHsgXHJcbiAgICAgICAgICAgICAgLi4uZml4dHVyZSxcclxuICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB2bUNvbmZpZyBmcm9tIGV4aXN0aW5nIGZpeHR1cmUgaWYgbmV3IGZpeHR1cmUgZG9lc24ndCBoYXZlIGl0XHJcbiAgICAgICAgICAgICAgdm1Db25maWc6IGZpeHR1cmUudm1Db25maWcgfHwgZXhpc3RpbmdWbUNvbmZpZ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2ldLmZpeHR1cmVzW2pdID0gdXBkYXRlZEZpeHR1cmU7XHJcbiAgICAgICAgICAgIG1hdGNoRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHVwZGF0ZWRGaXh0dXJlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF0Y2hGb3VuZCkgcmV0dXJuO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZnggPSB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZVtpXTtcclxuICAgICAgaWYgKGZ4Ll9pZCA9PT0gZml4dHVyZS5faWQpIHtcclxuICAgICAgICAvLyBQcmVzZXJ2ZSBleGlzdGluZyB2bUNvbmZpZyBpZiB0aGUgbmV3IGZpeHR1cmUgZG9lc24ndCBoYXZlIGl0XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdWbUNvbmZpZyA9IGZ4LnZtQ29uZmlnIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaXh0dXJlID0geyBcclxuICAgICAgICAgIC4uLmZpeHR1cmUsXHJcbiAgICAgICAgICAvLyBQcmVzZXJ2ZSB2bUNvbmZpZyBmcm9tIGV4aXN0aW5nIGZpeHR1cmUgaWYgbmV3IGZpeHR1cmUgZG9lc24ndCBoYXZlIGl0XHJcbiAgICAgICAgICB2bUNvbmZpZzogZml4dHVyZS52bUNvbmZpZyB8fCBleGlzdGluZ1ZtQ29uZmlnXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ldID0gdXBkYXRlZEZpeHR1cmU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB1cGRhdGVkRml4dHVyZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0Rml4dHVyZShjYW52YXM6IGZhYnJpYy5DYW52YXMsIGdyb3VwOiBhbnksIGJsaW5rOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KGNhbnZhcyk7XHJcbiAgICB0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuICAgIGNvbnN0IHJlYWxXaWR0aCA9IGdyb3VwLndpZHRoISAqIGdyb3VwLnNjYWxlWCE7XHJcbiAgICBjb25zdCByZWFsSGVpZ2h0ID0gZ3JvdXAuaGVpZ2h0ISAqIGdyb3VwLnNjYWxlWSE7XHJcblxyXG4gICAgY29uc3QgcmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGNlbnRlci54LFxyXG4gICAgICB0b3A6IGNlbnRlci55LFxyXG4gICAgICB3aWR0aDogcmVhbFdpZHRoICsgOCxcclxuICAgICAgaGVpZ2h0OiByZWFsSGVpZ2h0ICsgOCxcclxuICAgICAgcng6IDUsXHJcbiAgICAgIHJ5OiA1LFxyXG4gICAgICBzdHJva2U6IFwiIzAwYWFmZlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMyxcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBncm91cC5hbmdsZSB8fCAwLFxyXG4gICAgICBvcGFjaXR5OiBibGluayA/IDAgOiAxLFxyXG4gICAgfSk7XHJcblxyXG4gICAgKHJlY3QgYXMgYW55KS5kYXRhID0geyB0eXBlOiBcImZpeHR1cmUtaGlnaGxpZ2h0XCIgfTtcclxuICAgIGNhbnZhcy5hZGQocmVjdCk7XHJcbiAgICBjYW52YXMubW92ZU9iamVjdFRvKHJlY3QsIGNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMSk7XHJcbiAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgdGhpcy5hY3RpdmVIaWdobGlnaHQgPSByZWN0O1xyXG5cclxuICAgIGlmICghYmxpbmspIHJldHVybjtcclxuXHJcbiAgICBsZXQgY3ljbGVzID0gMDtcclxuICAgIGNvbnN0IGJsaW5rT25jZSA9ICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodChjYW52YXMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICByZWN0LmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sIHtcclxuICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgIG9uQ2hhbmdlOiAoKSA9PiBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpLFxyXG4gICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KGNhbnZhcyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlY3QuYW5pbWF0ZSh7IG9wYWNpdHk6IDAgfSwge1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogKCkgPT4gY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKSxcclxuICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodChjYW52YXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjeWNsZXMrKztcclxuICAgICAgICAgICAgICBpZiAoY3ljbGVzIDwgMjApIHtcclxuICAgICAgICAgICAgICAgIGJsaW5rT25jZSgpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICAgICAgcmVjdC5zZXQoeyBvcGFjaXR5OiAxIH0pO1xyXG4gICAgICAgICAgICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIGJsaW5rT25jZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSGlnaGxpZ2h0KGNhbnZhczogZmFicmljLkNhbnZhcykge1xyXG4gICAgdGhpcy5jYW5jZWxIaWdobGlnaHRCbGluayA9IHRydWU7XHJcbiAgICBjYW52YXMuZ2V0T2JqZWN0cygpLmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICBpZiAoKG9iaiBhcyBhbnkpLmRhdGE/LnR5cGUgPT09IFwiZml4dHVyZS1oaWdobGlnaHRcIikge1xyXG4gICAgICAgIGNhbnZhcy5yZW1vdmUob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IG51bGw7XHJcbiAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gUGxhbm9ncmFtIHJlbmRlcmluZyBtZXRob2RzIChzaW1wbGlmaWVkIHZlcnNpb25zIGZyb20gY29sbGVjdGlvbi11cGRhdGUtYWkpXHJcbiAgdG9QaXhlbHModmFsdWU6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpIHtcclxuICAgIGxldCBwaXhlbHM6IG51bWJlcjtcclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKHBpeGVscy50b0ZpeGVkKDQpKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdMYXlvdXRFbGVtZW50cyhjYW52YXM6IGZhYnJpYy5DYW52YXMpIHtcclxuICAgIGlmICghdGhpcy5mbG9vckRhdGEpIHJldHVybjtcclxuICAgIFxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuICAgICAgbGV0IHdhbGw7XHJcblxyXG4gICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24gPz89IHsgeDogMCwgeTogMCwgdW5pdDogXCJmdFwiIH07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBlbGVtZW50LnVuaXQpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgZWxlbWVudC51bml0KTtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMud2FsbFRoaWNrbmVzcztcclxuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5kaXN0YW5jZSwgZWxlbWVudC51bml0KTtcclxuICAgICAgICB3YWxsID0gYXdhaXQgdGhpcy5kcmF3V2FsbChjYW52YXMsIHgsIHksIGhlaWdodCwgd2lkdGgsIGVsZW1lbnQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICAgIHRoaXMuZHJhd0VudHJhbmNlKGNhbnZhcywgeCwgeSwgODAsIDc1LCA0MCwgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cHM6IGZhYnJpYy5Hcm91cFtdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5maXh0dXJlcz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBlbGVtZW50LmZpeHR1cmVzW2pdO1xyXG4gICAgICAgICAgY29uc3QgZnggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LCBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCk7XHJcbiAgICAgICAgICBjb25zdCBmeSA9IHRoaXMudG9QaXhlbHMoZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0KTtcclxuICAgICAgICAgIGNvbnN0IGZoID0gdGhpcy50b1BpeGVscyhmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgICAgICAgIGNvbnN0IGZ3ID0gdGhpcy50b1BpeGVscyhmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCk7XHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlT2JqID0gYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShjYW52YXMsIGZ4LCBmeSwgZmgsIGZ3LCBmaXh0dXJlKTtcclxuICAgICAgICAgIGZpeHR1cmVHcm91cHMucHVzaChmaXh0dXJlT2JqIGFzIGZhYnJpYy5Hcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC5pc0xvY2tlZCAmJiB3YWxsKSB7XHJcbiAgICAgICAgICBjYW52YXMucmVtb3ZlKHdhbGwpO1xyXG4gICAgICAgICAgZml4dHVyZUdyb3Vwcy5mb3JFYWNoKChmKSA9PiBjYW52YXMucmVtb3ZlKGYpKTtcclxuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFt3YWxsLCAuLi5maXh0dXJlR3JvdXBzXSwge1xyXG4gICAgICAgICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBsb2NrTW92ZW1lbnRYOiB0cnVlLFxyXG4gICAgICAgICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICAgICAgICBsb2NrUm90YXRpb246IHRydWUsXHJcbiAgICAgICAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29tYmluZWRHcm91cC5zZXQoeyBpc0xvY2tlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgIGNhbnZhcy5hZGQoY29tYmluZWRHcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSBlbGVtZW50Lm90aGVyRWxlbWVudHNbal07XHJcbiAgICAgICAgICBjb25zdCBveCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKTtcclxuICAgICAgICAgIGNvbnN0IG95ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICAgICAgY29uc3Qgb2EgPSBvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuICAgICAgICAgIGNvbnN0IG9oID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCk7XHJcbiAgICAgICAgICBjb25zdCBvdyA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0KTtcclxuICAgICAgICAgIHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoY2FudmFzLCBveCwgb3ksIG9hLCBvdywgb2gsIG90aGVyRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LCBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LCBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCk7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQpO1xyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoY2FudmFzLCB4LCB5LCBoLCB3LCBmaXh0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzW2pdO1xyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCBhID0gb3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24uYW5nbGU7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLCBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0KTtcclxuICAgICAgdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChjYW52YXMsIHgsIHksIGEsIHcsIGgsIG90aGVyRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3V2FsbChcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBmaWxsQ29sb3IgPSBcIiNGNkZDRkZcIjtcclxuICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gXCIjRDBENUREXCI7XHJcbiAgICBjb25zdCBsYWJlbENvbG9yID0gXCIjMDA5QkYzXCI7XHJcbiAgICBsZXQgdGV4dCA9IGAke3RoaXMudGl0bGVDYXNlLnRyYW5zZm9ybShlbGVtZW50RGF0YS5lbGVtZW50VHlwZSl9ICR7ZWxlbWVudERhdGEuZWxlbWVudE51bWJlclxyXG4gICAgICB9YDtcclxuXHJcbiAgICBjb25zdCB3YWxsID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgdG9wOiAwLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBmaWxsOiBmaWxsQ29sb3IsXHJcbiAgICAgIHN0cm9rZTogc3Ryb2tlQ29sb3IsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgc3Ryb2tlVW5pZm9ybTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCBjZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSBoZWlnaHQgPiB3aWR0aDtcclxuXHJcbiAgICBjb25zdCBsYWJlbCA9IG5ldyBmYWJyaWMuRmFicmljVGV4dCh0ZXh0LCB7XHJcbiAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgZm9udFNpemU6IDEwLFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBpc1ZlcnRpY2FsID8gLTkwIDogMCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSA1O1xyXG4gICAgY29uc3QgZWxlbWVudHM6IGZhYnJpYy5PYmplY3RbXSA9IFt3YWxsLCBsYWJlbF07XHJcblxyXG4gICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgY29uc3QgdGV4dFdpZHRoID0gbGFiZWwud2lkdGggfHwgMDtcclxuICAgICAgY29uc3QgdG9wQXJyb3dZID0gNTtcclxuICAgICAgY29uc3QgdG9wQXJyb3dFbmRZID0gY2VudGVyWSAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKHRvcEFycm93RW5kWSA+IHRvcEFycm93WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2NlbnRlclgsIHRvcEFycm93WSwgY2VudGVyWCwgdG9wQXJyb3dFbmRZXSwge1xyXG4gICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogdG9wQXJyb3dZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBib3R0b21BcnJvd1N0YXJ0WSA9IGNlbnRlclkgKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dFbmRZID0gaGVpZ2h0IC0gNTtcclxuXHJcbiAgICAgIGlmIChib3R0b21BcnJvd0VuZFkgPiBib3R0b21BcnJvd1N0YXJ0WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtjZW50ZXJYLCBib3R0b21BcnJvd1N0YXJ0WSwgY2VudGVyWCwgYm90dG9tQXJyb3dFbmRZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBjZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGJvdHRvbUFycm93RW5kWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAxODAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dTdGFydFggPSA1O1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dFbmRYID0gY2VudGVyWCAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKGxlZnRBcnJvd0VuZFggPiBsZWZ0QXJyb3dTdGFydFggKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFtsZWZ0QXJyb3dTdGFydFgsIGNlbnRlclksIGxlZnRBcnJvd0VuZFgsIGNlbnRlclldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogbGVmdEFycm93U3RhcnRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogLTkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmlnaHRBcnJvd1N0YXJ0WCA9IGNlbnRlclggKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgcmlnaHRBcnJvd0VuZFggPSB3aWR0aCAtIDU7XHJcblxyXG4gICAgICBpZiAocmlnaHRBcnJvd0VuZFggPiByaWdodEFycm93U3RhcnRYICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW3JpZ2h0QXJyb3dTdGFydFgsIGNlbnRlclksIHJpZ2h0QXJyb3dFbmRYLCBjZW50ZXJZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiByaWdodEFycm93RW5kWCxcclxuICAgICAgICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoZWxlbWVudHMsIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1JvdGF0aW9uOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRYOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgIGFuZ2xlOiBlbGVtZW50RGF0YS5hbmdsZSxcclxuICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gZWxlbWVudERhdGEuZWxlbWVudFR5cGU7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudERhdGE7XHJcblxyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIC8vIElmIG5ld2x5IGFkZGVkLCBmb2N1cyBpdCBvbmNlXHJcbiAgICBpZiAoKGVsZW1lbnREYXRhIGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChncm91cCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSBjYXRjaCB7IH1cclxuICAgICAgZGVsZXRlIChlbGVtZW50RGF0YSBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdFbnRyYW5jZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIGFycm93V2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IGJvZHlXaWR0aCA9IHdpZHRoIC0gYXJyb3dXaWR0aDtcclxuXHJcbiAgICBjb25zdCBwYXRoRGF0YSA9IFtcclxuICAgICAgYE0gMCAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9IDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHstaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke3dpZHRofSAke2hlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0ICsgaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHR9YCxcclxuICAgICAgYEwgMCAke2hlaWdodH1gLFxyXG4gICAgICBgWmAsXHJcbiAgICBdLmpvaW4oXCIgXCIpO1xyXG5cclxuICAgIGNvbnN0IGFycm93ID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIGZpbGw6IFwiIzAzQTlGNFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gaGVpZ2h0IC0gNjtcclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHQoXCJFbnRyYW5jZVwiLCB7XHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiQXJpYWxcIixcclxuICAgICAgZm9udFdlaWdodDogXCJib2xkXCIsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgbGVmdDogMTUsXHJcbiAgICAgIHRvcDogaGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDIwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGlmICh0ZXh0Qm91bmRzLmhlaWdodCA+IG1heFRleHRIZWlnaHQpIHtcclxuICAgICAgY29uc3Qgc2NhbGUgPSBtYXhUZXh0SGVpZ2h0IC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvdywgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdGbGlwOiB0cnVlLFxyXG4gICAgICBsb2NrUm90YXRpb246IHRydWUsXHJcbiAgICAgIGxvY2tNb3ZlbWVudFg6IHRydWUsXHJcbiAgICAgIGxvY2tNb3ZlbWVudFk6IHRydWUsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcImRlZmF1bHRcIixcclxuICAgICAgYW5nbGU6IGVsZW1lbnREYXRhLmFuZ2xlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnREYXRhO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0ZpeHR1cmUoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBmaXh0dXJlRGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICAvLyBNYXRjaCBmaXh0dXJlIHBhbGV0dGUvbG9naWMgdXNlZCBpbiBgL21hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXJvbGxvdXRgIChgcGxhbm8tcm9sbG91dC5jb21wb25lbnQudHNgKVxyXG5cclxuXHJcbiAgICBsZXQgcHJpbWFyeVN0cm9rZSA9IFwiI2E1YTZhOFwiO1xyXG4gICAgbGV0IHByaW1hcnlGaWxsID0gXCIjZjNmNGY4XCI7XHJcbiAgICBsZXQgaGVhZGVyQ29sb3IgPSBcIiMxMDE4MjhcIjtcclxuICAgIGxldCB2bUZpbGwgPSBcIiNhNWE2YThcIjtcclxuICAgIGxldCBmb290ZXJGaWxsID0gXCIjZjNmNGY4XCI7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhPy5jb21wbGV0ZSA9PT0gdHJ1ZSAmJiAhZml4dHVyZURhdGE/LmFwcHJvdmFsU3RhdHVzKSB7XHJcbiAgICAgIHByaW1hcnlTdHJva2UgPSBcIiM2Q0U5QTZcIjtcclxuICAgICAgcHJpbWFyeUZpbGwgPSBcIiM2Q0U5QTZcIjtcclxuICAgICAgZm9vdGVyRmlsbCA9IFwiIzZDRTlBNlwiO1xyXG4gICAgICB2bUZpbGwgPSBcIiM2OTM4RUZcIjtcclxuICAgICAgaGVhZGVyQ29sb3IgPSBcIiMxMDE4MjhcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGE/Lmlzc3VlID09PSB0cnVlKSB7XHJcbiAgICAgIHByaW1hcnlTdHJva2UgPSBcIiNEOTJEMjBcIjtcclxuICAgICAgcHJpbWFyeUZpbGwgPSBcIiNEOTJEMjBcIjtcclxuICAgICAgaGVhZGVyQ29sb3IgPSBcIiNGRkZcIjtcclxuICAgICAgZm9vdGVyRmlsbCA9IFwiI0ZFRTRFMlwiO1xyXG4gICAgICB2bUZpbGwgPSBcIiM2OTM4RUZcIjtcclxuICAgIH1cclxuICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlTmFtZSA9PT0gXCJzcGFjZVwiKSByZXR1cm47XHJcbiAgICBjb25zdCByYWRpdXMgPSA1O1xyXG4gICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRvcFgsXHJcbiAgICAgIHRvcDogdG9wWSxcclxuICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRvcEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaW5uZXJUb3BCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB0b3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgRml4dHVyZSAke2ZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlclxyXG4gICAgICAgID8gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyICtcclxuICAgICAgICAoZml4dHVyZURhdGE/LmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgID8gXCIgLSBGWC1cIiArIGZpeHR1cmVEYXRhLmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgIDogXCJcIilcclxuICAgICAgICA6IFwibmV3XCJcclxuICAgICAgfWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogdG9wWSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNlY29uZEJveFkgPSB0b3BZICsgaW5uZXJCb3hIZWlnaHQ7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3R0b21Cb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IFwiIzM0NDA1NFwiLFxyXG4gICAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgbGV0IGJvdHRvbVRleHQ7XHJcblxyXG4gICAgY29uc3QgdGV4dENvbnRlbnQgPSBnZXRGaXh0dXJlQ2FudmFzTGFiZWwoZml4dHVyZURhdGEpO1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZUJvdHRvbVRleHQgPSAoZnM6IGFueSkgPT5cclxuICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIGJvdHRvbVRleHQgPSBjcmVhdGVCb3R0b21UZXh0KGZvbnRTaXplKTtcclxuICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgfSB3aGlsZSAoYm90dG9tVGV4dC5oZWlnaHQgPiBpbm5lckJveEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB0b3BZICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCBtaWRDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICB0b3A6IG1pZFksXHJcbiAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBtaWRIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNoZWxmQ291bnQgPSBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8ubGVuZ3RoO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKHNoZWxmQ291bnQgKyAyKTtcclxuICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WX0gJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgICBRICR7bWlkWH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogcHJpbWFyeUZpbGwsXHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGZpcnN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmhlYWRlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5oZWFkZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogZmlyc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNyxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICBmaWxsOiBoZWFkZXJDb2xvcixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzaGVsdmVzOiBmYWJyaWMuT2JqZWN0W10gPSBbXTtcclxuICAgIGNvbnN0IHNoZWxmSGVpZ2h0ID0gbWlkSGVpZ2h0IC0gMiAqIGJveEhlaWdodDtcclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMVwiKSB7XHJcbiAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogc2hlbGZIZWlnaHQsXHJcbiAgICAgICAgLy8gc3Ryb2tlOiAnIzUxQzFGRicsXHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0ID0gZml4dHVyZURhdGE/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgIC8vIFdyYXAgdGV4dCB3aXRoaW4gZml4dHVyZSB3aWR0aCBhbmQgc2hyaW5rIHRvIGZpdCB2ZXJ0aWNhbCBzcGFjZVxyXG4gICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IHNoZWxmSGVpZ2h0ICogMC44O1xyXG4gICAgICBsZXQgZm9udFNpemVMMSA9IDY7XHJcblxyXG4gICAgICBjb25zdCBjcmVhdGVXcmFwcGVkVGV4dGJveCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGxldCB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZUwxID4gMikge1xyXG4gICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgaGVpZ2h0OiB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIDIsXHJcbiAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICByeDogMSxcclxuICAgICAgICByeTogMSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzaGVsdmVzLnB1c2goc2hlbGYsIGJhY2tncm91bmQsIHdyYXBwZWRUZXh0KTtcclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hlbGZDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChpICsgMSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0udHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGV4dCA9XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgLy8gTDI6IFNpbmdsZS1saW5lIGVsbGlwc2lzIGFnYWluc3QgZnVsbCBzaGVsZiB3aWR0aFxyXG4gICAgICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gNjtcclxuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBNYXRoLm1heCgwLCBtaWRXaWR0aCAtIGhvcml6b250YWxQYWRkaW5nKTtcclxuICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gYm94SGVpZ2h0ICogMC44O1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb250U2l6ZSA9IDU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSAodDogc3RyaW5nKSA9PlxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UZXh0KHQsIHtcclxuICAgICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBkaXNwbGF5VGV4dCA9IHRleHQ7XHJcbiAgICAgICAgbGV0IG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcblxyXG4gICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgIGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgIGxldCBsZWZ0SWR4ID0gMDtcclxuICAgICAgICAgIGxldCByaWdodElkeCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHdoaWxlIChsZWZ0SWR4IDwgcmlnaHRJZHgpIHtcclxuICAgICAgICAgICAgY29uc3QgbWlkSWR4ID0gTWF0aC5mbG9vcigobGVmdElkeCArIHJpZ2h0SWR4KSAvIDIpO1xyXG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0ZXh0LnNsaWNlKDAsIG1pZElkeCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGNhbmRpZGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgICAgICByaWdodElkeCA9IG1pZElkeDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZWZ0SWR4ID0gbWlkSWR4ICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGlzcGxheVRleHQgPSB0ZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnRJZHggLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1hdGgubWluKG1heFRleHRIZWlnaHQsIG1lYXN1cmVkLmhlaWdodCA/PyAxMCkgKyAyLFxyXG4gICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICByeDogMSxcclxuICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBmaW5hbFRleHQgPSBuZXcgZmFicmljLlRleHQoZGlzcGxheVRleHQsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGJhY2tncm91bmQsIGZpbmFsVGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMM1wiKSB7XHJcbiAgICAgIGNvbnN0IHNlcXVlbnRpYWxHcm91cHM6IHsgem9uZTogc3RyaW5nOyBzaGVsdmVzOiBhbnlbXSB9W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBzaGVsZiBvZiBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBzaGVsZi56b25lIHx8IFwiVW5rbm93blwiO1xyXG4gICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHMucHVzaCh7IHpvbmUsIHNoZWx2ZXM6IFtzaGVsZl0gfSk7XHJcbiAgICAgICAgICBwcmV2aW91c1pvbmUgPSB6b25lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzW3NlcXVlbnRpYWxHcm91cHMubGVuZ3RoIC0gMV0uc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjdXJyZW50U2hlbGZJbmRleCA9IDA7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHNlcXVlbnRpYWxHcm91cHMpIHtcclxuICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBTdGFydEluZGV4ID0gY3VycmVudFNoZWxmSW5kZXg7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBMZW5ndGggPSBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChncm91cFN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBncm91cEJvdHRvbVkgPSBncm91cFRvcFkgKyBib3hIZWlnaHQgKiBncm91cExlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbGZEYXRhID0gc2hlbHZlc0luR3JvdXBbal07XHJcbiAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGN1cnJlbnRTaGVsZkluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2hlbGZSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgICBzdHJva2U6IHByaW1hcnlTdHJva2UsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGZSZWN0KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2hlbGZEYXRhLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmID0gc2hlbGZEYXRhLnByb2R1Y3RQZXJTaGVsZiB8fCAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDE7IGMgPCBwcm9kdWN0UGVyU2hlbGY7IGMrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVYID0gbWlkWCArIGMgKiBjb2x1bW5TcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbExpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY3VycmVudFNoZWxmSW5kZXgrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgIFttaWRYLCBncm91cEJvdHRvbVksIG1pZFggKyBtaWRXaWR0aCwgZ3JvdXBCb3R0b21ZXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC0gbGFiZWxQYWRkaW5nLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwicmlnaHRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2gobGFiZWxUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWCA9IG1pZFggKyBtaWRXaWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJZID0gZ3JvdXBUb3BZICsgKGdyb3VwQm90dG9tWSAtIGdyb3VwVG9wWSkgLyAyO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uQnJhbmRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbkJyYW5kcy5hZGQoYnJhbmQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChbLi4uc2VjdGlvbkJyYW5kc10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNjtcclxuICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBDZW50ZXJUZXh0LCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZURhdGEudm1Db25maWcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB2bSA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnW2ldO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGZUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBzaGVsZkhlaWdodFNwYW4gPSBib3hIZWlnaHQgKiAoZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgIGxldCB2bUhlaWdodFB4OiBudW1iZXIgPSBzaGVsZkhlaWdodFNwYW47XHJcbiAgICAgICAgbGV0IHk6IG51bWJlciA9IHNoZWxmVG9wWTtcclxuXHJcbiAgICAgICAgaWYgKHZtLnlab25lICYmIHZtLnlab25lICE9PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgdm1IZWlnaHRQeCA9IHNoZWxmSGVpZ2h0U3BhbiAvIDM7XHJcblxyXG4gICAgICAgICAgc3dpdGNoICh2bS55Wm9uZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIDIgKiB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgeCA9IG1pZFg7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gbWlkV2lkdGg7XHJcblxyXG4gICAgICAgIGlmICghdm0ueFpvbmUgfHwgdm0ueFpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHNlY3Rpb25XaWR0aCA9IG1pZFdpZHRoIC8gMztcclxuICAgICAgICAgIHN3aXRjaCAodm0ueFpvbmUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYICsgc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWCArIDIgKiBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2bS52bUltYWdlVXJsKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB2bUltYWdlOiBhbnkgPSBhd2FpdCBmYWJyaWMuRmFicmljSW1hZ2UuZnJvbVVSTChcclxuICAgICAgICAgICAgICBgJHt0aGlzLmNkblVybH0ke3ZtLnZtSW1hZ2VVcmx9P3Y9JHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdm1JbWFnZS5zZXQoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHNjYWxlWDogd2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtSW1hZ2UpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgaW1hZ2UgZm9yIFZNOiAke3ZtLnZtSW1hZ2VVcmx9YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgdm1Cb3ggPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIGZpbGw6IHZtRmlsbCxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgICAgICAgIGxldCB2bVRleHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlVm1UZXh0ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh2bS52bU5hbWUgfHwgXCJcIiwge1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB2bVRleHQgPSBjcmVhdGVWbVRleHQoZm9udFNpemUpO1xyXG4gICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICB9IHdoaWxlICh2bVRleHQuaGVpZ2h0ID4gdm1IZWlnaHRQeCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUJveCwgdm1UZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXN0Qm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzaGVsZkNvdW50ICsgMSk7XHJcbiAgICBjb25zdCBsYXN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke21pZFh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7bWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgIH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgfSBcclxuICAgICAgICAgICAgICBMICR7bWlkWH0gJHtsYXN0Qm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBmb290ZXJGaWxsLFxyXG4gICAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBsYXN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmZvb3Rlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWd0aDogYm94SGVpZ2h0LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgYm90dG9tSGVpZ2h0ID0gKDMgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgYm90dG9tWCA9IHggKyAod2lkdGggLSBib3R0b21XaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgYm90dG9tWSA9IG1pZFkgKyBtaWRIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbUNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGJvdHRvbVgsXHJcbiAgICAgIHRvcDogYm90dG9tWSxcclxuICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVRleHRDb250ZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgU2hlbHZlcyAtICR7Zml4dHVyZURhdGEuc2hlbGZDb25maWc/Lmxlbmd0aH0gLiBQcm9kdWN0cyAtICAke2ZpeHR1cmVEYXRhLmZpeHR1cmVDYXBhY2l0eX0gLiBWTSAtICR7Zml4dHVyZURhdGEudm1Db25maWc/Lmxlbmd0aH1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogYm90dG9tWCArIGJvdHRvbVdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuXHJcbiAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFxyXG4gICAgICBbXHJcbiAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICB0b3BDb250YWluZXIsXHJcbiAgICAgICAgaW5uZXJUb3BCb3gsXHJcbiAgICAgICAgdG9wVGV4dCxcclxuICAgICAgICBpbm5lckJvdHRvbUJveCxcclxuICAgICAgICBib3R0b21UZXh0LFxyXG4gICAgICAgIG1pZENvbnRhaW5lcixcclxuICAgICAgICBmaXJzdEJveCxcclxuICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgLi4uc2hlbHZlcyxcclxuICAgICAgICBsYXN0Qm94LFxyXG4gICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgIGJvdHRvbUNvbnRhaW5lcixcclxuICAgICAgICBib3R0b21UZXh0Q29udGVudCxcclxuICAgICAgXSxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgaG92ZXJDdXJzb3I6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgICAgbG9ja01vdmVtZW50WDogdHJ1ZSxcclxuICAgICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICAgIGxvY2tSb3RhdGlvbjogdHJ1ZSxcclxuICAgICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAgICAgYW5nbGU6IGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24/LmFuZ2xlID8/IDAsXHJcbiAgICAgIH1cclxuICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICB3YWxsSW5kZXg6IG51bWJlcjtcclxuICAgICAgZml4dHVyZUluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGlzc3VlOiBib29sZWFuO1xyXG4gICAgICBpc3N1ZURhdGE6IGFueTtcclxuICAgICAgdGFza1R5cGU6IHN0cmluZztcclxuICAgICAgdm1Db25maWc6IFtdO1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVUeXBlID0gZml4dHVyZURhdGEuZml4dHVyZVR5cGU7XHJcbiAgICBmaXh0dXJlR3JvdXAud2FsbEluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI7XHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJZCA9IGZpeHR1cmVEYXRhLl9pZDtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZSA9IGZpeHR1cmVEYXRhLmlzc3VlO1xyXG4gICAgZml4dHVyZUdyb3VwLmlzc3VlRGF0YSA9IGZpeHR1cmVEYXRhLmlzc3VlRGF0YTtcclxuICAgIGZpeHR1cmVHcm91cC50YXNrVHlwZSA9IGZpeHR1cmVEYXRhLnRhc2tUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLnZtQ29uZmlnID0gZml4dHVyZURhdGEudm1Db25maWc7XHJcbiAgICBmaXh0dXJlR3JvdXAub2JqVHlwZSA9IFwiZml4dHVyZVwiO1xyXG5cclxuICAgIC8vIEFkZCBjbGljayBoYW5kbGVyIGRpcmVjdGx5IG9uIHRoZSBmaXh0dXJlIGdyb3VwXHJcbiAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZWRvd25cIiwgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgLy8gVXNlIHRoZSBmaXh0dXJlIGdyb3VwIGl0c2VsZiAod2hpY2ggaGFzIGFsbCB0aGUgZml4dHVyZSBwcm9wZXJ0aWVzKVxyXG4gICAgICAvLyBUaGUgZXZlbnQudGFyZ2V0IG1pZ2h0IGJlIGEgY2hpbGQgZWxlbWVudCwgc28gd2UgdXNlIGZpeHR1cmVHcm91cCBkaXJlY3RseVxyXG4gICAgICBpZiAoZml4dHVyZUdyb3VwICYmIChmaXh0dXJlR3JvdXAgYXMgYW55KS5maXh0dXJlSWQpIHtcclxuICAgICAgICB0aGlzLm9uRml4dHVyZUNsaWNrKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZml4dHVyZUdyb3VwKTtcclxuXHJcbiAgICAvLyBJZiBuZXdseSBhZGRlZCwgZm9jdXMgaXQgb25jZVxyXG4gICAgaWYgKChmaXh0dXJlRGF0YSBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZml4dHVyZUdyb3VwKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHsgfVxyXG4gICAgICBkZWxldGUgKGZpeHR1cmVEYXRhIGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpeHR1cmVHcm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgYTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgZWxlbWVudDogYW55XHJcbiAgKTogZmFicmljLkdyb3VwIHtcclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogMixcclxuICAgICAgcnk6IDIsXHJcbiAgICAgIGZpbGw6IFwiI0RBRjFGRlwiLFxyXG4gICAgICBzdHJva2U6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHRib3goZWxlbWVudC5maXh0dXJlTmFtZSwge1xyXG4gICAgICB3aWR0aDogd2lkdGggLSA4LFxyXG4gICAgICBmb250U2l6ZTogMTQsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICBzcGxpdEJ5R3JhcGhlbWU6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBoZWlnaHQgLSA4KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gKGhlaWdodCAtIDgpIC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFtyZWN0LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGFuZ2xlOiBhLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1JvdGF0aW9uOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRYOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJkZWZhdWx0XCIsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gXCJvdGhlcnNcIjtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50O1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIGlmICgoZWxlbWVudCBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZ3JvdXApO1xyXG4gICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICAgIGRlbGV0ZSAoZWxlbWVudCBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGNvbGxlY3RBbGxGaXh0dXJlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcyA9IFtdO1xyXG4gICAgXHJcbiAgICAvLyBDb2xsZWN0IHdhbGwgZml4dHVyZXNcclxuICAgIGlmICh0aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbikge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmZpeHR1cmVzICYmIEFycmF5LmlzQXJyYXkoZWxlbWVudC5maXh0dXJlcykpIHtcclxuICAgICAgICAgIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5wdXNoKC4uLmVsZW1lbnQuZml4dHVyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBDb2xsZWN0IGZsb29yIGZpeHR1cmVzXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKSkge1xyXG4gICAgICB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMucHVzaCguLi50aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRml4dHVyZUNsaWNrKHRhcmdldDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRhcmdldCB8fCAhdGhpcy5mbG9vckRhdGEpIHJldHVybjtcclxuICAgIFxyXG4gICAgY29uc3QgZml4dHVyZUlkID0gKHRhcmdldCBhcyBhbnkpLmZpeHR1cmVJZDtcclxuICAgIGNvbnN0IGZpeHR1cmVUeXBlID0gKHRhcmdldCBhcyBhbnkpLmZpeHR1cmVUeXBlO1xyXG4gICAgXHJcbiAgICBpZiAoIWZpeHR1cmVJZCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ZpeHR1cmUgY2xpY2s6IE5vIGZpeHR1cmVJZCBmb3VuZCBvbiB0YXJnZXQnLCB0YXJnZXQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEZpbmQgdGhlIGZpeHR1cmUgZGF0YVxyXG4gICAgbGV0IGZpeHR1cmVEYXRhOiBhbnkgPSBudWxsO1xyXG4gICAgXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxJbmRleCA9ICh0YXJnZXQgYXMgYW55KS53YWxsSW5kZXg7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbiAmJiB3YWxsSW5kZXggIT09IHVuZGVmaW5lZCAmJiB3YWxsSW5kZXggIT09IG51bGwpIHtcclxuICAgICAgICAvLyBGaW5kIHdhbGwgYnkgZWxlbWVudE51bWJlciAod2FsbEluZGV4IGlzIHRoZSBlbGVtZW50TnVtYmVyKVxyXG4gICAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAodzogYW55KSA9PiB3LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHdhbGwgJiYgd2FsbC5maXh0dXJlcykge1xyXG4gICAgICAgICAgLy8gQWx3YXlzIHVzZSBmaXh0dXJlSWQgdG8gZmluZCB0aGUgZml4dHVyZSAobW9yZSByZWxpYWJsZSB0aGFuIGluZGV4LWJhc2VkIGxvb2t1cClcclxuICAgICAgICAgIGZpeHR1cmVEYXRhID0gd2FsbC5maXh0dXJlcy5maW5kKChmOiBhbnkpID0+IGYuX2lkID09PSBmaXh0dXJlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIGZpeHR1cmVEYXRhID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZT8uZmluZCgoZjogYW55KSA9PiBmLl9pZCA9PT0gZml4dHVyZUlkKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCFmaXh0dXJlRGF0YSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ZpeHR1cmUgY2xpY2s6IEZpeHR1cmUgZGF0YSBub3QgZm91bmQnLCB7IFxyXG4gICAgICAgIGZpeHR1cmVJZCwgXHJcbiAgICAgICAgZml4dHVyZVR5cGUsIFxyXG4gICAgICAgIHdhbGxJbmRleDogKHRhcmdldCBhcyBhbnkpLndhbGxJbmRleCwgXHJcbiAgICAgICAgZml4dHVyZUluZGV4OiAodGFyZ2V0IGFzIGFueSkuZml4dHVyZUluZGV4LFxyXG4gICAgICAgIGZsb29yRGF0YTogdGhpcy5mbG9vckRhdGEgXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEVuc3VyZSB2bUNvbmZpZyBpcyBhbHdheXMgYW4gYXJyYXkgKGV2ZW4gaWYgZW1wdHkpIHRvIGF2b2lkIGRpc3BsYXkgaXNzdWVzXHJcbiAgICAvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdm1Db25maWcgbWlnaHQgYmUgbnVsbCwgdW5kZWZpbmVkLCBvciBub3QgYW4gYXJyYXlcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaXh0dXJlRGF0YS52bUNvbmZpZykpIHtcclxuICAgICAgZml4dHVyZURhdGEudm1Db25maWcgPSBbXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQ3JlYXRlIGEgZGVlcCBjbG9uZSB0byBlbnN1cmUgY2hhbmdlIGRldGVjdGlvbiB3b3Jrc1xyXG4gICAgY29uc3QgY2xvbmVkRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShmaXh0dXJlRGF0YSk7XHJcbiAgICBcclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVJZCxcclxuICAgICAgZml4dHVyZVR5cGU6IGZpeHR1cmVUeXBlLFxyXG4gICAgICB3YWxsSW5kZXg6ICh0YXJnZXQgYXMgYW55KS53YWxsSW5kZXgsXHJcbiAgICAgIGZpeHR1cmVJbmRleDogKHRhcmdldCBhcyBhbnkpLmZpeHR1cmVJbmRleCxcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgZml4dHVyZSBoYXMgcmVwbGFjZVJlc3BvbnNlRGF0YSAoZm9yIGJlZm9yZS9hZnRlciBjb21wYXJpc29uKVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzPy5maW5kKFxyXG4gICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3Py5zdG9yZU5hbWVcclxuICAgICk7XHJcbiAgICBcclxuICAgIC8vIElmIHRoaXMgZml4dHVyZSBtYXRjaGVzIHRoZSBmaW5kUmVzcG9uc2VEYXRhIGFuZCBoYXMgcmVwbGFjZVJlc3BvbnNlRGF0YSxcclxuICAgIC8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGZpeHR1cmUgZGF0YSBmb3IgYmVmb3JlL2FmdGVyIGNvbXBhcmlzb25cclxuICAgIGlmIChzdG9yZT8uZmluZFJlc3BvbnNlRGF0YSA9PT0gZml4dHVyZUlkICYmIHN0b3JlPy5yZXBsYWNlUmVzcG9uc2VEYXRhKSB7XHJcbiAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWxGaXh0dXJlRGF0YSBmcm9tIHRoZSBtYXAgKHBlcnNpc3RzIGV2ZW4gd2hlbiBjbGlja2luZyBvdGhlciBmaXh0dXJlcylcclxuICAgICAgY29uc3Qgc3RvcmVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuZ2V0KGZpeHR1cmVJZCk7XHJcbiAgICAgIGlmIChzdG9yZWRPcmlnaW5hbCkge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShzdG9yZWRPcmlnaW5hbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gSWYgbm90IGluIG1hcCAoc2hvdWxkbid0IGhhcHBlbiBpZiBhcHBseVN0b3JlZFJlc3BvbnNlRGF0YSByYW4pLCBcclxuICAgICAgICAvLyB1c2UgY3VycmVudCBmaXh0dXJlIGFzIGZhbGxiYWNrXHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gc3RydWN0dXJlZENsb25lKGNsb25lZERhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBObyByZXBsYWNlIGRhdGEgZm9yIHRoaXMgZml4dHVyZSwgY2xlYXIgb3JpZ2luYWxcclxuICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gRm9yY2UgY2hhbmdlIGRldGVjdGlvbiBieSBjcmVhdGluZyBhIG5ldyBvYmplY3QgcmVmZXJlbmNlXHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gY2xvbmVkRGF0YTtcclxuICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICBcclxuICAgICAgLy8gUmUtY2VudGVyIHBsYW5vZ3JhbSB3aGVuIHBhbmVsIG9wZW5zIChzaW1pbGFyIHRvIG1hbmFnZS1wbGFub2dyYW0pXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdDYW52YXMgJiYgdGhpcy5wcmV2aWV3Q2FudmFzQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZUNhbnZhcyh0aGlzLnByZXZpZXdDYW52YXMsIHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZik7XHJcbiAgICAgICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQodGhpcy5wcmV2aWV3Q2FudmFzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDQwMCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVJpZ2h0UGFuZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCA9ICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZDtcclxuICAgIFxyXG4gICAgLy8gUmVzaXplIGNhbnZhcyB3aGVuIHBhbmVsIGlzIHRvZ2dsZWRcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzICYmIHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplQ2FudmFzKHRoaXMucHJldmlld0NhbnZhcywgdGhpcy5wcmV2aWV3Q2FudmFzQ29udGFpbmVyUmVmKTtcclxuICAgICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQodGhpcy5wcmV2aWV3Q2FudmFzKTtcclxuICAgICAgfVxyXG4gICAgfSwgNDAwKTtcclxuICB9XHJcblxyXG4gIG9uSGlkZU1ldGFkYXRhVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzKSB7XHJcbiAgICAgIHRoaXMucHJldmlld0NhbnZhcy5kaXNwb3NlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm1haW4tY2FyZFwiPlxyXG4gICAgPGZvcm0+XHJcbiAgICAgICAgPCEtLSBTZWN0aW9uIDE6IEFkZCBTdG9yZXMgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLW51bWJlclwiPjE8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkFkZCBzdG9yZXM8L2gyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlLWlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZS1kcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwic2VhcmNoTW9kZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkTW9kZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmUtc2VsZWN0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzdG9yZU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5pdGlhbFNlbGVjdGVkXT1cInNlbGVjdGVkU3RvcmVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm9uU3RvcmVzU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGliLXN0b3JlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFwcGx5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkFwcGx5KClcIiBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBmaW5kTG9hZGluZyB8fCByZXBsYWNlTG9hZGluZyB8fCBzYXZpbmdEcmFmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzYXZpbmdEcmFmdCA/ICdTYXZpbmcuLi4nIDogJ0FwcGx5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDwhLS0gU2VjdGlvbiAyOiBDaG9vc2UgVGFyZ2V0IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXJvd1wiICpuZ0lmPVwiaGFzU3RvcmVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLW51bWJlclwiPjI8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkNob29zZSB0YXJnZXQ8L2gyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldC1idXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGFyZ2V0LWJ0blwiIFtjbGFzcy5hY3RpdmVdPVwidGFyZ2V0LnZhbHVlID09PSAnYm90aCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0YXJnZXRcIiB2YWx1ZT1cImJvdGhcIiBbZm9ybUNvbnRyb2xdPVwidGFyZ2V0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJvdGhcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRhcmdldC1idG5cIiBbY2xhc3MuYWN0aXZlXT1cInRhcmdldC52YWx1ZSA9PT0gJ21lcmNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInRhcmdldFwiIHZhbHVlPVwibWVyY2hcIiBbZm9ybUNvbnRyb2xdPVwidGFyZ2V0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE1lcmNoYW5kaXNlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0YXJnZXQtYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YXJnZXQudmFsdWUgPT09ICd2bSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0YXJnZXRcIiB2YWx1ZT1cInZtXCIgW2Zvcm1Db250cm9sXT1cInRhcmdldFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWaXN1YWwgTWVyY2hhbmRpc2VcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcGxhY2Utc2VsZWN0aW9uLXN0YWNrXCIgKm5nSWY9XCJuZWVkc1JlcGxhY2VCcmFuZCgpIHx8IG5lZWRzUmVwbGFjZVZtKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibmVlZHNSZXBsYWNlQnJhbmQoKVwiIGNsYXNzPVwicmVwbGFjZS1zZWxlY3Rpb24tcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVwbGFjZS1zZWxlY3Rpb24tdGFnXCI+TWVyY2hhbmRpc2UgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi1kcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidicmFuZE5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGaWVsZF09XCInYnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJicmFuZExpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyZXBsYWNlQnJhbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJuZWVkc1JlcGxhY2VWbSgpXCIgY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi10YWdcIj5WaXN1YWwgTWVyY2hhbmRpc2UgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi1kcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIid2bU5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGaWVsZF09XCIndm1OYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ViVGV4dEZpZWxkXT1cIid2bVR5cGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInJlcGxhY2VWbUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyZXBsYWNlVm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDwhLS0gU2VjdGlvbiAzOiBGaW5kIGFuZCBSZXBsYWNlIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXJvd1wiICpuZ0lmPVwiaGFzU3RvcmVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLW51bWJlclwiPjM8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlByb3ZpZGUgYW4gaW5zdHJ1Y3Rpb24gdG8gZmluZCBhbmQgcmVwbGFjZSBpbiB0aGUgc2VsZWN0ZWQgc3RvcmU8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIEZpbmQgYW5kIFJlcGxhY2UgSW5wdXRzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaW5kLXJlcGxhY2Utd3JhcHBlclwiICpuZ0lmPVwiaGFzU3RvcmVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaW5kLXJlcGxhY2UtYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaW5kLXJlcGxhY2UtbGFiZWxcIj5UYXJnZXQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbmQtcmVwbGFjZS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJJbnN0cnVjdCB3aGF0IHRvIGZpbmQgaXQgaW4gdGhlIHNlbGVjdGVkIHN0b3JlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpbmRQcm9tcHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1idG4tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1maW5kXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZpbmQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmluZExvYWRpbmcgfHwgcmVwbGFjZUxvYWRpbmcgfHwgIXNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3IHx8IChmaW5kUHJvbXB0LnZhbHVlICYmIGZpbmRFeGVjdXRlZCkgfHwgaXNGaW5kUHJvbXB0RnJvbUFwaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmluZExvYWRpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnUnVuJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjdcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjcgMTVcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjYuNzA3MSA4LjA3MTA3QzI3LjA5NzYgNy42ODA1NCAyNy4wOTc2IDcuMDQ3MzggMjYuNzA3MSA2LjY1Njg1TDIwLjM0MzEgMC4yOTI4OTNDMTkuOTUyNiAtMC4wOTc2MzEgMTkuMzE5NSAtMC4wOTc2MzEgMTguOTI4OSAwLjI5Mjg5M0MxOC41Mzg0IDAuNjgzNDE4IDE4LjUzODQgMS4zMTY1OCAxOC45Mjg5IDEuNzA3MTFMMjQuNTg1OCA3LjM2Mzk2TDE4LjkyODkgMTMuMDIwOEMxOC41Mzg0IDEzLjQxMTMgMTguNTM4NCAxNC4wNDQ1IDE4LjkyODkgMTQuNDM1QzE5LjMxOTUgMTQuODI1NiAxOS45NTI2IDE0LjgyNTYgMjAuMzQzMSAxNC40MzVMMjYuNzA3MSA4LjA3MTA3Wk0wIDcuMzYzOTZWOC4zNjM5NkgyNlY3LjM2Mzk2VjYuMzYzOTZIMFY3LjM2Mzk2WlwiIGZpbGw9XCIjOThBMkIzXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbmQtcmVwbGFjZS1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbmQtcmVwbGFjZS1sYWJlbFwiPkNoYW5nZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmluZC1yZXBsYWNlLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB3aGF0IHdvdWxkIHlvdSBsaWtlIHRvIHJlcGxhY2UgaW4gdGhlIHNlbGVjdGVkIGZpeHR1cmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicmVwbGFjZVByb21wdFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJ0bi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tcmVwbGFjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlcGxhY2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWZpbmRQcm9tcHQudmFsdWUgfHwgIWhhc1JlcGxhY2VTZWxlY3Rpb24oKSB8fCBmaW5kTG9hZGluZyB8fCByZXBsYWNlTG9hZGluZyB8fCAhZ2V0Q3VycmVudFN0b3JlRmluZFJlc3BvbnNlRGF0YSgpIHx8IHJlcGxhY2VFeGVjdXRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVwbGFjZUxvYWRpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnVXBkYXRlJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIFByZXZpZXcgU2VjdGlvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy13cmFwcGVyXCIgW25nU3R5bGVdPVwieydkaXNwbGF5JzogaGFzU3RvcmVzID8gJ2Jsb2NrJyA6ICdub25lJ31cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTAgcHJldmlldy1sYXlvdXRcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTGVmdCBDb2x1bW46IENhbnZhcyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBbbmdDbGFzc109XCJ7IFxyXG4gICAgICAgICAgICAgICAgICAgICdjb2wtNic6ICFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgJiYgc2VsZWN0ZWRGaXh0dXJlRGF0YSAmJiBzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICAnY29sLTknOiAhaXNSaWdodFBhbmVsQ29sbGFwc2VkICYmIHNlbGVjdGVkRml4dHVyZURhdGEgJiYgIXNob3VsZFNob3dCZWZvcmVBZnRlcigpLCBcclxuICAgICAgICAgICAgICAgICAgICAnY29sLTEyJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkIHx8ICFzZWxlY3RlZEZpeHR1cmVEYXRhIFxyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQgZ2FwLTMgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN0b3JlIERyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLWRyb3Bkb3duIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNTdG9yZXMgJiYgc3RvcmVEcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInN0b3JlRHJvcGRvd25JdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInc3RvcmVJZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEZpZWxkXT1cIidzdG9yZU5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwic2VsZWN0ZWRTdG9yZVZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25TdG9yZVNlbGVjdGVkRm9yUHJldmlldygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXN0b3JlLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb250ZW50IEFyZWEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQcmV2aWV3IFRpdGxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmdy1zZW1pYm9sZCBtYi0xXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjMWQyOTM5O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXZpZXcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnZXRTdG9yZUNvdW50KCkgPiAwXCIgc3R5bGU9XCJmb250LXdlaWdodDogNDAwOyBjb2xvcjogIzY2NzA4NTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7IGdldFN0b3JlQ291bnQoKSB9fSB7eyBnZXRTdG9yZUNvdW50KCkgPT09IDEgPyAnU3RvcmUnIDogJ1N0b3JlcycgfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERlc2NyaXB0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjNDc1NDY3O1wiPkNoZWNrIGlmIHRoZSBwcm9tcHQgZml0IGludG8gdGhlIGV4cGVjdGVkIHJlc3VsdHMgaW4gb3JkZXIgdG8gcHJvY2VlZCB0byByZXZpZXcgYW5kIGFwcHJvdmU8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIENhbnZhcyBDb250YWluZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbnZhcy1jb250YWluZXJcIiAjcHJldmlld0NhbnZhc0NvbnRhaW5lciBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiBzZWxlY3RlZFN0b3JlRm9yUHJldmlldyA/ICdibG9jaycgOiAnbm9uZSd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYW52YXMtbG9hZGluZ1wiICpuZ0lmPVwiY2FudmFzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkxvYWRpbmcuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjYW52YXMgI3ByZXZpZXdDYW52YXM+PC9jYW52YXM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0IENvbHVtbjogRml4dHVyZSBQcmV2aWV3IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtcHJldmlldy1wYW5lbFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkRml4dHVyZURhdGEgJiYgIWlzUmlnaHRQYW5lbENvbGxhcHNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbC02Jzogc2hvdWxkU2hvd0JlZm9yZUFmdGVyKCksICdjb2wtMyc6ICFzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSA/ICc2ODBweCcgOiAnMzQwcHgnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInMtY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBhbmVsIEhlYWRlciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtcHJldmlldy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicHJvZHVjdC1pbWFnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiUHJvZHVjdFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZHVjdC1pbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+e3sgZ2V0Rml4dHVyZUxhYmVsKCkgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwZWNzLWNvbnRhaW5lclwiICpuZ0lmPVwiZ2V0Rml4dHVyZUNhdGVnb3J5KCkgfHwgZ2V0Rml4dHVyZVdpZHRoKCkgfHwgZ2V0U2hlbGZDb3VudCgpID4gMCB8fCBnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BlYy10ZXh0XCIgKm5nSWY9XCJnZXRGaXh0dXJlQ2F0ZWdvcnkoKVwiPnt7IGdldEZpeHR1cmVDYXRlZ29yeSgpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvdFwiICpuZ0lmPVwiZ2V0Rml4dHVyZUNhdGVnb3J5KCkgJiYgKGdldEZpeHR1cmVXaWR0aCgpIHx8IGdldFNoZWxmQ291bnQoKSA+IDAgfHwgZ2V0Rml4dHVyZUNhcGFjaXR5KCkgPiAwKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGVjLXRleHRcIiAqbmdJZj1cImdldEZpeHR1cmVXaWR0aCgpXCI+e3sgZ2V0Rml4dHVyZVdpZHRoKCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90XCIgKm5nSWY9XCJnZXRGaXh0dXJlV2lkdGgoKSAmJiAoZ2V0U2hlbGZDb3VudCgpID4gMCB8fCBnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDApXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwZWMtdGV4dFwiICpuZ0lmPVwiZ2V0U2hlbGZDb3VudCgpID4gMFwiPnt7IGdldFNoZWxmQ291bnQoKSB9fSB7eyBnZXRTaGVsZkNvdW50KCkgPT09IDEgPyAnU2hlbGYnIDogJ1NoZWx2ZXMnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvdFwiICpuZ0lmPVwiZ2V0U2hlbGZDb3VudCgpID4gMCAmJiBnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDBcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BlYy10ZXh0XCIgKm5nSWY9XCJnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDBcIj57eyBnZXRGaXh0dXJlQ2FwYWNpdHkoKSB9fSBDYXBhY2l0eTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiaGlkZU1ldGFkYXRhXCIgWyhuZ01vZGVsKV09XCJoaWRlTWV0YWRhdGFcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiAoY2hhbmdlKT1cIm9uSGlkZU1ldGFkYXRhVG9nZ2xlKClcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbXMtMlwiIGZvcj1cImhpZGVNZXRhZGF0YVwiIHN0eWxlPVwiY29sb3I6IGJsYWNrOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGlkZSBtZXRhZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaXh0dXJlIENvbXBvbmVudCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtcHJldmlldy1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgQmVmb3JlL0FmdGVyIHdoZW4gZmluZCBkYXRhIGV4aXN0cyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKVwiIGNsYXNzPVwiYmVmb3JlLWFmdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZWZvcmUtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cInNlY3Rpb24tbGFiZWwgbWItMFwiPkJlZm9yZTwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLWZpeHR1cmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeHR1cmVdPVwiZ2V0T3JpZ2luYWxGaXh0dXJlRm9yRGlzcGxheSgpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDb2xvcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dWTXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dCQ3NdPVwiIWhpZGVNZXRhZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItc3RvcmUtZml4dHVyZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFmdGVyLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzZWN0aW9uLWxhYmVsIG1iLTBcIj5BZnRlcjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLWZpeHR1cmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeHR1cmVdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q29sb3JzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Vk1zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QkNzXT1cIiFoaWRlTWV0YWRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImlzQWZ0ZXJEaXNhYmxlZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1zdG9yZS1maXh0dXJlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgc2luZ2xlIGZpeHR1cmUgd2hlbiBubyBmaW5kIGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3VsZFNob3dCZWZvcmVBZnRlcigpICYmIHNlbGVjdGVkRml4dHVyZURhdGFcIiBjbGFzcz1cInNpbmdsZS1maXh0dXJlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXh0dXJlLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zdG9yZS1maXh0dXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeHR1cmVdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDb2xvcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZNc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QkNzXT1cIiFoaWRlTWV0YWRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItc3RvcmUtZml4dHVyZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQ29sbGFwc2UgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLWhhbmRsZXIgcmlnaHRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yNzMwOCAxMi42MzZMNC42MzY3MiA4Ljk5OTY0TDguMjczMDggNS4zNjMyOE0xMy4zNjQgMTIuNjM2TDkuNzI3NjMgOC45OTk2NEwxMy4zNjQgNS4zNjMyOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS43MjY5MiA1LjM2Mzk5TDEzLjM2MzMgOS4wMDAzNkw5LjcyNjkyIDEyLjYzNjdNNC42MzYwMSA1LjM2Mzk5TDguMjcyMzcgOS4wMDAzNkw0LjYzNjAxIDEyLjYzNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gTm8gUHJldmlldyBTZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuby1wcmV2aWV3XCIgKm5nSWY9XCJoYXNTdG9yZXMgJiYgIXNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3XCI+XHJcbiAgICAgICAgICAgIDxkaXYgPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjMxNVwiIGhlaWdodD1cIjE1NVwiIHZpZXdCb3g9XCIwIDAgMzE1IDE1NVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAzLjgxIDQ3LjAxOTVDODkuNTQ2MyA0Ny4wMTk3IDc3Ljk4MzQgNTguNTgyNCA3Ny45ODM0IDcyLjg0NTdDNzcuOTgzNCA3OC43NjE3IDczLjk4MDMgODUuNTA1OSA2OC4wNjQzIDg1LjUwNTlINDUuMjU4OEMzMC45OTUzIDg1LjUwNTkgMTkuNDMxNiA5Ny4wNjg2IDE5LjQzMTYgMTExLjMzMkMxOS40MzE2IDEyNS41OTYgMzAuOTk1MyAxMzcuMTU4IDQ1LjI1ODggMTM3LjE1OEgxODMuMzU3QzIwMC4yNDggMTM3LjE1OCAyMTYuMzIgMTIzLjk5MiAyMzMuMjEgMTIzLjk5MkgyOTkuMjQ1QzMwNCAxMjMuOTkyIDMwNy44NTQgMTIwLjEzNyAzMDcuODU0IDExNS4zODNDMzA3Ljg1MyAxMTAuNjI5IDMwMy45OTkgMTA2Ljc3NCAyOTkuMjQ1IDEwNi43NzRIMjExLjYyNUMyMDkuOTggMTA2Ljc3NCAyMDguNTg4IDEwNS41NTMgMjA4LjEyIDEwMy45NzZDMjA3LjM4MSAxMDEuNDg2IDIwOS4wODIgOTguNjcxOSAyMTEuNjc5IDk4LjY3MTlIMjQxLjkwOUMyNTYuMTcyIDk4LjY3MTcgMjY3LjczNSA4Ny4xMDkgMjY3LjczNSA3Mi44NDU3QzI2Ny43MzUgNTguNTgyNCAyNTYuMTcyIDQ3LjAxOTggMjQxLjkwOSA0Ny4wMTk1SDEwMy44MVpcIiBmaWxsPVwiI0VBRUNGMFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjI0MC42OTRcIiBoZWlnaHQ9XCIxNi45OTU2XCIgcng9XCI4LjQ5NzhcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMjQ2LjYwMyA0OC44NTc0KVwiIGZpbGw9XCIjRUFFQ0YwXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI1LjQyMTQ3XCIgY3k9XCI1LjQyMTQ3XCIgcj1cIjUuNDIxNDdcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgNTYuMjk3OSAxMTMuMjgxKVwiIGZpbGw9XCIjNkJDQUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIzLjI1Mjg4XCIgY3k9XCIzLjI1Mjg4XCIgcj1cIjMuMjUyODhcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMjQ0Ljk2NSA2OC44MjYyKVwiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIzLjI1Mjg4XCIgY3k9XCIzLjI1Mjg4XCIgcj1cIjMuMjUyODhcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMjE1LjY4OSAxMy41MjczKVwiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyLjE2ODU5XCIgY3k9XCIyLjE2ODU5XCIgcj1cIjIuMTY4NTlcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMTA0LjAwNiAxMzguMjIxKVwiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI2OC41MDFcIiB5PVwiNDQuMTUyM1wiIHdpZHRoPVwiMTY2Ljk5OVwiIGhlaWdodD1cIjk3LjkzNzFcIiByeD1cIjE1LjEwMTVcIiBmaWxsPVwiIzZCQ0FGRlwiIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIzXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXNrIGlkPVwicGF0aC04LWluc2lkZS0xXzkzNl8xNTAzODNcIiBmaWxsPVwid2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkzLjExNzIgMTlDOTQuMDYyNSAxOSA5NC45ODkyIDE5LjA4MjggOTUuODg4NyAxOS4yNDIyVjExNi43ODRDOTQuOTg5MiAxMTYuNjI1IDk0LjA2MjUgMTE2LjU0MiA5My4xMTcyIDExNi41NDJIODIuNzc0NEM3NC4wNjQyIDExNi41NDIgNjcuMDAzMSAxMjMuNjAzIDY3LjAwMjkgMTMyLjMxM1YzNC43NzE1QzY3LjAwMjkgMjYuMDYxMiA3NC4wNjQxIDE5IDgyLjc3NDQgMTlIOTMuMTE3MlpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXNrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOTMuMTE3MiAxOUM5NC4wNjI1IDE5IDk0Ljk4OTIgMTkuMDgyOCA5NS44ODg3IDE5LjI0MjJWMTE2Ljc4NEM5NC45ODkyIDExNi42MjUgOTQuMDYyNSAxMTYuNTQyIDkzLjExNzIgMTE2LjU0Mkg4Mi43NzQ0Qzc0LjA2NDIgMTE2LjU0MiA2Ny4wMDMxIDEyMy42MDMgNjcuMDAyOSAxMzIuMzEzVjM0Ljc3MTVDNjcuMDAyOSAyNi4wNjEyIDc0LjA2NDEgMTkgODIuNzc0NCAxOUg5My4xMTcyWlwiIGZpbGw9XCIjNkJDQUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOTMuMTE3MiAxOUw5My4xMTczIDE2SDkzLjExNzJWMTlaTTk1Ljg4ODcgMTkuMjQyMkg5OC44ODg3VjE2LjcyNzFMOTYuNDEyMiAxNi4yODgyTDk1Ljg4ODcgMTkuMjQyMlpNOTUuODg4NyAxMTYuNzg0TDk1LjM2NTEgMTE5LjczOEw5OC44ODg3IDEyMC4zNjNWMTE2Ljc4NEg5NS44ODg3Wk05My4xMTcyIDExNi41NDJMOTMuMTE3MyAxMTMuNTQySDkzLjExNzJWMTE2LjU0MlpNNjcuMDAyOSAxMzIuMzEzSDY0LjAwMjlMNzAuMDAyOSAxMzIuMzE0TDY3LjAwMjkgMTMyLjMxM1pNOTMuMTE3MiAxOUw5My4xMTcxIDIyQzkzLjg4NzIgMjIgOTQuNjM4NyAyMi4wNjc0IDk1LjM2NTEgMjIuMTk2MUw5NS44ODg3IDE5LjI0MjJMOTYuNDEyMiAxNi4yODgyQzk1LjMzOTYgMTYuMDk4MSA5NC4yMzc3IDE2IDkzLjExNzMgMTZMOTMuMTE3MiAxOVpNOTUuODg4NyAxOS4yNDIySDkyLjg4ODdWMTE2Ljc4NEg5NS44ODg3SDk4Ljg4ODdWMTkuMjQyMkg5NS44ODg3Wk05NS44ODg3IDExNi43ODRMOTYuNDEyMiAxMTMuODNDOTUuMzM5NiAxMTMuNjQgOTQuMjM3NyAxMTMuNTQyIDkzLjExNzMgMTEzLjU0Mkw5My4xMTcyIDExNi41NDJMOTMuMTE3MSAxMTkuNTQyQzkzLjg4NzIgMTE5LjU0MiA5NC42Mzg3IDExOS42MDkgOTUuMzY1MSAxMTkuNzM4TDk1Ljg4ODcgMTE2Ljc4NFpNOTMuMTE3MiAxMTYuNTQyVjExMy41NDJIODIuNzc0NFYxMTYuNTQyVjExOS41NDJIOTMuMTE3MlYxMTYuNTQyWk04Mi43NzQ0IDExNi41NDJWMTEzLjU0MkM3Mi40MDczIDExMy41NDIgNjQuMDAzMiAxMjEuOTQ3IDY0LjAwMjkgMTMyLjMxM0w2Ny4wMDI5IDEzMi4zMTNMNzAuMDAyOSAxMzIuMzE0QzcwLjAwMzEgMTI1LjI2IDc1LjcyMTIgMTE5LjU0MiA4Mi43NzQ0IDExOS41NDJWMTE2LjU0MlpNNjcuMDAyOSAxMzIuMzEzSDcwLjAwMjlWMzQuNzcxNUg2Ny4wMDI5SDY0LjAwMjlWMTMyLjMxM0g2Ny4wMDI5Wk02Ny4wMDI5IDM0Ljc3MTVINzAuMDAyOUM3MC4wMDI5IDI3LjcxOCA3NS43MjEgMjIgODIuNzc0NCAyMlYxOVYxNkM3Mi40MDcyIDE2IDY0LjAwMjkgMjQuNDA0MyA2NC4wMDI5IDM0Ljc3MTVINjcuMDAyOVpNODIuNzc0NCAxOVYyMkg5My4xMTcyVjE5VjE2SDgyLjc3NDRWMTlaXCIgZmlsbD1cIiMwMEEzRkZcIiBtYXNrPVwidXJsKCNwYXRoLTgtaW5zaWRlLTFfOTM2XzE1MDM4MylcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9XCI3Ni45NjE5XCIgeTE9XCI0Mi42NTIzXCIgeDI9XCI3Ni45NjE5XCIgeTI9XCI4NC40ODgxXCIgc3Ryb2tlPVwiIzk5REFGRlwiIHN0cm9rZS13aWR0aD1cIjMuOTg0MzZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyMTguMjA2XCIgY3k9XCI3MC4xNzU1XCIgcj1cIjMuMjk2NjNcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjExMS43ODdcIiBjeT1cIjU1LjE2N1wiIHI9XCIyLjUyNjM3XCIgZmlsbD1cIiM5OURBRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjk5LjM4NDVcIiBjeT1cIjEyNC45ODZcIiByPVwiMy40NDUwNVwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzNS41MjkgMzMuNDcxN0MxNTEuMjg1IDI0LjM3NDkgMTcxLjQzMiAyOS43NzMyIDE4MC41MjkgNDUuNTI5M0MxODguNTYgNTkuNDM5OCAxODUuMjkxIDc2Ljc3MDcgMTczLjU3MyA4Ni45MDA0TDE5My40NTcgMTIxLjMzOUMxOTQuOTMyIDEyMy44OTQgMTk0LjA1NiAxMjcuMTYxIDE5MS41MDEgMTI4LjYzNkMxODguOTQ2IDEzMC4xMTEgMTg1LjY3OSAxMjkuMjM2IDE4NC4yMDQgMTI2LjY4MUwxNjQuNDY2IDkyLjQ5MzJDMTQ5LjQ0NyA5OC42NTUyIDEzMS44MTQgOTIuOTIgMTIzLjQ3MiA3OC40NzE3QzExNC4zNzUgNjIuNzE1NiAxMTkuNzczIDQyLjU2ODUgMTM1LjUyOSAzMy40NzE3Wk0xNzIuNjk4IDUwLjA1MThDMTY2LjA5OSAzOC42MjA5IDE1MS40ODIgMzQuNzA0MSAxNDAuMDUxIDQxLjMwMzdDMTI4LjYyIDQ3LjkwMzUgMTI0LjcwMyA2Mi41MjA0IDEzMS4zMDMgNzMuOTUxMkMxMzcuOTAyIDg1LjM4MTcgMTUyLjUxOSA4OS4yOTc3IDE2My45NSA4Mi42OTgyQzE3NS4zODEgNzYuMDk4NyAxNzkuMjk3IDYxLjQ4MjYgMTcyLjY5OCA1MC4wNTE4WlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTUzLjAwMVwiIGN5PVwiNTcuMDAxN1wiIHI9XCIyMy44OTk0XCIgdHJhbnNmb3JtPVwicm90YXRlKC0zMCAxNTMuMDAxIDU3LjAwMTcpXCIgZmlsbD1cIiM5OURBRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hc2sgaWQ9XCJwYXRoLTE2LWluc2lkZS0yXzkzNl8xNTAzODNcIiBmaWxsPVwid2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1My4zODQgNDAuOTk1N0MxNTMuNDM1IDM5LjcwMDEgMTUyLjQyMyAzOC41OTI3IDE1MS4xMzEgMzguNzA5NUMxNDguODU4IDM4LjkxNTEgMTQ2LjYzNiAzOS41NDkxIDE0NC41ODYgNDAuNTg1NEMxNDEuODM1IDQxLjk3NiAxMzkuNDg0IDQ0LjA0NSAxMzcuNzU1IDQ2LjU5N0MxMzYuMDI2IDQ5LjE0OSAxMzQuOTc3IDUyLjA5OTYgMTM0LjcwNiA1NS4xNzAxQzEzNC41MDQgNTcuNDU4MyAxMzQuNzM5IDU5Ljc1NjggMTM1LjM5MSA2MS45NDQ3QzEzNS43NjIgNjMuMTg3MiAxMzcuMTY2IDYzLjcxNjkgMTM4LjM1IDYzLjE4OTFDMTM5LjUzNCA2Mi42NjEyIDE0MC4wNDQgNjEuMjc0NiAxMzkuNzMgNjAuMDE2NUMxMzkuMzcgNTguNTczNSAxMzkuMjUxIDU3LjA3NTMgMTM5LjM4MyA1NS41ODNDMTM5LjU4NCA1My4zMDc4IDE0MC4zNjEgNTEuMTIxNCAxNDEuNjQyIDQ5LjIzMDRDMTQyLjkyNCA0Ny4zMzk0IDE0NC42NjYgNDUuODA2MyAxNDYuNzA0IDQ0Ljc3NThDMTQ4LjA0MSA0NC4xIDE0OS40NzcgNDMuNjU1MSAxNTAuOTUgNDMuNDU0MkMxNTIuMjM1IDQzLjI3OTIgMTUzLjMzMyA0Mi4yOTEzIDE1My4zODQgNDAuOTk1N1pcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXNrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUzLjM4NCA0MC45OTU3QzE1My40MzUgMzkuNzAwMSAxNTIuNDIzIDM4LjU5MjcgMTUxLjEzMSAzOC43MDk1QzE0OC44NTggMzguOTE1MSAxNDYuNjM2IDM5LjU0OTEgMTQ0LjU4NiA0MC41ODU0QzE0MS44MzUgNDEuOTc2IDEzOS40ODQgNDQuMDQ1IDEzNy43NTUgNDYuNTk3QzEzNi4wMjYgNDkuMTQ5IDEzNC45NzcgNTIuMDk5NiAxMzQuNzA2IDU1LjE3MDFDMTM0LjUwNCA1Ny40NTgzIDEzNC43MzkgNTkuNzU2OCAxMzUuMzkxIDYxLjk0NDdDMTM1Ljc2MiA2My4xODcyIDEzNy4xNjYgNjMuNzE2OSAxMzguMzUgNjMuMTg5MUMxMzkuNTM0IDYyLjY2MTIgMTQwLjA0NCA2MS4yNzQ2IDEzOS43MyA2MC4wMTY1QzEzOS4zNyA1OC41NzM1IDEzOS4yNTEgNTcuMDc1MyAxMzkuMzgzIDU1LjU4M0MxMzkuNTg0IDUzLjMwNzggMTQwLjM2MSA1MS4xMjE0IDE0MS42NDIgNDkuMjMwNEMxNDIuOTI0IDQ3LjMzOTQgMTQ0LjY2NiA0NS44MDYzIDE0Ni43MDQgNDQuNzc1OEMxNDguMDQxIDQ0LjEgMTQ5LjQ3NyA0My42NTUxIDE1MC45NSA0My40NTQyQzE1Mi4yMzUgNDMuMjc5MiAxNTMuMzMzIDQyLjI5MTMgMTUzLjM4NCA0MC45OTU3WlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiNlwiIG1hc2s9XCJ1cmwoI3BhdGgtMTYtaW5zaWRlLTJfOTM2XzE1MDM4MylcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMzYuNTI5IDI4LjQ3MTdDMTUyLjI4NSAxOS4zNzQ5IDE3Mi40MzIgMjQuNzczMiAxODEuNTI5IDQwLjUyOTNDMTg5LjU2IDU0LjQzOTggMTg2LjI5MSA3MS43NzA3IDE3NC41NzMgODEuOTAwNEwxOTQuNDU3IDExNi4zMzlDMTk1LjkzMiAxMTguODk0IDE5NS4wNTYgMTIyLjE2MSAxOTIuNTAxIDEyMy42MzZDMTg5Ljk0NiAxMjUuMTExIDE4Ni42NzkgMTI0LjIzNiAxODUuMjA0IDEyMS42ODFMMTY1LjQ2NiA4Ny40OTMyQzE1MC40NDcgOTMuNjU1MiAxMzIuODE0IDg3LjkyIDEyNC40NzIgNzMuNDcxN0MxMTUuMzc1IDU3LjcxNTYgMTIwLjc3MyAzNy41Njg1IDEzNi41MjkgMjguNDcxN1pNMTczLjY5OCA0NS4wNTE4QzE2Ny4wOTkgMzMuNjIwOSAxNTIuNDgyIDI5LjcwNDEgMTQxLjA1MSAzNi4zMDM3QzEyOS42MiA0Mi45MDM1IDEyNS43MDMgNTcuNTIwNCAxMzIuMzAzIDY4Ljk1MTJDMTM4LjkwMiA4MC4zODE3IDE1My41MTkgODQuMjk3NyAxNjQuOTUgNzcuNjk4MkMxNzYuMzgxIDcxLjA5ODcgMTgwLjI5NyA1Ni40ODI2IDE3My42OTggNDUuMDUxOFpcIiBmaWxsPVwiIzAwQTNGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGgzPk5vIHByZXZpZXcgeWV0PC9oMz5cclxuICAgICAgICAgICAgPHA+QWRkIGEgZmluZCBhbmQgcmVwbGFjZW1lbnQgdG8gcHJldmlldy48L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbiBTZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uLXNlY3Rpb25cIiAqbmdJZj1cImhhc1N0b3Jlc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFwcGx5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblJldmlld0FuZFJlcGxhY2UoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IGZpbmRMb2FkaW5nIHx8IHJlcGxhY2VMb2FkaW5nIHx8IGJhdGNoUHJvY2Vzc2luZyB8fCAhZmluZFByb21wdC52YWx1ZSB8fCAhaGFzUmVwbGFjZVNlbGVjdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBiYXRjaFByb2Nlc3NpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnUmV2aWV3IEFuZCBSZXBsYWNlJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuPC9kaXY+XHJcbiJdfQ==
|