tango-app-ui-store-builder 1.2.16 → 1.2.18
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/access-denied/access-denied.component.mjs +31 -0
- package/esm2022/lib/components/collection-update-ai/collection-update-ai.component.mjs +3 -3
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +3 -3
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template-table/find-and-replace/find-and-replace.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +25 -3
- package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +9 -3
- package/esm2022/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.mjs +9 -3
- package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +133 -21
- package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +25 -9
- package/esm2022/lib/components/plano-library/fixture-library/fixture-library.component.mjs +28 -5
- package/esm2022/lib/components/plano-tools/allow-edit/allow-edit.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +5 -4
- package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +6 -5
- package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/delete-task/delete-task.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/layout-touchup/layout-touchup.component.mjs +134 -0
- package/esm2022/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.mjs +5103 -0
- package/esm2022/lib/components/plano-tools/modify-fixture-numbers/modify-fixture-numbers.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +6 -5
- package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +4 -3
- package/esm2022/lib/components/plano-tools/tool-page-header/tool-page-header.component.mjs +22 -0
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +27 -8
- package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +3 -3
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +3 -3
- package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +3 -3
- package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +3 -3
- package/esm2022/lib/components/popups/publish-plano-modal/publish-plano-modal.component.mjs +1 -1
- package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -3
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +3 -3
- package/esm2022/lib/functions/feature-access.guard.mjs +20 -0
- package/esm2022/lib/functions/plano.function.mjs +22 -1
- package/esm2022/lib/services/store-builder.service.mjs +24 -3
- package/esm2022/lib/tango-store-builder-routing.module.mjs +35 -55
- package/esm2022/lib/tango-store-builder.module.mjs +14 -2
- package/fesm2022/tango-app-ui-store-builder.mjs +5863 -376
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/access-denied/access-denied.component.d.ts +18 -0
- package/lib/components/fixture-template-table/fixture-template-table.component.d.ts +6 -0
- 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/verification-feedback/verification-feedback.component.d.ts +1 -0
- package/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.d.ts +1 -0
- package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +8 -0
- package/lib/components/plano-configurations/plano-configurations.component.d.ts +9 -1
- package/lib/components/plano-library/fixture-library/fixture-library.component.d.ts +5 -1
- package/lib/components/plano-tools/layout-touchup/layout-touchup.component.d.ts +50 -0
- package/lib/components/plano-tools/layout-touchup/touchup-editor/touchup-editor.component.d.ts +331 -0
- package/lib/components/plano-tools/tool-page-header/tool-page-header.component.d.ts +8 -0
- package/lib/components/plano-tools/tools-parent/tools-parent.component.d.ts +4 -2
- package/lib/functions/feature-access.guard.d.ts +9 -0
- package/lib/functions/plano.function.d.ts +9 -0
- package/lib/services/store-builder.service.d.ts +16 -0
- package/lib/tango-store-builder.module.d.ts +62 -58
- package/package.json +1 -1
package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output, ViewChild, } from "@angular/core";
|
|
2
2
|
import * as fabric from "fabric";
|
|
3
3
|
import { debounceTime, fromEvent, Subject, takeUntil } from "rxjs";
|
|
4
|
-
import { getFixtureCanvasLabel } from "../../../functions/plano.function";
|
|
4
|
+
import { getFixtureCanvasLabel, getFixtureProductCapacity } from "../../../functions/plano.function";
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "tango-app-ui-global";
|
|
7
7
|
export class StorePlanoTreeViewComponent {
|
|
@@ -798,7 +798,7 @@ export class StorePlanoTreeViewComponent {
|
|
|
798
798
|
fill: "transparent",
|
|
799
799
|
});
|
|
800
800
|
const actualShelfCount = mf?.shelfConfig?.filter((s) => s.shelfType != "vmonly")?.length ?? 0;
|
|
801
|
-
const bottomTextContent = new fabric.Textbox(`Shelves - ${actualShelfCount} . Products - ${mf.
|
|
801
|
+
const bottomTextContent = new fabric.Textbox(`Shelves - ${actualShelfCount} . Products - ${getFixtureProductCapacity(mf.shelfConfig)} . VM - ${mf.vmConfig.length}`, {
|
|
802
802
|
left: bottomX + bottomWidth / 2,
|
|
803
803
|
top: bottomY + bottomHeight / 2 + 4,
|
|
804
804
|
fontSize: 5,
|
|
@@ -1200,4 +1200,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1200
1200
|
type: ViewChild,
|
|
1201
1201
|
args: ["templateCanvas", { static: false }]
|
|
1202
1202
|
}] } });
|
|
1203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtcGxhbm8tdHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3N0b3JlLXBsYW5vL3N0b3JlLXBsYW5vLXRyZWUtdmlldy9zdG9yZS1wbGFuby10cmVlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvc3RvcmUtcGxhbm8vc3RvcmUtcGxhbm8tdHJlZS12aWV3L3N0b3JlLXBsYW5vLXRyZWUtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7QUFRMUUsTUFBTSxPQUFPLDJCQUEyQjtJQTBCbEI7SUF2QlgsVUFBVSxDQUFRO0lBQ2pCLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFHckQsUUFBUSxDQUFpQztJQUV6QyxNQUFNLENBQWlCO0lBRXZCLGNBQWMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQVM7SUFFZixrQkFBa0IsR0FBVSxFQUFFLENBQUM7SUFDL0IsdUJBQXVCLEdBQVUsRUFBRSxD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TGEsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJO3VGQUtQLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUdQLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIGZhYnJpYyBmcm9tIFwiZmFicmljXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBnZXRGaXh0dXJlQ2FudmFzTGFiZWwgfSBmcm9tIFwiLi4vLi4vLi4vZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJzdG9yZS1wbGFuby10cmVlLXZpZXdcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3N0b3JlLXBsYW5vLXRyZWUtdmlldy5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vc3RvcmUtcGxhbm8tdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFN0b3JlUGxhbm9UcmVlVmlld0NvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcclxue1xyXG4gIEBJbnB1dCgpIGFsbEZpeHR1cmU6IGFueVtdO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEluc3RhbmNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0ZW1wbGF0ZUNhbnZhc1wiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBjYW52YXNFbCE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG5cclxuICBjYW52YXMhOiBmYWJyaWMuQ2FudmFzO1xyXG5cclxuICB2ZXJ0aWNhbE1hcmdpbiA9ICgxLjI1IC8gMTAwKSAqIHRoaXMudG9QaXhlbHMoMTUyNCwgXCJtbVwiKTtcclxuICBjZG5Vcmw6IHN0cmluZztcclxuXHJcbiAgYWxsTWFzdGVyVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIHN1YlRlbXBsYXRlczogYW55W10gPSBbXTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cE5hbWU6IHN0cmluZyB8IG51bGw7XHJcbiAgc2VsZWN0ZWRNYXN0ZXJJZDogc3RyaW5nO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcmV2ZW50Q2xpY2s6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyB1c2VkIHRvIHJlc3RyaWN0IGZ1cnRoZXIgY2xpY2tzIG9uIGNhbnZhcyBpdGVtcyB3aGlsZSBhbiBBUEkgY2FsbCBpcyBpbiBwcm9ncmVzcy5cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB0aGlzLmNkblVybCA9IGUucGxhbm9ncmFtQ0ROO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoYW5nZXNbXCJhbGxGaXh0dXJlXCJdPy5jdXJyZW50VmFsdWUgJiZcclxuICAgICAgIWNoYW5nZXNbXCJhbGxGaXh0dXJlXCJdPy5maXJzdENoYW5nZVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuYnVpbGRUcmVlVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW52YXMgPSBuZXcgZmFicmljLkNhbnZhcyh0aGlzLmNhbnZhc0VsPy5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvbkZ1bGx5Q29udGFpbmVkOiB0cnVlLFxyXG4gICAgICBwZXJQaXhlbFRhcmdldEZpbmQ6IHRydWUsXHJcbiAgICAgIHRhcmdldEZpbmRUb2xlcmFuY2U6IDUsXHJcbiAgICAgIGhlaWdodDogNjAwLFxyXG4gICAgICB3aWR0aDogODAwLFxyXG4gICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVzaXplQ2FudmFzVG9QYXJlbnRTaXplKCk7XHJcblxyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgXCJyZXNpemVcIilcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNpemVDYW52YXNUb1BhcmVudFNpemUoKSk7XHJcblxyXG4gICAgdGhpcy5zZXR1cFpvb21IYW5kbGVycygpO1xyXG5cclxuICAgIHRoaXMuYnVpbGRUcmVlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgdG9QaXhlbHModmFsdWU6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpOiBudW1iZXIge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwaXhlbHMudG9GaXhlZCgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcm91cENlbnRlckJvdHRvbShncm91cDogZmFicmljLkdyb3VwKTogeyBneDogbnVtYmVyOyBneTogbnVtYmVyIH0ge1xyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuICAgIGNvbnN0IGNlbnRlclggPSBjZW50ZXIueDtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSBncm91cC50b3AhICsgZ3JvdXAuaGVpZ2h0ITtcclxuICAgIHJldHVybiB7IGd4OiBjZW50ZXJYLCBneTogYm90dG9tWSB9O1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQWRhcHRpdmVUZXh0KFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBmb250U2l6ZTogbnVtYmVyO1xyXG4gICAgICBtYXhIZWlnaHQ6IG51bWJlcjtcclxuICAgICAgd2lkdGg6IG51bWJlcjtcclxuICAgICAgbGVmdDogbnVtYmVyO1xyXG4gICAgICB0b3A6IG51bWJlcjtcclxuICAgICAgZmlsbDogc3RyaW5nO1xyXG4gICAgICBmb250V2VpZ2h0Pzogc3RyaW5nO1xyXG4gICAgfSxcclxuICApOiBmYWJyaWMuVGV4dGJveCB7XHJcbiAgICBsZXQgZm9udFNpemUgPSBvcHRpb25zLmZvbnRTaXplO1xyXG4gICAgbGV0IHRleHRFbGVtZW50OiBmYWJyaWMuVGV4dGJveDtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIHRleHRFbGVtZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICBmb250U2l6ZTogZm9udFNpemUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IG9wdGlvbnMuZm9udFdlaWdodCB8fCBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IG9wdGlvbnMuZmlsbCxcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBvcHRpb25zLndpZHRoLFxyXG4gICAgICAgIGxlZnQ6IG9wdGlvbnMubGVmdCxcclxuICAgICAgICB0b3A6IG9wdGlvbnMudG9wLFxyXG4gICAgICB9KTtcclxuICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgfSB3aGlsZSAodGV4dEVsZW1lbnQuaGVpZ2h0ID4gb3B0aW9ucy5tYXhIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICByZXR1cm4gdGV4dEVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVWaWV3KCkge1xyXG4gICAgdGhpcy5jYW52YXM/LmNsZWFyKCk7XHJcbiAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcbiAgICB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcyA9IHRoaXMuYWxsRml4dHVyZTtcclxuXHJcbiAgICAvLyBPbmNlIHRoZSBtYXN0ZXIgdGVtcGxhdGUgaXMgZmV0Y2hlZCwgcmVuZGVyIHRoZSBncm91cCBuYW1lcy5cclxuICAgIHRoaXMucmVuZGVyR3JvdXBOYW1lcygpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBab29tSGFuZGxlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOndoZWVsXCIsIChvcHQ6IGZhYnJpYy5URXZlbnQ8V2hlZWxFdmVudD4pID0+IHtcclxuICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG5cclxuICAgICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcclxuICAgICAgICBjb25zdCBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGxldCB6b29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgICAgIHpvb20gKj0gMC45OTUgKiogZGVsdGE7XHJcblxyXG4gICAgICAgIHpvb20gPSBNYXRoLm1heCgwLjA1LCBNYXRoLm1pbih6b29tLCA1KSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB4OiBlLm9mZnNldFgsXHJcbiAgICAgICAgICAgIHk6IGUub2Zmc2V0WSxcclxuICAgICAgICAgIH0gYXMgZmFicmljLlBvaW50LFxyXG4gICAgICAgICAgem9vbSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6ZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtKSB7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtO1xyXG4gICAgICAgIHZwdFs0XSArPSBlLmNsaWVudFggLSBsYXN0UG9zWDtcclxuICAgICAgICB2cHRbNV0gKz0gZS5jbGllbnRZIC0gbGFzdFBvc1k7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOnVwXCIsICgpID0+IHtcclxuICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB6b29tSW4oKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbih6b29tICsgMC4yLCAzKTtcclxuICAgIHRoaXMuc21vb3RoWm9vbSh0YXJnZXRab29tKTtcclxuICB9XHJcblxyXG4gIHpvb21PdXQoKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1heCh6b29tIC0gMC4yLCAwLjIpO1xyXG4gICAgdGhpcy5zbW9vdGhab29tKHRhcmdldFpvb20pO1xyXG4gIH1cclxuXHJcbiAgc21vb3RoWm9vbSh0YXJnZXRab29tOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGNlbnRlciA9IG5ldyBmYWJyaWMuUG9pbnQoXHJcbiAgICAgIHRoaXMuY2FudmFzLmdldFdpZHRoKCkgLyAyLFxyXG4gICAgICB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKSAvIDIsXHJcbiAgICApO1xyXG4gICAgY29uc3QgY3VycmVudFpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICBjb25zdCBzdGVwcyA9IDEwO1xyXG4gICAgY29uc3Qgc3RlcFNpemUgPSAodGFyZ2V0Wm9vbSAtIGN1cnJlbnRab29tKSAvIHN0ZXBzO1xyXG4gICAgbGV0IHN0ZXAgPSAwO1xyXG5cclxuICAgIGNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XHJcbiAgICAgIGlmIChzdGVwIDwgc3RlcHMpIHtcclxuICAgICAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChjZW50ZXIsIGN1cnJlbnRab29tICsgc3RlcFNpemUgKiAoc3RlcCArIDEpKTtcclxuICAgICAgICBzdGVwKys7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KGNlbnRlciwgdGFyZ2V0Wm9vbSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgYW5pbWF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplQ2FudmFzVG9QYXJlbnRTaXplKCkge1xyXG4gICAgY29uc3QgY2FudmFzQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgIFwidHJlZS1jYW52YXMtY2FyZFwiLFxyXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChjYW52YXNDb2wpIHtcclxuICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXNDb2wub2Zmc2V0V2lkdGggLSAzMjtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2FudmFzQ29sLm9mZnNldEhlaWdodCAtIDMyO1xyXG4gICAgICB0aGlzLmNoYW5nZUNhbnZhc1NpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VDYW52YXNTaXplKG5ld1dpZHRoOiBudW1iZXIsIG5ld0hlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBjYW52YXNFbGVtZW50ID0gdGhpcy5jYW52YXNFbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGNhbnZhc0VsZW1lbnQud2lkdGggPSBuZXdXaWR0aDtcclxuICAgIGNhbnZhc0VsZW1lbnQuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFdpZHRoKG5ld1dpZHRoKTtcclxuICAgIHRoaXMuY2FudmFzLnNldEhlaWdodChuZXdIZWlnaHQpO1xyXG4gICAgdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBSRU5ERVJJTkcgTUVUSE9EUyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIHJlbmRlckdyb3VwTmFtZXMoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID0gbnVsbDtcclxuICAgIGNvbnN0IG1hc3Rlckdyb3VwTmFtZXMgPSBbXHJcbiAgICAgIC4uLm5ldyBTZXQoXHJcbiAgICAgICAgdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXNcclxuICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiKVxyXG4gICAgICAgICAgLm1hcCgobSkgPT4gbS50ZW1wbGF0ZUdyb3VwTmFtZSksXHJcbiAgICAgICksXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghbWFzdGVyR3JvdXBOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCJAQCB+IHJlbmRlckdyb3VwTmFtZXMgW0VSUl06IChub2UgZ3JvdXAgbmFtZXMgZm91bmQpOiBcIixcclxuICAgICAgICBtYXN0ZXJHcm91cE5hbWVzLFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA/Pz0gbWFzdGVyR3JvdXBOYW1lc1swXTtcclxuXHJcbiAgICBjb25zdCB5ID0gNTA7XHJcbiAgICBjb25zdCBncm91cFNwYWNpbmcgPSAyMDtcclxuXHJcbiAgICBjb25zdCBncm91cHM6IGZhYnJpYy5Hcm91cFtdID0gW107XHJcbiAgICBsZXQgdG90YWxXaWR0aCA9IDA7XHJcblxyXG4gICAgbWFzdGVyR3JvdXBOYW1lcy5mb3JFYWNoKChnKSA9PiB7XHJcbiAgICAgIGlmICghZykgcmV0dXJuO1xyXG4gICAgICBjb25zdCBsYWJlbCA9IGc7XHJcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gMTI7XHJcbiAgICAgIGNvbnN0IHBhZGRpbmdYID0gMzA7XHJcbiAgICAgIGNvbnN0IHBhZGRpbmdZID0gMTY7XHJcblxyXG4gICAgICBjb25zdCBtYWluVGV4dCA9IG5ldyBmYWJyaWMuRmFicmljVGV4dChsYWJlbCwge1xyXG4gICAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcclxuICAgICAgICBmaWxsOiBcIiMzNjNGNzJcIixcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCByZWN0V2lkdGggPSBtYWluVGV4dC53aWR0aCEgKyAyICogcGFkZGluZ1g7XHJcbiAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSBtYWluVGV4dC5oZWlnaHQhICsgMiAqIHBhZGRpbmdZO1xyXG4gICAgICBjb25zdCByZWN0TGVmdCA9IDMwO1xyXG4gICAgICBjb25zdCByZWN0VG9wID0gMTg7XHJcblxyXG4gICAgICBjb25zdCBtYWluUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgcng6IDYsXHJcbiAgICAgICAgcnk6IDYsXHJcbiAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHJlY3RIZWlnaHQsXHJcbiAgICAgICAgZmlsbDogdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwgPyBcIiNGOEY5RkNcIiA6IFwiI2ZmZlwiLFxyXG4gICAgICAgIHN0cm9rZTogdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwgPyBcIiNBRkI1RDlcIiA6IFwiI0QwRDVERFwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgIGxlZnQ6IHJlY3RMZWZ0LFxyXG4gICAgICAgIHRvcDogcmVjdFRvcCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBtYWluVGV4dC5zZXQoe1xyXG4gICAgICAgIGxlZnQ6IHJlY3RMZWZ0ICsgcGFkZGluZ1gsXHJcbiAgICAgICAgdG9wOiByZWN0VG9wICsgKHJlY3RIZWlnaHQgLSBtYWluVGV4dC5oZWlnaHQhKSAvIDIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgYnViYmxlVyA9IDM2O1xyXG4gICAgICBjb25zdCBidWJibGVIID0gMTg7XHJcbiAgICAgIGNvbnN0IGJ1YmJsZUxlZnQgPSByZWN0TGVmdCArIHJlY3RXaWR0aCAvIDIgLSBidWJibGVXIC8gMjtcclxuICAgICAgY29uc3QgYnViYmxlVG9wID0gcmVjdEhlaWdodCArIGJ1YmJsZUggLyAyO1xyXG5cclxuICAgICAgY29uc3QgYnViYmxlUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgcng6IDQsXHJcbiAgICAgICAgcnk6IDQsXHJcbiAgICAgICAgd2lkdGg6IGJ1YmJsZVcsXHJcbiAgICAgICAgaGVpZ2h0OiBidWJibGVILFxyXG4gICAgICAgIGZpbGw6IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPT09IGxhYmVsID8gXCIjODM4OWM1XCIgOiBcIiM5OEEyQjNcIixcclxuICAgICAgICBsZWZ0OiBidWJibGVMZWZ0LFxyXG4gICAgICAgIHRvcDogYnViYmxlVG9wLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGdyb3VwQ291bnQgPSB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcy5maWx0ZXIoXHJcbiAgICAgICAgKG0pID0+IG0udGVtcGxhdGVHcm91cE5hbWUgPT09IGcgJiYgbS50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIsXHJcbiAgICAgICkubGVuZ3RoO1xyXG5cclxuICAgICAgY29uc3QgbnVtYmVyVGV4dCA9IG5ldyBmYWJyaWMuRmFicmljVGV4dChncm91cENvdW50LnRvU3RyaW5nKCksIHtcclxuICAgICAgICBmb250U2l6ZTogOCxcclxuICAgICAgICBmaWxsOiBcIiNmZmZcIixcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNzAwXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIGxlZnQ6IGJ1YmJsZUxlZnQgKyBidWJibGVXIC8gMixcclxuICAgICAgICB0b3A6IGJ1YmJsZVRvcCArIGJ1YmJsZUggLyAyLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChcclxuICAgICAgICBbbWFpblJlY3QsIG1haW5UZXh0LCBidWJibGVSZWN0LCBudW1iZXJUZXh0XSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgICAgZ3JvdXBOYW1lOiBzdHJpbmc7XHJcbiAgICAgICAgbWFzdGVyQ291bnQ6IG51bWJlcjtcclxuICAgICAgICBtYWluUmVjdDogZmFicmljLlJlY3Q7XHJcbiAgICAgICAgYnViYmxlUmVjdDogZmFicmljLlJlY3Q7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBncm91cC5ncm91cE5hbWUgPSBsYWJlbDtcclxuICAgICAgZ3JvdXAubWFzdGVyQ291bnQgPSBncm91cENvdW50O1xyXG4gICAgICBncm91cC5tYWluUmVjdCA9IG1haW5SZWN0O1xyXG4gICAgICBncm91cC5idWJibGVSZWN0ID0gYnViYmxlUmVjdDtcclxuXHJcbiAgICAgIGdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmV2ZW50Q2xpY2spIHJldHVybjtcclxuICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHByZXZHcm91cCA9IHRoaXMuY2FudmFzXHJcbiAgICAgICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgICAgICAuZmluZChcclxuICAgICAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgICAgICBvYmogaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXAgJiZcclxuICAgICAgICAgICAgICAob2JqIGFzIGFueSkuZ3JvdXBOYW1lID09PSB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lLFxyXG4gICAgICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgICAgICBtYWluUmVjdDogZmFicmljLlJlY3Q7XHJcbiAgICAgICAgICBidWJibGVSZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAocHJldkdyb3VwKSB7XHJcbiAgICAgICAgICBwcmV2R3JvdXAubWFpblJlY3Quc2V0KHsgZmlsbDogXCIjZmZmZmZmXCIsIHN0cm9rZTogXCIjRDBENUREXCIgfSk7XHJcbiAgICAgICAgICBwcmV2R3JvdXAuYnViYmxlUmVjdC5zZXQoeyBmaWxsOiBcIiM5OEEyQjNcIiB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdyb3VwLm1haW5SZWN0LnNldCh7IGZpbGw6IFwiI0Y4RjlGQ1wiLCBzdHJva2U6IFwiI0FGQjVEOVwiIH0pO1xyXG4gICAgICAgIGdyb3VwLmJ1YmJsZVJlY3Quc2V0KHsgZmlsbDogXCIjODM4OWM1XCIgfSk7XHJcblxyXG4gICAgICAgIC8vIENsZWFyIGJvdGggbWFzdGVycyBhbmQgc3VicyBhcnJvd3MsIGJlZm9yZSByZW5kZXJpbmcgbmV3IHNldC5cclxuICAgICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUhKTtcclxuICAgICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPSBsYWJlbDtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG9wdC50YXJnZXQ7XHJcbiAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQgaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXApIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEdyb3VwID0gdGFyZ2V0IGFzIGZhYnJpYy5Hcm91cDtcclxuICAgICAgICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHBhcmVudEdyb3VwKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyTWFzdGVyRml4dHVyZXMoZ3gsIGd5ICsgNTAsIHBhcmVudEdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xyXG4gICAgICB0b3RhbFdpZHRoICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgIH0pO1xyXG5cclxuICAgIHRvdGFsV2lkdGggLT0gZ3JvdXBTcGFjaW5nO1xyXG5cclxuICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgIGxldCB4ID0gKGNhbnZhc1dpZHRoIC0gdG90YWxXaWR0aCkgLyAyO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBncm91cC5zZXQoeyBsZWZ0OiB4LCB0b3A6IHkgfSk7XHJcbiAgICAgIHggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEZhYnJpY0dyb3VwID0gZ3JvdXBzWzBdO1xyXG5cclxuICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHNlbGVjdGVkR3JvdXBGYWJyaWNHcm91cCk7XHJcbiAgICB0aGlzLnJlbmRlck1hc3RlckZpeHR1cmVzKGd4LCBneSArIDUwLCBzZWxlY3RlZEdyb3VwRmFicmljR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyTWFzdGVyRml4dHVyZXMoeDogbnVtYmVyLCB5OiBudW1iZXIsIGdyb3VwPzogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzID0gdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXMuZmlsdGVyKFxyXG4gICAgICAoZikgPT5cclxuICAgICAgICBmLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIiAmJlxyXG4gICAgICAgIGYudGVtcGxhdGVHcm91cE5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUsXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCA9IHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXNbMF0uX2lkO1xyXG4gICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwibWFzdGVyXCIpO1xyXG4gICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3ViXCIpO1xyXG5cclxuICAgIGNvbnN0IG1hc3RlcnM6IGFueVtdID0gYXdhaXQgdGhpcy5yZW5kZXJGaXh0dXJlcyhcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlcyxcclxuICAgICAgeCxcclxuICAgICAgeSxcclxuICAgICk7XHJcblxyXG4gICAgbWFzdGVycy5mb3JFYWNoKChtKSA9PiB0aGlzLmRyYXdBcnJvdyhncm91cCwgbSwgZ3JvdXAuZ3JvdXBOYW1lKSk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRNYXN0ZXJGYWJyaWNHcm91cCA9IG1hc3RlcnNbMF07XHJcbiAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwKTtcclxuICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoc2VsZWN0ZWRNYXN0ZXJGYWJyaWNHcm91cCwgZ3gsIGd5ICsgNTApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyU3ViRml4dHVyZXMoZ3JvdXA6IGFueSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgIHRoaXMuc3ViVGVtcGxhdGVzID1cclxuICAgICAgdGhpcy5hbGxGaXh0dXJlPy5maWx0ZXIoXHJcbiAgICAgICAgKGYpID0+IGYubWFzdGVyVGVtcGxhdGVJZCA9PT0gdGhpcy5zZWxlY3RlZE1hc3RlcklkLFxyXG4gICAgICApID8/IFtdO1xyXG4gICAgaWYgKHRoaXMuc3ViVGVtcGxhdGVzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBzdWI6IGFueVtdID0gYXdhaXQgdGhpcy5yZW5kZXJGaXh0dXJlcyhcclxuICAgICAgICB0aGlzLnN1YlRlbXBsYXRlcyxcclxuICAgICAgICB4LFxyXG4gICAgICAgIHksXHJcbiAgICAgICAgZ3JvdXAsXHJcbiAgICAgICk7XHJcbiAgICAgIHN1Yi5mb3JFYWNoKChtKSA9PiB0aGlzLmRyYXdBcnJvdyhncm91cCwgbSwgZ3JvdXAuZml4dHVyZUlkKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbmRlckZpeHR1cmVzKFxyXG4gICAgdGVtcGxhdGVzOiBhbnlbXSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIHBhcmVudEZhYnJpYz86IGFueSxcclxuICApIHtcclxuICAgIGNvbnN0IGdyb3VwU3BhY2luZyA9IDIwO1xyXG5cclxuICAgIHR5cGUgRml4dHVyZUdyb3VwID0gZmFicmljLkdyb3VwICYge1xyXG4gICAgICBmaXh0dXJlSWQ6IHN0cmluZztcclxuICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICBncm91cE5hbWU6IHN0cmluZztcclxuICAgICAgdGVtcGxhdGVUeXBlOiBzdHJpbmc7XHJcbiAgICAgIG5hbWU6IHN0cmluZztcclxuICAgICAgcGFyZW50RmFicmljOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGdyb3VwczogRml4dHVyZUdyb3VwW10gPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgdGVtcGxhdGVzLm1hcChhc3luYyAobWYpID0+IHtcclxuICAgICAgICBjb25zdCBhY3R1YWxTaGVsdmVzID1cclxuICAgICAgICAgIG1mPy5zaGVsZkNvbmZpZz8uZmlsdGVyKChzOiBhbnkpID0+IHMuc2hlbGZUeXBlICE9IFwidm1vbmx5XCIpID8/IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBpc01hc3RlciA9IG1mLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIjtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IHRoaXMuY3JlYXRlTWFpbkNvbnRhaW5lcihtZiwgeCwgeSwgaXNNYXN0ZXIpO1xyXG4gICAgICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IHRoaXMuY3JlYXRlVG9wQ29udGFpbmVyKG1mLCB4LCB5LCBpc01hc3Rlcik7XHJcbiAgICAgICAgY29uc3QgaW5uZXJUb3BCb3ggPSB0aGlzLmNyZWF0ZUlubmVyVG9wQm94KG1mLCB4LCB5LCBpc01hc3Rlcik7XHJcbiAgICAgICAgY29uc3QgaW5uZXJCb3R0b21Cb3ggPSB0aGlzLmNyZWF0ZUlubmVyQm90dG9tQm94KG1mLCB4LCB5LCBpc01hc3Rlcik7XHJcbiAgICAgICAgY29uc3QgbWlkQ29udGFpbmVyID0gdGhpcy5jcmVhdGVNaWRDb250YWluZXIobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCBmaXJzdEJveCA9IHRoaXMuY3JlYXRlRmlyc3RCb3gobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCBsYXN0Qm94ID0gdGhpcy5jcmVhdGVMYXN0Qm94KG1mLCB4LCB5LCBpc01hc3Rlcik7XHJcbiAgICAgICAgY29uc3QgeyBjb250YWluZXI6IGJvdHRvbUNvbnRhaW5lciwgdGV4dDogYm90dG9tVGV4dENvbnRlbnQgfSA9XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUJvdHRvbUNvbnRhaW5lcihtZiwgeCwgeSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRvcFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgICAgIGNvbnN0IHRvcFkgPSB5ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgICAgICBjb25zdCBpbm5lckJveEhlaWdodCA9IHRvcEhlaWdodCAvIDI7XHJcblxyXG4gICAgICAgIGNvbnN0IGlubmVyVG9wVGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgICAgIGBGaXh0dXJlICR7bWY/LmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcn1gLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IHRvcFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuICAgICAgICBjb25zdCB0ZXh0Q29udGVudCA9IGdldEZpeHR1cmVDYW52YXNMYWJlbChtZik7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBhZGFwdGl2ZSB0ZXh0IGZvciBpbm5lciBib3R0b21cclxuICAgICAgICBjb25zdCBpbm5lckJvdHRvbVRleHQgPSB0aGlzLmNyZWF0ZUFkYXB0aXZlVGV4dCh0ZXh0Q29udGVudCwge1xyXG4gICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICBtYXhIZWlnaHQ6IGlubmVyQm94SGVpZ2h0LFxyXG4gICAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIGZpcnN0IGJveCB0ZXh0IHdpdGggZWxsaXBzaXMgaGFuZGxpbmdcclxuICAgICAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgICAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgICAgICBjb25zdCBtaWRZID0gdG9wWSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICAgICAgY29uc3Qgc2hlbGZDb3VudCA9IG1mLnNoZWxmQ29uZmlnLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAoc2hlbGZDb3VudCArIDIpO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IG1mPy5oZWFkZXI/LmxhYmVsID8/IFwiXCI7XHJcbiAgICAgICAgbGV0IGRpc3BsYXlMYWJlbCA9IGxhYmVsVGV4dDtcclxuXHJcbiAgICAgICAgaWYgKGxhYmVsVGV4dCkge1xyXG4gICAgICAgICAgbGV0IHRlbXBUZXh0Ym94ID0gbmV3IGZhYnJpYy5UZXh0Ym94KGxhYmVsVGV4dCwge1xyXG4gICAgICAgICAgICBmb250U2l6ZTogNyxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAodGVtcFRleHRib3guaGVpZ2h0ID4gYm94SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIGxldCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbiAgICAgICAgICAgIGxldCBsZWZ0ID0gMDtcclxuICAgICAgICAgICAgbGV0IHJpZ2h0ID0gbGFiZWxUZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHtcclxuICAgICAgICAgICAgICBsZXQgbWlkID0gTWF0aC5mbG9vcigobGVmdCArIHJpZ2h0KSAvIDIpO1xyXG4gICAgICAgICAgICAgIGxldCB0ZXN0VGV4dCA9IGxhYmVsVGV4dC5zbGljZSgwLCBtaWQpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgICAgdGVtcFRleHRib3guc2V0KHsgdGV4dDogdGVzdFRleHQgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKHRlbXBUZXh0Ym94LmhlaWdodCA+IGJveEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmlnaHQgPSBtaWQ7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxlZnQgPSBtaWQgKyAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaXNwbGF5TGFiZWwgPSBsYWJlbFRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGVmdCAtIDEpKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KGRpc3BsYXlMYWJlbCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogZmlyc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIGZvbnRTaXplOiA3LFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjMzYzRjcyXCIgOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBzaGVsdmVzIHVzaW5nIGhlbHBlciBtZXRob2RcclxuICAgICAgICBjb25zdCBzaGVsdmVzID0gdGhpcy5jcmVhdGVTaGVsdmVzKG1mLCB4LCB5LCBpc01hc3Rlcik7XHJcblxyXG4gICAgICAgIC8vIEFkZCBWTSBjb25maWd1cmF0aW9ucyB0byBzaGVsdmVzIGlmIHRoZXkgZXhpc3RcclxuICAgICAgICBpZiAobWY/LnZtQ29uZmlnPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWYudm1Db25maWcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCB2bSA9IG1mLnZtQ29uZmlnW2ldO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB2bS5zdGFydFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSB2bS5lbmRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNoZWxmVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZIZWlnaHRTcGFuID0gYm94SGVpZ2h0ICogKGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgdm1IZWlnaHRQeDogbnVtYmVyID0gc2hlbGZIZWlnaHRTcGFuO1xyXG4gICAgICAgICAgICAgIGxldCB2bVk6IG51bWJlciA9IHNoZWxmVG9wWTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZtLnlab25lICYmIHZtLnlab25lICE9PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgdm1IZWlnaHRQeCA9IHNoZWxmSGVpZ2h0U3BhbiAvIDM7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZtLnlab25lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgICAgICAgICAgICB2bVkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICAgICAgICB2bVkgPSBzaGVsZlRvcFkgKyB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdm1ZID0gc2hlbGZUb3BZICsgMiAqIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdm1ZID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbGV0IHZtWCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgbGV0IHZtV2lkdGggPSBtaWRXaWR0aDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCF2bS54Wm9uZSB8fCB2bS54Wm9uZSA9PT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgICAgICAgIHZtV2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICAgIHZtWCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25XaWR0aCA9IG1pZFdpZHRoIC8gMztcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodm0ueFpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgICAgICAgICAgICB2bVdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZtWCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICAgICAgICB2bVdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZtWCA9IG1pZFggKyBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZtV2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdm1YID0gbWlkWCArIDIgKiBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdm1XaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZtWCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAodm0udm1JbWFnZVVybCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3Qgdm1JbWFnZTogYW55ID0gYXdhaXQgZmFicmljLkZhYnJpY0ltYWdlLmZyb21VUkwoXHJcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jZG5Vcmx9JHt2bS52bUltYWdlVXJsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgdm1JbWFnZS5zZXQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHZtWCArIHZtV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogdm1ZICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlWDogdm1XaWR0aCAvIHZtSW1hZ2Uud2lkdGghLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlWTogdm1IZWlnaHRQeCAvIHZtSW1hZ2UuaGVpZ2h0ISxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUltYWdlKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBsb2FkaW5nIGltYWdlIGZvciBWTTogJHt2bS52bUltYWdlVXJsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyLFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bUJveCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IHZtWCxcclxuICAgICAgICAgICAgICAgICAgdG9wOiB2bVksXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiB2bVdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw6IFwiIzY5MzhFRlwiLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bVRleHQgPSB0aGlzLmNyZWF0ZUFkYXB0aXZlVGV4dCh2bS52bU5hbWUgfHwgXCJcIiwge1xyXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0OiB2bUhlaWdodFB4LFxyXG4gICAgICAgICAgICAgICAgICB3aWR0aDogdm1XaWR0aCxcclxuICAgICAgICAgICAgICAgICAgbGVmdDogdm1YICsgdm1XaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIHRvcDogdm1ZICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUJveCwgdm1UZXh0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJAQCB+IEVycm9yIGluIGRyYXdpbmcgVk06IFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSBsYXN0IGJveCB0ZXh0XHJcbiAgICAgICAgY29uc3QgbGFzdEJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc2hlbGZDb3VudCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYCR7bWY/LmZvb3Rlcj8ubGFiZWwgPyBtZi5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDaGlsZHJlbiA9IFtcclxuICAgICAgICAgIG1haW5Db250YWluZXIsXHJcbiAgICAgICAgICAuLi4oIWlzTWFzdGVyID8gW3RvcENvbnRhaW5lciwgaW5uZXJUb3BCb3gsIGlubmVyVG9wVGV4dF0gOiBbXSksXHJcbiAgICAgICAgICBpbm5lckJvdHRvbUJveCxcclxuICAgICAgICAgIGlubmVyQm90dG9tVGV4dCxcclxuICAgICAgICAgIG1pZENvbnRhaW5lcixcclxuICAgICAgICAgIGZpcnN0Qm94LFxyXG4gICAgICAgICAgZmlyc3RCb3hUZXh0LFxyXG4gICAgICAgICAgLi4uc2hlbHZlcyxcclxuICAgICAgICAgIGxhc3RCb3gsXHJcbiAgICAgICAgICBsYXN0Qm94VGV4dCxcclxuICAgICAgICAgIGJvdHRvbUNvbnRhaW5lcixcclxuICAgICAgICAgIGJvdHRvbVRleHRDb250ZW50LFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoZ3JvdXBDaGlsZHJlbiwge1xyXG4gICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICAgICAgLy8gYW5nbGU6IG1mLnJlbGF0aXZlUG9zaXRpb24/LmFuZ2xlID8/IDBcclxuICAgICAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgICAgICBmaXh0dXJlSWQ6IHN0cmluZztcclxuICAgICAgICAgIGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIjtcclxuICAgICAgICAgIGdyb3VwTmFtZTogc3RyaW5nO1xyXG4gICAgICAgICAgdGVtcGxhdGVUeXBlOiBzdHJpbmc7XHJcbiAgICAgICAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAgICAgICBwYXJlbnRGYWJyaWM6IGFueTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUlkID0gbWYuX2lkO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC5maXh0dXJlVHlwZSA9IG1mLmZpeHR1cmVUeXBlO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC5ncm91cE5hbWUgPSBtZj8udGVtcGxhdGVHcm91cE5hbWUgPz8gXCJcIjtcclxuICAgICAgICBmaXh0dXJlR3JvdXAudGVtcGxhdGVUeXBlID0gbWY/LnRlbXBsYXRlVHlwZSA/PyBcInN1YlwiO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC5uYW1lID0gbWYudGVtcGxhdGVUeXBlID8/IFwiZml4dHVyZVwiO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC5wYXJlbnRGYWJyaWMgPSBwYXJlbnRGYWJyaWM7XHJcblxyXG4gICAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNoaWxkTmFtZSA9IG9wdC5zdWJUYXJnZXRzPy5bMF0/Lm5hbWU7XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjaGlsZE5hbWUgPT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICBpc01hc3RlciAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgIT09IG1mLl9pZCAmJlxyXG4gICAgICAgICAgICAhdGhpcy5wcmV2ZW50Q2xpY2tcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZE1hc3RlcklkKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3ViXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSBtZi5faWQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlclN1YkZpeHR1cmVzKGZpeHR1cmVHcm91cCwgZ3gsIGd5ICsgNTApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChmaXh0dXJlR3JvdXAudGVtcGxhdGVUeXBlID09PSBcInN1YlwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbnN0YW5jZS5lbWl0KG1mKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZpeHR1cmVHcm91cDtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG5cclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICB0b3RhbFdpZHRoICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgIH0pO1xyXG5cclxuICAgIHRvdGFsV2lkdGggLT0gZ3JvdXBTcGFjaW5nO1xyXG4gICAgbGV0IG54ID0geCAtIHRvdGFsV2lkdGggLyAyO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBncm91cC5zZXQoeyBsZWZ0OiBueCwgdG9wOiB5IH0pO1xyXG4gICAgICBueCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICAgIHRoaXMuY2FudmFzLmFkZChncm91cCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVNYWluQ29udGFpbmVyKFxyXG4gICAgbWY6IGFueSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGlzTWFzdGVyOiBib29sZWFuLFxyXG4gICk6IGZhYnJpYy5SZWN0IHtcclxuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgcmFkaXVzID0gMztcclxuXHJcbiAgICBsZXQgbWFpbkNvbnRhaW5lckhlaWdodCA9IGhlaWdodCArIDE7XHJcbiAgICBpZiAoaXNNYXN0ZXIpIHtcclxuICAgICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgbWFpbkNvbnRhaW5lckhlaWdodCA9IGhlaWdodCAtIHRvcEhlaWdodCAvIDIgKyAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1haW5Db250YWluZXJUb3AgPSBpc01hc3RlclxyXG4gICAgICA/IHkgKyAoKDE1IC8gMTAwKSAqIGhlaWdodCkgLyAyIC0gMVxyXG4gICAgICA6IHkgLSAxO1xyXG5cclxuICAgIHJldHVybiBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IG1haW5Db250YWluZXJUb3AsXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBtYWluQ29udGFpbmVySGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVG9wQ29udGFpbmVyKFxyXG4gICAgbWY6IGFueSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGlzTWFzdGVyOiBib29sZWFuLFxyXG4gICk6IGZhYnJpYy5SZWN0IHtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9XHJcbiAgICAgICgxNSAvIDEwMCkgKlxyXG4gICAgICB0aGlzLnRvUGl4ZWxzKG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCk7XHJcbiAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgIHJldHVybiBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB0b3BYLFxyXG4gICAgICB0b3A6IHRvcFksXHJcbiAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgaGVpZ2h0OiB0b3BIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVJbm5lclRvcEJveChcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBpc01hc3RlcjogYm9vbGVhbixcclxuICApOiBmYWJyaWMuUGF0aCB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPVxyXG4gICAgICAoMTUgLyAxMDApICpcclxuICAgICAgdGhpcy50b1BpeGVscyhtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLCBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQpO1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgcmFkaXVzID0gMztcclxuICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuXHJcbiAgICByZXR1cm4gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHt0b3BYfSAke3RvcFl9ICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgfSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVJbm5lckJvdHRvbUJveChcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBpc01hc3RlcjogYm9vbGVhbixcclxuICApOiBmYWJyaWMuUGF0aCB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPVxyXG4gICAgICAoMTUgLyAxMDApICpcclxuICAgICAgdGhpcy50b1BpeGVscyhtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLCBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQpO1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgcmFkaXVzID0gMztcclxuICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IHNlY29uZEJveFkgPSB0b3BZICsgaW5uZXJCb3hIZWlnaHQ7XHJcblxyXG4gICAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICAgIHJldHVybiBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7XHJcbiAgICAgICAgICAgIHNlY29uZEJveFkgKyByYWRpdXNcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZfSAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZmlsbDogXCIjMzYzRjcyXCIsXHJcbiAgICAgICAgICBzdHJva2U6IFwiIzcxN0JCQ1wiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgfSxcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgYE0gJHt0b3BYfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke1xyXG4gICAgICAgICAgICB0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgIH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYfSAke1xyXG4gICAgICAgICAgICBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWxsOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgIHN0cm9rZTogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlTWlkQ29udGFpbmVyKFxyXG4gICAgbWY6IGFueSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGlzTWFzdGVyOiBib29sZWFuLFxyXG4gICk6IGZhYnJpYy5SZWN0IHtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB5ICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgIHRvcDogbWlkWSxcclxuICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IG1pZEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZpcnN0Qm94KFxyXG4gICAgbWY6IGFueSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGlzTWFzdGVyOiBib29sZWFuLFxyXG4gICk6IGZhYnJpYy5QYXRoIHtcclxuICAgIGNvbnN0IGFjdHVhbFNoZWx2ZXMgPVxyXG4gICAgICBtZi5zaGVsZkNvbmZpZz8uZmlsdGVyKChzOiBhbnkpID0+IHMuc2hlbGZUeXBlICE9IFwidm1vbmx5XCIpID8/IFtdO1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgbWlkWSA9IHkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKG1mLnNoZWxmQ29uZmlnLmxlbmd0aCArIDIpO1xyXG4gICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIG1pZFdpZHRofSAke1xyXG4gICAgICAgICAgICAgIGZpcnN0Qm94WSArIHJhZGl1c1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHttaWRYfSAke2ZpcnN0Qm94WX0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiI0VBRUNGNVwiIDogXCIjREFGMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiI0FGQjVEOVwiIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTGFzdEJveChtZjogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgaXNNYXN0ZXI6IGJvb2xlYW4pOiBmYWJyaWMuUGF0aCB7XHJcbiAgICBjb25zdCBhY3R1YWxTaGVsdmVzID1cclxuICAgICAgbWYuc2hlbGZDb25maWc/LmZpbHRlcigoczogYW55KSA9PiBzLnNoZWxmVHlwZSAhPSBcInZtb25seVwiKSA/PyBbXTtcclxuXHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0geSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAobWYuc2hlbGZDb25maWcubGVuZ3RoICsgMik7XHJcbiAgICBjb25zdCBsYXN0Qm94WSA9IG1pZFkgKyBib3hIZWlnaHQgKiAobWYuc2hlbGZDb25maWcubGVuZ3RoICsgMSk7XHJcbiAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgIHJldHVybiBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgICBtaWRYICsgbWlkV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgICAgfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBRICR7bWlkWH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHttaWRYfSAke1xyXG4gICAgICAgICAgICAgIGxhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2xhc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjRUFFQ0Y1XCIgOiBcIiNEQUYxRkZcIixcclxuICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjQUZCNUQ5XCIgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVCb3R0b21Db250YWluZXIoXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICk6IHsgY29udGFpbmVyOiBmYWJyaWMuUmVjdDsgdGV4dDogZmFicmljLlRleHRib3ggfSB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgYm90dG9tV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBib3R0b21IZWlnaHQgPSAoMyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBib3R0b21YID0geCArICh3aWR0aCAtIGJvdHRvbVdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBib3R0b21ZID0geSArIHRvcEhlaWdodCArIG1pZEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbUNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGJvdHRvbVgsXHJcbiAgICAgIHRvcDogYm90dG9tWSxcclxuICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGFjdHVhbFNoZWxmQ291bnQgPVxyXG4gICAgICBtZj8uc2hlbGZDb25maWc/LmZpbHRlcigoczogYW55KSA9PiBzLnNoZWxmVHlwZSAhPSBcInZtb25seVwiKT8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgY29uc3QgYm90dG9tVGV4dENvbnRlbnQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGBTaGVsdmVzIC0gJHthY3R1YWxTaGVsZkNvdW50fSAuIFByb2R1Y3RzIC0gICR7bWYuZml4dHVyZUNhcGFjaXR5fSAuIFZNIC0gJHttZi52bUNvbmZpZy5sZW5ndGh9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IGJvdHRvbVggKyBib3R0b21XaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBib3R0b21ZICsgYm90dG9tSGVpZ2h0IC8gMiArIDQsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB7IGNvbnRhaW5lcjogYm90dG9tQ29udGFpbmVyLCB0ZXh0OiBib3R0b21UZXh0Q29udGVudCB9O1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU2hlbHZlcyhcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBpc01hc3RlcjogYm9vbGVhbixcclxuICApOiBmYWJyaWMuT2JqZWN0W10ge1xyXG4gICAgY29uc3QgYWN0dWFsU2hlbHZlcyA9XHJcbiAgICAgIG1mLnNoZWxmQ29uZmlnPy5maWx0ZXIoKHM6IGFueSkgPT4gcy5zaGVsZlR5cGUgIT0gXCJ2bW9ubHlcIikgPz8gW107XHJcblxyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgbWlkWSA9IHkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKG1mLnNoZWxmQ29uZmlnLmxlbmd0aCArIDIpO1xyXG4gICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuXHJcbiAgICBjb25zdCBzaGVsdmVzOiBmYWJyaWMuT2JqZWN0W10gPSBbXTtcclxuXHJcbiAgICBpZiAobWYucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMVwiKSB7XHJcbiAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcbiAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0ID0gbWlkSGVpZ2h0IC0gMiAqIGJveEhlaWdodDtcclxuXHJcbiAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBzaGVsZkhlaWdodCxcclxuICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgdGV4dCA9IG1mPy5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGggYW5kIHNocmluayB0byBmaXQgc2hlbGYgaGVpZ2h0XHJcbiAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoICogMC45O1xyXG4gICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gc2hlbGZIZWlnaHQgKiAwLjg7XHJcbiAgICAgIGxldCBmb250U2l6ZUwxID0gNjtcclxuXHJcbiAgICAgIGNvbnN0IGNyZWF0ZVdyYXBwZWRUZXh0Ym94ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgbGV0IHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplTDEgPiAyKSB7XHJcbiAgICAgICAgZm9udFNpemVMMSAtPSAwLjU7XHJcbiAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogTWF0aC5taW4obWF4VGV4dFdpZHRoLCB3cmFwcGVkVGV4dC53aWR0aCEpICsgcGFkZGluZyxcclxuICAgICAgICBoZWlnaHQ6IHdyYXBwZWRUZXh0LmdldFNjYWxlZEhlaWdodCgpICsgMixcclxuICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJ4OiAxLFxyXG4gICAgICAgIHJ5OiAxLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNoZWx2ZXMucHVzaChzaGVsZiwgYmFja2dyb3VuZCwgd3JhcHBlZFRleHQpO1xyXG4gICAgfSBlbHNlIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwyXCIpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZi5zaGVsZkNvbmZpZz8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGkgKyAxKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuXHJcbiAgICAgICAgaWYgKG1mLnNoZWxmQ29uZmlnPy5baV0uc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBtZi5zaGVsZkNvbmZpZz8uW2ldLnRyYXlSb3dzIHx8IDE7XHJcbiAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG4gICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGV4dCA9IG1mLnNoZWxmQ29uZmlnPy5baV0ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgICAvLyBTaW5nbGUtbGluZSBlbGxpcHNpcyB3aXRoaW4gc2hlbGYgd2lkdGhcclxuICAgICAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IDY7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gTWF0aC5tYXgoMCwgbWlkV2lkdGggLSBob3Jpem9udGFsUGFkZGluZyk7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGJveEhlaWdodCAqIDAuODtcclxuICAgICAgICBjb25zdCBiYXNlRm9udFNpemUgPSA1O1xyXG5cclxuICAgICAgICBjb25zdCBtZWFzdXJlID0gKHQ6IHN0cmluZykgPT5cclxuICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dCh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgZGlzcGxheVRleHQgPSB0ZXh0O1xyXG4gICAgICAgIGxldCBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG5cclxuICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbiAgICAgICAgICBsZXQgbGVmdElkeCA9IDA7XHJcbiAgICAgICAgICBsZXQgcmlnaHRJZHggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAobGVmdElkeCA8IHJpZ2h0SWR4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pZElkeCA9IE1hdGguZmxvb3IoKGxlZnRJZHggKyByaWdodElkeCkgLyAyKTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGV4dC5zbGljZSgwLCBtaWRJZHgpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShjYW5kaWRhdGUpO1xyXG4gICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgcmlnaHRJZHggPSBtaWRJZHg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGVmdElkeCA9IG1pZElkeCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRpc3BsYXlUZXh0ID0gdGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0SWR4IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihtYXhUZXh0SGVpZ2h0LCBtZWFzdXJlZC5oZWlnaHQgPz8gMTApICsgMixcclxuICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICByeTogMSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZmluYWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0KGRpc3BsYXlUZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChiYWNrZ3JvdW5kLCBmaW5hbFRleHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG1mLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIikge1xyXG4gICAgICBjb25zdCBzZXF1ZW50aWFsR3JvdXBzOiB7IHpvbmU6IHN0cmluZzsgc2hlbHZlczogYW55W10gfVtdID0gW107XHJcbiAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBzaGVsZiBvZiBtZi5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBzaGVsZi56b25lIHx8IFwiVW5rbm93blwiO1xyXG4gICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHMucHVzaCh7IHpvbmUsIHNoZWx2ZXM6IFtzaGVsZl0gfSk7XHJcbiAgICAgICAgICBwcmV2aW91c1pvbmUgPSB6b25lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzW3NlcXVlbnRpYWxHcm91cHMubGVuZ3RoIC0gMV0uc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjdXJyZW50U2hlbGZJbmRleCA9IDA7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHNlcXVlbnRpYWxHcm91cHMpIHtcclxuICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuICAgICAgICBjb25zdCBncm91cFN0YXJ0SW5kZXggPSBjdXJyZW50U2hlbGZJbmRleDtcclxuICAgICAgICBjb25zdCBncm91cExlbmd0aCA9IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBncm91cFRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoZ3JvdXBTdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21ZID0gZ3JvdXBUb3BZICsgYm94SGVpZ2h0ICogZ3JvdXBMZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2hlbHZlc0luR3JvdXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IHNoZWxmRGF0YSA9IHNoZWx2ZXNJbkdyb3VwW2pdO1xyXG4gICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChjdXJyZW50U2hlbGZJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNoZWxmUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGZSZWN0KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2hlbGZEYXRhLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmID0gc2hlbGZEYXRhLnByb2R1Y3RQZXJTaGVsZiB8fCAwO1xyXG4gICAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBtaWRXaWR0aCAvIHByb2R1Y3RQZXJTaGVsZjtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAxOyBjIDwgcHJvZHVjdFBlclNoZWxmOyBjKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWCA9IG1pZFggKyBjICogY29sdW1uU3BhY2luZztcclxuICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbExpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjdXJyZW50U2hlbGZJbmRleCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21MaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgW21pZFgsIGdyb3VwQm90dG9tWSwgbWlkWCArIG1pZFdpZHRoLCBncm91cEJvdHRvbVldLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQm90dG9tTGluZSk7XHJcblxyXG4gICAgICAgIGlmIChtZi5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsUGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBuZXcgZmFicmljLlRleHRib3goem9uZSwge1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgIHRvcDogZ3JvdXBCb3R0b21ZLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiM3MDcwNzBcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKGxhYmVsVGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBncm91cENlbnRlclggPSBtaWRYICsgbWlkV2lkdGggLyAyO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWSA9IGdyb3VwVG9wWSArIChncm91cEJvdHRvbVkgLSBncm91cFRvcFkpIC8gMjtcclxuICAgICAgICBjb25zdCBzZWN0aW9uQnJhbmRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbkJyYW5kcy5hZGQoYnJhbmQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChbLi4uc2VjdGlvbkJyYW5kc10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNjtcclxuICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJUZXh0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2hlbHZlcztcclxuICB9XHJcblxyXG4gIGNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXModGVtcGxhdGVUeXBlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyb3Vwc1RvUmVtb3ZlID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICBvYmogaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXAgJiZcclxuICAgICAgICAgIChvYmogYXMgYW55KS50ZW1wbGF0ZVR5cGUgPT09IHRlbXBsYXRlVHlwZSxcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoZ3JvdXBzVG9SZW1vdmUpIHtcclxuICAgICAgZ3JvdXBzVG9SZW1vdmUuZm9yRWFjaCgoZ3JvdXApID0+IHRoaXMuY2FudmFzLnJlbW92ZShncm91cCkpO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3QXJyb3coZnJvbUdyb3VwOiBmYWJyaWMuR3JvdXAsIHRvR3JvdXA6IGZhYnJpYy5Hcm91cCwgYXJyb3dJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmcm9tID0gZnJvbUdyb3VwLmFDb29yZHMgPz8gZnJvbUdyb3VwLmNhbGNPQ29vcmRzKCk7XHJcbiAgICBjb25zdCB0byA9IHRvR3JvdXAuYUNvb3JkcyA/PyB0b0dyb3VwLmNhbGNPQ29vcmRzKCk7XHJcblxyXG4gICAgY29uc3QgZnJvbVggPSAoZnJvbS5ibC54ICsgZnJvbS5ici54KSAvIDI7XHJcbiAgICBjb25zdCBmcm9tWSA9IChmcm9tLmJsLnkgKyBmcm9tLmJyLnkpIC8gMjtcclxuXHJcbiAgICBjb25zdCB0b1ggPSAodG8udGwueCArIHRvLnRyLngpIC8gMjtcclxuICAgIGNvbnN0IHRvWSA9ICh0by50bC55ICsgdG8udHIueSkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGhvcml6b250YWxPZmZzZXQgPSB0b1ggLSBmcm9tWDtcclxuICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0ID0gdG9ZIC0gZnJvbVk7XHJcbiAgICBjb25zdCBjdXJ2ZVNpemUgPSAxNDtcclxuXHJcbiAgICBsZXQgcGF0aERhdGEgPSBcIlwiO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhob3Jpem9udGFsT2Zmc2V0KSA8IDUpIHtcclxuICAgICAgLy8gRGlyZWN0IHZlcnRpY2FsIGxpbmVcclxuICAgICAgcGF0aERhdGEgPSBgTSAke2Zyb21YfSAke2Zyb21ZfSBMICR7dG9YfSAke3RvWX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbWlkWSA9IGZyb21ZICsgdmVydGljYWxPZmZzZXQgLyAyO1xyXG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBob3Jpem9udGFsT2Zmc2V0ID4gMCA/IDEgOiAtMTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnZlMVggPSBmcm9tWCArIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuICAgICAgY29uc3QgY3VydmUyWCA9IHRvWCAtIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuXHJcbiAgICAgIHBhdGhEYXRhID0gW1xyXG4gICAgICAgIGBNICR7ZnJvbVh9ICR7ZnJvbVl9YCxcclxuICAgICAgICBgTCAke2Zyb21YfSAke21pZFkgLSBjdXJ2ZVNpemV9YCxcclxuICAgICAgICBgUSAke2Zyb21YfSAke21pZFl9ICR7Y3VydmUxWH0gJHttaWRZfWAsXHJcbiAgICAgICAgYEwgJHtjdXJ2ZTJYfSAke21pZFl9YCxcclxuICAgICAgICBgUSAke3RvWH0gJHttaWRZfSAke3RvWH0gJHttaWRZICsgY3VydmVTaXplfWAsXHJcbiAgICAgICAgYEwgJHt0b1h9ICR7dG9ZfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXJyb3dMaW5lID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIHN0cm9rZTogXCIjQUZCNUQ5XCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgIGZpbGw6IFwiXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFycm93aGVhZFxyXG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHRvWSAtICh0b1kgLSAxMCksIHRvWCAtIHRvWCk7XHJcbiAgICBjb25zdCBoZWFkbGVuID0gMTA7XHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIFtcclxuICAgICAgICBgTSAke3RvWH0gJHt0b1l9YCxcclxuICAgICAgICBgTCAke3RvWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA1KX0gJHtcclxuICAgICAgICAgIHRvWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA1KVxyXG4gICAgICAgIH1gLFxyXG4gICAgICAgIGBNICR7dG9YfSAke3RvWX1gLFxyXG4gICAgICAgIGBMICR7dG9YIC0gaGVhZGxlbiAqIE1hdGguY29zKGFuZ2xlICsgTWF0aC5QSSAvIDUpfSAke1xyXG4gICAgICAgICAgdG9ZIC0gaGVhZGxlbiAqIE1hdGguc2luKGFuZ2xlICsgTWF0aC5QSSAvIDUpXHJcbiAgICAgICAgfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIiksXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IFwiI0FGQjVEOVwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEdyb3VwaW5nIGJvdGggbGluZSBhbmQgYXJyb3doZWFkXHJcbiAgICBjb25zdCBhcnJvd0dyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbYXJyb3dMaW5lLCBhcnJvd0hlYWRdLCB7XHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHsgYXJyb3dJZDogc3RyaW5nIH07XHJcblxyXG4gICAgLy8gQXR0YWNoIGN1c3RvbSBhcnJvdyBJRFxyXG4gICAgYXJyb3dHcm91cC5hcnJvd0lkID0gYXJyb3dJZDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYXJyb3dHcm91cCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFycm93QnlJZChhcnJvd0lkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFycm93R3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJiAob2JqIGFzIGFueSkuYXJyb3dJZCA9PT0gYXJyb3dJZCxcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoYXJyb3dHcm91cCkge1xyXG4gICAgICBhcnJvd0dyb3VwLmZvckVhY2goKGdyb3VwKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZ3JvdXApKTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cInRyZWUtY2FudmFzLWNhcmRcIiBjbGFzcz1cInctMTAwIHAtNlwiPlxyXG4gIDxjYW52YXMgaWQ9XCJ0ZW1wbGF0ZS1jYW52YXNcIiAjdGVtcGxhdGVDYW52YXM+PC9jYW52YXM+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibWUtMVwiPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCI0Ljg0MzFcIiBjeT1cIjUuNDk5OTZcIiByPVwiNC44NDMxXCIgZmlsbD1cIiM2MTcyRjNcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPHAgY2xhc3M9XCJtLTAgbWUtM1wiPk1hc3RlciBUZW1wbGF0ZTwvcD5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMVwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMSAxMVwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtZS0xXCI+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjUuNDQ0NjZcIiBjeT1cIjUuNDk5OTZcIiByPVwiNC44NDMxXCIgZmlsbD1cIiMzM0I1RkZcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPHAgY2xhc3M9XCJtLTBcIj5GaXh0dXJlIEluc3RhbmNlPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiem9vbVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiem9vbS1pblwiIChjbGljayk9XCJ6b29tSW4oKVwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xMiA1VjE5TTUgMTJIMTlcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiem9vbS1vdXRcIiAoY2xpY2spPVwiem9vbU91dCgpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTUgMTJIMTlcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
1203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtcGxhbm8tdHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3N0b3JlLXBsYW5vL3N0b3JlLXBsYW5vLXRyZWUtdmlldy9zdG9yZS1wbGFuby10cmVlLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvc3RvcmUtcGxhbm8vc3RvcmUtcGxhbm8tdHJlZS12aWV3L3N0b3JlLXBsYW5vLXRyZWUtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7QUFRckcsTUFBTSxPQUFPLDJCQUEyQjtJQTBCbEI7SUF2QlgsVUFBVSxDQUFRO0lBQ2pCLGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFHckQsUUFBUSxDQUFpQztJQUV6QyxNQUFNLENBQWlCO0lBRXZCLGNBQWMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQVM7SUFFZixrQkFBa0IsR0FBVSxFQUFFLENBQUM7SUFDL0IsdUJBQXVC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QiwyQkFBMkIsMlNDdkJ4QyxpakRBNEJBOzs0RkRMYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUk7dUZBS1AsVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBR1AsUUFBUTtzQkFEUCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IGdldEZpeHR1cmVDYW52YXNMYWJlbCwgZ2V0Rml4dHVyZVByb2R1Y3RDYXBhY2l0eSB9IGZyb20gXCIuLi8uLi8uLi9mdW5jdGlvbnMvcGxhbm8uZnVuY3Rpb25cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInN0b3JlLXBsYW5vLXRyZWUtdmlld1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc3RvcmUtcGxhbm8tdHJlZS12aWV3LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9zdG9yZS1wbGFuby10cmVlLXZpZXcuY29tcG9uZW50LnNjc3NcIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RvcmVQbGFub1RyZWVWaWV3Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgQElucHV0KCkgYWxsRml4dHVyZTogYW55W107XHJcbiAgQE91dHB1dCgpIHNlbGVjdGVkSW5zdGFuY2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChcInRlbXBsYXRlQ2FudmFzXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGNhbnZhc0VsITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XHJcblxyXG4gIGNhbnZhcyE6IGZhYnJpYy5DYW52YXM7XHJcblxyXG4gIHZlcnRpY2FsTWFyZ2luID0gKDEuMjUgLyAxMDApICogdGhpcy50b1BpeGVscygxNTI0LCBcIm1tXCIpO1xyXG4gIGNkblVybDogc3RyaW5nO1xyXG5cclxuICBhbGxNYXN0ZXJUZW1wbGF0ZXM6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXM6IGFueVtdID0gW107XHJcbiAgc3ViVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBzZWxlY3RlZEdyb3VwTmFtZTogc3RyaW5nIHwgbnVsbDtcclxuICBzZWxlY3RlZE1hc3RlcklkOiBzdHJpbmc7XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByZXZlbnRDbGljazogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIHVzZWQgdG8gcmVzdHJpY3QgZnVydGhlciBjbGlja3Mgb24gY2FudmFzIGl0ZW1zIHdoaWxlIGFuIEFQSSBjYWxsIGlzIGluIHByb2dyZXNzLlxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGUpIHRoaXMuY2RuVXJsID0gZS5wbGFub2dyYW1DRE47XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgY2hhbmdlc1tcImFsbEZpeHR1cmVcIl0/LmN1cnJlbnRWYWx1ZSAmJlxyXG4gICAgICAhY2hhbmdlc1tcImFsbEZpeHR1cmVcIl0/LmZpcnN0Q2hhbmdlXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5idWlsZFRyZWVWaWV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IG5ldyBmYWJyaWMuQ2FudmFzKHRoaXMuY2FudmFzRWw/Lm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgc2VsZWN0aW9uRnVsbHlDb250YWluZWQ6IHRydWUsXHJcbiAgICAgIHBlclBpeGVsVGFyZ2V0RmluZDogdHJ1ZSxcclxuICAgICAgdGFyZ2V0RmluZFRvbGVyYW5jZTogNSxcclxuICAgICAgaGVpZ2h0OiA2MDAsXHJcbiAgICAgIHdpZHRoOiA4MDAsXHJcbiAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZXNpemVDYW52YXNUb1BhcmVudFNpemUoKTtcclxuXHJcbiAgICBmcm9tRXZlbnQod2luZG93LCBcInJlc2l6ZVwiKVxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2l6ZUNhbnZhc1RvUGFyZW50U2l6ZSgpKTtcclxuXHJcbiAgICB0aGlzLnNldHVwWm9vbUhhbmRsZXJzKCk7XHJcblxyXG4gICAgdGhpcy5idWlsZFRyZWVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICB0b1BpeGVscyh2YWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCk6IG51bWJlciB7XHJcbiAgICBsZXQgcGl4ZWxzOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICBwaXhlbHMgPSAodmFsdWUgLyAyNS40KSAqIGRwaTtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHBpeGVscyA9IHZhbHVlICogMTIgKiBkcGk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHBpeGVscy50b0ZpeGVkKDIpKTtcclxuICB9XHJcblxyXG4gIGdldEdyb3VwQ2VudGVyQm90dG9tKGdyb3VwOiBmYWJyaWMuR3JvdXApOiB7IGd4OiBudW1iZXI7IGd5OiBudW1iZXIgfSB7XHJcbiAgICBjb25zdCBjZW50ZXIgPSBncm91cC5nZXRDZW50ZXJQb2ludCgpO1xyXG4gICAgY29uc3QgY2VudGVyWCA9IGNlbnRlci54O1xyXG4gICAgY29uc3QgYm90dG9tWSA9IGdyb3VwLnRvcCEgKyBncm91cC5oZWlnaHQhO1xyXG4gICAgcmV0dXJuIHsgZ3g6IGNlbnRlclgsIGd5OiBib3R0b21ZIH07XHJcbiAgfVxyXG5cclxuICBjcmVhdGVBZGFwdGl2ZVRleHQoXHJcbiAgICB0ZXh0OiBzdHJpbmcsXHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgIGZvbnRTaXplOiBudW1iZXI7XHJcbiAgICAgIG1heEhlaWdodDogbnVtYmVyO1xyXG4gICAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgICBsZWZ0OiBudW1iZXI7XHJcbiAgICAgIHRvcDogbnVtYmVyO1xyXG4gICAgICBmaWxsOiBzdHJpbmc7XHJcbiAgICAgIGZvbnRXZWlnaHQ/OiBzdHJpbmc7XHJcbiAgICB9LFxyXG4gICk6IGZhYnJpYy5UZXh0Ym94IHtcclxuICAgIGxldCBmb250U2l6ZSA9IG9wdGlvbnMuZm9udFNpemU7XHJcbiAgICBsZXQgdGV4dEVsZW1lbnQ6IGZhYnJpYy5UZXh0Ym94O1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgdGV4dEVsZW1lbnQgPSBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogb3B0aW9ucy5mb250V2VpZ2h0IHx8IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogb3B0aW9ucy5maWxsLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG9wdGlvbnMud2lkdGgsXHJcbiAgICAgICAgbGVmdDogb3B0aW9ucy5sZWZ0LFxyXG4gICAgICAgIHRvcDogb3B0aW9ucy50b3AsXHJcbiAgICAgIH0pO1xyXG4gICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICB9IHdoaWxlICh0ZXh0RWxlbWVudC5oZWlnaHQgPiBvcHRpb25zLm1heEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgIHJldHVybiB0ZXh0RWxlbWVudDtcclxuICB9XHJcblxyXG4gIGJ1aWxkVHJlZVZpZXcoKSB7XHJcbiAgICB0aGlzLmNhbnZhcz8uY2xlYXIoKTtcclxuICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgIHRoaXMuYWxsTWFzdGVyVGVtcGxhdGVzID0gdGhpcy5hbGxGaXh0dXJlO1xyXG5cclxuICAgIC8vIE9uY2UgdGhlIG1hc3RlciB0ZW1wbGF0ZSBpcyBmZXRjaGVkLCByZW5kZXIgdGhlIGdyb3VwIG5hbWVzLlxyXG4gICAgdGhpcy5yZW5kZXJHcm91cE5hbWVzKCk7XHJcbiAgfVxyXG5cclxuICBzZXR1cFpvb21IYW5kbGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcblxyXG4gICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVk7XHJcbiAgICAgICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuXHJcbiAgICAgICAgem9vbSA9IE1hdGgubWF4KDAuMDUsIE1hdGgubWluKHpvb20sIDUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGUub2Zmc2V0WCxcclxuICAgICAgICAgICAgeTogZS5vZmZzZXRZLFxyXG4gICAgICAgICAgfSBhcyBmYWJyaWMuUG9pbnQsXHJcbiAgICAgICAgICB6b29tLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgbGV0IGxhc3RQb3NYID0gMDtcclxuICAgIGxldCBsYXN0UG9zWSA9IDA7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIW9wdC50YXJnZXQpIHtcclxuICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6bW92ZVwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzRHJhZ2dpbmcgJiYgdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0pIHtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgdnB0WzRdICs9IGUuY2xpZW50WCAtIGxhc3RQb3NYO1xyXG4gICAgICAgIHZwdFs1XSArPSBlLmNsaWVudFkgLSBsYXN0UG9zWTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6dXBcIiwgKCkgPT4ge1xyXG4gICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHpvb21JbigpIHtcclxuICAgIGxldCB6b29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgY29uc3QgdGFyZ2V0Wm9vbSA9IE1hdGgubWluKHpvb20gKyAwLjIsIDMpO1xyXG4gICAgdGhpcy5zbW9vdGhab29tKHRhcmdldFpvb20pO1xyXG4gIH1cclxuXHJcbiAgem9vbU91dCgpIHtcclxuICAgIGxldCB6b29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgY29uc3QgdGFyZ2V0Wm9vbSA9IE1hdGgubWF4KHpvb20gLSAwLjIsIDAuMik7XHJcbiAgICB0aGlzLnNtb290aFpvb20odGFyZ2V0Wm9vbSk7XHJcbiAgfVxyXG5cclxuICBzbW9vdGhab29tKHRhcmdldFpvb206IG51bWJlcikge1xyXG4gICAgY29uc3QgY2VudGVyID0gbmV3IGZhYnJpYy5Qb2ludChcclxuICAgICAgdGhpcy5jYW52YXMuZ2V0V2lkdGgoKSAvIDIsXHJcbiAgICAgIHRoaXMuY2FudmFzLmdldEhlaWdodCgpIC8gMixcclxuICAgICk7XHJcbiAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHN0ZXBzID0gMTA7XHJcbiAgICBjb25zdCBzdGVwU2l6ZSA9ICh0YXJnZXRab29tIC0gY3VycmVudFpvb20pIC8gc3RlcHM7XHJcbiAgICBsZXQgc3RlcCA9IDA7XHJcblxyXG4gICAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHtcclxuICAgICAgaWYgKHN0ZXAgPCBzdGVwcykge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KGNlbnRlciwgY3VycmVudFpvb20gKyBzdGVwU2l6ZSAqIChzdGVwICsgMSkpO1xyXG4gICAgICAgIHN0ZXArKztcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoY2VudGVyLCB0YXJnZXRab29tKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBhbmltYXRlKCk7XHJcbiAgfVxyXG5cclxuICByZXNpemVDYW52YXNUb1BhcmVudFNpemUoKSB7XHJcbiAgICBjb25zdCBjYW52YXNDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgXCJ0cmVlLWNhbnZhcy1jYXJkXCIsXHJcbiAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKGNhbnZhc0NvbCkge1xyXG4gICAgICBjb25zdCB3aWR0aCA9IGNhbnZhc0NvbC5vZmZzZXRXaWR0aCAtIDMyO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjYW52YXNDb2wub2Zmc2V0SGVpZ2h0IC0gMzI7XHJcbiAgICAgIHRoaXMuY2hhbmdlQ2FudmFzU2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZUNhbnZhc1NpemUobmV3V2lkdGg6IG51bWJlciwgbmV3SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSB0aGlzLmNhbnZhc0VsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgY2FudmFzRWxlbWVudC53aWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgY2FudmFzRWxlbWVudC5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuc2V0V2lkdGgobmV3V2lkdGgpO1xyXG4gICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KG5ld0hlaWdodCk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFJFTkRFUklORyBNRVRIT0RTID09PT09PT09PT09PT09PT09PT09XHJcbiAgcmVuZGVyR3JvdXBOYW1lcygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPSBudWxsO1xyXG4gICAgY29uc3QgbWFzdGVyR3JvdXBOYW1lcyA9IFtcclxuICAgICAgLi4ubmV3IFNldChcclxuICAgICAgICB0aGlzLmFsbE1hc3RlclRlbXBsYXRlc1xyXG4gICAgICAgICAgLmZpbHRlcigoZikgPT4gZi50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIpXHJcbiAgICAgICAgICAubWFwKChtKSA9PiBtLnRlbXBsYXRlR3JvdXBOYW1lKSxcclxuICAgICAgKSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKCFtYXN0ZXJHcm91cE5hbWVzLmxlbmd0aCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBcIkBAIH4gcmVuZGVyR3JvdXBOYW1lcyBbRVJSXTogKG5vZSBncm91cCBuYW1lcyBmb3VuZCk6IFwiLFxyXG4gICAgICAgIG1hc3Rlckdyb3VwTmFtZXMsXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID8/PSBtYXN0ZXJHcm91cE5hbWVzWzBdO1xyXG5cclxuICAgIGNvbnN0IHkgPSA1MDtcclxuICAgIGNvbnN0IGdyb3VwU3BhY2luZyA9IDIwO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwczogZmFicmljLkdyb3VwW10gPSBbXTtcclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuXHJcbiAgICBtYXN0ZXJHcm91cE5hbWVzLmZvckVhY2goKGcpID0+IHtcclxuICAgICAgaWYgKCFnKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gZztcclxuICAgICAgY29uc3QgZm9udFNpemUgPSAxMjtcclxuICAgICAgY29uc3QgcGFkZGluZ1ggPSAzMDtcclxuICAgICAgY29uc3QgcGFkZGluZ1kgPSAxNjtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5UZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGxhYmVsLCB7XHJcbiAgICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxyXG4gICAgICAgIGZpbGw6IFwiIzM2M0Y3MlwiLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXIsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IG1haW5UZXh0LndpZHRoISArIDIgKiBwYWRkaW5nWDtcclxuICAgICAgY29uc3QgcmVjdEhlaWdodCA9IG1haW5UZXh0LmhlaWdodCEgKyAyICogcGFkZGluZ1k7XHJcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gMzA7XHJcbiAgICAgIGNvbnN0IHJlY3RUb3AgPSAxODtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5SZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNixcclxuICAgICAgICByeTogNixcclxuICAgICAgICB3aWR0aDogcmVjdFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICBmaWxsOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0Y4RjlGQ1wiIDogXCIjZmZmXCIsXHJcbiAgICAgICAgc3Ryb2tlOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0FGQjVEOVwiIDogXCIjRDBENUREXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQsXHJcbiAgICAgICAgdG9wOiByZWN0VG9wLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1haW5UZXh0LnNldCh7XHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQgKyBwYWRkaW5nWCxcclxuICAgICAgICB0b3A6IHJlY3RUb3AgKyAocmVjdEhlaWdodCAtIG1haW5UZXh0LmhlaWdodCEpIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVXID0gMzY7XHJcbiAgICAgIGNvbnN0IGJ1YmJsZUggPSAxODtcclxuICAgICAgY29uc3QgYnViYmxlTGVmdCA9IHJlY3RMZWZ0ICsgcmVjdFdpZHRoIC8gMiAtIGJ1YmJsZVcgLyAyO1xyXG4gICAgICBjb25zdCBidWJibGVUb3AgPSByZWN0SGVpZ2h0ICsgYnViYmxlSCAvIDI7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNCxcclxuICAgICAgICByeTogNCxcclxuICAgICAgICB3aWR0aDogYnViYmxlVyxcclxuICAgICAgICBoZWlnaHQ6IGJ1YmJsZUgsXHJcbiAgICAgICAgZmlsbDogdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwgPyBcIiM4Mzg5YzVcIiA6IFwiIzk4QTJCM1wiLFxyXG4gICAgICAgIGxlZnQ6IGJ1YmJsZUxlZnQsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXBDb3VudCA9IHRoaXMuYWxsTWFzdGVyVGVtcGxhdGVzLmZpbHRlcihcclxuICAgICAgICAobSkgPT4gbS50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gZyAmJiBtLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIixcclxuICAgICAgKS5sZW5ndGg7XHJcblxyXG4gICAgICBjb25zdCBudW1iZXJUZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGdyb3VwQ291bnQudG9TdHJpbmcoKSwge1xyXG4gICAgICAgIGZvbnRTaXplOiA4LFxyXG4gICAgICAgIGZpbGw6IFwiI2ZmZlwiLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXIsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI3MDBcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgbGVmdDogYnViYmxlTGVmdCArIGJ1YmJsZVcgLyAyLFxyXG4gICAgICAgIHRvcDogYnViYmxlVG9wICsgYnViYmxlSCAvIDIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFxyXG4gICAgICAgIFttYWluUmVjdCwgbWFpblRleHQsIGJ1YmJsZVJlY3QsIG51bWJlclRleHRdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgICB9LFxyXG4gICAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICBncm91cE5hbWU6IHN0cmluZztcclxuICAgICAgICBtYXN0ZXJDb3VudDogbnVtYmVyO1xyXG4gICAgICAgIG1haW5SZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICBidWJibGVSZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGdyb3VwLmdyb3VwTmFtZSA9IGxhYmVsO1xyXG4gICAgICBncm91cC5tYXN0ZXJDb3VudCA9IGdyb3VwQ291bnQ7XHJcbiAgICAgIGdyb3VwLm1haW5SZWN0ID0gbWFpblJlY3Q7XHJcbiAgICAgIGdyb3VwLmJ1YmJsZVJlY3QgPSBidWJibGVSZWN0O1xyXG5cclxuICAgICAgZ3JvdXAub24oXCJtb3VzZWRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPT09IGxhYmVsKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByZXZlbnRDbGljaykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcHJldkdyb3VwID0gdGhpcy5jYW52YXNcclxuICAgICAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgICAgIC5maW5kKFxyXG4gICAgICAgICAgICAob2JqKSA9PlxyXG4gICAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJlxyXG4gICAgICAgICAgICAgIChvYmogYXMgYW55KS5ncm91cE5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUsXHJcbiAgICAgICAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICAgIG1haW5SZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICAgIGJ1YmJsZVJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChwcmV2R3JvdXApIHtcclxuICAgICAgICAgIHByZXZHcm91cC5tYWluUmVjdC5zZXQoeyBmaWxsOiBcIiNmZmZmZmZcIiwgc3Ryb2tlOiBcIiNEMEQ1RERcIiB9KTtcclxuICAgICAgICAgIHByZXZHcm91cC5idWJibGVSZWN0LnNldCh7IGZpbGw6IFwiIzk4QTJCM1wiIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JvdXAubWFpblJlY3Quc2V0KHsgZmlsbDogXCIjRjhGOUZDXCIsIHN0cm9rZTogXCIjQUZCNUQ5XCIgfSk7XHJcbiAgICAgICAgZ3JvdXAuYnViYmxlUmVjdC5zZXQoeyBmaWxsOiBcIiM4Mzg5YzVcIiB9KTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgYm90aCBtYXN0ZXJzIGFuZCBzdWJzIGFycm93cywgYmVmb3JlIHJlbmRlcmluZyBuZXcgc2V0LlxyXG4gICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZEdyb3VwTmFtZSEpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZE1hc3RlcklkKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9IGxhYmVsO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gb3B0LnRhcmdldDtcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCkge1xyXG4gICAgICAgICAgY29uc3QgcGFyZW50R3JvdXAgPSB0YXJnZXQgYXMgZmFicmljLkdyb3VwO1xyXG4gICAgICAgICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20ocGFyZW50R3JvdXApO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJNYXN0ZXJGaXh0dXJlcyhneCwgZ3kgKyA1MCwgcGFyZW50R3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBncm91cHMucHVzaChncm91cCk7XHJcbiAgICAgIHRvdGFsV2lkdGggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdG90YWxXaWR0aCAtPSBncm91cFNwYWNpbmc7XHJcblxyXG4gICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgbGV0IHggPSAoY2FudmFzV2lkdGggLSB0b3RhbFdpZHRoKSAvIDI7XHJcblxyXG4gICAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XHJcbiAgICAgIGdyb3VwLnNldCh7IGxlZnQ6IHgsIHRvcDogeSB9KTtcclxuICAgICAgeCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICAgIHRoaXMuY2FudmFzLmFkZChncm91cCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwRmFicmljR3JvdXAgPSBncm91cHNbMF07XHJcblxyXG4gICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oc2VsZWN0ZWRHcm91cEZhYnJpY0dyb3VwKTtcclxuICAgIHRoaXMucmVuZGVyTWFzdGVyRml4dHVyZXMoZ3gsIGd5ICsgNTAsIHNlbGVjdGVkR3JvdXBGYWJyaWNHcm91cCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJNYXN0ZXJGaXh0dXJlcyh4OiBudW1iZXIsIHk6IG51bWJlciwgZ3JvdXA/OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXMgPSB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcy5maWx0ZXIoXHJcbiAgICAgIChmKSA9PlxyXG4gICAgICAgIGYudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiICYmXHJcbiAgICAgICAgZi50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSxcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlc1swXS5faWQ7XHJcbiAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJtYXN0ZXJcIik7XHJcbiAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJzdWJcIik7XHJcblxyXG4gICAgY29uc3QgbWFzdGVyczogYW55W10gPSBhd2FpdCB0aGlzLnJlbmRlckZpeHR1cmVzKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzLFxyXG4gICAgICB4LFxyXG4gICAgICB5LFxyXG4gICAgKTtcclxuXHJcbiAgICBtYXN0ZXJzLmZvckVhY2goKG0pID0+IHRoaXMuZHJhd0Fycm93KGdyb3VwLCBtLCBncm91cC5ncm91cE5hbWUpKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwID0gbWFzdGVyc1swXTtcclxuICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHNlbGVjdGVkTWFzdGVyRmFicmljR3JvdXApO1xyXG4gICAgdGhpcy5yZW5kZXJTdWJGaXh0dXJlcyhzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwLCBneCwgZ3kgKyA1MCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJTdWJGaXh0dXJlcyhncm91cDogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdWJUZW1wbGF0ZXMgPVxyXG4gICAgICB0aGlzLmFsbEZpeHR1cmU/LmZpbHRlcihcclxuICAgICAgICAoZikgPT4gZi5tYXN0ZXJUZW1wbGF0ZUlkID09PSB0aGlzLnNlbGVjdGVkTWFzdGVySWQsXHJcbiAgICAgICkgPz8gW107XHJcbiAgICBpZiAodGhpcy5zdWJUZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHN1YjogYW55W10gPSBhd2FpdCB0aGlzLnJlbmRlckZpeHR1cmVzKFxyXG4gICAgICAgIHRoaXMuc3ViVGVtcGxhdGVzLFxyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeSxcclxuICAgICAgICBncm91cCxcclxuICAgICAgKTtcclxuICAgICAgc3ViLmZvckVhY2goKG0pID0+IHRoaXMuZHJhd0Fycm93KGdyb3VwLCBtLCBncm91cC5maXh0dXJlSWQpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByZXZlbnRDbGljayA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRml4dHVyZXMoXHJcbiAgICB0ZW1wbGF0ZXM6IGFueVtdLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgcGFyZW50RmFicmljPzogYW55LFxyXG4gICkge1xyXG4gICAgY29uc3QgZ3JvdXBTcGFjaW5nID0gMjA7XHJcblxyXG4gICAgdHlwZSBGaXh0dXJlR3JvdXAgPSBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGdyb3VwTmFtZTogc3RyaW5nO1xyXG4gICAgICB0ZW1wbGF0ZVR5cGU6IHN0cmluZztcclxuICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICBwYXJlbnRGYWJyaWM6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzOiBGaXh0dXJlR3JvdXBbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICB0ZW1wbGF0ZXMubWFwKGFzeW5jIChtZikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFjdHVhbFNoZWx2ZXMgPVxyXG4gICAgICAgICAgbWY/LnNoZWxmQ29uZmlnPy5maWx0ZXIoKHM6IGFueSkgPT4gcy5zaGVsZlR5cGUgIT0gXCJ2bW9ubHlcIikgPz8gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGlzTWFzdGVyID0gbWYudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBtYWluQ29udGFpbmVyID0gdGhpcy5jcmVhdGVNYWluQ29udGFpbmVyKG1mLCB4LCB5LCBpc01hc3Rlcik7XHJcbiAgICAgICAgY29uc3QgdG9wQ29udGFpbmVyID0gdGhpcy5jcmVhdGVUb3BDb250YWluZXIobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCBpbm5lclRvcEJveCA9IHRoaXMuY3JlYXRlSW5uZXJUb3BCb3gobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCBpbm5lckJvdHRvbUJveCA9IHRoaXMuY3JlYXRlSW5uZXJCb3R0b21Cb3gobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCBtaWRDb250YWluZXIgPSB0aGlzLmNyZWF0ZU1pZENvbnRhaW5lcihtZiwgeCwgeSwgaXNNYXN0ZXIpO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94ID0gdGhpcy5jcmVhdGVGaXJzdEJveChtZiwgeCwgeSwgaXNNYXN0ZXIpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RCb3ggPSB0aGlzLmNyZWF0ZUxhc3RCb3gobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuICAgICAgICBjb25zdCB7IGNvbnRhaW5lcjogYm90dG9tQ29udGFpbmVyLCB0ZXh0OiBib3R0b21UZXh0Q29udGVudCB9ID1cclxuICAgICAgICAgIHRoaXMuY3JlYXRlQm90dG9tQ29udGFpbmVyKG1mLCB4LCB5KTtcclxuXHJcbiAgICAgICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICAgICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgICAgY29uc3QgaW5uZXJUb3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYEZpeHR1cmUgJHttZj8uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyfWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogdG9wWSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBpbm5lckJveEhlaWdodCxcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBzZWNvbmRCb3hZID0gdG9wWSArIGlubmVyQm94SGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gZ2V0Rml4dHVyZUNhbnZhc0xhYmVsKG1mKTtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIGFkYXB0aXZlIHRleHQgZm9yIGlubmVyIGJvdHRvbVxyXG4gICAgICAgIGNvbnN0IGlubmVyQm90dG9tVGV4dCA9IHRoaXMuY3JlYXRlQWRhcHRpdmVUZXh0KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgIG1heEhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgZmlsbDogXCIjRkZGRkZGXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgZmlyc3QgYm94IHRleHQgd2l0aCBlbGxpcHNpcyBoYW5kbGluZ1xyXG4gICAgICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgICAgIGNvbnN0IG1pZFkgPSB0b3BZICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgICAgICBjb25zdCBzaGVsZkNvdW50ID0gbWYuc2hlbGZDb25maWcubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGJveEhlaWdodCA9IG1pZEhlaWdodCAvIChzaGVsZkNvdW50ICsgMik7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuXHJcbiAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbWY/LmhlYWRlcj8ubGFiZWwgPz8gXCJcIjtcclxuICAgICAgICBsZXQgZGlzcGxheUxhYmVsID0gbGFiZWxUZXh0O1xyXG5cclxuICAgICAgICBpZiAobGFiZWxUZXh0KSB7XHJcbiAgICAgICAgICBsZXQgdGVtcFRleHRib3ggPSBuZXcgZmFicmljLlRleHRib3gobGFiZWxUZXh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA3LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmICh0ZW1wVGV4dGJveC5oZWlnaHQgPiBib3hIZWlnaHQpIHtcclxuICAgICAgICAgICAgbGV0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgICAgbGV0IGxlZnQgPSAwO1xyXG4gICAgICAgICAgICBsZXQgcmlnaHQgPSBsYWJlbFRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkge1xyXG4gICAgICAgICAgICAgIGxldCBtaWQgPSBNYXRoLmZsb29yKChsZWZ0ICsgcmlnaHQpIC8gMik7XHJcbiAgICAgICAgICAgICAgbGV0IHRlc3RUZXh0ID0gbGFiZWxUZXh0LnNsaWNlKDAsIG1pZCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgICB0ZW1wVGV4dGJveC5zZXQoeyB0ZXh0OiB0ZXN0VGV4dCB9KTtcclxuICAgICAgICAgICAgICBpZiAodGVtcFRleHRib3guaGVpZ2h0ID4gYm94SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICByaWdodCA9IG1pZDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGVmdCA9IG1pZCArIDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRpc3BsYXlMYWJlbCA9IGxhYmVsVGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goZGlzcGxheUxhYmVsLCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBmaXJzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgZm9udFNpemU6IDcsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiMzNjNGNzJcIiA6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHNoZWx2ZXMgdXNpbmcgaGVscGVyIG1ldGhvZFxyXG4gICAgICAgIGNvbnN0IHNoZWx2ZXMgPSB0aGlzLmNyZWF0ZVNoZWx2ZXMobWYsIHgsIHksIGlzTWFzdGVyKTtcclxuXHJcbiAgICAgICAgLy8gQWRkIFZNIGNvbmZpZ3VyYXRpb25zIHRvIHNoZWx2ZXMgaWYgdGhleSBleGlzdFxyXG4gICAgICAgIGlmIChtZj8udm1Db25maWc/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZi52bUNvbmZpZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZtID0gbWYudm1Db25maWdbaV07XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHZtLnN0YXJ0WVBvc2l0aW9uIC0gMTtcclxuICAgICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHZtLmVuZFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZkhlaWdodFNwYW4gPSBib3hIZWlnaHQgKiAoZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgICAgIGxldCB2bUhlaWdodFB4OiBudW1iZXIgPSBzaGVsZkhlaWdodFNwYW47XHJcbiAgICAgICAgICAgICAgbGV0IHZtWTogbnVtYmVyID0gc2hlbGZUb3BZO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodm0ueVpvbmUgJiYgdm0ueVpvbmUgIT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICB2bUhlaWdodFB4ID0gc2hlbGZIZWlnaHRTcGFuIC8gMztcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodm0ueVpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcInRvcFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZtWSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZtWSA9IHNoZWxmVG9wWSArIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgICAgICAgICAgICB2bVkgPSBzaGVsZlRvcFkgKyAyICogdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB2bVkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBsZXQgdm1YID0gbWlkWDtcclxuICAgICAgICAgICAgICBsZXQgdm1XaWR0aCA9IG1pZFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIXZtLnhab25lIHx8IHZtLnhab25lID09PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgdm1XaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgdm1YID0gbWlkWDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VjdGlvbldpZHRoID0gbWlkV2lkdGggLyAzO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh2bS54Wm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZtV2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdm1YID0gbWlkWDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZtV2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdm1YID0gbWlkWCArIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdm1XaWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB2bVggPSBtaWRYICsgMiAqIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB2bVdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdm1YID0gbWlkWDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2bS52bUltYWdlVXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB2bUltYWdlOiBhbnkgPSBhd2FpdCBmYWJyaWMuRmFicmljSW1hZ2UuZnJvbVVSTChcclxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNkblVybH0ke3ZtLnZtSW1hZ2VVcmx9YCxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB2bUltYWdlLnNldCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogdm1YICsgdm1XaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiB2bVkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiB2bVdpZHRoIC8gdm1JbWFnZS53aWR0aCEsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiB2bUhlaWdodFB4IC8gdm1JbWFnZS5oZWlnaHQhLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIGxvYWRpbmcgaW1hZ2UgZm9yIFZNOiAke3ZtLnZtSW1hZ2VVcmx9YCxcclxuICAgICAgICAgICAgICAgICAgICBlcnIsXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZtQm94ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgICAgICAgbGVmdDogdm1YLFxyXG4gICAgICAgICAgICAgICAgICB0b3A6IHZtWSxcclxuICAgICAgICAgICAgICAgICAgd2lkdGg6IHZtV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogdm1IZWlnaHRQeCxcclxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjNjkzOEVGXCIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZtVGV4dCA9IHRoaXMuY3JlYXRlQWRhcHRpdmVUZXh0KHZtLnZtTmFtZSB8fCBcIlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiB2bVdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBsZWZ0OiB2bVggKyB2bVdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgdG9wOiB2bVkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtQm94LCB2bVRleHQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIH4gRXJyb3IgaW4gZHJhd2luZyBWTTogXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIGxhc3QgYm94IHRleHRcclxuICAgICAgICBjb25zdCBsYXN0Qm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzaGVsZkNvdW50ICsgMSk7XHJcbiAgICAgICAgY29uc3QgbGFzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgICAgICBgJHttZj8uZm9vdGVyPy5sYWJlbCA/IG1mLmZvb3Rlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdG9wOiBsYXN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjMzYzRjcyXCIgOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cENoaWxkcmVuID0gW1xyXG4gICAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICAgIC4uLighaXNNYXN0ZXIgPyBbdG9wQ29udGFpbmVyLCBpbm5lclRvcEJveCwgaW5uZXJUb3BUZXh0XSA6IFtdKSxcclxuICAgICAgICAgIGlubmVyQm90dG9tQm94LFxyXG4gICAgICAgICAgaW5uZXJCb3R0b21UZXh0LFxyXG4gICAgICAgICAgbWlkQ29udGFpbmVyLFxyXG4gICAgICAgICAgZmlyc3RCb3gsXHJcbiAgICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgICAuLi5zaGVsdmVzLFxyXG4gICAgICAgICAgbGFzdEJveCxcclxuICAgICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgICAgYm90dG9tQ29udGFpbmVyLFxyXG4gICAgICAgICAgYm90dG9tVGV4dENvbnRlbnQsXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChncm91cENoaWxkcmVuLCB7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgICAvLyBhbmdsZTogbWYucmVsYXRpdmVQb3NpdGlvbj8uYW5nbGUgPz8gMFxyXG4gICAgICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICAgICAgZ3JvdXBOYW1lOiBzdHJpbmc7XHJcbiAgICAgICAgICB0ZW1wbGF0ZVR5cGU6IHN0cmluZztcclxuICAgICAgICAgIG5hbWU6IHN0cmluZztcclxuICAgICAgICAgIHBhcmVudEZhYnJpYzogYW55O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSWQgPSBtZi5faWQ7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmZpeHR1cmVUeXBlID0gbWYuZml4dHVyZVR5cGU7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmdyb3VwTmFtZSA9IG1mPy50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC50ZW1wbGF0ZVR5cGUgPSBtZj8udGVtcGxhdGVUeXBlID8/IFwic3ViXCI7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLm5hbWUgPSBtZi50ZW1wbGF0ZVR5cGUgPz8gXCJmaXh0dXJlXCI7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnBhcmVudEZhYnJpYyA9IHBhcmVudEZhYnJpYztcclxuXHJcbiAgICAgICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2hpbGROYW1lID0gb3B0LnN1YlRhcmdldHM/LlswXT8ubmFtZTtcclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNoaWxkTmFtZSA9PT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIGlzTWFzdGVyICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCAhPT0gbWYuX2lkICYmXHJcbiAgICAgICAgICAgICF0aGlzLnByZXZlbnRDbGlja1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkTWFzdGVySWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJzdWJcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCA9IG1mLl9pZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoZml4dHVyZUdyb3VwLCBneCwgZ3kgKyA1MCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGZpeHR1cmVHcm91cC50ZW1wbGF0ZVR5cGUgPT09IFwic3ViXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluc3RhbmNlLmVtaXQobWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZml4dHVyZUdyb3VwO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcblxyXG4gICAgbGV0IHRvdGFsV2lkdGggPSAwO1xyXG4gICAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XHJcbiAgICAgIHRvdGFsV2lkdGggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdG90YWxXaWR0aCAtPSBncm91cFNwYWNpbmc7XHJcbiAgICBsZXQgbnggPSB4IC0gdG90YWxXaWR0aCAvIDI7XHJcblxyXG4gICAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XHJcbiAgICAgIGdyb3VwLnNldCh7IGxlZnQ6IG54LCB0b3A6IHkgfSk7XHJcbiAgICAgIG54ICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgICAgdGhpcy5jYW52YXMuYWRkKGdyb3VwKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGdyb3VwcztcclxuICB9XHJcblxyXG4gIGNyZWF0ZU1haW5Db250YWluZXIoXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaXNNYXN0ZXI6IGJvb2xlYW4sXHJcbiAgKTogZmFicmljLlJlY3Qge1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgIGxldCBtYWluQ29udGFpbmVySGVpZ2h0ID0gaGVpZ2h0ICsgMTtcclxuICAgIGlmIChpc01hc3Rlcikge1xyXG4gICAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICBtYWluQ29udGFpbmVySGVpZ2h0ID0gaGVpZ2h0IC0gdG9wSGVpZ2h0IC8gMiArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWFpbkNvbnRhaW5lclRvcCA9IGlzTWFzdGVyXHJcbiAgICAgID8geSArICgoMTUgLyAxMDApICogaGVpZ2h0KSAvIDIgLSAxXHJcbiAgICAgIDogeSAtIDE7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogbWFpbkNvbnRhaW5lclRvcCxcclxuICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IG1haW5Db250YWluZXJIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVUb3BDb250YWluZXIoXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaXNNYXN0ZXI6IGJvb2xlYW4sXHJcbiAgKTogZmFicmljLlJlY3Qge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID1cclxuICAgICAgKDE1IC8gMTAwKSAqXHJcbiAgICAgIHRoaXMudG9QaXhlbHMobWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IHRvcFkgPSB5ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRvcFgsXHJcbiAgICAgIHRvcDogdG9wWSxcclxuICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRvcEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUlubmVyVG9wQm94KFxyXG4gICAgbWY6IGFueSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGlzTWFzdGVyOiBib29sZWFuLFxyXG4gICk6IGZhYnJpYy5QYXRoIHtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9XHJcbiAgICAgICgxNSAvIDEwMCkgKlxyXG4gICAgICB0aGlzLnRvUGl4ZWxzKG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCk7XHJcbiAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICBjb25zdCByYWRpdXMgPSAzO1xyXG4gICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG5cclxuICAgIHJldHVybiBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZfSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUlubmVyQm90dG9tQm94KFxyXG4gICAgbWY6IGFueSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGlzTWFzdGVyOiBib29sZWFuLFxyXG4gICk6IGZhYnJpYy5QYXRoIHtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9XHJcbiAgICAgICgxNSAvIDEwMCkgKlxyXG4gICAgICB0aGlzLnRvUGl4ZWxzKG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCk7XHJcbiAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICBjb25zdCByYWRpdXMgPSAzO1xyXG4gICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG4gICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuXHJcbiAgICBpZiAoaXNNYXN0ZXIpIHtcclxuICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICBgTSAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZfSAke3RvcFggKyB0b3BXaWR0aH0gJHtcclxuICAgICAgICAgICAgc2Vjb25kQm94WSArIHJhZGl1c1xyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke1xyXG4gICAgICAgICAgICB0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgIH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYfSAke1xyXG4gICAgICAgICAgICBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFl9ICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBmaWxsOiBcIiMzNjNGNzJcIixcclxuICAgICAgICAgIHN0cm9rZTogXCIjNzE3QkJDXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICBgTSAke3RvcFh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7XHJcbiAgICAgICAgICAgIHRvcFggKyB0b3BXaWR0aCAtIHJhZGl1c1xyXG4gICAgICAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7XHJcbiAgICAgICAgICAgIHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIEwgJHt0b3BYfSAke3NlY29uZEJveFl9IFpgLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZpbGw6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgc3Ryb2tlOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVNaWRDb250YWluZXIoXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaXNNYXN0ZXI6IGJvb2xlYW4sXHJcbiAgKTogZmFicmljLlJlY3Qge1xyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgbWlkWSA9IHkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG4gICAgY29uc3QgcmFkaXVzID0gMztcclxuXHJcbiAgICByZXR1cm4gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgdG9wOiBtaWRZLFxyXG4gICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgIGhlaWdodDogbWlkSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRmlyc3RCb3goXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaXNNYXN0ZXI6IGJvb2xlYW4sXHJcbiAgKTogZmFicmljLlBhdGgge1xyXG4gICAgY29uc3QgYWN0dWFsU2hlbHZlcyA9XHJcbiAgICAgIG1mLnNoZWxmQ29uZmlnPy5maWx0ZXIoKHM6IGFueSkgPT4gcy5zaGVsZlR5cGUgIT0gXCJ2bW9ubHlcIikgPz8gW107XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0geSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcbiAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAobWYuc2hlbGZDb25maWcubGVuZ3RoICsgMik7XHJcbiAgICBjb25zdCBmaXJzdEJveFkgPSBtaWRZO1xyXG4gICAgY29uc3QgcmFkaXVzID0gMztcclxuXHJcbiAgICByZXR1cm4gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke21pZFggKyByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aCAtIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WX0gJHttaWRYICsgbWlkV2lkdGh9ICR7XHJcbiAgICAgICAgICAgICAgZmlyc3RCb3hZICsgcmFkaXVzXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke21pZFh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyByYWRpdXN9ICR7Zmlyc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjRUFFQ0Y1XCIgOiBcIiNEQUYxRkZcIixcclxuICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjQUZCNUQ5XCIgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVMYXN0Qm94KG1mOiBhbnksIHg6IG51bWJlciwgeTogbnVtYmVyLCBpc01hc3RlcjogYm9vbGVhbik6IGZhYnJpYy5QYXRoIHtcclxuICAgIGNvbnN0IGFjdHVhbFNoZWx2ZXMgPVxyXG4gICAgICBtZi5zaGVsZkNvbmZpZz8uZmlsdGVyKChzOiBhbnkpID0+IHMuc2hlbGZUeXBlICE9IFwidm1vbmx5XCIpID8/IFtdO1xyXG5cclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB5ICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IGJveEhlaWdodCA9IG1pZEhlaWdodCAvIChtZi5zaGVsZkNvbmZpZy5sZW5ndGggKyAyKTtcclxuICAgIGNvbnN0IGxhc3RCb3hZID0gbWlkWSArIGJveEhlaWdodCAqIChtZi5zaGVsZkNvbmZpZy5sZW5ndGggKyAxKTtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYfSAke2xhc3RCb3hZfSBcclxuICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke1xyXG4gICAgICAgICAgICAgIG1pZFggKyBtaWRXaWR0aCAtIHJhZGl1c1xyXG4gICAgICAgICAgICB9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIHJhZGl1c30gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7XHJcbiAgICAgICAgICAgICAgbGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgTCAke21pZFh9ICR7bGFzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiNFQUVDRjVcIiA6IFwiI0RBRjFGRlwiLFxyXG4gICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiNBRkI1RDlcIiA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUJvdHRvbUNvbnRhaW5lcihcclxuICAgIG1mOiBhbnksXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgKTogeyBjb250YWluZXI6IGZhYnJpYy5SZWN0OyB0ZXh0OiBmYWJyaWMuVGV4dGJveCB9IHtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBib3R0b21XaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IGJvdHRvbUhlaWdodCA9ICgzIC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IGJvdHRvbVggPSB4ICsgKHdpZHRoIC0gYm90dG9tV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSB5ICsgdG9wSGVpZ2h0ICsgbWlkSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgY29uc3QgYm90dG9tQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogYm90dG9tWCxcclxuICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYWN0dWFsU2hlbGZDb3VudCA9XHJcbiAgICAgIG1mPy5zaGVsZkNvbmZpZz8uZmlsdGVyKChzOiBhbnkpID0+IHMuc2hlbGZUeXBlICE9IFwidm1vbmx5XCIpPy5sZW5ndGggPz8gMDtcclxuXHJcbiAgICBjb25zdCBib3R0b21UZXh0Q29udGVudCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYFNoZWx2ZXMgLSAke2FjdHVhbFNoZWxmQ291bnR9IC4gUHJvZHVjdHMgLSAgJHtnZXRGaXh0dXJlUHJvZHVjdENhcGFjaXR5KG1mLnNoZWxmQ29uZmlnKX0gLiBWTSAtICR7bWYudm1Db25maWcubGVuZ3RofWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBib3R0b21YICsgYm90dG9tV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm90dG9tWSArIGJvdHRvbUhlaWdodCAvIDIgKyA0LFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4geyBjb250YWluZXI6IGJvdHRvbUNvbnRhaW5lciwgdGV4dDogYm90dG9tVGV4dENvbnRlbnQgfTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVNoZWx2ZXMoXHJcbiAgICBtZjogYW55LFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaXNNYXN0ZXI6IGJvb2xlYW4sXHJcbiAgKTogZmFicmljLk9iamVjdFtdIHtcclxuICAgIGNvbnN0IGFjdHVhbFNoZWx2ZXMgPVxyXG4gICAgICBtZi5zaGVsZkNvbmZpZz8uZmlsdGVyKChzOiBhbnkpID0+IHMuc2hlbGZUeXBlICE9IFwidm1vbmx5XCIpID8/IFtdO1xyXG5cclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB5ICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuICAgIGNvbnN0IGJveEhlaWdodCA9IG1pZEhlaWdodCAvIChtZi5zaGVsZkNvbmZpZy5sZW5ndGggKyAyKTtcclxuICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgY29uc3Qgc2hlbHZlczogZmFicmljLk9iamVjdFtdID0gW107XHJcblxyXG4gICAgaWYgKG1mLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDFcIikge1xyXG4gICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0O1xyXG4gICAgICBjb25zdCBzaGVsZkhlaWdodCA9IG1pZEhlaWdodCAtIDIgKiBib3hIZWlnaHQ7XHJcblxyXG4gICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogc2hlbGZIZWlnaHQsXHJcbiAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHRleHQgPSBtZj8ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgLy8gV3JhcCB0ZXh0IHdpdGhpbiBmaXh0dXJlIHdpZHRoIGFuZCBzaHJpbmsgdG8gZml0IHNoZWxmIGhlaWdodFxyXG4gICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IHNoZWxmSGVpZ2h0ICogMC44O1xyXG4gICAgICBsZXQgZm9udFNpemVMMSA9IDY7XHJcblxyXG4gICAgICBjb25zdCBjcmVhdGVXcmFwcGVkVGV4dGJveCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGxldCB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZUwxID4gMikge1xyXG4gICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgaGVpZ2h0OiB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIDIsXHJcbiAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICByeDogMSxcclxuICAgICAgICByeTogMSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzaGVsdmVzLnB1c2goc2hlbGYsIGJhY2tncm91bmQsIHdyYXBwZWRUZXh0KTtcclxuICAgIH0gZWxzZSBpZiAobWYucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWYuc2hlbGZDb25maWc/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChpICsgMSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZik7XHJcblxyXG4gICAgICAgIGlmIChtZi5zaGVsZkNvbmZpZz8uW2ldLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gbWYuc2hlbGZDb25maWc/LltpXS50cmF5Um93cyB8fCAxO1xyXG4gICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHQgPSBtZi5zaGVsZkNvbmZpZz8uW2ldLnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgLy8gU2luZ2xlLWxpbmUgZWxsaXBzaXMgd2l0aGluIHNoZWxmIHdpZHRoXHJcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSA2O1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IE1hdGgubWF4KDAsIG1pZFdpZHRoIC0gaG9yaXpvbnRhbFBhZGRpbmcpO1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBib3hIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbnRTaXplID0gNTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9ICh0OiBzdHJpbmcpID0+XHJcbiAgICAgICAgICBuZXcgZmFicmljLlRleHQodCwge1xyXG4gICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGRpc3BsYXlUZXh0ID0gdGV4dDtcclxuICAgICAgICBsZXQgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgY29uc3QgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgbGV0IGxlZnRJZHggPSAwO1xyXG4gICAgICAgICAgbGV0IHJpZ2h0SWR4ID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgd2hpbGUgKGxlZnRJZHggPCByaWdodElkeCkge1xyXG4gICAgICAgICAgICBjb25zdCBtaWRJZHggPSBNYXRoLmZsb29yKChsZWZ0SWR4ICsgcmlnaHRJZHgpIC8gMik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRleHQuc2xpY2UoMCwgbWlkSWR4KSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoY2FuZGlkYXRlKTtcclxuICAgICAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgICAgIHJpZ2h0SWR4ID0gbWlkSWR4O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxlZnRJZHggPSBtaWRJZHggKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkaXNwbGF5VGV4dCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGVmdElkeCAtIDEpKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTWF0aC5taW4obWF4VGV4dEhlaWdodCwgbWVhc3VyZWQuaGVpZ2h0ID8/IDEwKSArIDIsXHJcbiAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbmFsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dChkaXNwbGF5VGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goYmFja2dyb3VuZCwgZmluYWxUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwzXCIpIHtcclxuICAgICAgY29uc3Qgc2VxdWVudGlhbEdyb3VwczogeyB6b25lOiBzdHJpbmc7IHNoZWx2ZXM6IGFueVtdIH1bXSA9IFtdO1xyXG4gICAgICBsZXQgcHJldmlvdXNab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgc2hlbGYgb2YgbWYuc2hlbGZDb25maWcpIHtcclxuICAgICAgICBjb25zdCB6b25lID0gc2hlbGYuem9uZSB8fCBcIlVua25vd25cIjtcclxuICAgICAgICBpZiAoem9uZSAhPT0gcHJldmlvdXNab25lKSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzLnB1c2goeyB6b25lLCBzaGVsdmVzOiBbc2hlbGZdIH0pO1xyXG4gICAgICAgICAgcHJldmlvdXNab25lID0gem9uZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VxdWVudGlhbEdyb3Vwc1tzZXF1ZW50aWFsR3JvdXBzLmxlbmd0aCAtIDFdLnNoZWx2ZXMucHVzaChzaGVsZik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY3VycmVudFNoZWxmSW5kZXggPSAwO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBzZXF1ZW50aWFsR3JvdXBzKSB7XHJcbiAgICAgICAgY29uc3QgeyB6b25lLCBzaGVsdmVzOiBzaGVsdmVzSW5Hcm91cCB9ID0gZ3JvdXA7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBTdGFydEluZGV4ID0gY3VycmVudFNoZWxmSW5kZXg7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBMZW5ndGggPSBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGdyb3VwU3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tWSA9IGdyb3VwVG9wWSArIGJveEhlaWdodCAqIGdyb3VwTGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBzaGVsZkRhdGEgPSBzaGVsdmVzSW5Hcm91cFtqXTtcclxuICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoY3VycmVudFNoZWxmSW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBzaGVsZlJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmUmVjdCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNoZWxmRGF0YS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gc2hlbGZEYXRhLnRyYXlSb3dzIHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZiA9IHNoZWxmRGF0YS5wcm9kdWN0UGVyU2hlbGYgfHwgMDtcclxuICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuICAgICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMTsgYyA8IHByb2R1Y3RQZXJTaGVsZjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVggPSBtaWRYICsgYyAqIGNvbHVtblNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW2xpbmVYLCBib3hZLCBsaW5lWCwgYm94WSArIGJveEhlaWdodF0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godmVydGljYWxMaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY3VycmVudFNoZWxmSW5kZXgrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgIFttaWRYLCBncm91cEJvdHRvbVksIG1pZFggKyBtaWRXaWR0aCwgZ3JvdXBCb3R0b21ZXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICBpZiAobWYuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC0gbGFiZWxQYWRkaW5nLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwicmlnaHRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChsYWJlbFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJYID0gbWlkWCArIG1pZFdpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBncm91cENlbnRlclkgPSBncm91cFRvcFkgKyAoZ3JvdXBCb3R0b21ZIC0gZ3JvdXBUb3BZKSAvIDI7XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbkJyYW5kcyA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgc2hlbHZlc0luR3JvdXA/LmZvckVhY2goKHNoZWxmKSA9PiB7XHJcbiAgICAgICAgICBzaGVsZi5wcm9kdWN0QnJhbmROYW1lPy5mb3JFYWNoKChicmFuZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHNlY3Rpb25CcmFuZHMuYWRkKGJyYW5kKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoWy4uLnNlY3Rpb25CcmFuZHNdLmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgdGV4dCA9IFsuLi5zZWN0aW9uQnJhbmRzXS5qb2luKFwiICsgXCIpO1xyXG4gICAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IG1pZFdpZHRoICogMC45O1xyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IDIwO1xyXG5cclxuICAgICAgICAgIGxldCBmb250U2l6ZSA9IDY7XHJcbiAgICAgICAgICBsZXQgd3JhcHBlZFRleHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlVGV4dGJveCA9IChmczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI0MDBcIixcclxuICAgICAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICAgIHRvcDogZ3JvdXBDZW50ZXJZLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVRleHRib3goZm9udFNpemUpO1xyXG4gICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICB9IHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgY29uc3QgcmVjdEhlaWdodCA9IHdyYXBwZWRUZXh0LmdldFNjYWxlZEhlaWdodCgpICsgcGFkZGluZztcclxuICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBDZW50ZXJUZXh0LCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNoZWx2ZXM7XHJcbiAgfVxyXG5cclxuICBjbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKHRlbXBsYXRlVHlwZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBncm91cHNUb1JlbW92ZSA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcihcclxuICAgICAgICAob2JqKSA9PlxyXG4gICAgICAgICAgb2JqIGluc3RhbmNlb2YgZmFicmljLkdyb3VwICYmXHJcbiAgICAgICAgICAob2JqIGFzIGFueSkudGVtcGxhdGVUeXBlID09PSB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICk7XHJcblxyXG4gICAgaWYgKGdyb3Vwc1RvUmVtb3ZlKSB7XHJcbiAgICAgIGdyb3Vwc1RvUmVtb3ZlLmZvckVhY2goKGdyb3VwKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZ3JvdXApKTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJhd0Fycm93KGZyb21Hcm91cDogZmFicmljLkdyb3VwLCB0b0dyb3VwOiBmYWJyaWMuR3JvdXAsIGFycm93SWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZnJvbSA9IGZyb21Hcm91cC5hQ29vcmRzID8/IGZyb21Hcm91cC5jYWxjT0Nvb3JkcygpO1xyXG4gICAgY29uc3QgdG8gPSB0b0dyb3VwLmFDb29yZHMgPz8gdG9Hcm91cC5jYWxjT0Nvb3JkcygpO1xyXG5cclxuICAgIGNvbnN0IGZyb21YID0gKGZyb20uYmwueCArIGZyb20uYnIueCkgLyAyO1xyXG4gICAgY29uc3QgZnJvbVkgPSAoZnJvbS5ibC55ICsgZnJvbS5ici55KSAvIDI7XHJcblxyXG4gICAgY29uc3QgdG9YID0gKHRvLnRsLnggKyB0by50ci54KSAvIDI7XHJcbiAgICBjb25zdCB0b1kgPSAodG8udGwueSArIHRvLnRyLnkpIC8gMjtcclxuXHJcbiAgICBjb25zdCBob3Jpem9udGFsT2Zmc2V0ID0gdG9YIC0gZnJvbVg7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbE9mZnNldCA9IHRvWSAtIGZyb21ZO1xyXG4gICAgY29uc3QgY3VydmVTaXplID0gMTQ7XHJcblxyXG4gICAgbGV0IHBhdGhEYXRhID0gXCJcIjtcclxuXHJcbiAgICBpZiAoTWF0aC5hYnMoaG9yaXpvbnRhbE9mZnNldCkgPCA1KSB7XHJcbiAgICAgIC8vIERpcmVjdCB2ZXJ0aWNhbCBsaW5lXHJcbiAgICAgIHBhdGhEYXRhID0gYE0gJHtmcm9tWH0gJHtmcm9tWX0gTCAke3RvWH0gJHt0b1l9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IG1pZFkgPSBmcm9tWSArIHZlcnRpY2FsT2Zmc2V0IC8gMjtcclxuICAgICAgY29uc3QgZGlyZWN0aW9uID0gaG9yaXpvbnRhbE9mZnNldCA+IDAgPyAxIDogLTE7XHJcblxyXG4gICAgICBjb25zdCBjdXJ2ZTFYID0gZnJvbVggKyBkaXJlY3Rpb24gKiBjdXJ2ZVNpemU7XHJcbiAgICAgIGNvbnN0IGN1cnZlMlggPSB0b1ggLSBkaXJlY3Rpb24gKiBjdXJ2ZVNpemU7XHJcblxyXG4gICAgICBwYXRoRGF0YSA9IFtcclxuICAgICAgICBgTSAke2Zyb21YfSAke2Zyb21ZfWAsXHJcbiAgICAgICAgYEwgJHtmcm9tWH0gJHttaWRZIC0gY3VydmVTaXplfWAsXHJcbiAgICAgICAgYFEgJHtmcm9tWH0gJHttaWRZfSAke2N1cnZlMVh9ICR7bWlkWX1gLFxyXG4gICAgICAgIGBMICR7Y3VydmUyWH0gJHttaWRZfWAsXHJcbiAgICAgICAgYFEgJHt0b1h9ICR7bWlkWX0gJHt0b1h9ICR7bWlkWSArIGN1cnZlU2l6ZX1gLFxyXG4gICAgICAgIGBMICR7dG9YfSAke3RvWX1gLFxyXG4gICAgICBdLmpvaW4oXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFycm93TGluZSA9IG5ldyBmYWJyaWMuUGF0aChwYXRoRGF0YSwge1xyXG4gICAgICBzdHJva2U6IFwiI0FGQjVEOVwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMS44LFxyXG4gICAgICBmaWxsOiBcIlwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBcnJvd2hlYWRcclxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih0b1kgLSAodG9ZIC0gMTApLCB0b1ggLSB0b1gpO1xyXG4gICAgY29uc3QgaGVhZGxlbiA9IDEwO1xyXG4gICAgY29uc3QgYXJyb3dIZWFkID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBbXHJcbiAgICAgICAgYE0gJHt0b1h9ICR7dG9ZfWAsXHJcbiAgICAgICAgYEwgJHt0b1ggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgLSBNYXRoLlBJIC8gNSl9ICR7XHJcbiAgICAgICAgICB0b1kgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgLSBNYXRoLlBJIC8gNSlcclxuICAgICAgICB9YCxcclxuICAgICAgICBgTSAke3RvWH0gJHt0b1l9YCxcclxuICAgICAgICBgTCAke3RvWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSArIE1hdGguUEkgLyA1KX0gJHtcclxuICAgICAgICAgIHRvWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSArIE1hdGguUEkgLyA1KVxyXG4gICAgICAgIH1gLFxyXG4gICAgICBdLmpvaW4oXCIgXCIpLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Ryb2tlOiBcIiNBRkI1RDlcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMS44LFxyXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBHcm91cGluZyBib3RoIGxpbmUgYW5kIGFycm93aGVhZFxyXG4gICAgY29uc3QgYXJyb3dHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoW2Fycm93TGluZSwgYXJyb3dIZWFkXSwge1xyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7IGFycm93SWQ6IHN0cmluZyB9O1xyXG5cclxuICAgIC8vIEF0dGFjaCBjdXN0b20gYXJyb3cgSURcclxuICAgIGFycm93R3JvdXAuYXJyb3dJZCA9IGFycm93SWQ7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKGFycm93R3JvdXApO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJBcnJvd0J5SWQoYXJyb3dJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBhcnJvd0dyb3VwID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICBvYmogaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXAgJiYgKG9iaiBhcyBhbnkpLmFycm93SWQgPT09IGFycm93SWQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgaWYgKGFycm93R3JvdXApIHtcclxuICAgICAgYXJyb3dHcm91cC5mb3JFYWNoKChncm91cCkgPT4gdGhpcy5jYW52YXMucmVtb3ZlKGdyb3VwKSk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJ0cmVlLWNhbnZhcy1jYXJkXCIgY2xhc3M9XCJ3LTEwMCBwLTZcIj5cclxuICA8Y2FudmFzIGlkPVwidGVtcGxhdGUtY2FudmFzXCIgI3RlbXBsYXRlQ2FudmFzPjwvY2FudmFzPlxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTAwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEwIDExXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm1lLTFcIj5cclxuICAgICAgICA8Y2lyY2xlIGN4PVwiNC44NDMxXCIgY3k9XCI1LjQ5OTk2XCIgcj1cIjQuODQzMVwiIGZpbGw9XCIjNjE3MkYzXCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIDxwIGNsYXNzPVwibS0wIG1lLTNcIj5NYXN0ZXIgVGVtcGxhdGU8L3A+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTFcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTEgMTFcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibWUtMVwiPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCI1LjQ0NDY2XCIgY3k9XCI1LjQ5OTk2XCIgcj1cIjQuODQzMVwiIGZpbGw9XCIjMzNCNUZGXCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIDxwIGNsYXNzPVwibS0wXCI+Rml4dHVyZSBJbnN0YW5jZTwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInpvb21cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInpvb20taW5cIiAoY2xpY2spPVwiem9vbUluKClcIj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNVYxOU01IDEySDE5XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInpvb20tb3V0XCIgKGNsaWNrKT1cInpvb21PdXQoKVwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk01IDEySDE5XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|