tango-app-ui-store-builder 1.0.95 → 1.0.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/collection-update-ai/components/store-select/store-select.component.mjs +23 -4
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +141 -14
- package/esm2022/lib/components/collection-update-ai/find-replace-table/find-replace-table.component.mjs +13 -3
- package/esm2022/lib/components/collection-update-ai/models/find-replace.model.mjs +1 -1
- package/esm2022/lib/components/collection-update-ai/services/data.service.mjs +5 -1
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +221 -14
- package/esm2022/lib/components/manage-store-plano/verification-feedback/action-confirm-popup/action-confirm-popup.component.mjs +12 -1
- package/esm2022/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.mjs +102 -7
- package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +70 -12
- package/esm2022/lib/components/onboard-store-plano/utils/axis-compaction.mjs +56 -55
- package/esm2022/lib/components/plano-tools/allow-edit/allow-edit.component.mjs +1 -1
- package/esm2022/lib/components/plano-tools/delete-task/delete-task.component.mjs +1 -1
- package/esm2022/lib/components/plano-tools/modify-fixture-numbers/modify-fixture-numbers.component.mjs +156 -0
- package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +1 -1
- package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +1 -1
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +3 -3
- package/esm2022/lib/services/store-builder.service.mjs +19 -1
- package/esm2022/lib/tango-store-builder-routing.module.mjs +6 -1
- package/esm2022/lib/tango-store-builder.module.mjs +4 -1
- package/fesm2022/tango-app-ui-store-builder.mjs +810 -106
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/collection-update-ai/components/store-select/store-select.component.d.ts +2 -1
- package/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.d.ts +18 -0
- package/lib/components/collection-update-ai/find-replace-table/find-replace-table.component.d.ts +1 -0
- package/lib/components/collection-update-ai/models/find-replace.model.d.ts +12 -0
- package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +5 -0
- package/lib/components/manage-store-plano/verification-feedback/action-confirm-popup/action-confirm-popup.component.d.ts +1 -1
- package/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.d.ts +13 -1
- package/lib/components/plano-tools/modify-fixture-numbers/modify-fixture-numbers.component.d.ts +49 -0
- package/lib/services/store-builder.service.d.ts +13 -0
- package/lib/tango-store-builder.module.d.ts +53 -52
- package/package.json +1 -1
|
@@ -1318,6 +1318,40 @@ export class OnboardStorePlanoComponent {
|
|
|
1318
1318
|
let fixtureColor;
|
|
1319
1319
|
if (fixtureData.fixtureName === "space")
|
|
1320
1320
|
return;
|
|
1321
|
+
// Resolve the angle the fixture group will render at. For first-render of a
|
|
1322
|
+
// CAD-uploaded layout, the wall angle is the source of truth (otherwise we
|
|
1323
|
+
// honor the fixture's own saved angle). When that angle lies in the
|
|
1324
|
+
// upside-down range (90°, 270°), we flip the fixture body 180° in place so
|
|
1325
|
+
// it renders canonical (header at top, storage at bottom). The body flip
|
|
1326
|
+
// also brings the text upright as a side effect, so no per-text rotation
|
|
1327
|
+
// is needed. Trade-off: on flipped walls the storage box ends up visually
|
|
1328
|
+
// touching the wall instead of the header.
|
|
1329
|
+
let angle = fixtureData?.relativePosition?.angle ?? 0;
|
|
1330
|
+
if (this.floorData.cadLayout && fixtureData.fixtureType === "wall") {
|
|
1331
|
+
const wallData = this.getWallByNumber(fixtureData.associatedElementNumber);
|
|
1332
|
+
angle = wallData?.angle ?? 0;
|
|
1333
|
+
}
|
|
1334
|
+
const normAngle = (((angle % 360) + 360) % 360);
|
|
1335
|
+
const shouldFlipBody = this.floorData.cadLayout &&
|
|
1336
|
+
fixtureData.fixtureType === "wall" &&
|
|
1337
|
+
normAngle > 90 &&
|
|
1338
|
+
normAngle < 270;
|
|
1339
|
+
// To rotate the body 180° while keeping the same on-canvas region, shift
|
|
1340
|
+
// the anchor by R(originalAngle)·(width, height) — that's the canvas
|
|
1341
|
+
// position of the un-rotated bbox's bottom-right corner relative to the
|
|
1342
|
+
// anchor — and add 180° to the rotation. fabric still pivots around
|
|
1343
|
+
// top-left of the un-rotated bbox at the new anchor.
|
|
1344
|
+
let renderX = x;
|
|
1345
|
+
let renderY = y;
|
|
1346
|
+
let renderAngle = angle;
|
|
1347
|
+
if (shouldFlipBody) {
|
|
1348
|
+
const rad = (angle * Math.PI) / 180;
|
|
1349
|
+
const cosA = Math.cos(rad);
|
|
1350
|
+
const sinA = Math.sin(rad);
|
|
1351
|
+
renderX = x + cosA * width - sinA * height;
|
|
1352
|
+
renderY = y + sinA * width + cosA * height;
|
|
1353
|
+
renderAngle = angle + 180;
|
|
1354
|
+
}
|
|
1321
1355
|
const radius = 5;
|
|
1322
1356
|
const mainContainer = new fabric.Rect({
|
|
1323
1357
|
left: x,
|
|
@@ -1967,12 +2001,6 @@ export class OnboardStorePlanoComponent {
|
|
|
1967
2001
|
this.selectedFixture.fixtureData = this.selectedFixtureData;
|
|
1968
2002
|
this.editFixture = true;
|
|
1969
2003
|
});
|
|
1970
|
-
let angle = fixtureData?.relativePosition?.angle;
|
|
1971
|
-
if (this.floorData.cadLayout && fixtureData.fixtureType === "wall") {
|
|
1972
|
-
const wallData = this.getWallByNumber(fixtureData.associatedElementNumber);
|
|
1973
|
-
const angleDeg = wallData?.angle || 0;
|
|
1974
|
-
angle = angleDeg;
|
|
1975
|
-
}
|
|
1976
2004
|
const fixtureGroup = new fabric.Group([
|
|
1977
2005
|
mainContainer,
|
|
1978
2006
|
topContainer,
|
|
@@ -1990,15 +2018,15 @@ export class OnboardStorePlanoComponent {
|
|
|
1990
2018
|
bottomTextContent,
|
|
1991
2019
|
editSvg,
|
|
1992
2020
|
], {
|
|
1993
|
-
left:
|
|
1994
|
-
top:
|
|
2021
|
+
left: renderX,
|
|
2022
|
+
top: renderY,
|
|
1995
2023
|
evented: true,
|
|
1996
2024
|
hoverCursor: "pointer",
|
|
1997
2025
|
selectable: this.layoutForm.enabled,
|
|
1998
2026
|
lockScalingX: true,
|
|
1999
2027
|
lockScalingY: true,
|
|
2000
2028
|
subTargetCheck: true,
|
|
2001
|
-
angle:
|
|
2029
|
+
angle: renderAngle,
|
|
2002
2030
|
});
|
|
2003
2031
|
if (!fixtureData?.issue &&
|
|
2004
2032
|
!fixtureData?.unsavedChanges &&
|
|
@@ -2850,9 +2878,23 @@ export class OnboardStorePlanoComponent {
|
|
|
2850
2878
|
// during placement: (−sinA·cosA + cosA·sinA) cancels to 0.
|
|
2851
2879
|
const existingFixtures = (wallData.fixtures || []).filter((f) => f.fixtureName !== "space");
|
|
2852
2880
|
const occupied = existingFixtures.map((f) => {
|
|
2853
|
-
const tStart = (f.relativePosition.x - x0) * cosA +
|
|
2854
|
-
(f.relativePosition.y - y0) * sinA;
|
|
2855
2881
|
const fWidth = this.fromPixels(this.toPixels(f.fixtureStaticWidth.value, f.fixtureStaticWidth.unit), "ft");
|
|
2882
|
+
const fHeight = this.fromPixels(this.toPixels(f.fixtureStaticLength.value, f.fixtureStaticLength.unit), "ft");
|
|
2883
|
+
// CAD-uploaded fixtures on inverted walls (wall angle ∈ (90°, 270°))
|
|
2884
|
+
// have their saved (x, y) shifted by R(wallAngle)·(w, h) to keep the
|
|
2885
|
+
// canonical visual after a 180° body flip — see drawFixture. To
|
|
2886
|
+
// recover the wall-axis position the gap-finder needs, unshift any
|
|
2887
|
+
// fixture whose saved angle differs from the wall angle by ~180°.
|
|
2888
|
+
const fAngle = (f.relativePosition.angle ?? 0);
|
|
2889
|
+
const angleDiff = ((((fAngle - angleDeg) % 360) + 360) % 360);
|
|
2890
|
+
const isFlipped = Math.abs(angleDiff - 180) < 1;
|
|
2891
|
+
let projX = f.relativePosition.x;
|
|
2892
|
+
let projY = f.relativePosition.y;
|
|
2893
|
+
if (isFlipped) {
|
|
2894
|
+
projX -= cosA * fWidth - sinA * fHeight;
|
|
2895
|
+
projY -= sinA * fWidth + cosA * fHeight;
|
|
2896
|
+
}
|
|
2897
|
+
const tStart = (projX - x0) * cosA + (projY - y0) * sinA;
|
|
2856
2898
|
return [Math.max(0, tStart), Math.max(0, tStart) + fWidth];
|
|
2857
2899
|
});
|
|
2858
2900
|
occupied.sort((a, b) => a[0] - b[0]);
|
|
@@ -2881,6 +2923,22 @@ export class OnboardStorePlanoComponent {
|
|
|
2881
2923
|
fixtureData.relativePosition.x = fx_offset;
|
|
2882
2924
|
fixtureData.relativePosition.y = fy_offset;
|
|
2883
2925
|
fixtureData.relativePosition.angle = angleDeg;
|
|
2926
|
+
// If the wall angle puts the fixture in the upside-down range, bake
|
|
2927
|
+
// the same 180° body flip drawFixture applies during CAD first-render
|
|
2928
|
+
// (shift anchor by R(wallAngle)·(w, h) and rotate +180°). drawFixture's
|
|
2929
|
+
// own flip path is gated on cadLayout=true, so for fixtures added
|
|
2930
|
+
// post-CAD via the side panel we have to bake the flip here — it
|
|
2931
|
+
// makes the new fixture land canonical instead of upside-down.
|
|
2932
|
+
const normWallAngle = (((angleDeg % 360) + 360) % 360);
|
|
2933
|
+
if (normWallAngle > 90 && normWallAngle < 270) {
|
|
2934
|
+
const widthFt = this.fromPixels(this.toPixels(fixtureData.fixtureStaticWidth.value, fixtureData.fixtureStaticWidth.unit), "ft");
|
|
2935
|
+
const heightFt = this.fromPixels(this.toPixels(fixtureData.fixtureStaticLength.value, fixtureData.fixtureStaticLength.unit), "ft");
|
|
2936
|
+
fixtureData.relativePosition.x =
|
|
2937
|
+
fx_offset + cosA * widthFt - sinA * heightFt;
|
|
2938
|
+
fixtureData.relativePosition.y =
|
|
2939
|
+
fy_offset + sinA * widthFt + cosA * heightFt;
|
|
2940
|
+
fixtureData.relativePosition.angle = angleDeg + 180;
|
|
2941
|
+
}
|
|
2884
2942
|
}
|
|
2885
2943
|
this.getFormWalls.at(wallIndex).get("fixtures").push(fixtureGroup);
|
|
2886
2944
|
this.getWallByNumber(wallIndex + 1)?.fixtures.push(fixtureData);
|
|
@@ -3957,4 +4015,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
3957
4015
|
type: HostListener,
|
|
3958
4016
|
args: ["window:resize"]
|
|
3959
4017
|
}] } });
|
|
3960
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ib2FyZC1zdG9yZS1wbGFuby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9vbmJvYXJkLXN0b3JlLXBsYW5vL29uYm9hcmQtc3RvcmUtcGxhbm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvb25ib2FyZC1zdG9yZS1wbGFuby9vbmJvYXJkLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUlaLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQVksYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUQsT0FBTyxFQUdMLFdBQVcsRUFFWCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQ0wsT0FBTyxFQUVQLFlBQVksRUFDWixjQUFjLEVBQ2QsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUdkLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBTWpDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBQ3hILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBRTFHLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUNqQixNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRakMsTUFBTSxPQUFPLDBCQUEwQjtJQTRJM0I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQWxKVixTQUFTLENBQWlDO0lBQ1os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Q0FDN0IsSUFBSSxDQUFDLE1BQU0sRUFDWCxhQUFhLEVBQ2IsS0FBSyxFQUNMLE1BQU0sRUFDTixLQUFLLENBQ04sQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQXpqS1UsMEJBQTBCOzRGQUExQiwwQkFBMEIsMEdBRjFCLENBQUMsYUFBYSxDQUFDLG9xQkNyRDVCLHl1NEVBdzNCYzs7NEZEajBCRCwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0UseUJBQXlCLGFBR3hCLENBQUMsYUFBYSxDQUFDO3dXQU0xQixTQUFTO3NCQURSLFNBQVM7dUJBQUMsWUFBWTtnQkFFTyxZQUFZO3NCQUF6QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDRixtQkFBbUI7c0JBQTVDLFNBQVM7dUJBQUMsYUFBYTtnQkFDUyxxQkFBcUI7c0JBQXJELFNBQVM7dUJBQUMsb0JBQW9CO2dCQUUvQix3QkFBd0I7c0JBRHZCLFNBQVM7dUJBQUMsdUJBQXVCO2dCQUdsQywwQkFBMEI7c0JBRHpCLFNBQVM7dUJBQUMseUJBQXlCO2dCQUlwQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7IExvY2F0aW9uLCBUaXRsZUNhc2VQaXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxuaW1wb3J0IHtcclxuICBGb3JtQXJyYXksXHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICBTdWJqZWN0LFxyXG4gIFN1YnNjcmlwdGlvbixcclxuICBkZWJvdW5jZVRpbWUsXHJcbiAgZmlyc3RWYWx1ZUZyb20sXHJcbiAgZnJvbUV2ZW50LFxyXG4gIHRha2VVbnRpbCxcclxufSBmcm9tIFwicnhqc1wiO1xyXG5cclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuXHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuXHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExheW91dEVkaXRDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vcG9wdXBzL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi9sYXlvdXQtZWRpdC1jb25maXJtYXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvZGVsZXRlLWNvbmZpcm1hdGlvbi9kZWxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEcm9wZG93bklGIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvcGxhbm8tZ2VuZXJhbC5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX0NPTVBBQ1RJT05fQ09ORklHLFxyXG4gIGNvbXBhY3RGbG9vckRlc3RydWN0aXZlLFxyXG4gIGdldEZsb29yQm91bmRzRnQsXHJcbn0gZnJvbSBcIi4vdXRpbHMvYXhpcy1jb21wYWN0aW9uXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItb25ib2FyZC1zdG9yZS1wbGFub1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vb25ib2FyZC1zdG9yZS1wbGFuby5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vb25ib2FyZC1zdG9yZS1wbGFuby5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIHByb3ZpZGVyczogW1RpdGxlQ2FzZVBpcGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgT25ib2FyZFN0b3JlUGxhbm9Db21wb25lbnRcclxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0XHJcbntcclxuICBAVmlld0NoaWxkKFwiYmFzZUNhbnZhc1wiKVxyXG4gIGNhbnZhc1JlZiE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoXCJjYW52YXNDb250YWluZXJcIikgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChcImFwcGx5TG9naWNzXCIpIGFwcGx5TG9naWNzTW9kYWxSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhcHByb3ZlTGF5b3V0TW9kYWxcIikgYXBwcm92ZUxheW91dE1vZGFsUmVmITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwicmV2ZXJ0QWxsb2NhdGlvbk1vZGFsXCIpXHJcbiAgcmV2ZXJ0QWxsb2NhdGlvbk1vZGFsUmVmITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiY29tcGxldGVBbGxvY2F0aW9uTW9kYWxcIilcclxuICBjb21wbGV0ZUFsbG9jYXRpb25Nb2RhbFJlZiE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIpXHJcbiAgb25SZXNpemUoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcblxyXG4gIGNhbnZhcyE6IGZhYnJpYy5DYW52YXM7XHJcbiAgem9vbUxldmVsOiBudW1iZXIgPSAxO1xyXG4gIHdhbGxUaGlja25lc3MgPSAzMDtcclxuICB2ZXJ0aWNhbE1hcmdpbiA9ICgxLjI1IC8gMTAwKSAqIHRoaXMudG9QaXhlbHMoMTUyNCwgXCJtbVwiKTtcclxuXHJcbiAgbGF5b3V0Rm9ybTogRm9ybUdyb3VwO1xyXG4gIHNlbGVjdGVkRmxvb3JJZCA9IG5ldyBGb3JtQ29udHJvbChcIlwiKTtcclxuICBmbG9vcnNMaXN0OiBEcm9wZG93bklGW11bXSA9IFtdO1xyXG4gIGZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIGZpeHR1cmVUZW1wbGF0ZUlkU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBvdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcGxhbm9EYXRhOiBhbnk7XHJcblxyXG4gIGZsb29yRGF0YTogYW55O1xyXG4gIHJlYWRvbmx5IG9yaWdpbmFsRmxvb3JEYXRhOiBhbnk7IC8vIHVzZWQgdG8gcm9sbGJhY2sgdG8gb3JpZ2luYWwgbGF5b3V0IHN0YXRlIG9uIGNsaWNrIGNhbmNlbCB3aGlsZSBlZGl0aW5nLlxyXG5cclxuICAvKipcclxuICAgKiBDb21wYWN0IGlzIGEgb25lLXNob3QgYWN0aW9uLCBub3QgYSB0b2dnbGUuIENsaWNraW5nIGl0IGNvbXBhY3RzIHRoZVxyXG4gICAqIGxheW91dCBkZXN0cnVjdGl2ZWx5IGFuZCBkcm9wcyB0aGUgdXNlciBpbnRvIGVkaXQgbW9kZSBzbyB0aGUgY2hhbmdlXHJcbiAgICogc2hvd3MgdXAgYXMgYW4gdW5zYXZlZCBlZGl0IChyZXZlcnRhYmxlIHZpYSBDYW5jZWwsIHBlcnNpc3RhYmxlIHZpYVxyXG4gICAqIFNhdmUgLyBTdWJtaXQpLiBJZiBubyBjb21wYWN0aW9uIGlzIHBvc3NpYmxlIHdlIGtlZXAgdGhlIHVzZXIgaW4gdmlld1xyXG4gICAqIG1vZGUgYW5kIHN1cmZhY2UgdGhlIHJlYXNvbiB2aWEgdG9hc3Qg4oCUIG5vIHNpbGVudCBuby1vcHMuXHJcbiAgICovXHJcbiAgY29tcGFjdExheW91dCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5mbG9vckRhdGEpIHJldHVybjtcclxuICAgIGNvbnN0IGJlZm9yZSA9IGdldEZsb29yQm91bmRzRnQodGhpcy5mbG9vckRhdGEpO1xyXG4gICAgY29uc3QgY29tcGFjdGVkID0gY29tcGFjdEZsb29yRGVzdHJ1Y3RpdmUoXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLFxyXG4gICAgICBERUZBVUxUX0NPTVBBQ1RJT05fQ09ORklHLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGFmdGVyID0gZ2V0Rmxvb3JCb3VuZHNGdChjb21wYWN0ZWQpO1xyXG4gICAgY29uc3Qgd2lkdGhTaHJpbmsgPSAoYmVmb3JlLm1heFggLSBiZWZvcmUubWluWCkgLSAoYWZ0ZXIubWF4WCAtIGFmdGVyLm1pblgpO1xyXG4gICAgY29uc3QgaGVpZ2h0U2hyaW5rID0gKGJlZm9yZS5tYXhZIC0gYmVmb3JlLm1pblkpIC0gKGFmdGVyLm1heFkgLSBhZnRlci5taW5ZKTtcclxuICAgIGlmICh3aWR0aFNocmluayA8IDAuNSAmJiBoZWlnaHRTaHJpbmsgPCAwLjUpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0V2FybmluZ1RvYXN0KFxyXG4gICAgICAgIFwiTGF5b3V0IGlzIGFscmVhZHkgY29tcGFjdCDigJQgbm8gZnVydGhlciBjb21wYWN0aW9uIHBvc3NpYmxlXCIsXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24gPSBjb21wYWN0ZWQubGF5b3V0UG9seWdvbjtcclxuICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgPSBjb21wYWN0ZWQuY2VudGVyRml4dHVyZTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBhY3RlZC5vdGhlckVsZW1lbnRzKSkge1xyXG4gICAgICB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzID0gY29tcGFjdGVkLm90aGVyRWxlbWVudHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlb3JkZXJGaXh0dXJlKHRoaXMuZmxvb3JEYXRhKTtcclxuICAgIC8vIERyb3AgaW50byBlZGl0IG1vZGUgc28gdGhlIGNvbXBhY3Rpb24gbGl2ZXMgYXMgYW4gdW5zYXZlZCBlZGl0IOKAlFxyXG4gICAgLy8gQ2FuY2VsIHdpbGwgcmVmZXRjaCBhbmQgcmV2ZXJ0IGl0LCBTYXZlIC8gU3VibWl0IHdpbGwgcGVyc2lzdCBpdC5cclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCB0cnVlKTtcclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJsZWZ0XCIsIGZhbHNlKTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgdGhpcy5sYXlvdXRGb3JtLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhblNob3dDb21wYWN0VG9nZ2xlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5mbG9vckRhdGE/Ll9pZCAmJiB0aGlzLmdldFN0YXR1cyA9PT0gXCJkcmFmdFwiO1xyXG4gIH1cclxuXHJcbiAgY2RuVXJsOiBzdHJpbmc7XHJcbiAgZml4dHVyZVRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBhbGxGaXh0dXJlczogYW55W10gPSBbXTsgLy8gYWxsIGZpeHR1cmVzIGluY2x1ZGluZyB0aGUgbWFzdGVyIHRlbXBsYXRlcyBmb3IgdHJlZSB2aWV3XHJcbiAgLy8gYWxsRml4dHVyZUluc3RhbmNlczogYW55W10gPSBbXTsgLy8gb25seSB0aGUgbGF5b3V0IGZpeHR1cmVzIGluc3RhbmNlcy5cclxuICBzdG9yZUZlZWRiYWNrOiBhbnk7XHJcblxyXG4gIHNlbGVjdGVkRml4dHVyZTogYW55O1xyXG4gIHNlbGVjdGVkRml4dHVyZURhdGE6IGFueTtcclxuICBlZGl0Rml4dHVyZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVkaXRGaXh0dXJlU2VjdGlvbjogXCJiYXNpYy1kZXRhaWxzXCIgfCBcInByb2R1Y3RzXCIgfCBcInZtc1wiID0gXCJiYXNpYy1kZXRhaWxzXCI7XHJcbiAgc3VibWl0Rml4dHVyZSA9IGZhbHNlO1xyXG5cclxuICBsYXlvdXRNZXRyaWNzID0ge1xyXG4gICAgYWxsU3RvcmU6IDAsXHJcbiAgICBhbGxvY2F0aW9uUGVuZGluZzogMCxcclxuICAgIGRyYWZ0OiAwLFxyXG4gIH07XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzUmlnaHRQYW5lbENvbGxhcHNlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNMZWZ0UGFuZWxDb2xsYXBzZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBkaXNhYmxlRWRpdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNTYXZpbmdMYXlvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNBbGxvY2F0aW9uUnVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmxvb3JEYXRhQmVmb3JlQWxsb2NhdGlvbjogYW55ID0gbnVsbDtcclxuXHJcbiAgb3RoZXJFbGVtZW50TGlzdDogRHJvcGRvd25JRltdID0gW1xyXG4gICAgeyBsYWJlbDogXCJQT1MgQ291bnRlclwiLCB2YWx1ZTogXCJQT1MgQ291bnRlclwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIkRpc2N1c3Npb24gVGFibGVcIiwgdmFsdWU6IFwiRGlzY3Vzc2lvbiBUYWJsZVwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIk1pcnJvclwiLCB2YWx1ZTogXCJNaXJyb3JcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJPdGhlcnNcIiwgdmFsdWU6IFwiT3RoZXJzXCIgfSxcclxuICBdO1xyXG4gIHN0b3JlTGlzdDogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRTdG9yZU5hbWU6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBhY3RpdmVIaWdobGlnaHQ6IGZhYnJpYy5SZWN0IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBjYW5jZWxIaWdobGlnaHRCbGluayA9IGZhbHNlO1xyXG5cclxuICBpc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgbGF5b3V0Qm91bmRzOiBhbnk7XHJcblxyXG4gIGlzUnVuQWxsb2NhdGlvbkFsbG93ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXZtQWxpYXNLZXlzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcbiAgcmVzdHJpY3RlZFVzZXJzOiBzdHJpbmdbXSA9IFtcclxuICAgIFwibWF0aGV3LnJoZWFAbGVuc2thcnQuY29tXCIsXHJcbiAgICBcInNhd3Jhbi5zaW5naEBkZWFsc2thcnQuaW5cIixcclxuICAgIFwiYWJoaW5hdi5rcmlzaG5hQGxlbnNrYXJ0LmluXCIsXHJcbiAgICBcInN1ZGhhQHRhbmdvdGVjaC5jby5pblwiLFxyXG4gICAgLy8gXCJnb3BpbmF0aEB0YW5nb3RlY2guY28uaW5cIlxyXG4gIF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgdGl0bGVDYXNlOiBUaXRsZUNhc2VQaXBlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcGFnZUluZm86IFBhZ2VJbmZvU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkge1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcblxyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB0aGlzLmNkblVybCA9IGUucGxhbm9ncmFtQ0ROO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICBpZiAocGFyYW1zPy5wbGFub0lkKSB7XHJcbiAgICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXMocGFyYW1zPy5wbGFub0lkKTtcclxuICAgICAgICAgIGlmIChwYXJhbXM/LmZsb29ySWQpIHtcclxuICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEgPSB7IF9pZDogcGFyYW1zPy5mbG9vcklkIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdG9yZWRVc2VySW5mbyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpO1xyXG4gICAgICAgIGNvbnN0IHVzZXJEYXRhID0gc3RvcmVkVXNlckluZm8gPyBKU09OLnBhcnNlKHN0b3JlZFVzZXJJbmZvKSA6IG51bGw7XHJcbiAgICAgICAgY29uc3QgaXNOb25SZXN0cmljdGVkVXNlciA9XHJcbiAgICAgICAgICAhIXVzZXJEYXRhICYmICF0aGlzLnJlc3RyaWN0ZWRVc2Vycy5pbmNsdWRlcyh1c2VyRGF0YT8uZW1haWwpO1xyXG4gICAgICAgIGNvbnN0IGlzQWxsb2NhdGlvbk92ZXJyaWRlRW5hYmxlZCA9IHBhcmFtcz8uYWxsb2NhdGlvbiA9PT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgICAgIGlmIChpc05vblJlc3RyaWN0ZWRVc2VyIHx8IGlzQWxsb2NhdGlvbk92ZXJyaWRlRW5hYmxlZCkge1xyXG4gICAgICAgICAgdGhpcy5pc1J1bkFsbG9jYXRpb25BbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRGbG9vcklkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoYXN5bmMgKGlkKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsaWNrZWRGbG9vciA9IHRoaXMucGxhbm9EYXRhPy5mbG9vcnM/LmZpbmQoXHJcbiAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IGlkLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKGNsaWNrZWRGbG9vci5zdGF0dXMgPT09IFwiY29tcGxldGVkXCIpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAgICAgYG1hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXBsYW5vZ3JhbT9wbGFub0lkPSR7Y2xpY2tlZEZsb29yLnBsYW5vSWR9JmZsb29ySWQ9JHtjbGlja2VkRmxvb3IuX2lkfWAsXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhID0gY2xpY2tlZEZsb29yO1xyXG4gICAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuICAgICAgICB0aGlzLmxheW91dEZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgY29uc3QgbmV3UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuICAgICAgICBuZXdQYXJhbXMuc2V0KFwicGxhbm9JZFwiLCB0aGlzLmZsb29yRGF0YS5wbGFub0lkKTtcclxuICAgICAgICBuZXdQYXJhbXMuc2V0KFwiZmxvb3JJZFwiLCB0aGlzLmZsb29yRGF0YS5faWQpO1xyXG5cclxuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcclxuICAgICAgICAgIG5ld1BhcmFtcy50b1N0cmluZygpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQuc2V0VmFsdWUodGhpcy5mbG9vckRhdGEuX2lkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXModGhpcy5jYW52YXNSZWY/Lm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgc2VsZWN0aW9uRnVsbHlDb250YWluZWQ6IHRydWUsXHJcbiAgICAgIHBlclBpeGVsVGFyZ2V0RmluZDogdHJ1ZSxcclxuICAgICAgdGFyZ2V0RmluZFRvbGVyYW5jZTogNSxcclxuICAgIH0pO1xyXG5cclxuICAgIGZyb21FdmVudCh0aGlzLmNhbnZhcyBhcyBhbnksIFwib2JqZWN0Om1vZGlmaWVkXCIpXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBtb3ZlZE9iajogYW55ID0gZS50YXJnZXQ7XHJcblxyXG4gICAgICAgIGlmICghbW92ZWRPYmopIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKG1vdmVkT2JqPy50eXBlID09PSBcImFjdGl2ZVNlbGVjdGlvblwiKSB7XHJcbiAgICAgICAgICB0aGlzLmFwcGx5R3JvdXBUcmFuc2Zvcm0obW92ZWRPYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZS50cmFuc2Zvcm0/LmFjdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgaXNSZXNpemUgPVxyXG4gICAgICAgICAgYWN0aW9uID09PSBcInNjYWxlXCIgfHwgYWN0aW9uID09PSBcInNjYWxlWFwiIHx8IGFjdGlvbiA9PT0gXCJzY2FsZVlcIjtcclxuXHJcbiAgICAgICAgaWYgKGlzUmVzaXplKSB7XHJcbiAgICAgICAgICBjb25zdCB0eXBlID0gbW92ZWRPYmo/Lm9ialR5cGUgPz8gXCJncm91cFwiO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHg6IG1vdmVkT2JqLmxlZnQsXHJcbiAgICAgICAgICAgIHk6IG1vdmVkT2JqLnRvcCxcclxuICAgICAgICAgICAgd2lkdGg6IG1vdmVkT2JqLmdldFNjYWxlZFdpZHRoKCksXHJcbiAgICAgICAgICAgIGhlaWdodDogbW92ZWRPYmouZ2V0U2NhbGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgIGFuZ2xlOiBtb3ZlZE9iai5hbmdsZSxcclxuICAgICAgICAgICAgZWxlbWVudERhdGE6IG1vdmVkT2JqLmRhdGEsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwid2FsbFwiOiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKG1vdmVkT2JqKTtcclxuICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhLmFuZ2xlID0gdXBkYXRlZENvbmZpZy5hbmdsZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3V2FsbCA9IGF3YWl0IHRoaXMuZHJhd1dhbGwoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueCxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueSxcclxuICAgICAgICAgICAgICAgIHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcud2lkdGggLSAwLjI3LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YSxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAobmV3V2FsbCBhcyBhbnkpLm9ialR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgICAgICAobmV3V2FsbCBhcyBhbnkpLmRhdGEgPSB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QobmV3V2FsbCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhc2UgXCJvdGhlcnNcIjoge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShtb3ZlZE9iaik7XHJcbiAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YS5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID1cclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuYW5nbGU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld090aGVyID0gdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy54LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy55LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5hbmdsZSxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcud2lkdGggLSAyLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5oZWlnaHQgLSAyLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YSxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAobmV3T3RoZXIgYXMgYW55KS5vYmpUeXBlID0gXCJvdGhlcnNcIjtcclxuICAgICAgICAgICAgICAobmV3T3RoZXIgYXMgYW55KS5kYXRhID0gdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KG5ld090aGVyKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FzZSBcImVudHJhbmNlXCI6IHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FzZSBcImZpeHR1cmVcIjoge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlV2FsbENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU90aGVyRWxlbWVudHNDb29yZGluYXRlcygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRW50cmFuY2VDb29yZGluYXRlcygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldHVwWm9vbUhhbmRsZXJzKCk7XHJcblxyXG4gICAgdGhpcy5saXN0ZW5Ub0RlbGV0ZUtleSgpO1xyXG4gICAgdGhpcy50b2dnbGVQYW5lbChcImxlZnRcIiwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVBbGxQb3NpdGlvbnMoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxDb29yZGluYXRlcygpO1xyXG4gICAgdGhpcy51cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoKTtcclxuICAgIHRoaXMudXBkYXRlT3RoZXJFbGVtZW50c0Nvb3JkaW5hdGVzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5jYWRMYXlvdXQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFwcGx5R3JvdXBUcmFuc2Zvcm0oc2VsZWN0aW9uOiBmYWJyaWMuQWN0aXZlU2VsZWN0aW9uKSB7XHJcbiAgICBjb25zdCBtYXRyaXggPSBzZWxlY3Rpb24uY2FsY1RyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgIHNlbGVjdGlvbi5nZXRPYmplY3RzKCkuZm9yRWFjaCgob2JqOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqTWF0cml4ID0gb2JqLmNhbGNUcmFuc2Zvcm1NYXRyaXgoKTtcclxuICAgICAgY29uc3QgZmluYWxNYXRyaXggPSBmYWJyaWMudXRpbC5tdWx0aXBseVRyYW5zZm9ybU1hdHJpY2VzKFxyXG4gICAgICAgIG1hdHJpeCxcclxuICAgICAgICBvYmpNYXRyaXgsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBwb2ludCA9IG5ldyBmYWJyaWMuUG9pbnQoMCwgMCkudHJhbnNmb3JtKGZpbmFsTWF0cml4KTtcclxuXHJcbiAgICAgIG9iai5zZXQoe1xyXG4gICAgICAgIGxlZnQ6IHBvaW50LngsXHJcbiAgICAgICAgdG9wOiBwb2ludC55LFxyXG4gICAgICAgIGFuZ2xlOiBzZWxlY3Rpb24uYW5nbGUgKyAob2JqLmFuZ2xlID8/IDApLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG9iai5zZXRDb29yZHMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFVuZ3JvdXAgYWZ0ZXIgYXBwbHlpbmcgdHJhbnNmb3JtXHJcbiAgICB0aGlzLmNhbnZhcy5kaXNjYXJkQWN0aXZlT2JqZWN0KCk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICByZXNpemVDYW52YXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgdGhpcy5jYW52YXMuc2V0RGltZW5zaW9ucyh7XHJcbiAgICAgIHdpZHRoOiBjb250YWluZXIuY2xpZW50V2lkdGggLSA1MCxcclxuXHJcbiAgICAgIGhlaWdodDogY29udGFpbmVyLmNsaWVudEhlaWdodCAtIDQwLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBzZXR1cFpvb21IYW5kbGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcblxyXG4gICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgIC8vIHRoaXMuaXNVc2VySW50ZXJhY3RlZFdpdGhDYW52YXMgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVk7XHJcbiAgICAgICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuXHJcbiAgICAgICAgem9vbSA9IE1hdGgubWF4KDAuMDUsIE1hdGgubWluKHpvb20sIDUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGUub2Zmc2V0WCxcclxuICAgICAgICAgICAgeTogZS5vZmZzZXRZLFxyXG4gICAgICAgICAgfSBhcyBmYWJyaWMuUG9pbnQsXHJcbiAgICAgICAgICB6b29tLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgbGV0IGxhc3RQb3NYID0gMDtcclxuICAgIGxldCBsYXN0UG9zWSA9IDA7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIW9wdC50YXJnZXQpIHtcclxuICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6bW92ZVwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzRHJhZ2dpbmcgJiYgdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0pIHtcclxuICAgICAgICAvLyB0aGlzLmlzVXNlckludGVyYWN0ZWRXaXRoQ2FudmFzID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgdnB0WzRdICs9IGUuY2xpZW50WCAtIGxhc3RQb3NYO1xyXG4gICAgICAgIHZwdFs1XSArPSBlLmNsaWVudFkgLSBsYXN0UG9zWTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6dXBcIiwgKCkgPT4ge1xyXG4gICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIkNyZWF0ZSBTdG9yZSBQbGFub1wiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiUGxhbm9ncmFtXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtcy9vbmJvYXJkXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlwiLFxyXG4gICAgICAgIHBhdGg6IFwiXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBvbkZpeHR1cmVTYXZlKCkge1xyXG4gICAgdGhpcy5zdWJtaXRGaXh0dXJlID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN1Ym1pdEZpeHR1cmUgPSBmYWxzZTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkZpeHR1cmVQYWdlQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgIHRoaXMuZWRpdEZpeHR1cmVTZWN0aW9uID0gXCJiYXNpYy1kZXRhaWxzXCI7XHJcbiAgICB0aGlzLmVkaXRGaXh0dXJlID0gZmFsc2U7XHJcbiAgICBhd2FpdCB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgb25GaXh0dXJlU3VibWl0KGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgJiYgIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChldmVudD8uc2hlbGYgJiYgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5zaGVsZkNvbmZpZykge1xyXG4gICAgICBldmVudC5zaGVsZiA9IGV2ZW50LnNoZWxmLm1hcCgoc2hlbGY6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBmaW5kU2hlbGYgPSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuc2hlbGZDb25maWcuZmluZChcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlLnNoZWxmTnVtYmVyID09IGluZGV4ICsgMSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChmaW5kU2hlbGYpIHtcclxuICAgICAgICAgIHNoZWxmID0geyAuLi5maW5kU2hlbGYsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBkZXRhaWxzID1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnW1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5zaGVsZkNvbmZpZy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICBkZXRhaWxzLnNoZWxmTnVtYmVyID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgc2hlbGYgPSB7IC4uLmRldGFpbHMsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaGVsZjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJzaGVsZkNvbmZpZ1wiXSA9IGV2ZW50Py5zaGVsZjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1wiZGVzY3JpcHRpb25cIl0gPSBldmVudD8uZGVzY3JpcHRpb24gPz8gXCJcIjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1widGVtcGxhdGVHcm91cE5hbWVcIl0gPVxyXG4gICAgICAgIGV2ZW50Py50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuaGVhZGVyLmxhYmVsID0gZXZlbnQ/LmhlYWRlckxhYmVsID8/IFwiXCI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5mb290ZXIubGFiZWwgPSBldmVudD8uZm9vdGVyTGFiZWwgPz8gXCJcIjtcclxuXHJcbiAgICAgIHRoaXMudmFsaWRhdGVGaXh0dXJlSGVhZGVycygpO1xyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnNlY3Rpb24pIHtcclxuICAgICAgZXZlbnQuc2VjdGlvbi5mb3JFYWNoKChzZWM6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBudW1iZXIgPSBzZWM/LnNoZWx2ZXM/Lm1hcCgoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICBwYXJzZUludChlbGUuc3BsaXQoXCIgXCIpWzFdKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uc2hlbGZDb25maWcuZm9yRWFjaCgoc2hlbGY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG51bWJlci5pbmNsdWRlcyhzaGVsZi5zaGVsZk51bWJlcikpIHtcclxuICAgICAgICAgICAgc2hlbGYuem9uZSA9IHNlYy56b25lO1xyXG4gICAgICAgICAgICBzaGVsZi5wcm9kdWN0QnJhbmROYW1lID0gc2VjLnByb2R1Y3RCcmFuZE5hbWU7XHJcbiAgICAgICAgICAgIHNoZWxmLnByb2R1Y3RDYXRlZ29yeSA9IHNlYy5wcm9kdWN0Q2F0ZWdvcnk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChldmVudD8udm1Db25maWcgJiYgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy52bUNvbmZpZykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJ2bUNvbmZpZ1wiXSA9IGV2ZW50Py52bUNvbmZpZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgIC8vIHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lZGl0Rml4dHVyZVNlY3Rpb24gPSBcImJhc2ljLWRldGFpbHNcIjtcclxuICAgICAgICB0aGlzLmVkaXRGaXh0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhPy5faWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVQYW5lbChzaWRlOiBcImxlZnRcIiB8IFwicmlnaHRcIiwgYWN0aW9uPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHNpZGUgPT09IFwibGVmdFwiKSB7XHJcbiAgICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSBhY3Rpb24gPz8gIXRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQ7XHJcbiAgICAgIGlmICghdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCkgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBhY3Rpb24gPz8gIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkO1xyXG4gICAgICBpZiAoIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkKSB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCA0MDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0VGVtcGxhdGUoZml4dHVyZUNvbmZpZ0lkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldEZpeHR1cmVUZW1wbGF0ZShmaXh0dXJlQ29uZmlnSWQpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHRyYW5zZmVyQXJyYXlJdGVtPFQgPSBhbnk+KFxyXG4gICAgY3VycmVudEFycmF5OiBUW10sXHJcbiAgICB0YXJnZXRBcnJheTogVFtdLFxyXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXHJcbiAgICB0YXJnZXRJbmRleDogbnVtYmVyLFxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZnJvbSA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1cnJlbnRBcnJheS5sZW5ndGggLSAxLCBjdXJyZW50SW5kZXgpKTtcclxuICAgIGNvbnN0IHRvID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGFyZ2V0QXJyYXkubGVuZ3RoLCB0YXJnZXRJbmRleCkpO1xyXG5cclxuICAgIGlmIChjdXJyZW50QXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgIHRhcmdldEFycmF5LnNwbGljZSh0bywgMCwgY3VycmVudEFycmF5LnNwbGljZShmcm9tLCAxKVswXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW9yZGVyRml4dHVyZShmbG9vckRhdGE6IGFueSkge1xyXG4gICAgLy8gV2FsbHNcclxuICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcblxyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IGVsZW1lbnQuZWxlbWVudE51bWJlcjtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2VudGVyIGZsb29yIGZpeHR1cmVzXHJcbiAgICBsZXQgZmxvb3JBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcImZsb29yXCI7XHJcblxyXG4gICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBmbG9vckFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEVsZW1lbnRWYWx1ZShncm91cDogYW55KSB7XHJcbiAgICByZXR1cm4gZ3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdhbGxCeU51bWJlcihlbGVtZW50TnVtYmVyOiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5maW5kKFxyXG4gICAgICAodzogYW55KSA9PiB3LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3LmVsZW1lbnROdW1iZXIgPT09IGVsZW1lbnROdW1iZXIsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcm91bmRUb1R3byhudW06IG51bWJlcikge1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtICogMTAwKSAvIDEwMDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFN0b3JlRml4dHVyZXMoc3RvcmVJZDogc3RyaW5nLCBlbmFibGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICghdGhpcy5maXh0dXJlVGVtcGxhdGVzLmxlbmd0aCkge1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEZpeHR1cmVUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0gbnVsbDtcclxuICAgIHRoaXMuYXBpU2VydmljZVxyXG4gICAgICAuZ2V0U3RvcmVGaXh0dXJlcyh7IGlkOiBbc3RvcmVJZF0gfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICghcmVzPy5kYXRhPy5bMF0/LmZsb29ycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnBsYW5vRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShyZXMuZGF0YVswXSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5mbG9vckRhdGE/Ll9pZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShcclxuICAgICAgICAgICAgICByZXMuZGF0YVswXS5mbG9vcnMuZmluZChcclxuICAgICAgICAgICAgICAgIChmbG9vcjogYW55KSA9PiBmbG9vcj8uX2lkID09PSB0aGlzLmZsb29yRGF0YT8uX2lkLFxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShyZXMuZGF0YVswXS5mbG9vcnNbMF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5mbG9vcnNMaXN0ID0gdGhpcy5wbGFub0RhdGEuZmxvb3JzLm1hcCgoZjogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICBsYWJlbDogZi5mbG9vck51bSxcclxuICAgICAgICAgICAgdmFsdWU6IGYuX2lkLFxyXG4gICAgICAgICAgICAvLyBkaXNhYmxlZDogZi5zdGF0dXMgPT09IFwiY29tcGxldGVkXCIsXHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5leHRyYWN0QWxsRml4dHVyZXModGhpcy5mbG9vckRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQuc2V0VmFsdWUodGhpcy5mbG9vckRhdGEuX2lkLCB7XHJcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLml2bUFsaWFzS2V5cy5zaXplKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hJdm1BbGlhcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUZpeHR1cmVIZWFkZXJzKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJGbG9vcigpO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGVuYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxheW91dEZvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHBsYW5vXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdEFsbEZpeHR1cmVzKGZsb29yRGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBleHRyYWN0ZWRGaXh0dXJlID0gW1xyXG4gICAgICAuLi4oZmxvb3JEYXRhPy5tYXN0ZXJUZW1wbGF0ZXMgPz8gW10pLFxyXG4gICAgICAuLi4oZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlID8/IFtdKSxcclxuICAgIF07XHJcblxyXG4gICAgZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5mb3JFYWNoKChscDogYW55KSA9PiB7XHJcbiAgICAgIGV4dHJhY3RlZEZpeHR1cmUucHVzaCguLi4obHAuZml4dHVyZXMgPz8gW10pKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWxsRml4dHVyZXMgPSBleHRyYWN0ZWRGaXh0dXJlO1xyXG5cclxuICAgIC8vIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcyA9IFtcclxuICAgIC8vICAgLi4udGhpcy5mbG9vckRhdGEhLmxheW91dFBvbHlnb24uZmxhdE1hcCgoZTogYW55KSA9PiBlPy5maXh0dXJlcyA/PyBbXSksXHJcbiAgICAvLyAgIC4uLih0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZSA/PyBbXSksXHJcbiAgICAvLyBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFsbEZpeHR1cmVJbnN0YW5jZXMoKSB7XHJcbiAgICBjb25zdCBhbGxGaXh0dXJlcyA9IFtcclxuICAgICAgLi4uKHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5mbGF0TWFwKFxyXG4gICAgICAgIChlOiBhbnkpID0+IGU/LmZpeHR1cmVzID8/IFtdLFxyXG4gICAgICApID8/IFtdKSxcclxuICAgICAgLi4uKHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlID8/IFtdKSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3Qgc2VlbkZpeHR1cmVzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBjb25zdCB1bmlxdWVGaXh0dXJlczogYW55W10gPSBbXTtcclxuXHJcbiAgICBhbGxGaXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFmaXh0dXJlKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlSWQgPSBmaXh0dXJlLl9pZDtcclxuXHJcbiAgICAgIGlmICghc2VlbkZpeHR1cmVzLmhhcyhmaXh0dXJlSWQpKSB7XHJcbiAgICAgICAgc2VlbkZpeHR1cmVzLmFkZChmaXh0dXJlSWQpO1xyXG4gICAgICAgIHVuaXF1ZUZpeHR1cmVzLnB1c2goZml4dHVyZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB1bmlxdWVGaXh0dXJlcztcclxuICB9XHJcblxyXG4gIGFzeW5jIGZldGNoSXZtQWxpYXMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRJdm1Db252ZXJzaW9uQWxpYXMoKSxcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJlcz8uZGF0YSAmJiB0eXBlb2YgcmVzLmRhdGEgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICB0aGlzLml2bUFsaWFzS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocmVzLmRhdGEpKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIC8vIHNpbGVudGx5IGZhaWwg4oCUIHZhbGlkYXRpb24gc2tpcHBlZCBpZiBhbGlhcyB1bmF2YWlsYWJsZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVGaXh0dXJlSGVhZGVycygpIHtcclxuICAgIGlmICghdGhpcy5pdm1BbGlhc0tleXMuc2l6ZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZml4dHVyZS5maXh0dXJlTmFtZSA9PT0gXCJzcGFjZVwiKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGhlYWRlckxhYmVsOiBzdHJpbmcgPSBmaXh0dXJlPy5oZWFkZXI/LmxhYmVsID8/IFwiXCI7XHJcbiAgICAgIGZpeHR1cmUuaGVhZGVySW52YWxpZCA9ICFoZWFkZXJMYWJlbCB8fCAhdGhpcy5pdm1BbGlhc0tleXMuaGFzKGhlYWRlckxhYmVsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0ludmFsaWRIZWFkZXJGaXh0dXJlcygpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5pdm1BbGlhc0tleXMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5zb21lKFxyXG4gICAgICAoZjogYW55KSA9PiBmLmZpeHR1cmVOYW1lICE9PSBcInNwYWNlXCIgJiYgZi5oZWFkZXJJbnZhbGlkLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldCBpbnZhbGlkSGVhZGVyRml4dHVyZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKGY6IGFueSkgPT4gZi5maXh0dXJlTmFtZSAhPT0gXCJzcGFjZVwiICYmIGYuaGVhZGVySW52YWxpZCxcclxuICAgICkubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRWRpdExheW91dEFsbG93ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkICYmICF0aGlzLmlzQWxsb2NhdGlvblJ1bikge1xyXG4gICAgICBpZiAodGhpcy5nZXRTdGF0dXMgPT09IFwiZHJhZnRcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5nZXRTdGF0dXMgPT09IFwiYWxsb2NhdGlvblBlbmRpbmdcIiAmJlxyXG4gICAgICAgIHRoaXMuaXNSdW5BbGxvY2F0aW9uQWxsb3dlZFxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRmxvb3IodXBkYXRlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5kcmF3SW5pdGlhbENvbnRlbnQoKTtcclxuICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcblxyXG4gICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHdhbGw6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgY29uc3Qgd2FsbEl0ZW0gPSB0aGlzLnBhdGNoV2FsbEVsZW1lbnRzKHtcclxuICAgICAgICAgICAgZWxlbWVudFR5cGU6IHdhbGwuZWxlbWVudFR5cGUsXHJcbiAgICAgICAgICAgIGVsZW1lbnROdW1iZXI6IHdhbGwuZWxlbWVudE51bWJlcixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHdhbGwuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaXh0dXJlPy5maXh0dXJlTmFtZSA9PT0gXCJzcGFjZVwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogZml4dHVyZS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IGZpeHR1cmUuZml4dHVyZUNvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgIF9pZDogZml4dHVyZS5faWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAod2FsbEl0ZW0uZ2V0KFwiZml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB3YWxsLm90aGVyRWxlbWVudHM/LmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgICAgdHlwZTogW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgICAgPyBlbGUuZml4dHVyZU5hbWVcclxuICAgICAgICAgICAgICAgICAgOiBcIk90aGVyc1wiLFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgY3VzdG9tTmFtZTogW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgICAgPyBcIlwiXHJcbiAgICAgICAgICAgICAgICAgIDogZWxlLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAod2FsbEl0ZW0uZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZWxlR3JvdXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5nZXRGb3JtV2FsbHMucHVzaCh3YWxsSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgICAgICAgIGZpeHR1cmVOYW1lOiBmaXh0dXJlLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IGZpeHR1cmUuZml4dHVyZUNvbmZpZ0lkLFxyXG4gICAgICAgICAgICBfaWQ6IGZpeHR1cmUuX2lkLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgICAgICBmaXh0dXJlR3JvdXAsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZWxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgdHlwZTogW1xyXG4gICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICA/IGVsZS5maXh0dXJlTmFtZVxyXG4gICAgICAgICAgICAgICAgOiBcIk90aGVyc1wiLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBjdXN0b21OYW1lOiBbXHJcbiAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgID8gXCJcIlxyXG4gICAgICAgICAgICAgICAgOiBlbGUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yT3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgICAgIGVsZUdyb3VwLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlVG9GaXh0dXJlQ29uZmlnSWRDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvT3RoZXJFbGVtZW50c0NoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdJbml0aWFsQ29udGVudCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuY2FudmFzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnJlb3JkZXJGaXh0dXJlKHRoaXMuZmxvb3JEYXRhKTtcclxuICAgIGF3YWl0IHRoaXMuZHJhd0xheW91dEVsZW1lbnRzKCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgMzAwKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUFsbFBvc2l0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGdWxsTGF5b3V0Qm91bmRzKCkge1xyXG4gICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHJldHVybiB7IGxlZnQ6IDAsIHRvcDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG5cclxuICAgIGxldCBtaW5YID0gSW5maW5pdHksXHJcbiAgICAgIG1pblkgPSBJbmZpbml0eSxcclxuICAgICAgbWF4WCA9IC1JbmZpbml0eSxcclxuICAgICAgbWF4WSA9IC1JbmZpbml0eTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IG9iaiBvZiBvYmplY3RzKSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCByZWN0LmxlZnQpO1xyXG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcmVjdC50b3ApO1xyXG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCk7XHJcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsZWZ0OiBtaW5YLFxyXG4gICAgICB0b3A6IG1pblksXHJcbiAgICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcclxuICAgICAgaGVpZ2h0OiBtYXhZIC0gbWluWSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQoZHVyYXRpb24gPSA0MDApIHtcclxuICAgIGlmICghdGhpcy5jYW52YXMpIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoKTtcclxuICAgIGlmICghYm91bmRzLndpZHRoIHx8ICFib3VuZHMuaGVpZ2h0KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY2FudmFzVyA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICBjb25zdCBjYW52YXNIID0gdGhpcy5jYW52YXMuZ2V0SGVpZ2h0KCk7XHJcblxyXG4gICAgLy8gRmluYWwgem9vbSB0byBmaXQgKHdpdGggcGFkZGluZylcclxuICAgIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1cgLyBib3VuZHMud2lkdGg7XHJcbiAgICBjb25zdCBzY2FsZVkgPSBjYW52YXNIIC8gYm91bmRzLmhlaWdodDtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSkgKiAwLjk7IC8vIHBhZGRpbmcgMTAlXHJcblxyXG4gICAgLy8gRGVzaXJlZCB2aWV3cG9ydCBvZmZzZXQgdG8gY2VudGVyIGxheW91dFxyXG4gICAgY29uc3QgdGFyZ2V0VnB0ID0gW1xyXG4gICAgICAuLi4odGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0gfHwgWzEsIDAsIDAsIDEsIDAsIDBdKSxcclxuICAgIF0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICB0YXJnZXRWcHRbMF0gPSB0YXJnZXRab29tOyAvLyBzY2FsZVhcclxuICAgIHRhcmdldFZwdFszXSA9IHRhcmdldFpvb207IC8vIHNjYWxlWVxyXG5cclxuICAgIGNvbnN0IGV4dHJhVG9wUGFkZGluZ1B4ID0gMjQ7XHJcbiAgICB0YXJnZXRWcHRbNF0gPSBjYW52YXNXIC8gMiAtIChib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAvIDIpICogdGFyZ2V0Wm9vbTsgLy8gY2VudGVyIFhcclxuICAgIHRhcmdldFZwdFs1XSA9XHJcbiAgICAgIGNhbnZhc0ggLyAyIC1cclxuICAgICAgKGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMikgKiB0YXJnZXRab29tICtcclxuICAgICAgZXh0cmFUb3BQYWRkaW5nUHg7IC8vIGNlbnRlciBZICsgZXh0cmEgdG9wIHBhZGRpbmdcclxuXHJcbiAgICAvLyBDdXJyZW50IHZpZXdwb3J0IChzdGFydGluZyBwb2ludCBvZiBhbmltYXRpb24pXHJcbiAgICBjb25zdCBzdGFydFZwdCA9IFsuLi50aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSFdIGFzIGZhYnJpYy5UTWF0MkQ7XHJcblxyXG4gICAgZmFicmljLnV0aWwuYW5pbWF0ZSh7XHJcbiAgICAgIHN0YXJ0VmFsdWU6IDAsXHJcbiAgICAgIGVuZFZhbHVlOiAxLFxyXG4gICAgICBkdXJhdGlvbixcclxuICAgICAgZWFzaW5nOiBmYWJyaWMudXRpbC5lYXNlLmVhc2VPdXRDdWJpYyxcclxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hO1xyXG5cclxuICAgICAgICAvLyBJbnRlcnBvbGF0ZSBtYXRyaXggdmFsdWVzXHJcbiAgICAgICAgdnB0WzBdID0gc3RhcnRWcHRbMF0gKyAodGFyZ2V0VnB0WzBdIC0gc3RhcnRWcHRbMF0pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzNdID0gc3RhcnRWcHRbM10gKyAodGFyZ2V0VnB0WzNdIC0gc3RhcnRWcHRbM10pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzRdID0gc3RhcnRWcHRbNF0gKyAodGFyZ2V0VnB0WzRdIC0gc3RhcnRWcHRbNF0pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzVdID0gc3RhcnRWcHRbNV0gKyAodGFyZ2V0VnB0WzVdIC0gc3RhcnRWcHRbNV0pICogdmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0xheW91dEVsZW1lbnRzKCkge1xyXG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLmZsb29yRGF0YTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmbG9vci5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gZmxvb3IubGF5b3V0UG9seWdvbltpbmRleF07XHJcblxyXG4gICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24gPz89IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIGVsZW1lbnQudW5pdCk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBlbGVtZW50LnVuaXQpO1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy53YWxsVGhpY2tuZXNzO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5kaXN0YW5jZSwgZWxlbWVudC51bml0KTtcclxuICAgICAgICBpZiAod2lkdGggPCBoZWlnaHQpIHdpZHRoID0gdGhpcy53YWxsVGhpY2tuZXNzICsgMTtcclxuICAgICAgICBhd2FpdCB0aGlzLmRyYXdXYWxsKHRoaXMuY2FudmFzLCB4LCB5LCBoZWlnaHQsIHdpZHRoLCBlbGVtZW50KTtcclxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIpIHtcclxuICAgICAgICBjb25zdCBhcnJvd1dpZHRoID0gODA7XHJcbiAgICAgICAgY29uc3QgYXJyb3dIZWlnaHQgPSA3NTtcclxuICAgICAgICBjb25zdCBhcnJvd0Jhc2UgPSA0MDtcclxuICAgICAgICB0aGlzLmRyYXdFbnRyYW5jZShcclxuICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgeCxcclxuICAgICAgICAgIHksXHJcbiAgICAgICAgICBhcnJvd1dpZHRoLFxyXG4gICAgICAgICAgYXJyb3dIZWlnaHQsXHJcbiAgICAgICAgICBhcnJvd0Jhc2UsXHJcbiAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3IgY2FkIGxheW91dHMgb25seS5cclxuICAgIHRoaXMubGF5b3V0Qm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZsb29yLmxheW91dFBvbHlnb24ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBmbG9vci5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgIT09IFwid2FsbFwiKSBjb250aW51ZTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmVHcm91cHM6IGZhYnJpYy5Hcm91cFtdID0gW107XHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/LmZpeHR1cmVzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSBlbGVtZW50LmZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZVdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHkgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBvdmVycmlkZSB0aGUgZml4dHVyZSBwb3NpdGlvbiBmb3IgaW5pdGlhbCBjYWQgbGF5b3V0cy5cclxuICAgICAgICAvLyBpZiAodGhpcy5mbG9vckRhdGE/LmNhZExheW91dCkge1xyXG4gICAgICAgIC8vICAgY29uc3QgYmFzZVggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIC8vICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICAvLyAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICAgLy8gICApO1xyXG5cclxuICAgICAgICAvLyAgIGNvbnN0IGJhc2VZID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAvLyAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAgICAgLy8gICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICAgIC8vICAgKTtcclxuICAgICAgICAvLyAgIGNvbnN0IHN0YXJ0QnVmZmVyID0gNDA7XHJcbiAgICAgICAgLy8gICBjb25zdCBzcGFjaW5nID0gMTM2O1xyXG4gICAgICAgIC8vICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRCdWZmZXIgKyBzcGFjaW5nICogajtcclxuXHJcbiAgICAgICAgLy8gICBjb25zdCBhbmdsZVJhZCA9IGZhYnJpYy51dGlsLmRlZ3JlZXNUb1JhZGlhbnMoZWxlbWVudC5hbmdsZSk7XHJcblxyXG4gICAgICAgIC8vICAgY29uc3QgZGlyWCA9IE1hdGguY29zKGFuZ2xlUmFkKTtcclxuICAgICAgICAvLyAgIGNvbnN0IGRpclkgPSBNYXRoLnNpbihhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIC8vICAgY29uc3Qgbm9ybWFsT2Zmc2V0ID0gdGhpcy53YWxsVGhpY2tuZXNzO1xyXG5cclxuICAgICAgICAvLyAgIGNvbnN0IG5vcm1YID0gTWF0aC5jb3MoYW5nbGVSYWQgKyBNYXRoLlBJIC8gMikgKiBub3JtYWxPZmZzZXQ7XHJcbiAgICAgICAgLy8gICBjb25zdCBub3JtWSA9IE1hdGguc2luKGFuZ2xlUmFkICsgTWF0aC5QSSAvIDIpICogbm9ybWFsT2Zmc2V0O1xyXG5cclxuICAgICAgICAvLyAgIHggPSBiYXNlWCArIGRpclggKiBvZmZzZXQgKyBub3JtWDtcclxuICAgICAgICAvLyAgIHkgPSBiYXNlWSArIGRpclkgKiBvZmZzZXQgKyBub3JtWTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVPYmogPSBhd2FpdCB0aGlzLmRyYXdGaXh0dXJlKFxyXG4gICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICB4LFxyXG4gICAgICAgICAgeSxcclxuICAgICAgICAgIGZpeHR1cmVIZWlnaHQsXHJcbiAgICAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAgICAgICBmaXh0dXJlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZml4dHVyZUdyb3Vwcy5wdXNoKGZpeHR1cmVPYmogYXMgZmFicmljLkdyb3VwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IGVsZW1lbnQub3RoZXJFbGVtZW50c1tqXTtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgICAgY29uc3QgYSA9IG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG4gICAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgIHgsXHJcbiAgICAgICAgICB5LFxyXG4gICAgICAgICAgYSxcclxuICAgICAgICAgIHcsXHJcbiAgICAgICAgICBoLFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAvL0lmIENBRCBsYXlvdXRcclxuICAgIC8vIGlmICh0aGlzLmZsb29yRGF0YT8uY2FkTGF5b3V0ICYmIHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlPy5sZW5ndGgpIHtcclxuICAgIC8vICAgY29uc3QgZml4dHVyZXMgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlO1xyXG5cclxuICAgIC8vICAgY29uc3QgbGF5b3V0UG9seWdvbiA9IHRoaXMuYnVpbGRMYXlvdXRQb2x5Z29uRnJvbVdhbGxzKCk7XHJcbiAgICAvLyAgIGNvbnN0IG9jY3VwaWVkUmVjdHMgPSB0aGlzLmdldE9jY3VwaWVkUmVjdHMoKTtcclxuXHJcbiAgICAvLyAgIGNvbnN0IGZpeHR1cmVXaWR0aFB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgIC8vICAgICBmaXh0dXJlc1swXS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAvLyAgICAgZml4dHVyZXNbMF0uZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAvLyAgICk7XHJcblxyXG4gICAgLy8gICBjb25zdCBmaXh0dXJlSGVpZ2h0UHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgLy8gICAgIGZpeHR1cmVzWzBdLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAvLyAgICAgZml4dHVyZXNbMF0uZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgLy8gICApO1xyXG5cclxuICAgIC8vICAgY29uc3QgdG90YWwgPSBmaXh0dXJlcy5sZW5ndGg7XHJcblxyXG4gICAgLy8gICBjb25zdCBtYXhSb3dzID0gMjtcclxuICAgIC8vICAgY29uc3Qgcm93cyA9IE1hdGgubWluKG1heFJvd3MsIHRvdGFsKTtcclxuICAgIC8vICAgY29uc3QgY29sdW1ucyA9IE1hdGguY2VpbCh0b3RhbCAvIHJvd3MpO1xyXG5cclxuICAgIC8vICAgY29uc3QgZ3JpZFdpZHRoID0gY29sdW1ucyAqIGZpeHR1cmVXaWR0aFB4O1xyXG4gICAgLy8gICBjb25zdCBncmlkSGVpZ2h0ID0gcm93cyAqIGZpeHR1cmVIZWlnaHRQeDtcclxuXHJcbiAgICAvLyAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG4gICAgLy8gICBjb25zdCBjZW50ZXJYID0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyO1xyXG4gICAgLy8gICBjb25zdCBjZW50ZXJZID0gYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLyAyO1xyXG5cclxuICAgIC8vICAgY29uc3QgaXNJbnNpZGVQb2x5Z29uID0gKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XHJcbiAgICAvLyAgICAgcmV0dXJuIChcclxuICAgIC8vICAgICAgIHRoaXMuaXNQb2ludEluc2lkZVBvbHlnb24oeyB4LCB5IH0sIGxheW91dFBvbHlnb24pICYmXHJcbiAgICAvLyAgICAgICB0aGlzLmlzUG9pbnRJbnNpZGVQb2x5Z29uKHsgeDogeCArIGdyaWRXaWR0aCwgeSB9LCBsYXlvdXRQb2x5Z29uKSAmJlxyXG4gICAgLy8gICAgICAgdGhpcy5pc1BvaW50SW5zaWRlUG9seWdvbih7IHgsIHk6IHkgKyBncmlkSGVpZ2h0IH0sIGxheW91dFBvbHlnb24pICYmXHJcbiAgICAvLyAgICAgICB0aGlzLmlzUG9pbnRJbnNpZGVQb2x5Z29uKFxyXG4gICAgLy8gICAgICAgICB7IHg6IHggKyBncmlkV2lkdGgsIHk6IHkgKyBncmlkSGVpZ2h0IH0sXHJcbiAgICAvLyAgICAgICAgIGxheW91dFBvbHlnb24sXHJcbiAgICAvLyAgICAgICApXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgfTtcclxuXHJcbiAgICAvLyAgIGNvbnN0IG92ZXJsYXBzT2NjdXBpZWQgPSAoeDogbnVtYmVyLCB5OiBudW1iZXIpID0+IHtcclxuICAgIC8vICAgICBjb25zdCBncmlkUmVjdCA9IHsgeCwgeSwgdzogZ3JpZFdpZHRoLCBoOiBncmlkSGVpZ2h0IH07XHJcblxyXG4gICAgLy8gICAgIGZvciAoY29uc3Qgb2NjIG9mIG9jY3VwaWVkUmVjdHMpIHtcclxuICAgIC8vICAgICAgIGlmICh0aGlzLnJlY3RzT3ZlcmxhcChncmlkUmVjdCwgb2NjKSkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgfTtcclxuXHJcbiAgICAvLyAgIGNvbnN0IGZpbmRCZXN0UG9zaXRpb24gPSAobW9kZTogXCJzdHJpY3RcIiB8IFwicmVsYXhlZFwiKSA9PiB7XHJcbiAgICAvLyAgICAgbGV0IGJlc3RTY29yZSA9IC1JbmZpbml0eTtcclxuICAgIC8vICAgICBsZXQgYmVzdFBvczogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLy8gICAgIGNvbnN0IHN0ZXAgPSBmaXh0dXJlV2lkdGhQeCAvIDI7XHJcblxyXG4gICAgLy8gICAgIGZvciAoXHJcbiAgICAvLyAgICAgICBsZXQgeSA9IGJvdW5kcy50b3A7XHJcbiAgICAvLyAgICAgICB5IDw9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC0gZ3JpZEhlaWdodDtcclxuICAgIC8vICAgICAgIHkgKz0gc3RlcFxyXG4gICAgLy8gICAgICkge1xyXG4gICAgLy8gICAgICAgZm9yIChcclxuICAgIC8vICAgICAgICAgbGV0IHggPSBib3VuZHMubGVmdDtcclxuICAgIC8vICAgICAgICAgeCA8PSBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAtIGdyaWRXaWR0aDtcclxuICAgIC8vICAgICAgICAgeCArPSBzdGVwXHJcbiAgICAvLyAgICAgICApIHtcclxuICAgIC8vICAgICAgICAgaWYgKCFpc0luc2lkZVBvbHlnb24oeCwgeSkpIGNvbnRpbnVlO1xyXG5cclxuICAgIC8vICAgICAgICAgaWYgKG1vZGUgPT09IFwic3RyaWN0XCIgJiYgb3ZlcmxhcHNPY2N1cGllZCh4LCB5KSkgY29udGludWU7XHJcblxyXG4gICAgLy8gICAgICAgICBjb25zdCBncmlkUmVjdCA9IHsgeCwgeSwgdzogZ3JpZFdpZHRoLCBoOiBncmlkSGVpZ2h0IH07XHJcblxyXG4gICAgLy8gICAgICAgICBjb25zdCBlbXB0eU1hcmdpbiA9IHRoaXMuY29tcHV0ZUVtcHR5TWFyZ2luKFxyXG4gICAgLy8gICAgICAgICAgIGdyaWRSZWN0LFxyXG4gICAgLy8gICAgICAgICAgIGJvdW5kcyxcclxuICAgIC8vICAgICAgICAgICBvY2N1cGllZFJlY3RzLFxyXG4gICAgLy8gICAgICAgICApO1xyXG5cclxuICAgIC8vICAgICAgICAgY29uc3QgZHggPSBjZW50ZXJYIC0gKHggKyBncmlkV2lkdGggLyAyKTtcclxuICAgIC8vICAgICAgICAgY29uc3QgZHkgPSBjZW50ZXJZIC0gKHkgKyBncmlkSGVpZ2h0IC8gMik7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGNlbnRlclBlbmFsdHkgPSBkeCAqIGR4ICsgZHkgKiBkeTtcclxuXHJcbiAgICAvLyAgICAgICAgIGNvbnN0IHNjb3JlID0gZW1wdHlNYXJnaW4gKiAxMDAwIC0gY2VudGVyUGVuYWx0eSAqIDAuMDAxO1xyXG5cclxuICAgIC8vICAgICAgICAgaWYgKHNjb3JlID4gYmVzdFNjb3JlKSB7XHJcbiAgICAvLyAgICAgICAgICAgYmVzdFNjb3JlID0gc2NvcmU7XHJcbiAgICAvLyAgICAgICAgICAgYmVzdFBvcyA9IHsgeCwgeSB9O1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICByZXR1cm4gYmVzdFBvcztcclxuICAgIC8vICAgfTtcclxuXHJcbiAgICAvLyAgIGxldCBiZXN0UG9zID0gZmluZEJlc3RQb3NpdGlvbihcInN0cmljdFwiKTtcclxuXHJcbiAgICAvLyAgIGlmICghYmVzdFBvcykge1xyXG4gICAgLy8gICAgIGNvbnNvbGUud2FybihcIlN0cmljdCBwbGFjZW1lbnQgZmFpbGVkLiBUcnlpbmcgcmVsYXhlZCBtb2RlLi4uXCIpO1xyXG4gICAgLy8gICAgIGJlc3RQb3MgPSBmaW5kQmVzdFBvc2l0aW9uKFwicmVsYXhlZFwiKTtcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgaWYgKCFiZXN0UG9zKSB7XHJcbiAgICAvLyAgICAgY29uc29sZS53YXJuKFwiUmVsYXhlZCBwbGFjZW1lbnQgZmFpbGVkLiBGYWxsaW5nIGJhY2sgdG8gY2VudGVyLlwiKTtcclxuICAgIC8vICAgICBiZXN0UG9zID0ge1xyXG4gICAgLy8gICAgICAgeDogY2VudGVyWCAtIGdyaWRXaWR0aCAvIDIsXHJcbiAgICAvLyAgICAgICB5OiBjZW50ZXJZIC0gZ3JpZEhlaWdodCAvIDIsXHJcbiAgICAvLyAgICAgfTtcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAvLyAgICAgLy8gTi1zaGFwZSB0cmF2ZXJzYWw6IGNvbCBmaWxscyBsZWZ0LXRvLXJpZ2h0LCBlYWNoIGNvbHVtbiBmaWxscyBib3R0b20gcm93IGZpcnN0IHRoZW4gdG9wIHJvd1xyXG4gICAgLy8gICAgIGNvbnN0IGNvbCA9IE1hdGguZmxvb3IoaW5kZXggLyAyKTtcclxuICAgIC8vICAgICBjb25zdCByb3cgPSBpbmRleCAlIDIgPT09IDAgPyAxIDogMDtcclxuXHJcbiAgICAvLyAgICAgY29uc3QgeCA9IGJlc3RQb3MhLnggKyBjb2wgKiBmaXh0dXJlV2lkdGhQeDtcclxuICAgIC8vICAgICBjb25zdCB5ID0gYmVzdFBvcyEueSArIHJvdyAqIGZpeHR1cmVIZWlnaHRQeDtcclxuXHJcbiAgICAvLyAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLmZyb21QaXhlbHMoeCwgXCJmdFwiKTtcclxuICAgIC8vICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMuZnJvbVBpeGVscyh5LCBcImZ0XCIpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhPy5jYWRMYXlvdXQgJiZcclxuICAgICAgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmU/Lmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY29tcGFjdENlbnRlckZpeHR1cmVzKHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxvb3I/LmNlbnRlckZpeHR1cmU/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSBmbG9vci5jZW50ZXJGaXh0dXJlW2ldO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZUhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZVdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSxcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoXHJcbiAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgeCxcclxuICAgICAgICB5LFxyXG4gICAgICAgIGZpeHR1cmVIZWlnaHQsXHJcbiAgICAgICAgZml4dHVyZVdpZHRoLFxyXG4gICAgICAgIGZpeHR1cmUsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBmbG9vcj8ub3RoZXJFbGVtZW50cz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3Qgb3RoZXJFbGVtZW50ID0gZmxvb3Iub3RoZXJFbGVtZW50c1tqXTtcclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKTtcclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgXCJmdFwiKTtcclxuICAgICAgY29uc3QgYSA9IG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG4gICAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwodGhpcy5jYW52YXMsIHgsIHksIGEsIHcsIGgsIG90aGVyRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb21wYWN0Q2VudGVyRml4dHVyZXMoZml4dHVyZXM6IGFueVtdKSB7XHJcbiAgICBpZiAoIWZpeHR1cmVzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBHQVBfRkFDVE9SID0gMC4zOyAvLyA3MCUgcmVkdWN0aW9uXHJcblxyXG4gICAgY29uc3QgaXRlbXMgPSBmaXh0dXJlcy5tYXAoKGYpID0+IHtcclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgaCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIGYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoZi5yZWxhdGl2ZVBvc2l0aW9uLngsIGYucmVsYXRpdmVQb3NpdGlvbi51bml0KTtcclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoZi5yZWxhdGl2ZVBvc2l0aW9uLnksIGYucmVsYXRpdmVQb3NpdGlvbi51bml0KTtcclxuXHJcbiAgICAgIHJldHVybiB7IGYsIHgsIHksIHcsIGggfTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIPCfkYkgQ2FwdHVyZSBvcmlnaW5hbCBjZW50ZXJcclxuICAgIGNvbnN0IGdldEJvdW5kcyA9IChsaXN0OmFueSkgPT4ge1xyXG4gICAgICBjb25zdCBtaW5YID0gTWF0aC5taW4oLi4ubGlzdC5tYXAoKGk6YW55KSA9PiBpLngpKTtcclxuICAgICAgY29uc3QgbWluWSA9IE1hdGgubWluKC4uLmxpc3QubWFwKChpOmFueSkgPT4gaS55KSk7XHJcbiAgICAgIGNvbnN0IG1heFggPSBNYXRoLm1heCguLi5saXN0Lm1hcCgoaTphbnkpID0+IGkueCArIGkudykpO1xyXG4gICAgICBjb25zdCBtYXhZID0gTWF0aC5tYXgoLi4ubGlzdC5tYXAoKGk6YW55KSA9PiBpLnkgKyBpLmgpKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbWluWCxcclxuICAgICAgICBtaW5ZLFxyXG4gICAgICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcclxuICAgICAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZLFxyXG4gICAgICAgIGNlbnRlclg6IG1pblggKyAobWF4WCAtIG1pblgpIC8gMixcclxuICAgICAgICBjZW50ZXJZOiBtaW5ZICsgKG1heFkgLSBtaW5ZKSAvIDIsXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9yaWdpbmFsQm91bmRzID0gZ2V0Qm91bmRzKGl0ZW1zKTtcclxuXHJcbiAgICAvLyBTVEVQIDE6IGdyb3VwIHJvd3NcclxuICAgIGNvbnN0IHJvd1RocmVzaG9sZCA9IE1hdGgubWluKC4uLml0ZW1zLm1hcCgoaSkgPT4gaS5oKSkgLyAyO1xyXG5cclxuICAgIGNvbnN0IHJvd3M6IGFueVtdW10gPSBbXTtcclxuICAgIGl0ZW1zLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSk7XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGxldCBwbGFjZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcclxuICAgICAgICBpZiAoTWF0aC5hYnMocm93WzBdLnkgLSBpdGVtLnkpIDwgcm93VGhyZXNob2xkKSB7XHJcbiAgICAgICAgICByb3cucHVzaChpdGVtKTtcclxuICAgICAgICAgIHBsYWNlZCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghcGxhY2VkKSByb3dzLnB1c2goW2l0ZW1dKTtcclxuICAgIH1cclxuXHJcbiAgICByb3dzLmZvckVhY2goKHJvdykgPT4gcm93LnNvcnQoKGEsIGIpID0+IGEueCAtIGIueCkpO1xyXG5cclxuICAgIC8vIFNURVAgMjogaG9yaXpvbnRhbCBjb21wYWN0aW9uIChzY2FsZWQgZ2FwcylcclxuICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcHJldiA9IHJvd1tpIC0gMV07XHJcbiAgICAgICAgY29uc3QgY3VyciA9IHJvd1tpXTtcclxuXHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxHYXAgPSBjdXJyLnggLSAocHJldi54ICsgcHJldi53KTtcclxuXHJcbiAgICAgICAgaWYgKG9yaWdpbmFsR2FwID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgbmV3R2FwID0gb3JpZ2luYWxHYXAgKiBHQVBfRkFDVE9SO1xyXG4gICAgICAgICAgY3Vyci54ID0gcHJldi54ICsgcHJldi53ICsgbmV3R2FwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gU1RFUCAzOiB2ZXJ0aWNhbCBjb21wYWN0aW9uIChzY2FsZWQgZ2FwcylcclxuICAgIGZvciAobGV0IHIgPSAxOyByIDwgcm93cy5sZW5ndGg7IHIrKykge1xyXG4gICAgICBjb25zdCBwcmV2Um93ID0gcm93c1tyIC0gMV07XHJcbiAgICAgIGNvbnN0IGN1cnJSb3cgPSByb3dzW3JdO1xyXG5cclxuICAgICAgY29uc3QgcHJldkJvdHRvbSA9IE1hdGgubWF4KC4uLnByZXZSb3cubWFwKChpKSA9PiBpLnkgKyBpLmgpKTtcclxuICAgICAgY29uc3QgY3VyclRvcCA9IE1hdGgubWluKC4uLmN1cnJSb3cubWFwKChpKSA9PiBpLnkpKTtcclxuXHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsR2FwID0gY3VyclRvcCAtIHByZXZCb3R0b207XHJcblxyXG4gICAgICBpZiAob3JpZ2luYWxHYXAgPiAwKSB7XHJcbiAgICAgICAgY29uc3QgbmV3R2FwID0gb3JpZ2luYWxHYXAgKiBHQVBfRkFDVE9SO1xyXG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gb3JpZ2luYWxHYXAgLSBuZXdHYXA7XHJcblxyXG4gICAgICAgIGN1cnJSb3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS55IC09IHNoaWZ0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU1RFUCA0OiByZXN0b3JlIGNlbnRlclxyXG4gICAgY29uc3QgbmV3Qm91bmRzID0gZ2V0Qm91bmRzKGl0ZW1zKTtcclxuXHJcbiAgICBjb25zdCBkeCA9IG9yaWdpbmFsQm91bmRzLmNlbnRlclggLSBuZXdCb3VuZHMuY2VudGVyWDtcclxuICAgIGNvbnN0IGR5ID0gb3JpZ2luYWxCb3VuZHMuY2VudGVyWSAtIG5ld0JvdW5kcy5jZW50ZXJZO1xyXG5cclxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS54ICs9IGR4O1xyXG4gICAgICBpdGVtLnkgKz0gZHk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBTVEVQIDU6IHdyaXRlIGJhY2tcclxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5mLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMuZnJvbVBpeGVscyhpdGVtLngsIFwiZnRcIik7XHJcbiAgICAgIGl0ZW0uZi5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLmZyb21QaXhlbHMoaXRlbS55LCBcImZ0XCIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBpc1BvaW50SW5zaWRlUG9seWdvbihcclxuICAgIHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXHJcbiAgICBwb2x5Z29uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1bXSxcclxuICApOiBib29sZWFuIHtcclxuICAgIGxldCBpbnNpZGUgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IHBvbHlnb24ubGVuZ3RoIC0gMTsgaSA8IHBvbHlnb24ubGVuZ3RoOyBqID0gaSsrKSB7XHJcbiAgICAgIGNvbnN0IHhpID0gcG9seWdvbltpXS54LFxyXG4gICAgICAgIHlpID0gcG9seWdvbltpXS55O1xyXG4gICAgICBjb25zdCB4aiA9IHBvbHlnb25bal0ueCxcclxuICAgICAgICB5aiA9IHBvbHlnb25bal0ueTtcclxuXHJcbiAgICAgIGNvbnN0IGludGVyc2VjdCA9XHJcbiAgICAgICAgeWkgPiBwb2ludC55ICE9PSB5aiA+IHBvaW50LnkgJiZcclxuICAgICAgICBwb2ludC54IDwgKCh4aiAtIHhpKSAqIChwb2ludC55IC0geWkpKSAvICh5aiAtIHlpKSArIHhpO1xyXG5cclxuICAgICAgaWYgKGludGVyc2VjdCkgaW5zaWRlID0gIWluc2lkZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5zaWRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPY2N1cGllZFJlY3RzKCk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLm1hcCgob2JqKSA9PiB7XHJcbiAgICAgIGNvbnN0IHIgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgeDogci5sZWZ0LFxyXG4gICAgICAgIHk6IHIudG9wLFxyXG4gICAgICAgIHc6IHIud2lkdGgsXHJcbiAgICAgICAgaDogci5oZWlnaHQsXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjdHNPdmVybGFwKFxyXG4gICAgYTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSxcclxuICAgIGI6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0sXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIShcclxuICAgICAgYS54ICsgYS53IDw9IGIueCB8fFxyXG4gICAgICBhLnggPj0gYi54ICsgYi53IHx8XHJcbiAgICAgIGEueSArIGEuaCA8PSBiLnkgfHxcclxuICAgICAgYS55ID49IGIueSArIGIuaFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZUVtcHR5TWFyZ2luKFxyXG4gICAgZ3JpZFJlY3Q6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0sXHJcbiAgICBib3VuZHM6IHsgbGVmdDogbnVtYmVyOyB0b3A6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcclxuICAgIG9jY3VwaWVkUmVjdHM6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH1bXSxcclxuICApOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbk1hcmdpbiA9IEluZmluaXR5O1xyXG5cclxuICAgIC8vIGRpc3RhbmNlIHRvIGxheW91dCBib3VuZHNcclxuICAgIG1pbk1hcmdpbiA9IE1hdGgubWluKFxyXG4gICAgICBtaW5NYXJnaW4sXHJcbiAgICAgIGdyaWRSZWN0LnggLSBib3VuZHMubGVmdCxcclxuICAgICAgYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLSAoZ3JpZFJlY3QueCArIGdyaWRSZWN0LncpLFxyXG4gICAgICBncmlkUmVjdC55IC0gYm91bmRzLnRvcCxcclxuICAgICAgYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLSAoZ3JpZFJlY3QueSArIGdyaWRSZWN0LmgpLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBkaXN0YW5jZSB0byBvdGhlciBvYmplY3RzXHJcbiAgICBmb3IgKGNvbnN0IG9jYyBvZiBvY2N1cGllZFJlY3RzKSB7XHJcbiAgICAgIC8vIGhvcml6b250YWwgZ2FwXHJcbiAgICAgIGlmIChvY2MueSA8IGdyaWRSZWN0LnkgKyBncmlkUmVjdC5oICYmIG9jYy55ICsgb2NjLmggPiBncmlkUmVjdC55KSB7XHJcbiAgICAgICAgaWYgKG9jYy54ICsgb2NjLncgPD0gZ3JpZFJlY3QueCkge1xyXG4gICAgICAgICAgbWluTWFyZ2luID0gTWF0aC5taW4obWluTWFyZ2luLCBncmlkUmVjdC54IC0gKG9jYy54ICsgb2NjLncpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG9jYy54ID49IGdyaWRSZWN0LnggKyBncmlkUmVjdC53KSB7XHJcbiAgICAgICAgICBtaW5NYXJnaW4gPSBNYXRoLm1pbihtaW5NYXJnaW4sIG9jYy54IC0gKGdyaWRSZWN0LnggKyBncmlkUmVjdC53KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB2ZXJ0aWNhbCBnYXBcclxuICAgICAgaWYgKG9jYy54IDwgZ3JpZFJlY3QueCArIGdyaWRSZWN0LncgJiYgb2NjLnggKyBvY2MudyA+IGdyaWRSZWN0LngpIHtcclxuICAgICAgICBpZiAob2NjLnkgKyBvY2MuaCA8PSBncmlkUmVjdC55KSB7XHJcbiAgICAgICAgICBtaW5NYXJnaW4gPSBNYXRoLm1pbihtaW5NYXJnaW4sIGdyaWRSZWN0LnkgLSAob2NjLnkgKyBvY2MuaCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAob2NjLnkgPj0gZ3JpZFJlY3QueSArIGdyaWRSZWN0LmgpIHtcclxuICAgICAgICAgIG1pbk1hcmdpbiA9IE1hdGgubWluKG1pbk1hcmdpbiwgb2NjLnkgLSAoZ3JpZFJlY3QueSArIGdyaWRSZWN0LmgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWluTWFyZ2luO1xyXG4gIH1cclxuXHJcbiAgZHJhd0ZpeHR1cmVSb3dMYWJlbCh0ZXh0OiBzdHJpbmcsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsYWJlbCA9IG5ldyBmYWJyaWMuVGV4dCh0ZXh0LCB7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgZm9udFNpemU6IDE0LFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKGxhYmVsKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdXYWxsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueSxcclxuICApIHtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBmaWxsQ29sb3IgPSBcIiNGNkZDRkZcIjtcclxuICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gXCIjRDBENUREXCI7XHJcbiAgICBjb25zdCBsYWJlbENvbG9yID0gXCIjMDA5QkYzXCI7XHJcbiAgICBsZXQgdGV4dCA9IGAke3RoaXMudGl0bGVDYXNlLnRyYW5zZm9ybShlbGVtZW50RGF0YS5lbGVtZW50VHlwZSl9ICR7XHJcbiAgICAgIGVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXJcclxuICAgIH1gO1xyXG5cclxuICAgIGNvbnN0IHdhbGwgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiAwLFxyXG4gICAgICB0b3A6IDAsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIGZpbGw6IGZpbGxDb2xvcixcclxuICAgICAgc3Ryb2tlOiBzdHJva2VDb2xvcixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBzdHJva2VVbmlmb3JtOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY2VudGVyWCA9IHdpZHRoIC8gMjtcclxuICAgIGNvbnN0IGNlbnRlclkgPSBoZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IGhlaWdodCA+IHdpZHRoO1xyXG5cclxuICAgIGNvbnN0IGxhYmVsID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KHRleHQsIHtcclxuICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICBmb250U2l6ZTogMTAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgYW5nbGU6IGlzVmVydGljYWwgPyAtOTAgOiAwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGFycm93SGVhZCA9IDU7XHJcbiAgICBjb25zdCBlbGVtZW50czogZmFicmljLk9iamVjdFtdID0gW3dhbGwsIGxhYmVsXTtcclxuXHJcbiAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCB0b3BBcnJvd1kgPSA1O1xyXG4gICAgICBjb25zdCB0b3BBcnJvd0VuZFkgPSBjZW50ZXJZIC0gdGV4dFdpZHRoIC8gMiAtIDU7XHJcblxyXG4gICAgICBpZiAodG9wQXJyb3dFbmRZID4gdG9wQXJyb3dZICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShbY2VudGVyWCwgdG9wQXJyb3dZLCBjZW50ZXJYLCB0b3BBcnJvd0VuZFldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiB0b3BBcnJvd1ksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogMCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBib3R0b21BcnJvd1N0YXJ0WSA9IGNlbnRlclkgKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dFbmRZID0gaGVpZ2h0IC0gNTtcclxuXHJcbiAgICAgIGlmIChib3R0b21BcnJvd0VuZFkgPiBib3R0b21BcnJvd1N0YXJ0WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtjZW50ZXJYLCBib3R0b21BcnJvd1N0YXJ0WSwgY2VudGVyWCwgYm90dG9tQXJyb3dFbmRZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBib3R0b21BcnJvd0VuZFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogMTgwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGxhYmVsLndpZHRoIHx8IDA7XHJcbiAgICAgIGNvbnN0IGxlZnRBcnJvd1N0YXJ0WCA9IDU7XHJcbiAgICAgIGNvbnN0IGxlZnRBcnJvd0VuZFggPSBjZW50ZXJYIC0gdGV4dFdpZHRoIC8gMiAtIDU7XHJcblxyXG4gICAgICBpZiAobGVmdEFycm93RW5kWCA+IGxlZnRBcnJvd1N0YXJ0WCArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2xlZnRBcnJvd1N0YXJ0WCwgY2VudGVyWSwgbGVmdEFycm93RW5kWCwgY2VudGVyWV0sIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0QXJyb3dTdGFydFgsXHJcbiAgICAgICAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmlnaHRBcnJvd1N0YXJ0WCA9IGNlbnRlclggKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgcmlnaHRBcnJvd0VuZFggPSB3aWR0aCAtIDU7XHJcblxyXG4gICAgICBpZiAocmlnaHRBcnJvd0VuZFggPiByaWdodEFycm93U3RhcnRYICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW3JpZ2h0QXJyb3dTdGFydFgsIGNlbnRlclksIHJpZ2h0QXJyb3dFbmRYLCBjZW50ZXJZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogcmlnaHRBcnJvd0VuZFgsXHJcbiAgICAgICAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiA5MCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbG9ja1N2Z1N0cmluZyA9IGA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgIDxwYXRoIGQ9XCJNNyAxMVY3QzcgNS42NzM5MiA3LjUyNjc4IDQuNDAyMTUgOC40NjQ0NyAzLjQ2NDQ3QzkuNDAyMTUgMi41MjY3OCAxMC42NzM5IDIgMTIgMkMxMy4zMjYxIDIgMTQuNTk3OSAyLjUyNjc4IDE1LjUzNTUgMy40NjQ0N0MxNi40NzMyIDQuNDAyMTUgMTcgNS42NzM5MiAxNyA3VjExTTUgMTFIMTlDMjAuMTA0NiAxMSAyMSAxMS44OTU0IDIxIDEzVjIwQzIxIDIxLjEwNDYgMjAuMTA0NiAyMiAxOSAyMkg1QzMuODk1NDMgMjIgMyAyMS4xMDQ2IDMgMjBWMTNDMyAxMS44OTU0IDMuODk1NDMgMTEgNSAxMVpcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgIDwvc3ZnPmA7XHJcblxyXG4gICAgbGV0IGxvYWRlZFNWRzogYW55ID0gYXdhaXQgZmFicmljLmxvYWRTVkdGcm9tU3RyaW5nKGxvY2tTdmdTdHJpbmcpO1xyXG5cclxuICAgIGxldCBsb2NrU3ZnID0gZmFicmljLnV0aWwuZ3JvdXBTVkdFbGVtZW50cyhcclxuICAgICAgbG9hZGVkU1ZHLm9iamVjdHMsXHJcbiAgICAgIGxvYWRlZFNWRy5vcHRpb25zLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB3YWxsQ2VudGVyWCA9IHdpZHRoIC8gMjtcclxuICAgIGNvbnN0IHdhbGxDZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuXHJcbiAgICBsb2NrU3ZnLnNjYWxlVG9XaWR0aCgyMCk7XHJcbiAgICBsb2NrU3ZnLnNjYWxlVG9IZWlnaHQoMjApO1xyXG5cclxuICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgIGxvY2tTdmcuc2V0KHtcclxuICAgICAgICBsZWZ0OiB3YWxsQ2VudGVyWCxcclxuICAgICAgICB0b3A6IHdhbGxDZW50ZXJZLFxyXG4gICAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxvY2tTdmcuc2V0KHtcclxuICAgICAgICBsZWZ0OiB3YWxsQ2VudGVyWCxcclxuICAgICAgICB0b3A6IHdhbGxDZW50ZXJZLFxyXG4gICAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9ja1N2Zy5zZXQoe1xyXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGxvY2tTdmcub24oXCJtb3VzZWRvd25cIiwgKG9wdCkgPT4ge1xyXG4gICAgICBpZiAob3B0ICYmIG9wdC5lICYmIG9wdC5lLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgIG9wdC5lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgZWxlbWVudERhdGEuaXNMb2NrZWQgPSAhZWxlbWVudERhdGE/LmlzTG9ja2VkO1xyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGVsZW1lbnRzLnB1c2gobG9ja1N2Zyk7XHJcblxyXG4gICAgbGV0IG1vZENlbnRlclggPSB4O1xyXG4gICAgbGV0IG1vZENlbnRlclkgPSB5O1xyXG4gICAgbGV0IGFuZ2xlID0gZWxlbWVudERhdGEuYW5nbGU7XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKGVsZW1lbnRzLCB7XHJcbiAgICAgIGxlZnQ6IG1vZENlbnRlclgsXHJcbiAgICAgIHRvcDogbW9kQ2VudGVyWSxcclxuICAgICAgaGFzQ29udHJvbHM6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWDogaXNWZXJ0aWNhbCxcclxuICAgICAgbG9ja1NjYWxpbmdZOiAhaXNWZXJ0aWNhbCxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgYW5nbGU6IGFuZ2xlLFxyXG4gICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBlbGVtZW50RGF0YS5lbGVtZW50VHlwZTtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50RGF0YTtcclxuXHJcbiAgICBjYW52YXMuYWRkKGdyb3VwKTtcclxuXHJcbiAgICAvLyBJZiBuZXdseSBhZGRlZCwgZm9jdXMgaXQgb25jZVxyXG4gICAgaWYgKChlbGVtZW50RGF0YSBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChncm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZWxlbWVudERhdGEgYXMgYW55KS5uZXdBZGRlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3Rml4dHVyZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGZpeHR1cmVEYXRhOiBhbnksXHJcbiAgKSB7XHJcbiAgICBjb25zdCBhY3R1YWxTaGVsdmVzID1cclxuICAgICAgZml4dHVyZURhdGEuc2hlbGZDb25maWc/LmZpbHRlcigoczogYW55KSA9PiBzLnNoZWxmVHlwZSAhPSBcInZtb25seVwiKSA/P1xyXG4gICAgICBbXTtcclxuXHJcbiAgICBsZXQgZml4dHVyZUNvbG9yOiBhbnk7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhLmZpeHR1cmVOYW1lID09PSBcInNwYWNlXCIpIHJldHVybjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBtYWluQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRvcFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IHRvcFkgPSB5ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCB0b3BDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB0b3BYLFxyXG4gICAgICB0b3A6IHRvcFksXHJcbiAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgaGVpZ2h0OiB0b3BIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaW5uZXJUb3BCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZfSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB0b3BGaWVsZFRleHQgPVxyXG4gICAgICAoZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiXHJcbiAgICAgICAgPyBgV2FsbC0ke2ZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyfSAtIGBcclxuICAgICAgICA6IFwiRmxvb3IgLSBcIikgK1xyXG4gICAgICBgRml4dHVyZSAke1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlclxyXG4gICAgICAgICAgPyBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgK1xyXG4gICAgICAgICAgICAoZml4dHVyZURhdGE/LmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgICAgICA/IFwiIC0gRlgtXCIgKyBmaXh0dXJlRGF0YS5maXh0dXJlTnVtYmVyXHJcbiAgICAgICAgICAgICAgOiBcIlwiKVxyXG4gICAgICAgICAgOiBcIm5ld1wiXHJcbiAgICAgIH1gO1xyXG5cclxuICAgIGNvbnN0IHRvcFRleHQgPSBuZXcgZmFicmljLlRleHRib3godG9wRmllbGRUZXh0LCB7XHJcbiAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgIHRvcDogdG9wWSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBpbm5lckJveEhlaWdodCxcclxuICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuXHJcbiAgICBjb25zdCBpbm5lckJvdHRvbUJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYfSAke3NlY29uZEJveFl9IFxyXG4gICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke1xyXG4gICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgTCAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgIHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgIH0gXHJcbiAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBcIiMzNDQwNTRcIixcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgIGxldCBib3R0b21UZXh0O1xyXG5cclxuICAgIGNvbnN0IHRleHRDb250ZW50ID0gZml4dHVyZURhdGEuZml4dHVyZU5hbWUuaW5jbHVkZXMoXCItZnRcIilcclxuICAgICAgPyBmaXh0dXJlRGF0YS5maXh0dXJlTmFtZVxyXG4gICAgICA6IGAke2ZpeHR1cmVEYXRhLmZpeHR1cmVOYW1lfSAtICR7Zml4dHVyZURhdGEuZml4dHVyZVdpZHRoLnZhbHVlfSAke2ZpeHR1cmVEYXRhLmZpeHR1cmVXaWR0aC51bml0fWA7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlQm90dG9tVGV4dCA9IChmczogYW55KSA9PlxyXG4gICAgICBuZXcgZmFicmljLlRleHRib3godGV4dENvbnRlbnQsIHtcclxuICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjRkZGRkZGXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgYm90dG9tVGV4dCA9IGNyZWF0ZUJvdHRvbVRleHQoZm9udFNpemUpO1xyXG4gICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICB9IHdoaWxlIChib3R0b21UZXh0LmhlaWdodCA+IGlubmVyQm94SGVpZ2h0ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgbWlkWSA9IHRvcFkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IG1pZENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgIHRvcDogbWlkWSxcclxuICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IG1pZEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzaGVsZkNvdW50ID0gZml4dHVyZURhdGEuc2hlbGZDb25maWc/Lmxlbmd0aDtcclxuICAgIGNvbnN0IGJveEhlaWdodCA9IG1pZEhlaWdodCAvIChzaGVsZkNvdW50ICsgMik7XHJcbiAgICBjb25zdCBmaXJzdEJveFkgPSBtaWRZO1xyXG5cclxuICAgIGNvbnN0IGZpcnN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke21pZFggKyByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aCAtIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WX0gJHttaWRYICsgbWlkV2lkdGh9ICR7XHJcbiAgICAgICAgICAgZmlyc3RCb3hZICsgcmFkaXVzXHJcbiAgICAgICAgIH0gXHJcbiAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICAgUSAke21pZFh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyByYWRpdXN9ICR7Zmlyc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaGVhZGVySW52YWxpZFxyXG4gICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgIDogXCIjRUFGOEZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmhlYWRlckludmFsaWRcclxuICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmaXJzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGAke2ZpeHR1cmVEYXRhPy5oZWFkZXI/LmxhYmVsID8gZml4dHVyZURhdGEuaGVhZGVyLmxhYmVsIDogXCJcIn1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGZpcnN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDcsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgZmlsbDogZml4dHVyZURhdGEuaGVhZGVySW52YWxpZCA/IFwiI2ZmZlwiIDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNoZWx2ZXMgPSBbXTtcclxuICAgIGNvbnN0IHNoZWxmSGVpZ2h0ID0gbWlkSGVpZ2h0IC0gMiAqIGJveEhlaWdodDtcclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMVwiKSB7XHJcbiAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogc2hlbGZIZWlnaHQsXHJcbiAgICAgICAgLy8gc3Ryb2tlOiAnIzUxQzFGRicsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmhlYWRlckludmFsaWRcclxuICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0ID0gZml4dHVyZURhdGE/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgIC8vIFdyYXAgdGV4dCB3aXRoaW4gZml4dHVyZSB3aWR0aCBhbmQgc2hyaW5rIHRvIGZpdCB2ZXJ0aWNhbCBzcGFjZVxyXG4gICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IHNoZWxmSGVpZ2h0ICogMC44O1xyXG4gICAgICBsZXQgZm9udFNpemVMMSA9IDY7XHJcblxyXG4gICAgICBjb25zdCBjcmVhdGVXcmFwcGVkVGV4dGJveCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGxldCB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZUwxID4gMikge1xyXG4gICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgaGVpZ2h0OiB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIDIsXHJcbiAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICByeDogMSxcclxuICAgICAgICByeTogMSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzaGVsdmVzLnB1c2goc2hlbGYsIGJhY2tncm91bmQsIHdyYXBwZWRUZXh0KTtcclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hlbGZDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChpICsgMSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgIDogZml4dHVyZURhdGEuaGVhZGVySW52YWxpZFxyXG4gICAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZik7XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS50cmF5Um93cyB8fCAxO1xyXG4gICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGV4dCA9XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgLy8gTDI6IFNpbmdsZS1saW5lIGVsbGlwc2lzIGFnYWluc3QgZnVsbCBzaGVsZiB3aWR0aFxyXG4gICAgICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gNjtcclxuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBNYXRoLm1heCgwLCBtaWRXaWR0aCAtIGhvcml6b250YWxQYWRkaW5nKTtcclxuICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gYm94SGVpZ2h0ICogMC44O1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb250U2l6ZSA9IDU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSAodDogc3RyaW5nKSA9PlxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UZXh0KHQsIHtcclxuICAgICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBkaXNwbGF5VGV4dCA9IHRleHQ7XHJcbiAgICAgICAgbGV0IG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcblxyXG4gICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgIGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgIGxldCBsZWZ0SWR4ID0gMDtcclxuICAgICAgICAgIGxldCByaWdodElkeCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHdoaWxlIChsZWZ0SWR4IDwgcmlnaHRJZHgpIHtcclxuICAgICAgICAgICAgY29uc3QgbWlkSWR4ID0gTWF0aC5mbG9vcigobGVmdElkeCArIHJpZ2h0SWR4KSAvIDIpO1xyXG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0ZXh0LnNsaWNlKDAsIG1pZElkeCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGNhbmRpZGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgICAgICByaWdodElkeCA9IG1pZElkeDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZWZ0SWR4ID0gbWlkSWR4ICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGlzcGxheVRleHQgPSB0ZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnRJZHggLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1hdGgubWluKG1heFRleHRIZWlnaHQsIG1lYXN1cmVkLmhlaWdodCA/PyAxMCkgKyAyLFxyXG4gICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICByeDogMSxcclxuICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBmaW5hbFRleHQgPSBuZXcgZmFicmljLlRleHQoZGlzcGxheVRleHQsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGJhY2tncm91bmQsIGZpbmFsVGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMM1wiKSB7XHJcbiAgICAgIGNvbnN0IHNlcXVlbnRpYWxHcm91cHM6IHsgem9uZTogc3RyaW5nOyBzaGVsdmVzOiBhbnlbXSB9W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBzaGVsZiBvZiBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBzaGVsZi56b25lIHx8IFwiVW5rbm93blwiO1xyXG4gICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHMucHVzaCh7IHpvbmUsIHNoZWx2ZXM6IFtzaGVsZl0gfSk7XHJcbiAgICAgICAgICBwcmV2aW91c1pvbmUgPSB6b25lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzW3NlcXVlbnRpYWxHcm91cHMubGVuZ3RoIC0gMV0uc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjdXJyZW50U2hlbGZJbmRleCA9IDA7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHNlcXVlbnRpYWxHcm91cHMpIHtcclxuICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBTdGFydEluZGV4ID0gY3VycmVudFNoZWxmSW5kZXg7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBMZW5ndGggPSBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChncm91cFN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBncm91cEJvdHRvbVkgPSBncm91cFRvcFkgKyBib3hIZWlnaHQgKiBncm91cExlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbGZEYXRhID0gc2hlbHZlc0luR3JvdXBbal07XHJcbiAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGN1cnJlbnRTaGVsZkluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2hlbGZSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgOiBmaXh0dXJlRGF0YS5oZWFkZXJJbnZhbGlkXHJcbiAgICAgICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmUmVjdCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNoZWxmRGF0YS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gc2hlbGZEYXRhLnRyYXlSb3dzIHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZiA9IHNoZWxmRGF0YS5wcm9kdWN0UGVyU2hlbGYgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uU3BhY2luZyA9IG1pZFdpZHRoIC8gcHJvZHVjdFBlclNoZWxmO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMTsgYyA8IHByb2R1Y3RQZXJTaGVsZjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVggPSBtaWRYICsgYyAqIGNvbHVtblNwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgIFtsaW5lWCwgYm94WSwgbGluZVgsIGJveFkgKyBib3hIZWlnaHRdLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY3VycmVudFNoZWxmSW5kZXgrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgIFttaWRYLCBncm91cEJvdHRvbVksIG1pZFggKyBtaWRXaWR0aCwgZ3JvdXBCb3R0b21ZXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgIDogZml4dHVyZURhdGEuaGVhZGVySW52YWxpZFxyXG4gICAgICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQm90dG9tTGluZSk7XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsUGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBuZXcgZmFicmljLlRleHRib3goem9uZSwge1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgIHRvcDogZ3JvdXBCb3R0b21ZLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiM3MDcwNzBcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChsYWJlbFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJYID0gbWlkWCArIG1pZFdpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBncm91cENlbnRlclkgPSBncm91cFRvcFkgKyAoZ3JvdXBCb3R0b21ZIC0gZ3JvdXBUb3BZKSAvIDI7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25CcmFuZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXNJbkdyb3VwPy5mb3JFYWNoKChzaGVsZikgPT4ge1xyXG4gICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoYnJhbmQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uQnJhbmRzLmFkZChicmFuZCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKFsuLi5zZWN0aW9uQnJhbmRzXS5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBbLi4uc2VjdGlvbkJyYW5kc10uam9pbihcIiArIFwiKTtcclxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICBjb25zdCByZWN0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSAyMDtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA2O1xyXG4gICAgICAgICAgbGV0IHdyYXBwZWRUZXh0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVRleHRib3ggPSAoZnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVUZXh0Ym94KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgfSB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIHBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJUZXh0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGE/LnZtQ29uZmlnPy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRGF0YS52bUNvbmZpZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHZtID0gZml4dHVyZURhdGEudm1Db25maWdbaV07XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB2bS5zdGFydFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB2bS5lbmRZUG9zaXRpb24gLSAxO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBzdGFydEluZGV4ID4gZml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmxlbmd0aCB8fFxyXG4gICAgICAgICAgZW5kSW5kZXggPiBmaXh0dXJlRGF0YT8uc2hlbGZDb25maWcubGVuZ3RoXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZIZWlnaHRTcGFuID0gYm94SGVpZ2h0ICogKGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDEpO1xyXG5cclxuICAgICAgICBsZXQgdm1IZWlnaHRQeDogbnVtYmVyID0gc2hlbGZIZWlnaHRTcGFuO1xyXG4gICAgICAgIGxldCB5OiBudW1iZXIgPSBzaGVsZlRvcFk7XHJcblxyXG4gICAgICAgIGlmICh2bS55Wm9uZSAmJiB2bS55Wm9uZSAhPT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgIHZtSGVpZ2h0UHggPSBzaGVsZkhlaWdodFNwYW4gLyAzO1xyXG5cclxuICAgICAgICAgIHN3aXRjaCAodm0ueVpvbmUpIHtcclxuICAgICAgICAgICAgY2FzZSBcInRvcFwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyAyICogdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHggPSBtaWRYO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IG1pZFdpZHRoO1xyXG5cclxuICAgICAgICBpZiAoIXZtLnhab25lIHx8IHZtLnhab25lID09PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzZWN0aW9uV2lkdGggPSBtaWRXaWR0aCAvIDM7XHJcbiAgICAgICAgICBzd2l0Y2ggKHZtLnhab25lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWCArIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFggKyAyICogc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodm0udm1JbWFnZVVybCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgdm1JbWFnZTogYW55ID0gYXdhaXQgZmFicmljLkZhYnJpY0ltYWdlLmZyb21VUkwoXHJcbiAgICAgICAgICAgICAgYCR7dGhpcy5jZG5Vcmx9JHt2bS52bUltYWdlVXJsfT92PSR7RGF0ZS5ub3coKX1gLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB2bUltYWdlLnNldCh7XHJcbiAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgc2NhbGVYOiB3aWR0aCAvIHZtSW1hZ2Uud2lkdGghLFxyXG4gICAgICAgICAgICAgIHNjYWxlWTogdm1IZWlnaHRQeCAvIHZtSW1hZ2UuaGVpZ2h0ISxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godm1JbWFnZSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgbG9hZGluZyBpbWFnZSBmb3IgVk06ICR7dm0udm1JbWFnZVVybH1gLCBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB2bUJveCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogdm1IZWlnaHRQeCxcclxuICAgICAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy52bUZpbGwgPz8gXCIjNjkzOEVGXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICAgICAgICBsZXQgdm1UZXh0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVZtVGV4dCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICBuZXcgZmFicmljLlRleHRib3godm0udm1OYW1lIHx8IFwiXCIsIHtcclxuICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgdm1UZXh0ID0gY3JlYXRlVm1UZXh0KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgfSB3aGlsZSAodm1UZXh0LmhlaWdodCA+IHZtSGVpZ2h0UHggJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2godm1Cb3gsIHZtVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGFzdEJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc2hlbGZDb3VudCArIDEpO1xyXG4gICAgY29uc3QgbGFzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYfSAke2xhc3RCb3hZfSBcclxuICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke1xyXG4gICAgICAgICAgIG1pZFggKyBtaWRXaWR0aCAtIHJhZGl1c1xyXG4gICAgICAgICB9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICBMICR7bWlkWCArIHJhZGl1c30gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7XHJcbiAgICAgICAgICAgbGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgICAgfSBcclxuICAgICAgICAgTCAke21pZFh9ICR7bGFzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5oZWFkZXJJbnZhbGlkXHJcbiAgICAgICAgICAgID8gXCIjRkVFNEUyXCJcclxuICAgICAgICAgICAgOiBcIiNFQUY4RkZcIixcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaGVhZGVySW52YWxpZFxyXG4gICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uZm9vdGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmZvb3Rlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBsYXN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ3RoOiBib3hIZWlnaHQsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgYm90dG9tSGVpZ2h0ID0gKDMgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgYm90dG9tWCA9IHggKyAod2lkdGggLSBib3R0b21XaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgYm90dG9tWSA9IG1pZFkgKyBtaWRIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbUNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGJvdHRvbVgsXHJcbiAgICAgIHRvcDogYm90dG9tWSxcclxuICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVRleHRDb250ZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgU2hlbHZlcyAtICR7YWN0dWFsU2hlbHZlcy5sZW5ndGh9IC4gUHJvZHVjdHMgLSAgJHtcclxuICAgICAgICBmaXh0dXJlRGF0YT8uZml4dHVyZUNhcGFjaXR5ID8/IDBcclxuICAgICAgfSAuIFZNIC0gJHtmaXh0dXJlRGF0YT8udm1Db25maWc/Lmxlbmd0aCA/PyAwfWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBib3R0b21YICsgYm90dG9tV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm90dG9tWSArIGJvdHRvbUhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHN2Z1N0cmluZyA9IGBcclxuICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgPHJlY3Qgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgIDxwYXRoIGQ9XCJNMTQuOTk5OCA2LjYwMDAxQzE1LjE1NzQgNi40NDI0MyAxNS4zNDQ1IDYuMzE3NDIgMTUuNTUwNCA2LjIzMjE0QzE1Ljc1NjMgNi4xNDY4NSAxNS45NzcgNi4xMDI5NiAxNi4xOTk4IDYuMTAyOTZDMTYuNDIyNyA2LjEwMjk2IDE2LjY0MzQgNi4xNDY4NSAxNi44NDkyIDYuMjMyMTRDMTcuMDU1MSA2LjMxNzQyIDE3LjI0MjIgNi40NDI0MyAxNy4zOTk4IDYuNjAwMDFDMTcuNTU3NCA2Ljc1NzYgMTcuNjgyNCA2Ljk0NDY4IDE3Ljc2NzcgNy4xNTA1OEMxNy44NTMgNy4zNTY0OCAxNy44OTY5IDcuNTc3MTUgMTcuODk2OSA3LjgwMDAxQzE3Ljg5NjkgOC4wMjI4OCAxNy44NTMgOC4yNDM1NSAxNy43Njc3IDguNDQ5NDVDMTcuNjgyNCA4LjY1NTM1IDE3LjU1NzQgOC44NDI0MyAxNy4zOTk4IDkuMDAwMDFMOS4yOTk4MiAxNy4xTDUuOTk5ODIgMThMNi44OTk4MiAxNC43TDE0Ljk5OTggNi42MDAwMVpcIiBzdHJva2U9XCIjMUQyOTM5XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgPC9zdmc+YDtcclxuXHJcbiAgICBsZXQgbG9hZGVkU1ZHOiBhbnkgPSBhd2FpdCBmYWJyaWMubG9hZFNWR0Zyb21TdHJpbmcoc3ZnU3RyaW5nKTtcclxuXHJcbiAgICBsZXQgZWRpdFN2ZyA9IGZhYnJpYy51dGlsLmdyb3VwU1ZHRWxlbWVudHMoXHJcbiAgICAgIGxvYWRlZFNWRy5vYmplY3RzLFxyXG4gICAgICBsb2FkZWRTVkcub3B0aW9ucyxcclxuICAgICk7XHJcblxyXG4gICAgZWRpdFN2Zy5zZXQoe1xyXG4gICAgICBzY2FsZVg6IDEsXHJcbiAgICAgIHNjYWxlWTogMSxcclxuICAgICAgbGVmdDogeCArIHdpZHRoIC0gMzAsXHJcbiAgICAgIHRvcDogeSArIDE0LFxyXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsIC8vIGFsbG93IGV2ZW50c1xyXG4gICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBlZGl0U3ZnLm9uKFwibW91c2Vkb3duXCIsIChvcHQpID0+IHtcclxuICAgICAgaWYgKG9wdCAmJiBvcHQuZSAmJiBvcHQuZS5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgICBvcHQuZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHtcclxuICAgICAgICBmaXh0dXJlVHlwZTogZml4dHVyZURhdGEuZml4dHVyZVR5cGUsXHJcbiAgICAgICAgd2FsbEluZGV4OiBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcixcclxuICAgICAgICBmaXh0dXJlSW5kZXg6IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVEYXRhLl9pZCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50TnVtYmVyID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS53YWxsSW5kZXgsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHdhbGwuZml4dHVyZXMuZmluZChcclxuICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBmaXh0dXJlO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5maW5kKFxyXG4gICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IGZpeHR1cmU7XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRoaXM/LnNlbGVjdGVkRml4dHVyZURhdGE/LnRhc2tUeXBlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YTtcclxuICAgICAgdGhpcy5lZGl0Rml4dHVyZSA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgYW5nbGUgPSBmaXh0dXJlRGF0YT8ucmVsYXRpdmVQb3NpdGlvbj8uYW5nbGU7XHJcblxyXG4gICAgaWYgKHRoaXMuZmxvb3JEYXRhLmNhZExheW91dCAmJiBmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgY29uc3Qgd2FsbERhdGEgPSB0aGlzLmdldFdhbGxCeU51bWJlcihcclxuICAgICAgICBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcixcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YT8uYW5nbGUgfHwgMDtcclxuICAgICAgYW5nbGUgPSBhbmdsZURlZztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFxyXG4gICAgICBbXHJcbiAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICB0b3BDb250YWluZXIsXHJcbiAgICAgICAgaW5uZXJUb3BCb3gsXHJcbiAgICAgICAgdG9wVGV4dCxcclxuICAgICAgICBpbm5lckJvdHRvbUJveCxcclxuICAgICAgICBib3R0b21UZXh0LFxyXG4gICAgICAgIG1pZENvbnRhaW5lcixcclxuICAgICAgICBmaXJzdEJveCxcclxuICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgLi4uc2hlbHZlcyxcclxuICAgICAgICBsYXN0Qm94LFxyXG4gICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgIGJvdHRvbUNvbnRhaW5lcixcclxuICAgICAgICBib3R0b21UZXh0Q29udGVudCxcclxuICAgICAgICBlZGl0U3ZnLFxyXG4gICAgICBdLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogeCxcclxuICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICBhbmdsZTogYW5nbGUsXHJcbiAgICAgIH0sXHJcbiAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgd2FsbEluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJbmRleDogbnVtYmVyO1xyXG4gICAgICBmaXh0dXJlSWQ6IHN0cmluZztcclxuICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICBpc3N1ZTogYm9vbGVhbjtcclxuICAgICAgaXNzdWVEYXRhOiBhbnk7XHJcbiAgICAgIHRhc2tUeXBlOiBzdHJpbmc7XHJcbiAgICAgIHZtQ29uZmlnOiBbXTtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFmaXh0dXJlRGF0YT8uaXNzdWUgJiZcclxuICAgICAgIWZpeHR1cmVEYXRhPy51bnNhdmVkQ2hhbmdlcyAmJlxyXG4gICAgICB0aGlzLmxheW91dEZvcm0uZW5hYmxlZFxyXG4gICAgKSB7XHJcbiAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZWRpdFN2Zy5zZXQoXCJ2aXNpYmxlXCIsIHRydWUpO1xyXG4gICAgICAgIGNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBlZGl0U3ZnLnNldChcInZpc2libGVcIiwgZmFsc2UpO1xyXG4gICAgICAgIGNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0Rml4dHVyZSh0YXJnZXQpO1xyXG4gICAgICB0aGlzLnNlbGVjdEZpeHR1cmVPbkNhbnZhc0NsaWNrKHRhcmdldCwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IGZpeHR1cmVEYXRhO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVUeXBlID0gZml4dHVyZURhdGEuZml4dHVyZVR5cGU7XHJcbiAgICBmaXh0dXJlR3JvdXAud2FsbEluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI7XHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJZCA9IGZpeHR1cmVEYXRhLl9pZDtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZSA9IGZpeHR1cmVEYXRhLmlzc3VlO1xyXG4gICAgZml4dHVyZUdyb3VwLmlzc3VlRGF0YSA9IGZpeHR1cmVEYXRhLmlzc3VlRGF0YTtcclxuICAgIGZpeHR1cmVHcm91cC50YXNrVHlwZSA9IGZpeHR1cmVEYXRhLnRhc2tUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLnZtQ29uZmlnID0gZml4dHVyZURhdGEudm1Db25maWc7XHJcbiAgICBmaXh0dXJlR3JvdXAub2JqVHlwZSA9IFwiZml4dHVyZVwiO1xyXG5cclxuICAgIC8vIHRoaXMuY2FudmFzLm9uKFwib2JqZWN0Om1vdmluZ1wiLCAoZSkgPT4ge1xyXG4gICAgLy8gICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBhbnk7XHJcbiAgICAvLyAgIGlmICghdGFyZ2V0IHx8IHRhcmdldC5vYmpUeXBlICE9PSBcImZpeHR1cmVcIikgcmV0dXJuO1xyXG5cclxuICAgIC8vICAgY29uc3QgYW5nbGVEZWcgPSB0YXJnZXQuYW5nbGUgfHwgMDtcclxuICAgIC8vICAgY29uc3QgYW5nbGUgPSAoYW5nbGVEZWcgKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgIC8vICAgaWYgKCF0YXJnZXQuX2xhc3RMZWZ0KSB7XHJcbiAgICAvLyAgICAgdGFyZ2V0Ll9sYXN0TGVmdCA9IHRhcmdldC5sZWZ0O1xyXG4gICAgLy8gICAgIHRhcmdldC5fbGFzdFRvcCA9IHRhcmdldC50b3A7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgY29uc3QgZHggPSB0YXJnZXQubGVmdCAtIHRhcmdldC5fbGFzdExlZnQ7XHJcbiAgICAvLyAgIGNvbnN0IGR5ID0gdGFyZ2V0LnRvcCAtIHRhcmdldC5fbGFzdFRvcDtcclxuICAgIC8vICAgY29uc3QgcHJvamVjdGVkID0gZHggKiBNYXRoLmNvcyhhbmdsZSkgKyBkeSAqIE1hdGguc2luKGFuZ2xlKTtcclxuICAgIC8vICAgdGFyZ2V0LmxlZnQgPSB0YXJnZXQuX2xhc3RMZWZ0ICsgcHJvamVjdGVkICogTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgLy8gICB0YXJnZXQudG9wID0gdGFyZ2V0Ll9sYXN0VG9wICsgcHJvamVjdGVkICogTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgLy8gICB0YXJnZXQuX2xhc3RMZWZ0ID0gdGFyZ2V0LmxlZnQ7XHJcbiAgICAvLyAgIHRhcmdldC5fbGFzdFRvcCA9IHRhcmdldC50b3A7XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICBjYW52YXMuYWRkKGZpeHR1cmVHcm91cCk7XHJcblxyXG4gICAgLy8gSWYgbmV3bHkgYWRkZWQsIGZvY3VzIGl0IG9uY2VcclxuICAgIGlmICgoZml4dHVyZURhdGEgYXMgYW55KT8ubmV3QWRkZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZml4dHVyZUdyb3VwKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuICAgICAgZGVsZXRlIChmaXh0dXJlRGF0YSBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaXh0dXJlR3JvdXA7XHJcbiAgfVxyXG5cclxuICBkcmF3RW50cmFuY2UoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBhcnJvd1dpZHRoOiBudW1iZXIsXHJcbiAgICBlbGVtZW50RGF0YTogYW55LFxyXG4gICkge1xyXG4gICAgY29uc3QgYm9keVdpZHRoID0gd2lkdGggLSBhcnJvd1dpZHRoO1xyXG4gICAgY29uc3QgYW5nbGUgPSBlbGVtZW50RGF0YS5hbmdsZTtcclxuXHJcbiAgICBjb25zdCBwYXRoRGF0YSA9IFtcclxuICAgICAgYE0gMCAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9IDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHstaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke3dpZHRofSAke2hlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0ICsgaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHR9YCxcclxuICAgICAgYEwgMCAke2hlaWdodH1gLFxyXG4gICAgICBgWmAsXHJcbiAgICBdLmpvaW4oXCIgXCIpO1xyXG5cclxuICAgIGNvbnN0IGFycm93ID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIGZpbGw6IFwiIzAzQTlGNFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gaGVpZ2h0IC0gNjtcclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHQoXCJFbnRyYW5jZVwiLCB7XHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiQXJpYWxcIixcclxuICAgICAgZm9udFdlaWdodDogXCJib2xkXCIsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgbGVmdDogMTUsXHJcbiAgICAgIHRvcDogaGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDIwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGlmICh0ZXh0Qm91bmRzLmhlaWdodCA+IG1heFRleHRIZWlnaHQpIHtcclxuICAgICAgY29uc3Qgc2NhbGUgPSBtYXhUZXh0SGVpZ2h0IC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvdywgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nRmxpcDogdHJ1ZSxcclxuICAgICAgYW5nbGU6IGFuZ2xlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnREYXRhO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRyYXdFbnRyYW5jZURpc3NlY3Rpb25MaW5lKGNhbnZhcywgZ3JvdXAsIHdpZHRoLCBoZWlnaHQsIGFuZ2xlKTtcclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBhOiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBlbGVtZW50OiBhbnksXHJcbiAgKTogZmFicmljLkdyb3VwIHtcclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogMixcclxuICAgICAgcnk6IDIsXHJcbiAgICAgIGZpbGw6IFwiI0RBRjFGRlwiLFxyXG4gICAgICBzdHJva2U6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHRib3goZWxlbWVudC5maXh0dXJlTmFtZSwge1xyXG4gICAgICB3aWR0aDogd2lkdGggLSA4LFxyXG4gICAgICBmb250U2l6ZTogMTQsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICBzcGxpdEJ5R3JhcGhlbWU6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBoZWlnaHQgLSA4KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gKGhlaWdodCAtIDgpIC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFtyZWN0LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGFuZ2xlOiBhLFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBcIm90aGVyc1wiO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnQ7XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcblxyXG4gICAgaWYgKChlbGVtZW50IGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGdyb3VwKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuICAgICAgZGVsZXRlIChlbGVtZW50IGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0JnKCkge1xyXG4gICAgY29uc3Qgd2FsbDEgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlOiBhbnkpID0+IGUuZWxlbWVudE51bWJlciA9PT0gMSAmJiBlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIixcclxuICAgICk7XHJcbiAgICBjb25zdCB3YWxsMiA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGU6IGFueSkgPT4gZS5lbGVtZW50TnVtYmVyID09PSAyICYmIGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyh3YWxsMS5kaXN0YW5jZSwgd2FsbDEudW5pdCk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKHdhbGwyLmRpc3RhbmNlLCB3YWxsMi51bml0KTtcclxuXHJcbiAgICBjb25zdCBiZyA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgdG9wOiB0aGlzLndhbGxUaGlja25lc3MsXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIGZpbGw6IFwiI2VhZWNmMFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYmcpO1xyXG4gICAgdGhpcy5jYW52YXMucmVtb3ZlKGJnKTtcclxuICAgIHRoaXMuY2FudmFzLmluc2VydEF0KDAsIGJnKTtcclxuICAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9GaXh0dXJlQ29uZmlnSWRDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnMgPSBbXTtcclxuXHJcbiAgICB0aGlzLmdldEZvcm1XYWxscy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdhbGxHcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBmaXh0dXJlc0FycmF5ID0gd2FsbEdyb3VwLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheTtcclxuXHJcbiAgICAgIGZpeHR1cmVzQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoZml4dHVyZUNvbnRyb2wsIGopID0+IHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBmaXh0dXJlQ29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3Qgc3ViID0gZml4dHVyZUdyb3VwXHJcbiAgICAgICAgICAuZ2V0KFwiZml4dHVyZUNvbmZpZ0lkXCIpXHJcbiAgICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRml4dHVyZVRlbXBsYXRlKG5ld1ZhbHVlLCBcIndhbGxcIiwgaiwgaSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHN1YikgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucy5wdXNoKHN1Yik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5jb250cm9scy5mb3JFYWNoKChmaXh0dXJlQ29udHJvbCwgaykgPT4ge1xyXG4gICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBmaXh0dXJlQ29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IHN1YiA9IGZpeHR1cmVHcm91cFxyXG4gICAgICAgIC5nZXQoXCJmaXh0dXJlQ29uZmlnSWRcIilcclxuICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VGaXh0dXJlVGVtcGxhdGUobmV3VmFsdWUsIFwiZmxvb3JcIiwgayk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoc3ViKSB0aGlzLmZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zLnB1c2goc3ViKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9PdGhlckVsZW1lbnRzQ2hhbmdlcygpIHtcclxuICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWI/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5vdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9ucyA9IFtdO1xyXG5cclxuICAgIC8vIFdhbGwtbGV2ZWwgb3RoZXJFbGVtZW50cyBsYWJlbCBzdWJzY3JpcHRpb25zXHJcbiAgICB0aGlzLmdldEZvcm1XYWxscy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdhbGxHcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBvdGhlckFycmF5ID0gd2FsbEdyb3VwLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5O1xyXG5cclxuICAgICAgb3RoZXJBcnJheS5jb250cm9scy5mb3JFYWNoKChjdHJsLCBvdGhlcklkeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRHcm91cCA9IGN0cmwgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgIGNvbnN0IHR5cGVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcInR5cGVcIikgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tTmFtZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwiY3VzdG9tTmFtZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuXHJcbiAgICAgICAgY29uc3Qgd2FsbE1ldGEgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAoZWw6IGFueSkgPT5cclxuICAgICAgICAgICAgZWwuZWxlbWVudFR5cGUgPT09IHdhbGxHcm91cC5nZXQoXCJlbGVtZW50VHlwZVwiKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgZWwuZWxlbWVudE51bWJlciA9PT0gd2FsbEdyb3VwLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudFJlZiA9IHdhbGxNZXRhPy5vdGhlckVsZW1lbnRzPy5bb3RoZXJJZHhdO1xyXG4gICAgICAgIGlmICghZWxlbWVudFJlZikgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyB3aGVuIHR5cGUgY2hhbmdlcyAoZHJvcGRvd24pXHJcbiAgICAgICAgY29uc3Qgc3ViVHlwZSA9IHR5cGVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAvLyBpZiB1c2VyIHBpY2tzIFwiT3RoZXJzXCIsIHByZWZlciBjdXN0b21OYW1lIGlmIHByZXNlbnQsIG90aGVyd2lzZSBzZXQgZml4dHVyZU5hbWUgdG8gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID1cclxuICAgICAgICAgICAgICBzZWxlY3RlZCA9PT0gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgICAgPyBjdXN0b21OYW1lQ29udHJvbD8udmFsdWUgfHwgXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgICAgOiBzZWxlY3RlZDtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB3aGVuIGN1c3RvbU5hbWUgY2hhbmdlcyAodGV4dCBpbnB1dCB2aXNpYmxlIG9ubHkgd2hlbiB0eXBlID09PSAnT3RoZXJzJylcclxuICAgICAgICBjb25zdCBzdWJDdXN0b20gPSBjdXN0b21OYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGN1c3RvbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlQ29udHJvbC52YWx1ZSA9PT0gXCJPdGhlcnNcIikge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPSBjdXN0b207XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMucHVzaChzdWJUeXBlLCBzdWJDdXN0b20pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEZsb29yLWxldmVsIG90aGVyRWxlbWVudHMgbGFiZWwgc3Vic2NyaXB0aW9uc1xyXG4gICAgdGhpcy5nZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLmNvbnRyb2xzLmZvckVhY2goKGN0cmwsIGlkeCkgPT4ge1xyXG4gICAgICBjb25zdCBlbGVtZW50R3JvdXAgPSBjdHJsIGFzIEZvcm1Hcm91cDtcclxuICAgICAgY29uc3QgdHlwZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwidHlwZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgY29uc3QgY3VzdG9tTmFtZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwiY3VzdG9tTmFtZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgY29uc3QgZWxlbWVudFJlZiA9IHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5baWR4XTtcclxuICAgICAgaWYgKCFlbGVtZW50UmVmKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBzdWJUeXBlID0gdHlwZUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPVxyXG4gICAgICAgICAgICBzZWxlY3RlZCA9PT0gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgID8gY3VzdG9tTmFtZUNvbnRyb2w/LnZhbHVlIHx8IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICA6IHNlbGVjdGVkO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHN1YkN1c3RvbSA9IGN1c3RvbU5hbWVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChjdXN0b206IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVDb250cm9sLnZhbHVlID09PSBcIk90aGVyc1wiKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPSBjdXN0b207XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zLnB1c2goc3ViVHlwZSwgc3ViQ3VzdG9tKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZjogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbmQoXHJcbiAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgb2JqPy5vYmpUeXBlID09PSBcIm90aGVyc1wiICYmIG9iaj8uZGF0YS5faWQgPT09IGVsZW1lbnRSZWYuX2lkLFxyXG4gICAgICApIGFzIGFueTtcclxuXHJcbiAgICBpZiAoIWdyb3VwKSByZXR1cm47XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudFJlZjtcclxuXHJcbiAgICBjb25zdCB0ZXh0T2JqID0gKGdyb3VwLmdldE9iamVjdHMoKSB8fCBbXSkuZmluZChcclxuICAgICAgKG86IGFueSkgPT4gbz8udHlwZSA9PT0gXCJ0ZXh0XCIgfHwgbz8udHlwZSA9PT0gXCJ0ZXh0Ym94XCIsXHJcbiAgICApIGFzIGZhYnJpYy5UZXh0IHwgZmFicmljLlRleHRib3ggfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRleHRPYmopIHtcclxuICAgICAgKHRleHRPYmogYXMgYW55KS5zZXQoeyB0ZXh0OiBlbGVtZW50UmVmLmZpeHR1cmVOYW1lIH0pO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByb3RhdGVDYW52YXMoY2FudmFzOiBmYWJyaWMuQ2FudmFzLCBhbmdsZURlZzogbnVtYmVyKSB7XHJcbiAgICBpZiAoIWNhbnZhcykgcmV0dXJuO1xyXG4gICAgY29uc3QgYWxsT2JqZWN0cyA9IGNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBpZiAoIWFsbE9iamVjdHMgfHwgYWxsT2JqZWN0cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAvLyBDcmVhdGUgYW4gQWN0aXZlU2VsZWN0aW9uIGNvbnRhaW5pbmcgYWxsIG9iamVjdHMgb24gdGhlIGNhbnZhc1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV3IGZhYnJpYy5BY3RpdmVTZWxlY3Rpb24oYWxsT2JqZWN0cyBhcyBhbnksIHsgY2FudmFzIH0pO1xyXG4gICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChzZWxlY3Rpb24pO1xyXG5cclxuICAgIC8vIFJvdGF0ZSB0aGUgQWN0aXZlU2VsZWN0aW9uIGRpcmVjdGx5ICh3b3JrcyBsaWtlIGEgdGVtcG9yYXJ5IGdyb3VwKVxyXG4gICAgY29uc3QgYWN0aXZlOiBhbnkgPSBjYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCk7XHJcbiAgICBpZiAoIWFjdGl2ZSkge1xyXG4gICAgICBjYW52YXMuZGlzY2FyZEFjdGl2ZU9iamVjdCgpO1xyXG4gICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudEFuZ2xlID0gYWN0aXZlLmFuZ2xlIHx8IDA7XHJcbiAgICBhY3RpdmUucm90YXRlKGN1cnJlbnRBbmdsZSArIGFuZ2xlRGVnKTtcclxuICAgIGFjdGl2ZS5zZXRDb29yZHMoKTtcclxuXHJcbiAgICAvLyBDbGVhciBzZWxlY3Rpb24gYnV0IGtlZXAgcm90YXRlZCBwb3NpdGlvbnMgb2YgY2hpbGQgb2JqZWN0c1xyXG4gICAgY2FudmFzLmRpc2NhcmRBY3RpdmVPYmplY3QoKTtcclxuICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGaXh0dXJlT25DYW52YXNDbGljayh0YXJnZXQ6IGFueSwgY29sbGFwc2VUYXNrSW5mbzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgIGZpeHR1cmVUeXBlOiB0YXJnZXQuZml4dHVyZVR5cGUsXHJcbiAgICAgICAgd2FsbEluZGV4OiB0YXJnZXQud2FsbEluZGV4LFxyXG4gICAgICAgIGZpeHR1cmVJbmRleDogdGFyZ2V0LmZpeHR1cmVJbmRleCxcclxuICAgICAgICBmaXh0dXJlSWQ6IHRhcmdldC5maXh0dXJlSWQsXHJcbiAgICAgICAgaXNzdWU6IHRhcmdldC5pc3N1ZSxcclxuICAgICAgICBpc3N1ZURhdGE6IHRhcmdldC5pc3N1ZURhdGEsXHJcbiAgICAgICAgdm1Db25maWc6IHRhcmdldC52bUNvbmZpZyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEZpeHR1cmVUZW1wbGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0QWxsVGVtcGxhdGVzKHBheWxvYWQpLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkYXRhID0gcmVzPy5kYXRhO1xyXG5cclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZXMgPSBkYXRhLm1hcCgodDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBfaWQ6IHQuX2lkLFxyXG4gICAgICAgICAgICBuYW1lOiB0LmZpeHR1cmVOYW1lLmluY2x1ZGVzKFwiLWZ0XCIpXHJcbiAgICAgICAgICAgICAgPyB0LmZpeHR1cmVOYW1lXHJcbiAgICAgICAgICAgICAgOiBgJHt0LmZpeHR1cmVOYW1lfSAtICR7dC5maXh0dXJlV2lkdGgudmFsdWV9ICR7dC5maXh0dXJlV2lkdGgudW5pdH1gLFxyXG4gICAgICAgICAgICBzdWJ0ZXh0OiBgJHt0LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIsIFwiKX1gLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIGZpeHR1cmUgdGVtcGxhdGVzOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5sYXlvdXRGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHdhbGxzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgZmxvb3JGaXh0dXJlczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIGZsb29yT3RoZXJFbGVtZW50czogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRGb3JtV2FsbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRGb3JtRmxvb3JGaXh0dXJlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JPdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRFbnRyYW5jZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZpbHRlcihcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIixcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRXYWxsT3RoZXJFbGVtZW50cyh3YWxsSW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuICh0aGlzLmxheW91dEZvcm0uZ2V0KFwid2FsbHNcIikgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQod2FsbEluZGV4KVxyXG4gICAgICAuZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtRml4dHVyZXMod2FsbEluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAodGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHdhbGxJbmRleClcclxuICAgICAgLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIHBhdGNoV2FsbEVsZW1lbnRzKHsgZWxlbWVudFR5cGUsIGVsZW1lbnROdW1iZXIgfTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBlbGVtZW50VHlwZTogW2VsZW1lbnRUeXBlID8gZWxlbWVudFR5cGUgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBlbGVtZW50TnVtYmVyOiBbZWxlbWVudE51bWJlciA/IGVsZW1lbnROdW1iZXIgOiAwLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBmaXh0dXJlczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIG90aGVyRWxlbWVudHM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIHBhdGNoRml4dHVyZSh7IGZpeHR1cmVOYW1lLCBmaXh0dXJlQ29uZmlnSWQsIF9pZCB9OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGZpeHR1cmVOYW1lOiBbZml4dHVyZU5hbWUgPyBmaXh0dXJlTmFtZSA6IFwiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGZpeHR1cmVDb25maWdJZDogW1xyXG4gICAgICAgIGZpeHR1cmVDb25maWdJZCA/IGZpeHR1cmVDb25maWdJZCA6IFwiXCIsXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBdLFxyXG4gICAgICBfaWQ6IFtfaWQgPyBfaWQgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIGFkZFdhbGxTcGFjZSh3YWxsSW5kZXg6IG51bWJlciwgb3BlcmF0aW9uOiBcImluY3JlbWVudFwiIHwgXCJkZWNyZW1lbnRcIikge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgY2xpY2tlZFdhbGxOdW1iZXIgPSB3YWxsSW5kZXggKyAxO1xyXG4gICAgY29uc3QgbW1Ub0ZlZXQgPSAzMDU7XHJcbiAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gMTUyNCAvIG1tVG9GZWV0OyAvLyB+NSBmdCAoaG9yaXpvbnRhbCBpbmNyZW1lbnQpXHJcbiAgICBjb25zdCBmaXh0dXJlV2lkdGggPSAxMjIwIC8gbW1Ub0ZlZXQ7IC8vIH40IGZ0ICh2ZXJ0aWNhbCBpbmNyZW1lbnQpXHJcblxyXG4gICAgY29uc3QgbGF5b3V0ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbjtcclxuXHJcbiAgICBjb25zdCBnZXRXYWxsID0gKG51bTogbnVtYmVyKSA9PlxyXG4gICAgICBsYXlvdXQuZmluZChcclxuICAgICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IG51bSxcclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBhbW91bnQgPSBvcGVyYXRpb24gPT09IFwiaW5jcmVtZW50XCIgPyAxIDogLTE7XHJcblxyXG4gICAgY29uc3QgdzEgPSBnZXRXYWxsKDEpO1xyXG4gICAgY29uc3QgdzIgPSBnZXRXYWxsKDIpO1xyXG4gICAgY29uc3QgdzMgPSBnZXRXYWxsKDMpO1xyXG4gICAgY29uc3QgdzQgPSBnZXRXYWxsKDQpO1xyXG4gICAgY29uc3QgdzUgPSBnZXRXYWxsKDUpO1xyXG4gICAgY29uc3QgZW50cmFuY2UgPSBsYXlvdXQuZmluZCgoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIik7XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gSG9yaXpvbnRhbCBncm93dGggIChXYWxsLTEgLyBXYWxsLTMpXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDEgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDMpIHtcclxuICAgICAgaWYgKHcxKSB3MS5kaXN0YW5jZSArPSBhbW91bnQgKiBmaXh0dXJlV2lkdGg7XHJcbiAgICAgIGlmICh3MykgdzMuZGlzdGFuY2UgKz0gYW1vdW50ICogZml4dHVyZVdpZHRoO1xyXG5cclxuICAgICAgaWYgKHcyKSB7XHJcbiAgICAgICAgdzIuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZngucmVsYXRpdmVQb3NpdGlvbi54ID1cclxuICAgICAgICAgICAgKGZ4LnJlbGF0aXZlUG9zaXRpb24ueCB8fCAwKSArIGFtb3VudCAqIGZpeHR1cmVXaWR0aDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIFZlcnRpY2FsIGdyb3d0aCAgKFdhbGwtMiAvIFdhbGwtNCAvIFdhbGwtNSlcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlmIChcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIgfHxcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDQgfHxcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDVcclxuICAgICkge1xyXG4gICAgICBpZiAodzIpIHcyLmRpc3RhbmNlICs9IGFtb3VudCAqIGZpeHR1cmVIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAodzMpIHtcclxuICAgICAgICB3My5maXh0dXJlcy5mb3JFYWNoKChmeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAoZngucmVsYXRpdmVQb3NpdGlvbi55IHx8IDApICsgYW1vdW50ICogZml4dHVyZUhlaWdodDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZW50cmFuY2VZID0gZW50cmFuY2U/LmRpc3RhbmNlIHx8IDA7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nVzQgPSB3ND8uZGlzdGFuY2UgfHwgMDtcclxuICAgICAgY29uc3QgZXhpc3RpbmdXNSA9IHc1Py5kaXN0YW5jZSB8fCAwO1xyXG5cclxuICAgICAgLy8gR3JvdyB3YWxsLTQgaWYgd2UgY2xpY2tlZCB3YWxsLTQgT1Igd2FsbC0yXHJcbiAgICAgIGlmICgoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDQgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIpICYmIHc0KSB7XHJcbiAgICAgICAgdzQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28oZXhpc3RpbmdXNCArIGFtb3VudCAqIGZpeHR1cmVIZWlnaHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBHcm93IHdhbGwtNSBpZiB3ZSBjbGlja2VkIHdhbGwtNSBPUiB3YWxsLTJcclxuICAgICAgaWYgKChjbGlja2VkV2FsbE51bWJlciA9PT0gNSB8fCBjbGlja2VkV2FsbE51bWJlciA9PT0gMikgJiYgdzUpIHtcclxuICAgICAgICB3NS5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhleGlzdGluZ1c1ICsgYW1vdW50ICogZml4dHVyZUhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmICh3NCkge1xyXG4gICAgICAgICAgdzQuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAgIChmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgfHwgMCkgKyBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcmV2ZW50IG92ZXJmbG93OiBzaHJpbmsgYmFjayBpZiB0b3RhbCA+IHcyIHNpemVcclxuICAgICAgY29uc3QgdG90YWxVc2VkID0gZW50cmFuY2VZICsgKHc0Py5kaXN0YW5jZSB8fCAwKSArICh3NT8uZGlzdGFuY2UgfHwgMCk7XHJcbiAgICAgIGlmICh0b3RhbFVzZWQgPiB3MiEuZGlzdGFuY2UpIHtcclxuICAgICAgICBpZiAodzUpIHtcclxuICAgICAgICAgIHc1LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKFxyXG4gICAgICAgICAgICB3NS5kaXN0YW5jZSAtICh0b3RhbFVzZWQgLSB3MiEuZGlzdGFuY2UpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUZpeHR1cmUoXHJcbiAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsXHJcbiAgICBmaXh0dXJlSW5kZXg6IG51bWJlcixcclxuICAgIHdhbGxJbmRleD86IG51bWJlcixcclxuICApIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEpLnJlbW92ZUF0KGZpeHR1cmVJbmRleCk7XHJcblxyXG4gICAgICBjb25zdCB3YWxsID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG4gICAgICBpZiAod2FsbCAmJiBBcnJheS5pc0FycmF5KHdhbGwuZml4dHVyZXMpKSB7XHJcbiAgICAgICAgd2FsbC5maXh0dXJlcy5zcGxpY2UoZml4dHVyZUluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMucmVtb3ZlQXQoZml4dHVyZUluZGV4KTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUpKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5zcGxpY2UoZml4dHVyZUluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVPdGhlckVsZW1lbnQoXHJcbiAgICBlbGVtZW50VHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsXHJcbiAgICBlbGVtZW50SW5kZXg6IG51bWJlcixcclxuICAgIHdhbGxJbmRleD86IG51bWJlcixcclxuICApIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0V2FsbE90aGVyRWxlbWVudHMod2FsbEluZGV4ISkucmVtb3ZlQXQoZWxlbWVudEluZGV4KTtcclxuXHJcbiAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk7XHJcbiAgICAgIGlmICh3YWxsICYmIEFycmF5LmlzQXJyYXkod2FsbC5vdGhlckVsZW1lbnRzKSkge1xyXG4gICAgICAgIHdhbGwub3RoZXJFbGVtZW50cy5zcGxpY2UoZWxlbWVudEluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChlbGVtZW50VHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5yZW1vdmVBdChlbGVtZW50SW5kZXgpO1xyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzLnNwbGljZShlbGVtZW50SW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGaXh0dXJlVGVtcGxhdGUoXHJcbiAgICBjb25maWdJZDogc3RyaW5nLFxyXG4gICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLFxyXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXHJcbiAgICB3YWxsSW5kZXg/OiBudW1iZXIsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldEZpeHR1cmVUZW1wbGF0ZShjb25maWdJZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEpLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgZml4dHVyZUluZGV4LFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGVtcGxhdGVEYXRhLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgd2FsbFJlZiA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKSE7XHJcbiAgICAgICAgICAgIHdhbGxSZWYuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAuLi53YWxsUmVmLmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgLi4uZml4dHVyZURhdGEsXHJcbiAgICAgICAgICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICh0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgZml4dHVyZUluZGV4LFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGVtcGxhdGVEYXRhLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVtmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAuLi5maXh0dXJlRGF0YSxcclxuICAgICAgICAgICAgICB1bnNhdmVkQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHRlbXBsYXRlc1wiKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBkZXN0aW5hdGlvbldhbGxJbmRleDogbnVtYmVyIHwgXCJmbG9vclwiLFxyXG4gICAgZGVzdGluYXRpb25GaXh0dXJlSW5kZXg/OiBudW1iZXIsXHJcbiAgKSB7XHJcbiAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcclxuXHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCBpc1NvdXJjZUZsb29yID0gZGF0YS53YWxsSW5kZXggPT09IFwiZmxvb3JcIjtcclxuICAgIGNvbnN0IGlzRGVzdGluYXRpb25GbG9vciA9IGRlc3RpbmF0aW9uV2FsbEluZGV4ID09PSBcImZsb29yXCI7XHJcblxyXG4gICAgY29uc3Qgc291cmNlRm9ybUFycmF5OiBGb3JtQXJyYXkgPSBpc1NvdXJjZUZsb29yXHJcbiAgICAgID8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlc1xyXG4gICAgICA6IHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKGRhdGEud2FsbEluZGV4KTtcclxuXHJcbiAgICBjb25zdCBkZXN0aW5hdGlvbkZvcm1BcnJheTogRm9ybUFycmF5ID0gaXNEZXN0aW5hdGlvbkZsb29yXHJcbiAgICAgID8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlc1xyXG4gICAgICA6IHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKGRlc3RpbmF0aW9uV2FsbEluZGV4IGFzIG51bWJlcik7XHJcblxyXG4gICAgY29uc3Qgc291cmNlV2FsbE1ldGEgPSBpc1NvdXJjZUZsb29yXHJcbiAgICAgID8gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVxyXG4gICAgICA6ICh0aGlzLmdldFdhbGxCeU51bWJlcihcclxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KGRhdGEud2FsbEluZGV4KS5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZSxcclxuICAgICAgICApPy5maXh0dXJlcyA/PyBbXSk7XHJcblxyXG4gICAgY29uc3QgZGVzdGluYXRpb25XYWxsTWV0YSA9IGlzRGVzdGluYXRpb25GbG9vclxyXG4gICAgICA/IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVcclxuICAgICAgOiAodGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1XYWxsc1xyXG4gICAgICAgICAgICAuYXQoZGVzdGluYXRpb25XYWxsSW5kZXggYXMgbnVtYmVyKVxyXG4gICAgICAgICAgICAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWUsXHJcbiAgICAgICAgKT8uZml4dHVyZXMgPz8gW10pO1xyXG5cclxuICAgIGNvbnN0IHNGaXh0dXJlSW5kZXggPSBzb3VyY2VXYWxsTWV0YS5maW5kSW5kZXgoXHJcbiAgICAgIChmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgZml4dHVyZS5faWQgPT09XHJcbiAgICAgICAgc291cmNlRm9ybUFycmF5LmF0KGRhdGEuZml4dHVyZUluZGV4KT8uZ2V0KFwiX2lkXCIpPy52YWx1ZSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZEZpeHR1cmVJbmRleCA9XHJcbiAgICAgIGRlc3RpbmF0aW9uRml4dHVyZUluZGV4ICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IGRlc3RpbmF0aW9uV2FsbE1ldGEuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgIGZpeHR1cmUuX2lkID09PVxyXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uRm9ybUFycmF5LmF0KGRlc3RpbmF0aW9uRml4dHVyZUluZGV4KT8uZ2V0KFwiX2lkXCIpXHJcbiAgICAgICAgICAgICAgICA/LnZhbHVlLFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIDogZGVzdGluYXRpb25Gb3JtQXJyYXkubGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHNQb3NpdGlvbiA9IHtcclxuICAgICAgZml4dHVyZU51bWJlcjogc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgIH07XHJcbiAgICBjb25zdCBkUG9zaXRpb24gPSB7XHJcbiAgICAgIGZpeHR1cmVOdW1iZXI6IGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoc291cmNlV2FsbE1ldGEgPT09IGRlc3RpbmF0aW9uV2FsbE1ldGEpIHtcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyID1cclxuICAgICAgICBzUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIHNQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIgPSBkUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAgICAgICBkUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlciA9IGRQb3NpdGlvbi5maXh0dXJlTnVtYmVyO1xyXG4gICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIGRQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAgICAgc291cmNlRm9ybUFycmF5LmNvbnRyb2xzLFxyXG4gICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5jb250cm9scyxcclxuICAgICAgZGF0YS5maXh0dXJlSW5kZXgsXHJcbiAgICAgIGRGaXh0dXJlSW5kZXgsXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudHJhbnNmZXJBcnJheUl0ZW0oXHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhLFxyXG4gICAgICBkZXN0aW5hdGlvbldhbGxNZXRhLFxyXG4gICAgICBzRml4dHVyZUluZGV4LFxyXG4gICAgICBkRml4dHVyZUluZGV4LFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkQ2FudmFzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG9yaWdpbmFsVmlld3BvcnQgPSBbXHJcbiAgICAgIC4uLnRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtISxcclxuICAgIF0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5zZXRWaWV3cG9ydFRyYW5zZm9ybShbMSwgMCwgMCwgMSwgMCwgMF0pO1xyXG5cclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG5cclxuICAgIGNvbnN0IGRhdGFVUkwgPSB0aGlzLmNhbnZhcy50b0RhdGFVUkwoe1xyXG4gICAgICBmb3JtYXQ6IFwicG5nXCIsXHJcbiAgICAgIGxlZnQ6IGJvdW5kcy5sZWZ0LFxyXG4gICAgICB0b3A6IGJvdW5kcy50b3AsXHJcbiAgICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm91bmRzLmhlaWdodCxcclxuICAgICAgbXVsdGlwbGllcjogMixcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFZpZXdwb3J0VHJhbnNmb3JtKG9yaWdpbmFsVmlld3BvcnQpO1xyXG5cclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIGxpbmsuaHJlZiA9IGRhdGFVUkw7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7dGhpcy5wbGFub0RhdGEuc3RvcmVOYW1lfV8ke3RoaXMuZmxvb3JEYXRhLmZsb29yTmFtZX0ucG5nYDtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRXhwb3J0TGF5b3V0QmFja2dyb3VuZCgpIHtcclxuICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuYnVpbGRMYXlvdXRQb2x5Z29uRnJvbVdhbGxzKCk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUG9seWdvbihwb2ludHMsIHtcclxuICAgICAgZmlsbDogXCIjZWFlY2YwXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgb2JqZWN0Q2FjaGluZzogZmFsc2UsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRMYXlvdXRQb2x5Z29uRnJvbVdhbGxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25cclxuICAgICAgLmZpbHRlcigodzogYW55KSA9PiB3LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIilcclxuICAgICAgLm1hcCgodzogYW55KSA9PiAoe1xyXG4gICAgICAgIHg6IHRoaXMudG9QaXhlbHMody5yZWxhdGl2ZVBvc2l0aW9uLngsIFwiZnRcIiksXHJcbiAgICAgICAgeTogdGhpcy50b1BpeGVscyh3LnJlbGF0aXZlUG9zaXRpb24ueSwgXCJmdFwiKSxcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcm90YXRlV2FsbChlbGVOdW1iZXI6IG51bWJlcikge1xyXG4gICAgY29uc3Qgd2FsbCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbC5lbGVtZW50TnVtYmVyID09PSBlbGVOdW1iZXIsXHJcbiAgICApO1xyXG4gICAgaWYgKHdhbGwuYW5nbGUgKyA5MCA8IDM2MCkge1xyXG4gICAgICB3YWxsLmFuZ2xlICs9IDkwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd2FsbC5hbmdsZSA9IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3V2FsbChlbGVOdW1iZXI6IG51bWJlcikge1xyXG4gICAgY29uc3QgZ2V0V2FsbEVuZFBvaW50ID0gKHdhbGw6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBhbmdsZVJhZCA9ICh3YWxsLmFuZ2xlICogTWF0aC5QSSkgLyAxODA7XHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHdhbGwuZGlzdGFuY2U7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHg6IHdhbGwucmVsYXRpdmVQb3NpdGlvbi54ICsgbGVuZ3RoICogTWF0aC5jb3MoYW5nbGVSYWQpLFxyXG4gICAgICAgIHk6IHdhbGwucmVsYXRpdmVQb3NpdGlvbi55ICsgbGVuZ3RoICogTWF0aC5zaW4oYW5nbGVSYWQpLFxyXG4gICAgICAgIHVuaXQ6IHdhbGwucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZEluZGV4KFxyXG4gICAgICAodzogYW55KSA9PiB3LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3LmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlcixcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGluZGV4ID09PSAtMSAmJiBlbGVOdW1iZXIgIT09IDApIHJldHVybjtcclxuXHJcbiAgICBsZXQgc3RhcnRQb3NpdGlvbjtcclxuXHJcbiAgICBpZiAoZWxlTnVtYmVyID09PSAwKSB7XHJcbiAgICAgIHN0YXJ0UG9zaXRpb24gPSB7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHByZXZXYWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpbmRleF07XHJcbiAgICAgIHN0YXJ0UG9zaXRpb24gPSBnZXRXYWxsRW5kUG9pbnQocHJldldhbGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJhc2VXYWxsID1cclxuICAgICAgZWxlTnVtYmVyID09PSAwXHJcbiAgICAgICAgPyB7IGFuZ2xlOiAwLCBkaXJlY3Rpb246IFwicmlnaHRcIiwgdW5pdDogXCJmdFwiIH1cclxuICAgICAgICA6IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25baW5kZXhdO1xyXG5cclxuICAgIGNvbnN0IG5ld1dhbGwgPSB7XHJcbiAgICAgIGVsZW1lbnRUeXBlOiBcIndhbGxcIixcclxuICAgICAgZGlzdGFuY2U6IDE1LFxyXG4gICAgICB1bml0OiBiYXNlV2FsbC51bml0LFxyXG4gICAgICBkaXJlY3Rpb246IGJhc2VXYWxsLmRpcmVjdGlvbixcclxuICAgICAgYW5nbGU6IGJhc2VXYWxsLmFuZ2xlLFxyXG4gICAgICBlbGVtZW50TnVtYmVyOiBlbGVOdW1iZXIgKyAxLFxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uOiBzdGFydFBvc2l0aW9uLFxyXG4gICAgICBmaXh0dXJlczogW10sXHJcbiAgICAgIG90aGVyRWxlbWVudHM6IFtdLFxyXG4gICAgICBuZXdBZGRlZDogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5zcGxpY2UoXHJcbiAgICAgIGVsZU51bWJlciA9PT0gMCA/IDAgOiBpbmRleCArIDEsXHJcbiAgICAgIDAsXHJcbiAgICAgIG5ld1dhbGwsXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudXBkYXRlV2FsbEVsZW1lbnROdW1iZXIoKTtcclxuICAgIHRoaXMudXBkYXRlV2FsbENvb3JkaW5hdGVzKCk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3RW50cmFuY2UoKSB7XHJcbiAgICBjb25zdCBsYXlvdXRQb2x5Z29uID0gdGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24gPz8gW107XHJcbiAgICBjb25zdCBlbGVOdW1iZXIgPVxyXG4gICAgICBsYXlvdXRQb2x5Z29uLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiKVxyXG4gICAgICAgID8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgY29uc3QgZ2FwUHggPSAyNDtcclxuICAgIGNvbnN0IGRlZmF1bHRFbnRyYW5jZVdpZHRoUHggPSA4MDtcclxuXHJcbiAgICBsZXQgeEZ0ID0gMDtcclxuICAgIGxldCB5RnQgPSAwO1xyXG4gICAgbGV0IGFuZ2xlID0gMDtcclxuICAgIGxldCBpc1Bvc2l0aW9uUmVzb2x2ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvLyAxKSBJZiBlbnRyYW5jZShzKSBhbHJlYWR5IGV4aXN0LCBwbGFjZSBuZXh0IHRvIHRoZSBsYXRlc3Qgb25lLlxyXG4gICAgY29uc3QgZXhpc3RpbmdFbnRyYW5jZU9iamVjdHMgPSAodGhpcy5jYW52YXM/LmdldE9iamVjdHMoKSA/PyBbXSlcclxuICAgICAgLmZpbHRlcigob2JqOiBhbnkpID0+IG9iaj8ub2JqVHlwZSA9PT0gXCJlbnRyYW5jZVwiKVxyXG4gICAgICAuc29ydChcclxuICAgICAgICAoYTogYW55LCBiOiBhbnkpID0+XHJcbiAgICAgICAgICBOdW1iZXIoYT8uZGF0YT8uZWxlbWVudE51bWJlciB8fCAwKSAtXHJcbiAgICAgICAgICBOdW1iZXIoYj8uZGF0YT8uZWxlbWVudE51bWJlciB8fCAwKSxcclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBsYXRlc3RFbnRyYW5jZU9iaiA9IGV4aXN0aW5nRW50cmFuY2VPYmplY3RzLmF0KC0xKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKGxhdGVzdEVudHJhbmNlT2JqKSB7XHJcbiAgICAgIGNvbnN0IGxlZnRQeCA9IGxhdGVzdEVudHJhbmNlT2JqLmxlZnQgPz8gMDtcclxuICAgICAgY29uc3QgdG9wUHggPSBsYXRlc3RFbnRyYW5jZU9iai50b3AgPz8gMDtcclxuICAgICAgY29uc3Qgd2lkdGhQeCA9XHJcbiAgICAgICAgbGF0ZXN0RW50cmFuY2VPYmouZ2V0U2NhbGVkV2lkdGg/LigpIHx8IGRlZmF1bHRFbnRyYW5jZVdpZHRoUHg7XHJcbiAgICAgIGNvbnN0IGFuY2hvckFuZ2xlID0gTnVtYmVyKGxhdGVzdEVudHJhbmNlT2JqLmFuZ2xlIHx8IDApO1xyXG4gICAgICBjb25zdCBhbmdsZVJhZCA9IChhbmNob3JBbmdsZSAqIE1hdGguUEkpIC8gMTgwO1xyXG4gICAgICBjb25zdCBzdGVwUHggPSB3aWR0aFB4ICsgZ2FwUHg7XHJcblxyXG4gICAgICB4RnQgPSB0aGlzLmZyb21QaXhlbHMobGVmdFB4ICsgc3RlcFB4ICogTWF0aC5jb3MoYW5nbGVSYWQpLCBcImZ0XCIpO1xyXG4gICAgICB5RnQgPSB0aGlzLmZyb21QaXhlbHModG9wUHggKyBzdGVwUHggKiBNYXRoLnNpbihhbmdsZVJhZCksIFwiZnRcIik7XHJcbiAgICAgIGFuZ2xlID0gYW5jaG9yQW5nbGU7XHJcbiAgICAgIGlzUG9zaXRpb25SZXNvbHZlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc1Bvc2l0aW9uUmVzb2x2ZWQpIHtcclxuICAgICAgY29uc3QgZXhpc3RpbmdFbnRyYW5jZXMgPSBsYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiKVxyXG4gICAgICAgIC5zb3J0KFxyXG4gICAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxyXG4gICAgICAgICAgICBOdW1iZXIoYT8uZWxlbWVudE51bWJlciB8fCAwKSAtIE51bWJlcihiPy5lbGVtZW50TnVtYmVyIHx8IDApLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBsYXRlc3RFbnRyYW5jZSA9IGV4aXN0aW5nRW50cmFuY2VzLmF0KC0xKTtcclxuICAgICAgaWYgKGxhdGVzdEVudHJhbmNlKSB7XHJcbiAgICAgICAgY29uc3QgYW5jaG9yQW5nbGUgPSBOdW1iZXIobGF0ZXN0RW50cmFuY2U/LmFuZ2xlIHx8IDApO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuY2hvckFuZ2xlICogTWF0aC5QSSkgLyAxODA7XHJcbiAgICAgICAgY29uc3Qgc3RlcEZ0ID1cclxuICAgICAgICAgIE51bWJlcihcclxuICAgICAgICAgICAgbGF0ZXN0RW50cmFuY2U/LmRpc3RhbmNlIHx8XHJcbiAgICAgICAgICAgICAgdGhpcy5mcm9tUGl4ZWxzKGRlZmF1bHRFbnRyYW5jZVdpZHRoUHgsIFwiZnRcIiksXHJcbiAgICAgICAgICApICsgdGhpcy5mcm9tUGl4ZWxzKGdhcFB4LCBcImZ0XCIpO1xyXG5cclxuICAgICAgICB4RnQgPVxyXG4gICAgICAgICAgTnVtYmVyKGxhdGVzdEVudHJhbmNlPy5yZWxhdGl2ZVBvc2l0aW9uPy54IHx8IDApICtcclxuICAgICAgICAgIHN0ZXBGdCAqIE1hdGguY29zKGFuZ2xlUmFkKTtcclxuICAgICAgICB5RnQgPVxyXG4gICAgICAgICAgTnVtYmVyKGxhdGVzdEVudHJhbmNlPy5yZWxhdGl2ZVBvc2l0aW9uPy55IHx8IDApICtcclxuICAgICAgICAgIHN0ZXBGdCAqIE1hdGguc2luKGFuZ2xlUmFkKTtcclxuICAgICAgICBhbmdsZSA9IGFuY2hvckFuZ2xlO1xyXG4gICAgICAgIGlzUG9zaXRpb25SZXNvbHZlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAyKSBJZiBubyBlbnRyYW5jZSwgcGxhY2UgbmV4dCB0byB3YWxsLTEuXHJcbiAgICBpZiAoIWlzUG9zaXRpb25SZXNvbHZlZCkge1xyXG4gICAgICBjb25zdCB3YWxsMSA9IGxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICBlbGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIE51bWJlcihlbGUuZWxlbWVudE51bWJlcikgPT09IDEsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAod2FsbDEpIHtcclxuICAgICAgICBjb25zdCB3YWxsQW5nbGUgPSBOdW1iZXIod2FsbDE/LmFuZ2xlIHx8IDApO1xyXG4gICAgICAgIGNvbnN0IHdhbGxBbmdsZVJhZCA9ICh3YWxsQW5nbGUgKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgICAgICBjb25zdCBhbG9uZ1dhbGxGdCA9IE1hdGgubWluKE51bWJlcih3YWxsMT8uZGlzdGFuY2UgfHwgMCkgLyAyLCA0KTtcclxuICAgICAgICBjb25zdCBzaWRlT2Zmc2V0RnQgPSAxLjU7XHJcbiAgICAgICAgY29uc3Qgd2FsbFggPSBOdW1iZXIod2FsbDE/LnJlbGF0aXZlUG9zaXRpb24/LnggfHwgMCk7XHJcbiAgICAgICAgY29uc3Qgd2FsbFkgPSBOdW1iZXIod2FsbDE/LnJlbGF0aXZlUG9zaXRpb24/LnkgfHwgMCk7XHJcblxyXG4gICAgICAgIHhGdCA9XHJcbiAgICAgICAgICB3YWxsWCArXHJcbiAgICAgICAgICBhbG9uZ1dhbGxGdCAqIE1hdGguY29zKHdhbGxBbmdsZVJhZCkgK1xyXG4gICAgICAgICAgc2lkZU9mZnNldEZ0ICogLU1hdGguc2luKHdhbGxBbmdsZVJhZCk7XHJcbiAgICAgICAgeUZ0ID1cclxuICAgICAgICAgIHdhbGxZICtcclxuICAgICAgICAgIGFsb25nV2FsbEZ0ICogTWF0aC5zaW4od2FsbEFuZ2xlUmFkKSArXHJcbiAgICAgICAgICBzaWRlT2Zmc2V0RnQgKiBNYXRoLmNvcyh3YWxsQW5nbGVSYWQpO1xyXG4gICAgICAgIGFuZ2xlID0gd2FsbEFuZ2xlO1xyXG4gICAgICAgIGlzUG9zaXRpb25SZXNvbHZlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAzKSBJZiBubyB3YWxsIChlLmcuIGxheW91dFBvbHlnb24gaXMgZW1wdHkpLCBwbGFjZSBuZXh0IHRvIGFueSBjYW52YXMgb2JqZWN0LlxyXG4gICAgaWYgKCFpc1Bvc2l0aW9uUmVzb2x2ZWQpIHtcclxuICAgICAgY29uc3QgYW5jaG9yT2JqID0gKHRoaXMuY2FudmFzPy5nZXRPYmplY3RzKCkgPz8gW10pLmZpbmQoKG9iajogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICEhb2JqPy5vYmpUeXBlICYmIG9iaj8uaXNEaXNzZWN0aW9uTGluZSAhPT0gdHJ1ZTtcclxuICAgICAgfSkgYXMgYW55O1xyXG5cclxuICAgICAgaWYgKGFuY2hvck9iaikge1xyXG4gICAgICAgIGNvbnN0IGxlZnRQeCA9IGFuY2hvck9iai5sZWZ0ID8/IDA7XHJcbiAgICAgICAgY29uc3QgdG9wUHggPSBhbmNob3JPYmoudG9wID8/IDA7XHJcbiAgICAgICAgY29uc3Qgd2lkdGhQeCA9IGFuY2hvck9iai5nZXRTY2FsZWRXaWR0aD8uKCkgfHwgZGVmYXVsdEVudHJhbmNlV2lkdGhQeDtcclxuXHJcbiAgICAgICAgeEZ0ID0gdGhpcy5mcm9tUGl4ZWxzKGxlZnRQeCArIHdpZHRoUHggKyBnYXBQeCwgXCJmdFwiKTtcclxuICAgICAgICB5RnQgPSB0aGlzLmZyb21QaXhlbHModG9wUHgsIFwiZnRcIik7XHJcbiAgICAgICAgYW5nbGUgPSBOdW1iZXIoYW5jaG9yT2JqPy5hbmdsZSB8fCAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld0VudHJhbmNlID0ge1xyXG4gICAgICBlbGVtZW50VHlwZTogXCJlbnRyYW5jZVwiLFxyXG4gICAgICBkaXN0YW5jZTogNixcclxuICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICBkaXJlY3Rpb246IFwidXBcIixcclxuICAgICAgYW5nbGUsXHJcbiAgICAgIGVsZW1lbnROdW1iZXI6IGVsZU51bWJlciArIDEsXHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb246IHtcclxuICAgICAgICB4OiB4RnQsXHJcbiAgICAgICAgeTogeUZ0LFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgICAgZml4dHVyZXM6IFtdLFxyXG4gICAgICBvdGhlckVsZW1lbnRzOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5wdXNoKG5ld0VudHJhbmNlKTtcclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMudXBkYXRlRW50cmFuY2VDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkTmV3Rml4dHVyZShmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsIHdhbGxJbmRleD86IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGVtcGxhdGU6IGFueSA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGUodGhpcy5maXh0dXJlVGVtcGxhdGVzWzBdLl9pZCk7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZURhdGEgPSB0ZW1wbGF0ZS5kYXRhO1xyXG4gICAgY29uc3QgZml4dHVyZUlkID0gYG5ldy0ke2NyeXB0by5yYW5kb21VVUlEKCl9YDtcclxuICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgZml4dHVyZU5hbWU6IHRlbXBsYXRlRGF0YS5maXh0dXJlTmFtZSxcclxuICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAuLi50ZW1wbGF0ZURhdGEsXHJcbiAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjogeyB4OiAwLCB5OiAwLCBhbmdsZTogMCwgdW5pdDogXCJmdFwiIH0sXHJcbiAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgICB1bnNhdmVkQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgbmV3QWRkZWQ6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgY29uc3Qgd2FsbERhdGEgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk7XHJcblxyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHdwID0gdGhpcy5mcm9tUGl4ZWxzKHcsIFwiZnRcIik7XHJcblxyXG4gICAgICBpZiAod2FsbERhdGEpIHtcclxuICAgICAgICBjb25zdCB4MCA9IHdhbGxEYXRhLnJlbGF0aXZlUG9zaXRpb24ueDtcclxuICAgICAgICBjb25zdCB5MCA9IHdhbGxEYXRhLnJlbGF0aXZlUG9zaXRpb24ueTtcclxuICAgICAgICBjb25zdCBhbmdsZURlZyA9IHdhbGxEYXRhLmFuZ2xlIHx8IDA7XHJcbiAgICAgICAgY29uc3QgYW5nbGVSYWQgPSAoYW5nbGVEZWcgKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgICAgICBjb25zdCBjb3NBID0gTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG4gICAgICAgIGNvbnN0IHNpbkEgPSBNYXRoLnNpbihhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIC8vIFByb2plY3QgYWxsIGV4aXN0aW5nIGZpeHR1cmVzIG9udG8gdGhlIHdhbGwgYXhpcyB0byBnZXQgb2NjdXBpZWQgcmFuZ2VzIChpbiBmdCkuXHJcbiAgICAgICAgLy8gUHJvamVjdGlvbiByZWNvdmVycyB0IGNvcnJlY3RseSBldmVuIHdpdGggdGhlIDFmdCBwZXJwZW5kaWN1bGFyIG9mZnNldCBhcHBsaWVkXHJcbiAgICAgICAgLy8gZHVyaW5nIHBsYWNlbWVudDogKOKIknNpbkHCt2Nvc0EgKyBjb3NBwrdzaW5BKSBjYW5jZWxzIHRvIDAuXHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdGaXh0dXJlcyA9ICh3YWxsRGF0YS5maXh0dXJlcyB8fCBbXSkuZmlsdGVyKFxyXG4gICAgICAgICAgKGY6IGFueSkgPT4gZi5maXh0dXJlTmFtZSAhPT0gXCJzcGFjZVwiLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9jY3VwaWVkOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiA9IGV4aXN0aW5nRml4dHVyZXMubWFwKFxyXG4gICAgICAgICAgKGY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0U3RhcnQgPVxyXG4gICAgICAgICAgICAgIChmLnJlbGF0aXZlUG9zaXRpb24ueCAtIHgwKSAqIGNvc0EgK1xyXG4gICAgICAgICAgICAgIChmLnJlbGF0aXZlUG9zaXRpb24ueSAtIHkwKSAqIHNpbkE7XHJcbiAgICAgICAgICAgIGNvbnN0IGZXaWR0aCA9IHRoaXMuZnJvbVBpeGVscyhcclxuICAgICAgICAgICAgICB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICAgICAgZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBmLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgXCJmdFwiLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4gW01hdGgubWF4KDAsIHRTdGFydCksIE1hdGgubWF4KDAsIHRTdGFydCkgKyBmV2lkdGhdIGFzIFtcclxuICAgICAgICAgICAgICBudW1iZXIsXHJcbiAgICAgICAgICAgICAgbnVtYmVyLFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBvY2N1cGllZC5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSk7XHJcblxyXG4gICAgICAgIC8vIFdhbGsgZnJvbSB3YWxsIHN0YXJ0OyBmaW5kIGZpcnN0IGdhcCB0aGF0IGZpdHMgdGhlIG5ldyBmaXh0dXJlLlxyXG4gICAgICAgIC8vIEVQU0lMT04gYWJzb3JicyBmbG9hdGluZy1wb2ludCBkcmlmdCBmcm9tIHJlcGVhdGVkIHVuaXQgcm91bmQtdHJpcHMuXHJcbiAgICAgICAgY29uc3QgRVBTSUxPTiA9IDAuMDAxO1xyXG4gICAgICAgIGxldCBwbGFjZW1lbnRUOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICBsZXQgY3Vyc29yID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBbcmFuZ2VTdGFydCwgcmFuZ2VFbmRdIG9mIG9jY3VwaWVkKSB7XHJcbiAgICAgICAgICBpZiAocmFuZ2VTdGFydCAtIGN1cnNvciA+PSB3cCAtIEVQU0lMT04pIHtcclxuICAgICAgICAgICAgcGxhY2VtZW50VCA9IGN1cnNvcjtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjdXJzb3IgPSBNYXRoLm1heChjdXJzb3IsIHJhbmdlRW5kKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE5vIGdhcCBmb3VuZCDihpIgcGxhY2UgYWZ0ZXIgbGFzdCBmaXh0dXJlLlxyXG4gICAgICAgIC8vIE92ZXJmbG93IGJleW9uZCB3YWxsIGxlbmd0aCBpcyBpbnRlbnRpb25hbCBwZXIgcmVxdWlyZW1lbnRzLlxyXG4gICAgICAgIGlmIChwbGFjZW1lbnRUID09PSBudWxsKSB7XHJcbiAgICAgICAgICBwbGFjZW1lbnRUID0gY3Vyc29yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZnggPSB4MCArIHBsYWNlbWVudFQgKiBjb3NBO1xyXG4gICAgICAgIGNvbnN0IGZ5ID0geTAgKyBwbGFjZW1lbnRUICogc2luQTtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSAwLjk7XHJcbiAgICAgICAgY29uc3QgZnhfb2Zmc2V0ID0gZnggKyBvZmZzZXQgKiAtc2luQTtcclxuICAgICAgICBjb25zdCBmeV9vZmZzZXQgPSBmeSArIG9mZnNldCAqIGNvc0E7XHJcblxyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24ueCA9IGZ4X29mZnNldDtcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBmeV9vZmZzZXQ7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9IGFuZ2xlRGVnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAodGhpcy5nZXRGb3JtV2FsbHMuYXQod2FsbEluZGV4ISkuZ2V0KFwiZml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIGZpeHR1cmVHcm91cCxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpPy5maXh0dXJlcy5wdXNoKGZpeHR1cmVEYXRhKTtcclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICBjb25zdCBmaXh0dXJlV2lkdGhQeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZUhlaWdodFB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIE4tc2hhcGUgZ3JpZCBwbGFjZW1lbnQ6IGNvbCBmaWxscyBsZWZ0LXRvLXJpZ2h0LCBlYWNoIGNvbHVtbiBmaWxscyBib3R0b20gcm93IChyb3c9MSkgZmlyc3QgdGhlbiB0b3Agcm93IChyb3c9MClcclxuICAgICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmxlbmd0aDtcclxuICAgICAgY29uc3QgbmV3Q29sID0gTWF0aC5mbG9vcihuZXdJbmRleCAvIDIpO1xyXG4gICAgICBjb25zdCBuZXdSb3cgPSBuZXdJbmRleCAlIDIgPT09IDAgPyAxIDogMDtcclxuXHJcbiAgICAgIGxldCBncmlkT3JpZ2luWDogbnVtYmVyO1xyXG4gICAgICBsZXQgZ3JpZE9yaWdpblk6IG51bWJlcjtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyBSZWNvdmVyIGdyaWQgb3JpZ2luIGZyb20gZml4dHVyZSBhdCBpbmRleCAwIChhbHdheXMgcGxhY2VkIGF0IHJvdz0xLCBjb2w9MClcclxuICAgICAgICBjb25zdCBmMCA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbMF07XHJcbiAgICAgICAgY29uc3QgZjB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGYwLnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICAgIGYwLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGYweSA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmMC5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAgICAgICBmMC5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBmMCBpcyBhdCByb3c9MSDihpIgZ3JpZE9yaWdpblkgPSBmMHkgLSAxICogZml4dHVyZUhlaWdodFB4OyBjb2w9MCDihpIgZ3JpZE9yaWdpblggPSBmMHhcclxuICAgICAgICBncmlkT3JpZ2luWCA9IGYweDtcclxuICAgICAgICBncmlkT3JpZ2luWSA9IGYweSAtIGZpeHR1cmVIZWlnaHRQeDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBObyBleGlzdGluZyBjZW50ZXIgZml4dHVyZXMg4oCUIGZpbmQgYmVzdCBncmlkIG9yaWdpbiB2aWEgcG9seWdvbiBzY2FuIChzYW1lIGFzIGRyYXdMYXlvdXRFbGVtZW50cylcclxuICAgICAgICBjb25zdCBsYXlvdXRQb2x5Z29uID0gdGhpcy5idWlsZExheW91dFBvbHlnb25Gcm9tV2FsbHMoKTtcclxuICAgICAgICBjb25zdCBvY2N1cGllZFJlY3RzID0gdGhpcy5nZXRPY2N1cGllZFJlY3RzKCk7XHJcbiAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcblxyXG4gICAgICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIDIgcm93cyBhbmQgMSBjb2x1bW4gYXMgdGhlIHN0YXJ0aW5nIGdyaWQgZm9vdHByaW50XHJcbiAgICAgICAgY29uc3QgZ3JpZFcgPSBmaXh0dXJlV2lkdGhQeDtcclxuICAgICAgICBjb25zdCBncmlkSCA9IDIgKiBmaXh0dXJlSGVpZ2h0UHg7XHJcblxyXG4gICAgICAgIGNvbnN0IGNlbnRlclggPSBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMjtcclxuXHJcbiAgICAgICAgY29uc3QgZml0c0luUG9seWdvbiA9ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT5cclxuICAgICAgICAgIHRoaXMuaXNQb2ludEluc2lkZVBvbHlnb24oeyB4LCB5IH0sIGxheW91dFBvbHlnb24pICYmXHJcbiAgICAgICAgICB0aGlzLmlzUG9pbnRJbnNpZGVQb2x5Z29uKHsgeDogeCArIGdyaWRXLCB5IH0sIGxheW91dFBvbHlnb24pICYmXHJcbiAgICAgICAgICB0aGlzLmlzUG9pbnRJbnNpZGVQb2x5Z29uKHsgeCwgeTogeSArIGdyaWRIIH0sIGxheW91dFBvbHlnb24pICYmXHJcbiAgICAgICAgICB0aGlzLmlzUG9pbnRJbnNpZGVQb2x5Z29uKFxyXG4gICAgICAgICAgICB7IHg6IHggKyBncmlkVywgeTogeSArIGdyaWRIIH0sXHJcbiAgICAgICAgICAgIGxheW91dFBvbHlnb24sXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBvdmVybGFwc09jY3VwaWVkID0gKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgb2NjdXBpZWRSZWN0cy5zb21lKChvY2MpID0+XHJcbiAgICAgICAgICAgIHRoaXMucmVjdHNPdmVybGFwKHsgeCwgeSwgdzogZ3JpZFcsIGg6IGdyaWRIIH0sIG9jYyksXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBzY2FuRm9yQmVzdE9yaWdpbiA9IChza2lwT3ZlcmxhcDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgbGV0IGJlc3RTY29yZSA9IC1JbmZpbml0eTtcclxuICAgICAgICAgIGxldCBiZXN0UG9zOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgIGNvbnN0IHN0ZXAgPSBmaXh0dXJlV2lkdGhQeCAvIDI7XHJcblxyXG4gICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgbGV0IHkgPSBib3VuZHMudG9wO1xyXG4gICAgICAgICAgICB5IDw9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC0gZ3JpZEg7XHJcbiAgICAgICAgICAgIHkgKz0gc3RlcFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZvciAoXHJcbiAgICAgICAgICAgICAgbGV0IHggPSBib3VuZHMubGVmdDtcclxuICAgICAgICAgICAgICB4IDw9IGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC0gZ3JpZFc7XHJcbiAgICAgICAgICAgICAgeCArPSBzdGVwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGlmICghZml0c0luUG9seWdvbih4LCB5KSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgaWYgKCFza2lwT3ZlcmxhcCAmJiBvdmVybGFwc09jY3VwaWVkKHgsIHkpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZ3JpZFJlY3QgPSB7IHgsIHksIHc6IGdyaWRXLCBoOiBncmlkSCB9O1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVtcHR5TWFyZ2luID0gdGhpcy5jb21wdXRlRW1wdHlNYXJnaW4oXHJcbiAgICAgICAgICAgICAgICBncmlkUmVjdCxcclxuICAgICAgICAgICAgICAgIGJvdW5kcyxcclxuICAgICAgICAgICAgICAgIG9jY3VwaWVkUmVjdHMsXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBkeCA9IGNlbnRlclggLSAoeCArIGdyaWRXIC8gMik7XHJcbiAgICAgICAgICAgICAgY29uc3QgZHkgPSBjZW50ZXJZIC0gKHkgKyBncmlkSCAvIDIpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNjb3JlID0gZW1wdHlNYXJnaW4gKiAxMDAwIC0gKGR4ICogZHggKyBkeSAqIGR5KSAqIDAuMDAxO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoc2NvcmUgPiBiZXN0U2NvcmUpIHtcclxuICAgICAgICAgICAgICAgIGJlc3RTY29yZSA9IHNjb3JlO1xyXG4gICAgICAgICAgICAgICAgYmVzdFBvcyA9IHsgeCwgeSB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGJlc3RQb3M7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYmVzdFBvcyA9IHNjYW5Gb3JCZXN0T3JpZ2luKGZhbHNlKSA/P1xyXG4gICAgICAgICAgc2NhbkZvckJlc3RPcmlnaW4odHJ1ZSkgPz8ge1xyXG4gICAgICAgICAgICB4OiBjZW50ZXJYIC0gZ3JpZFcgLyAyLFxyXG4gICAgICAgICAgICB5OiBjZW50ZXJZIC0gZ3JpZEggLyAyLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZ3JpZE9yaWdpblggPSBiZXN0UG9zLng7XHJcbiAgICAgICAgZ3JpZE9yaWdpblkgPSBiZXN0UG9zLnk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHggPSBncmlkT3JpZ2luWCArIG5ld0NvbCAqIGZpeHR1cmVXaWR0aFB4O1xyXG4gICAgICBjb25zdCB5ID0gZ3JpZE9yaWdpblkgKyBuZXdSb3cgKiBmaXh0dXJlSGVpZ2h0UHg7XHJcblxyXG4gICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLmZyb21QaXhlbHMoeCwgXCJmdFwiKTtcclxuICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5mcm9tUGl4ZWxzKHksIFwiZnRcIik7XHJcblxyXG4gICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUucHVzaChmaXh0dXJlRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB0aGlzLnVwZGF0ZUZpeHR1cmVDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3T3RoZXJFbGVtZW50cyhwb3NUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIiwgd2FsbEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcG9zRGF0YSA9IHtcclxuICAgICAgX2lkOiBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gLFxyXG4gICAgICBmaXh0dXJlTmFtZTogYFBPUyBDb3VudGVyYCxcclxuICAgICAgZml4dHVyZVR5cGU6IFwib3RoZXJcIixcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjogeyB4OiAwLCB5OiAwLCBhbmdsZTogMCwgdW5pdDogXCJmdFwiIH0sXHJcbiAgICAgIGZpeHR1cmVTdGF0aWNMZW5ndGg6IHtcclxuICAgICAgICB2YWx1ZTogMyxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVTdGF0aWNXaWR0aDoge1xyXG4gICAgICAgIHZhbHVlOiA1LFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IHggPSBwb3NEYXRhLnJlbGF0aXZlUG9zaXRpb24ueDtcclxuICAgIGxldCB5ID0gcG9zRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICBsZXQgYSA9IHBvc0RhdGEucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuXHJcbiAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIHBvc0RhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld090aGVyR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdHlwZTogW3Bvc0RhdGEuZml4dHVyZU5hbWUgfHwgXCJQT1MgQ291bnRlclwiXSwgLy8gZGVmYXVsdCBzZWxlY3RlZCBsYWJlbFxyXG4gICAgICBjdXN0b21OYW1lOiBbXCJcIl0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocG9zVHlwZSA9PSBcIndhbGxcIikge1xyXG4gICAgICBjb25zdCB3YWxsRGF0YSA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKTtcclxuICAgICAgaWYgKHdhbGxEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeDAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICAgICAgY29uc3QgeTAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gd2FsbERhdGEuZGlzdGFuY2U7XHJcbiAgICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YS5hbmdsZSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ4ID0geDAgKyAobGVuZ3RoIC8gMikgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3QgZnkgPSB5MCArIChsZW5ndGggLyAyKSAqIE1hdGguc2luKGFuZ2xlUmFkKTtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSAyLjU7XHJcbiAgICAgICAgY29uc3QgZnhfb2Zmc2V0ID0gZnggKyBvZmZzZXQgKiAtTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG4gICAgICAgIGNvbnN0IGZ5X29mZnNldCA9IGZ5ICsgb2Zmc2V0ICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICB4ID0gdGhpcy50b1BpeGVscyhmeF9vZmZzZXQsIFwiZnRcIik7XHJcbiAgICAgICAgeSA9IHRoaXMudG9QaXhlbHMoZnlfb2Zmc2V0LCBcImZ0XCIpO1xyXG4gICAgICAgIGEgPSBhbmdsZURlZztcclxuICAgICAgfVxyXG5cclxuICAgICAgT2JqZWN0LmFzc2lnbihwb3NEYXRhLCB7XHJcbiAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI6IHdhbGxJbmRleCEgKyAxLFxyXG4gICAgICAgIGFzc29jaWF0ZWRFbGVtZW50VHlwZTogXCJ3YWxsXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgKHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KHdhbGxJbmRleCEpLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIG5ld090aGVyR3JvdXAsXHJcbiAgICAgICk7XHJcbiAgICAgIHdhbGxEYXRhLm90aGVyRWxlbWVudHMucHVzaCh7IC4uLnBvc0RhdGEsIG5ld0FkZGVkOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwb3NUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vck90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIG5ld090aGVyR3JvdXAsXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMucHVzaCh7IC4uLnBvc0RhdGEsIG5ld0FkZGVkOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlY3RHcm91cCA9IHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICB4LFxyXG4gICAgICB5LFxyXG4gICAgICBhLFxyXG4gICAgICB3LFxyXG4gICAgICBoLFxyXG4gICAgICBwb3NEYXRhLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBtYWtlIGFjdGl2ZVxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KHJlY3RHcm91cCk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH0gY2F0Y2gge31cclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVRvT3RoZXJFbGVtZW50c0NoYW5nZXMoKTtcclxuICAgIHRoaXMudXBkYXRlT3RoZXJFbGVtZW50c0Nvb3JkaW5hdGVzKCk7XHJcbiAgfVxyXG5cclxuICBmaW5kRW1wdHlDZW50ZXJTcG90KFxyXG4gICAgb2JqZWN0V2lkdGhQeDogbnVtYmVyLFxyXG4gICAgb2JqZWN0SGVpZ2h0UHg6IG51bWJlcixcclxuICAgIHRlbXBPY2N1cGllZDoge1xyXG4gICAgICB4OiBudW1iZXI7XHJcbiAgICAgIHk6IG51bWJlcjtcclxuICAgICAgd2lkdGg6IG51bWJlcjtcclxuICAgICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICB9W10gPSBbXSxcclxuICApIHtcclxuICAgIGNvbnN0IG9iamVjdHMgPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBjb25zdCBDRU5URVJfT0ZGU0VUX1ggPSAtMzAwO1xyXG4gICAgY29uc3QgQ0VOVEVSX09GRlNFVF9ZID0gMDtcclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclggPSBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAvIDIgKyBDRU5URVJfT0ZGU0VUX1g7XHJcblxyXG4gICAgY29uc3QgY2VudGVyWSA9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMiArIENFTlRFUl9PRkZTRVRfWTtcclxuXHJcbiAgICAvLyAyLiBTcGlyYWwgc2VhcmNoIHBhcmFtZXRlcnNcclxuICAgIGNvbnN0IHN0ZXAgPSAyMDtcclxuICAgIGNvbnN0IG1heFJhZGl1cyA9IE1hdGgubWF4KGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XHJcblxyXG4gICAgZm9yIChsZXQgcmFkaXVzID0gMDsgcmFkaXVzIDwgbWF4UmFkaXVzOyByYWRpdXMgKz0gc3RlcCkge1xyXG4gICAgICBmb3IgKGxldCBhbmdsZSA9IDA7IGFuZ2xlIDwgMzYwOyBhbmdsZSArPSAzMCkge1xyXG4gICAgICAgIGNvbnN0IHJhZCA9IChhbmdsZSAqIE1hdGguUEkpIC8gMTgwO1xyXG5cclxuICAgICAgICAvLyDwn5SnIEZJWDogY2VudGVyIOKGkiB0b3AtbGVmdFxyXG4gICAgICAgIGNvbnN0IHggPSBjZW50ZXJYICsgcmFkaXVzICogTWF0aC5jb3MocmFkKSAtIG9iamVjdFdpZHRoUHggLyAyO1xyXG4gICAgICAgIGNvbnN0IHkgPSBjZW50ZXJZICsgcmFkaXVzICogTWF0aC5zaW4ocmFkKSAtIG9iamVjdEhlaWdodFB4IC8gMjtcclxuXHJcbiAgICAgICAgY29uc3QgdGVzdFJlY3QgPSB7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgd2lkdGg6IG9iamVjdFdpZHRoUHgsXHJcbiAgICAgICAgICBoZWlnaHQ6IG9iamVjdEhlaWdodFB4LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIDMuIENoZWNrIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIGNhbnZhcyBvYmplY3RzXHJcbiAgICAgICAgY29uc3QgY2FudmFzQ29sbGlzaW9uID0gb2JqZWN0cy5zb21lKChvYmopID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgICAgICByZXR1cm4gIShcclxuICAgICAgICAgICAgcmVjdC5sZWZ0ID4gdGVzdFJlY3QubGVmdCArIHRlc3RSZWN0LndpZHRoIHx8XHJcbiAgICAgICAgICAgIHJlY3QubGVmdCArIHJlY3Qud2lkdGggPCB0ZXN0UmVjdC5sZWZ0IHx8XHJcbiAgICAgICAgICAgIHJlY3QudG9wID4gdGVzdFJlY3QudG9wICsgdGVzdFJlY3QuaGVpZ2h0IHx8XHJcbiAgICAgICAgICAgIHJlY3QudG9wICsgcmVjdC5oZWlnaHQgPCB0ZXN0UmVjdC50b3BcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChjYW52YXNDb2xsaXNpb24pIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAvLyA0LiBDaGVjayBjb2xsaXNpb24gd2l0aCB0ZW1wIHBsYWNlZCBmaXh0dXJlcyAoQ0FEIGJhdGNoKVxyXG4gICAgICAgIGNvbnN0IHRlbXBDb2xsaXNpb24gPSB0ZW1wT2NjdXBpZWQuc29tZSgobykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuICEoXHJcbiAgICAgICAgICAgIG8ueCA+IHRlc3RSZWN0LmxlZnQgKyB0ZXN0UmVjdC53aWR0aCB8fFxyXG4gICAgICAgICAgICBvLnggKyBvLndpZHRoIDwgdGVzdFJlY3QubGVmdCB8fFxyXG4gICAgICAgICAgICBvLnkgPiB0ZXN0UmVjdC50b3AgKyB0ZXN0UmVjdC5oZWlnaHQgfHxcclxuICAgICAgICAgICAgby55ICsgby5oZWlnaHQgPCB0ZXN0UmVjdC50b3BcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0ZW1wQ29sbGlzaW9uKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgeCwgeSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjYW5jZWxFZGl0KCkge1xyXG4gICAgYXdhaXQgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW5Ub0RlbGV0ZUtleSgpIHtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB7XHJcbiAgICAgIGlmIChlLmtleSA9PT0gXCJEZWxldGVcIiAmJiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCkge1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuY2FudmFzPy5nZXRBY3RpdmVPYmplY3QoKSBhcyBhbnk7XHJcblxyXG4gICAgICAgIGlmIChhY3RpdmUgJiYgKGFjdGl2ZSBhcyBhbnkpLm9ialR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVFbnRyYW5jZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFjdGl2ZSAmJiAoYWN0aXZlIGFzIGFueSkub2JqVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGlmIChhY3RpdmU/LmRhdGE/LmVsZW1lbnROdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVXYWxsKGFjdGl2ZT8uZGF0YT8uZWxlbWVudE51bWJlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYWN0aXZlICYmIChhY3RpdmUgYXMgYW55KS5vYmpUeXBlID09PSBcImZpeHR1cmVcIikge1xyXG4gICAgICAgICAgaWYgKGFjdGl2ZT8uZml4dHVyZVR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVGaXh0dXJlKFxyXG4gICAgICAgICAgICAgIGFjdGl2ZT8uZml4dHVyZVR5cGUsXHJcbiAgICAgICAgICAgICAgYWN0aXZlPy5maXh0dXJlSW5kZXggLSAxLFxyXG4gICAgICAgICAgICAgIGFjdGl2ZT8ud2FsbEluZGV4IC0gMSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRW50cmFuY2UoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSAmJiBhY3RpdmUub2JqVHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmRJbmRleChcclxuICAgICAgICAoZWw6IGFueSkgPT5cclxuICAgICAgICAgIGVsLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIgJiZcclxuICAgICAgICAgIGVsLmVsZW1lbnROdW1iZXIgPT09IGFjdGl2ZS5kYXRhLmVsZW1lbnROdW1iZXIsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBkZWxldGVXYWxsKGVsZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgZWxlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbGUuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyLFxyXG4gICAgKTtcclxuICAgIGlmICh3YWxsLmZpeHR1cmVzLmxlbmd0aCB8fCB3YWxsLm90aGVyRWxlbWVudHMubGVuZ3RoKVxyXG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGVXYWxsKCkpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgaSA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZEluZGV4KFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlcixcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5zcGxpY2UoaSwgMSk7XHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxFbGVtZW50TnVtYmVyKCk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVXYWxsRWxlbWVudE51bWJlcigpIHtcclxuICAgIGNvbnN0IG9ubHlXYWxscyA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24/LmZpbHRlcihcclxuICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIixcclxuICAgICk7XHJcblxyXG4gICAgb25seVdhbGxzPy5mb3JFYWNoKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaXRlbS5lbGVtZW50TnVtYmVyID0gaW5kZXggKyAxO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b1BpeGVscyh2YWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCkge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwaXhlbHMudG9GaXhlZCg0KSk7XHJcbiAgfVxyXG5cclxuICBmcm9tUGl4ZWxzKHBpeGVsczogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCk6IG51bWJlciB7XHJcbiAgICBsZXQgdmFsdWU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBwaXhlbHMgPSBwaXhlbHMgPj0gdGhpcy53YWxsVGhpY2tuZXNzID8gcGl4ZWxzIC0gdGhpcy53YWxsVGhpY2tuZXNzIDogdGhpcy53YWxsVGhpY2tuZXNzO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgdmFsdWUgPSAocGl4ZWxzIC8gZHBpKSAqIDI1LjQ7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICB2YWx1ZSA9IHBpeGVscyAvICgxMiAqIGRwaSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlLnRvRml4ZWQoNCkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybVNhdmUoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBcIlNhdmUgYXMgZHJhZnRcIjtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIG1vdmUgdGhpcyBiYWNrIHRvIERyYWZ0PyBUaGlzIHdpbGwga2VlcCB0aGUgcGxhbm9ncmFtIGluIERyYWZ0IGFuZCBtYWtlIGl0IHJlYWR5IGZvciBhbGxvY2F0aW9uIG9uY2UgYXBwcm92ZWQuXCI7XHJcbiAgICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtRGVsZXRlV2FsbCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9IFwiRGVsZXRlIHdhbGxcIjtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdhbGwgYWxvbmcgd2l0aCBpdHMgYXNzb2NpYXRlZCBmaXh0dXJlcyBhbmQgZWxlbWVudHM/XCI7XHJcblxyXG4gICAgICByZXR1cm4gYXdhaXQgbW9kZWxSZWYucmVzdWx0LnRoZW48Ym9vbGVhbj4oKHJlc3VsdCkgPT4gcmVzdWx0ID09PSBcIm9rXCIpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRml4dHVyZUNvb3JkaW5hdGVzKGZpeHR1cmVzPzogYW55KSB7XHJcbiAgICBjb25zdCBmaXh0dXJlc0Zyb21DYW52YXMgPVxyXG4gICAgICBmaXh0dXJlcyA/P1xyXG4gICAgICB0aGlzLmNhbnZhc1xyXG4gICAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5maXh0dXJlSWQpXHJcbiAgICAgICAgLm1hcCgob2JqKSA9PiAoe1xyXG4gICAgICAgICAgaWQ6IChvYmogYXMgYW55KS5maXh0dXJlSWQsXHJcbiAgICAgICAgICB4OiBvYmoubGVmdCxcclxuICAgICAgICAgIHk6IG9iai50b3AsXHJcbiAgICAgICAgICBhbmdsZTogb2JqPy5hbmdsZSA/PyAwLFxyXG4gICAgICAgIH0pKTtcclxuICAgIGNvbnN0IHBvc01hcCA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgZml4dHVyZXNGcm9tQ2FudmFzKSB7XHJcbiAgICAgIHBvc01hcC5zZXQoZml4dHVyZS5pZCwge1xyXG4gICAgICAgIHg6IHRoaXMuZnJvbVBpeGVscyhmaXh0dXJlLngsIFwiZnRcIiksXHJcbiAgICAgICAgeTogdGhpcy5mcm9tUGl4ZWxzKGZpeHR1cmUueSwgXCJmdFwiKSxcclxuICAgICAgICBhbmdsZTogZml4dHVyZS5hbmdsZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5mb3JFYWNoKChjZjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhdGVzdEZpeHR1cmVQb3MgPSBwb3NNYXAuZ2V0KGNmLl9pZCk7XHJcbiAgICAgIGlmIChsYXRlc3RGaXh0dXJlUG9zKSB7XHJcbiAgICAgICAgY2YucmVsYXRpdmVQb3NpdGlvbi54ID0gbGF0ZXN0Rml4dHVyZVBvcy54O1xyXG4gICAgICAgIGNmLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdEZpeHR1cmVQb3MueTtcclxuICAgICAgICBjZi5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0Rml4dHVyZVBvcy5hbmdsZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgdz8uZml4dHVyZXM/LmZvckVhY2goKHdmOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBsYXRlc3RGaXh0dXJlUG9zID0gcG9zTWFwLmdldCh3Zi5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RGaXh0dXJlUG9zKSB7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RGaXh0dXJlUG9zLng7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBsYXRlc3RGaXh0dXJlUG9zLnk7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0Rml4dHVyZVBvcy5hbmdsZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVPdGhlckVsZW1lbnRzQ29vcmRpbmF0ZXMoKSB7XHJcbiAgICBjb25zdCBvdGhlcnNGcm9tQ2FudmFzID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5vYmpUeXBlID09PSBcIm90aGVyc1wiKVxyXG4gICAgICAubWFwKChvYmopID0+ICh7XHJcbiAgICAgICAgaWQ6IChvYmogYXMgYW55KS5kYXRhPy5faWQsXHJcbiAgICAgICAgbGFiZWw6IChvYmogYXMgYW55KS5kYXRhPy5maXh0dXJlTmFtZSxcclxuICAgICAgICB4OiBvYmoubGVmdCxcclxuICAgICAgICB5OiBvYmoudG9wLFxyXG4gICAgICAgIGFuZ2xlOiBvYmo/LmFuZ2xlID8/IDAsXHJcbiAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSAtIDIsIFwiZnRcIiksXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZEhlaWdodCgpIC0gMiwgXCJmdFwiKSxcclxuICAgICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IHBvc01hcCA9IG5ldyBNYXA8XHJcbiAgICAgIHN0cmluZyxcclxuICAgICAgeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgYW5nbGU6IG51bWJlcjsgaDogbnVtYmVyOyB3OiBudW1iZXIgfVxyXG4gICAgPigpO1xyXG4gICAgZm9yIChjb25zdCBvdGhlciBvZiBvdGhlcnNGcm9tQ2FudmFzKSB7XHJcbiAgICAgIGlmIChvdGhlci5pZCkge1xyXG4gICAgICAgIHBvc01hcC5zZXQob3RoZXIuaWQsIHtcclxuICAgICAgICAgIHg6IHRoaXMuZnJvbVBpeGVscyhvdGhlci54LCBcImZ0XCIpLFxyXG4gICAgICAgICAgeTogdGhpcy5mcm9tUGl4ZWxzKG90aGVyLnksIFwiZnRcIiksXHJcbiAgICAgICAgICBhbmdsZTogb3RoZXIuYW5nbGUsXHJcbiAgICAgICAgICBoOiBvdGhlci5oZWlnaHQsXHJcbiAgICAgICAgICB3OiBvdGhlci53aWR0aCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMpKSB7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMuZm9yRWFjaCgoZWw6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE90aGVyc1BvcyA9IHBvc01hcC5nZXQoZWwuX2lkKTtcclxuICAgICAgICBpZiAobGF0ZXN0T3RoZXJzUG9zKSB7XHJcbiAgICAgICAgICBlbC5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RPdGhlcnNQb3MueDtcclxuICAgICAgICAgIGVsLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdE90aGVyc1Bvcy55O1xyXG4gICAgICAgICAgZWwucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9IGxhdGVzdE90aGVyc1Bvcy5hbmdsZTtcclxuICAgICAgICAgIGVsLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgPSBsYXRlc3RPdGhlcnNQb3MuaDtcclxuICAgICAgICAgIGVsLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy53O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgdz8ub3RoZXJFbGVtZW50cz8uZm9yRWFjaCgod2Y6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE90aGVyc1BvcyA9IHBvc01hcC5nZXQod2YuX2lkKTtcclxuICAgICAgICBpZiAobGF0ZXN0T3RoZXJzUG9zKSB7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RPdGhlcnNQb3MueDtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdE90aGVyc1Bvcy55O1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9IGxhdGVzdE90aGVyc1Bvcy5hbmdsZTtcclxuICAgICAgICAgIHdmLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgPSBsYXRlc3RPdGhlcnNQb3MuaDtcclxuICAgICAgICAgIHdmLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy53O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVdhbGxDb29yZGluYXRlcygpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLm9ialR5cGUgPT09IFwid2FsbFwiKVxyXG4gICAgICAubWFwKChvYmopID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdG9wOiB0aGlzLmZyb21QaXhlbHMob2JqLnRvcCwgXCJmdFwiKSxcclxuICAgICAgICAgIGxlZnQ6IHRoaXMuZnJvbVBpeGVscyhvYmoubGVmdCwgXCJmdFwiKSxcclxuICAgICAgICAgIHdpZHRoOiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZFdpZHRoKCkgLSAwLjI3LCBcImZ0XCIpLFxyXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZEhlaWdodCgpIC0gMC4yNywgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvYmouYW5nbGUsXHJcbiAgICAgICAgICBlbGVtZW50RGF0YTogKG9iaiBhcyBhbnkpLmRhdGEsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3Qgd2FsbCBvZiBkYXRhKSB7XHJcbiAgICAgIHBvc01hcC5zZXQoXHJcbiAgICAgICAgYCR7d2FsbC5lbGVtZW50RGF0YS5lbGVtZW50VHlwZX0ke3dhbGwuZWxlbWVudERhdGEuZWxlbWVudE51bWJlcn1gLFxyXG4gICAgICAgIGRhdGEuZmluZChcclxuICAgICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSA9PT0gd2FsbC5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSAmJlxyXG4gICAgICAgICAgICBvYmouZWxlbWVudERhdGEuZWxlbWVudE51bWJlciA9PT0gd2FsbC5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyLFxyXG4gICAgICAgICksXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgd2FsbFBvcyA9IHBvc01hcC5nZXQoYCR7dy5lbGVtZW50VHlwZX0ke3cuZWxlbWVudE51bWJlcn1gKTtcclxuICAgICAgaWYgKHdhbGxQb3MpIHtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueCA9IHdhbGxQb3MubGVmdDtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueSA9IHdhbGxQb3MudG9wO1xyXG4gICAgICAgIHcuYW5nbGUgPSB3YWxsUG9zLmFuZ2xlO1xyXG4gICAgICAgIHcuZGlzdGFuY2UgPSB3YWxsUG9zLndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5vYmpUeXBlID09PSBcImVudHJhbmNlXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0b3A6IHRoaXMuZnJvbVBpeGVscyhvYmoudG9wLCBcImZ0XCIpLFxyXG4gICAgICAgICAgbGVmdDogdGhpcy5mcm9tUGl4ZWxzKG9iai5sZWZ0LCBcImZ0XCIpLFxyXG4gICAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSwgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvYmouYW5nbGUsXHJcbiAgICAgICAgICBlbGVtZW50RGF0YTogKG9iaiBhcyBhbnkpLmRhdGEsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZW50cmFuY2Ugb2YgZGF0YSkge1xyXG4gICAgICBwb3NNYXAuc2V0KFxyXG4gICAgICAgIGAke2VudHJhbmNlLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlfSR7ZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudE51bWJlcn1gLFxyXG4gICAgICAgIGRhdGEuZmluZChcclxuICAgICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSA9PT0gZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudFR5cGUgJiZcclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXIgPT09XHJcbiAgICAgICAgICAgICAgZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudE51bWJlcixcclxuICAgICAgICApLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgodzogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGVudHJhbmNlUG9zID0gcG9zTWFwLmdldChgJHt3LmVsZW1lbnRUeXBlfSR7dy5lbGVtZW50TnVtYmVyfWApO1xyXG4gICAgICBpZiAoZW50cmFuY2VQb3MpIHtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueCA9IGVudHJhbmNlUG9zLmxlZnQ7XHJcbiAgICAgICAgdy5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBlbnRyYW5jZVBvcy50b3A7XHJcbiAgICAgICAgdy5hbmdsZSA9IGVudHJhbmNlUG9zLmFuZ2xlO1xyXG4gICAgICAgIHcuZGlzdGFuY2UgPSBlbnRyYW5jZVBvcy53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGRpc3NlY3Rpb24gbGluZXMgd2hlbmV2ZXIgZW50cmFuY2UgY29vcmRpbmF0ZXMgY2hhbmdlXHJcbiAgICB0aGlzLnVwZGF0ZURpc3NlY3Rpb25MaW5lcygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlTGF5b3V0KGVkaXRNb2RlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgZWRpdE1vZGUgJiZcclxuICAgIC8vICAgdGhpcy5nZXRTdGF0dXMgPT09IFwiYWxsb2NhdGlvblBlbmRpbmdcIiAmJlxyXG4gICAgLy8gICB1cGRhdGVTdGF0dXMgPT09IFwiZHJhZnRcIlxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIGlmICghKGF3YWl0IHRoaXMuY29uZmlybVNhdmUoKSkpIHtcclxuICAgIC8vICAgICB0aGlzLmxheW91dEZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAvLyAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICAvLyAgICAgcmV0dXJuO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgZWxlbWVudC5maXh0dXJlcyA9IGVsZW1lbnQuZml4dHVyZXMuZmlsdGVyKFxyXG4gICAgICAgIChmaXh0dXJlOiBhbnkpID0+ICFmaXh0dXJlPy5naG9zdCAmJiBmaXh0dXJlLmZpeHR1cmVOYW1lICE9PSBcInNwYWNlXCIsXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgICAgIC5maWx0ZXIoKGZpeHR1cmU6IGFueSkgPT4gIWZpeHR1cmU/Lmdob3N0KVxyXG4gICAgICAubWFwKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB7IGFzc29jaWF0ZWRFbGVtZW50VHlwZSwgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIsIC4uLnJlc3QgfSA9XHJcbiAgICAgICAgICBmaXh0dXJlO1xyXG4gICAgICAgIHJldHVybiByZXN0O1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMucmVvcmRlckZpeHR1cmUodGhpcy5mbG9vckRhdGEpO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgZGF0YTogeyAuLi50aGlzLmZsb29yRGF0YSB9LFxyXG4gICAgICBlZGl0TW9kZTogZWRpdE1vZGUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaXNTYXZpbmdMYXlvdXQgPSB0cnVlO1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZVN0b3JlUGxhbm8ocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmdMYXlvdXQgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIHVwZGF0ZSBsYXlvdXRcIik7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZ0xheW91dCA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrRWRpdCgpIHtcclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCB0cnVlKTtcclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJsZWZ0XCIsIGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgIHRoaXMubGF5b3V0Rm9ybS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRQcm9ncmVzc1ZhbHVlKCkge1xyXG4gICAgaWYgKHRoaXMuZ2V0U3RhdHVzID09PSBcImFsbG9jYXRpb25QZW5kaW5nXCIpIHtcclxuICAgICAgcmV0dXJuIDI1O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0U3RhdHVzVGV4dCgpIHtcclxuICAgIGlmICh0aGlzLmdldFN0YXR1cyA9PT0gXCJhbGxvY2F0aW9uUGVuZGluZ1wiKSB7XHJcbiAgICAgIHJldHVybiBcIkFsbG9jYXRpb24gcGVuZGluZ1wiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiRHJhZnRcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBnZXRTdGF0dXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vckRhdGE/LnN0YXR1cyA/PyBcImRyYWZ0XCI7XHJcbiAgfVxyXG5cclxuICBnZXRFbGVtZW50TnVtYmVyKGdyb3VwOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiBncm91cC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZSA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0Rml4dHVyZShncm91cDogYW55LCBibGluazogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuXHJcbiAgICBjb25zdCByZWFsV2lkdGggPSBncm91cC53aWR0aCEgKiBncm91cC5zY2FsZVghO1xyXG4gICAgY29uc3QgcmVhbEhlaWdodCA9IGdyb3VwLmhlaWdodCEgKiBncm91cC5zY2FsZVkhO1xyXG5cclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBjZW50ZXIueCxcclxuICAgICAgdG9wOiBjZW50ZXIueSxcclxuICAgICAgd2lkdGg6IHJlYWxXaWR0aCArIDgsIC8vIGNvbnNpc3RlbnQgcGFkZGluZ1xyXG4gICAgICBoZWlnaHQ6IHJlYWxIZWlnaHQgKyA4LFxyXG4gICAgICByeDogNSxcclxuICAgICAgcnk6IDUsXHJcbiAgICAgIHN0cm9rZTogXCIjMDBhYWZmXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAzLFxyXG4gICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgYW5nbGU6IGdyb3VwLmFuZ2xlIHx8IDAsXHJcbiAgICAgIG9wYWNpdHk6IGJsaW5rID8gMCA6IDEsXHJcbiAgICB9KTtcclxuXHJcbiAgICAocmVjdCBhcyBhbnkpLmRhdGEgPSB7IHR5cGU6IFwiZml4dHVyZS1oaWdobGlnaHRcIiB9O1xyXG5cclxuICAgIHRoaXMuY2FudmFzLmFkZChyZWN0KTtcclxuICAgIHRoaXMuY2FudmFzLm1vdmVPYmplY3RUbyhyZWN0LCB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMSk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcblxyXG4gICAgdGhpcy5hY3RpdmVIaWdobGlnaHQgPSByZWN0O1xyXG5cclxuICAgIC8vIC0tLSBObyBibGlua2luZyBuZWVkZWQgLS0tXHJcbiAgICBpZiAoIWJsaW5rKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGN5Y2xlcyA9IDA7XHJcblxyXG4gICAgY29uc3QgYmxpbmtPbmNlID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZWN0LmFuaW1hdGUoXHJcbiAgICAgICAgeyBvcGFjaXR5OiAxIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PiB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCksXHJcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlY3QuYW5pbWF0ZShcclxuICAgICAgICAgICAgICB7IG9wYWNpdHk6IDAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6ICgpID0+IHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKSxcclxuICAgICAgICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgY3ljbGVzKys7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjeWNsZXMgPCAyMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJsaW5rT25jZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXQoeyBvcGFjaXR5OiAxIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBibGlua09uY2UoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUhpZ2hsaWdodCgpIHtcclxuICAgIHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmsgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FudmFzPy5nZXRPYmplY3RzKCk/LmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICBpZiAoKG9iaiBhcyBhbnkpLmRhdGE/LnR5cGUgPT09IFwiZml4dHVyZS1oaWdobGlnaHRcIikge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShvYmopO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IG51bGw7XHJcbiAgICB0aGlzLmNhbnZhcz8ucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAga2VlcEhpZ2hsaWdodE9uVG9wID0gKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUhpZ2hsaWdodCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgb2JqcyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIHRoaXMuY2FudmFzLm1vdmVPYmplY3RUbyh0aGlzLmFjdGl2ZUhpZ2hsaWdodCwgb2Jqcy5sZW5ndGggLSAxKTtcclxuICB9O1xyXG5cclxuICBhc3luYyBvbkNsaWNrQXBwcm92ZUxheW91dCgpIHtcclxuICAgIGlmICh0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMubGVuZ3RoIDw9IDApIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcclxuICAgICAgICBcIk5vIGZpeHR1cmVzIGZvdW5kLiBBZGQgZml4dHVyZXMgdG8gcHJvY2VlZFwiLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5hcHByb3ZlTGF5b3V0TW9kYWxSZWYsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgfSkucmVzdWx0O1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHt9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkNsaWNrUnVuQWxsb2NhdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMubGVuZ3RoIDw9IDApIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcclxuICAgICAgICBcIk5vIGZpeHR1cmVzIGZvdW5kLiBBZGQgZml4dHVyZXMgdG8gcHJvY2VlZFwiLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc0ludmFsaWRIZWFkZXJGaXh0dXJlcykge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgIFwiU29tZSBmaXh0dXJlcyBoYXZlIGludmFsaWQgaGVhZGVycy4gUGxlYXNlIGZpeCBhbGwgcmVkIGZpeHR1cmVzIGJlZm9yZSBydW5uaW5nIGFsbG9jYXRpb24uXCIsXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0FsbG9jYXRpb25SdW4pIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuY29tcGxldGVBbGxvY2F0aW9uTW9kYWxSZWYsIHtcclxuICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgICAgfSkucmVzdWx0O1xyXG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge31cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmFwcGx5TG9naWNzTW9kYWxSZWYsIHtcclxuICAgICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgICAgfSkucmVzdWx0O1xyXG4gICAgICB9IGNhdGNoIChlcnI6IGFueSkge31cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQ2xpY2tSZXZlcnRBbGxvY2F0aW9uKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLnJldmVydEFsbG9jYXRpb25Nb2RhbFJlZiwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICB9KS5yZXN1bHQ7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge31cclxuICB9XHJcblxyXG4gIHJldmVydEFsbG9jYXRpb24oKSB7XHJcbiAgICBpZiAoIXRoaXMuZmxvb3JEYXRhQmVmb3JlQWxsb2NhdGlvbikge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiTm8gcHJldmlvdXMgc3RhdGUgZm91bmQgdG8gcmV2ZXJ0XCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbiA9IEpTT04ucGFyc2UoXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmxvb3JEYXRhQmVmb3JlQWxsb2NhdGlvbi5sYXlvdXRQb2x5Z29uKSxcclxuICAgICk7XHJcbiAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlID0gSlNPTi5wYXJzZShcclxuICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5mbG9vckRhdGFCZWZvcmVBbGxvY2F0aW9uLmNlbnRlckZpeHR1cmUpLFxyXG4gICAgKTtcclxuICAgIHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMgPSBKU09OLnBhcnNlKFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmZsb29yRGF0YUJlZm9yZUFsbG9jYXRpb24ub3RoZXJFbGVtZW50cyksXHJcbiAgICApO1xyXG4gICAgdGhpcy5mbG9vckRhdGEuc3RhdHVzID0gdGhpcy5mbG9vckRhdGFCZWZvcmVBbGxvY2F0aW9uLnN0YXR1cztcclxuXHJcbiAgICB0aGlzLmlzQWxsb2NhdGlvblJ1biA9IGZhbHNlO1xyXG4gICAgdGhpcy5mbG9vckRhdGFCZWZvcmVBbGxvY2F0aW9uID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLmV4dHJhY3RBbGxGaXh0dXJlcyh0aGlzLmZsb29yRGF0YSk7XHJcbiAgICB0aGlzLmRpc2FibGVFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSBudWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnRvZ2dsZVBhbmVsKFwibGVmdFwiLCBmYWxzZSk7XHJcbiAgICB0aGlzLnRvZ2dsZVBhbmVsKFwicmlnaHRcIiwgZmFsc2UpO1xyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcblxyXG4gICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KFwiQWxsb2NhdGlvbiByZXZlcnRlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb21wbGV0ZUFsbG9jYXRpb24oKSB7XHJcbiAgICB0aGlzLmlzQnV0dG9uTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZmxvb3JJZCA9IHRoaXMuZmxvb3JEYXRhLl9pZDtcclxuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZVN0b3JlUGxhbm8oe1xyXG4gICAgICAgICAgZmxvb3JJZCxcclxuICAgICAgICAgIG9uYm9hcmRpbmc6IHRydWUsXHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZmxvb3JEYXRhLFxyXG4gICAgICAgICAgICAvLyBpc1BsYW5vQXBwcm92ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN0YXR1czogXCJjb21wbGV0ZWRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBzdG9yZU5hbWUgPSB0aGlzLmZsb29yRGF0YT8uc3RvcmVOYW1lIHx8IHRoaXMucGxhbm9EYXRhPy5zdG9yZU5hbWU7XHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS50cmlnZ2VyQ3JlYXRlTGF5b3V0KHN0b3JlTmFtZSwgdGhpcy5jbGllbnRJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBzdWJtaXQgbGF5b3V0IGNoYW5nZXMuXCIpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChcIkFsbG9jYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcclxuICAgICAgICBgbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtP3BsYW5vSWQ9JHt0aGlzLmZsb29yRGF0YS5wbGFub0lkfSZmbG9vcklkPSR7dGhpcy5mbG9vckRhdGEuX2lkfWAsXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJjb21wbGV0ZUFsbG9jYXRpb24gZmFpbGVkOlwiLCBlcnJvcik7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gY29tcGxldGUgYWxsb2NhdGlvblwiKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNCdXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBydW5BbGxvY2F0aW9uKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5mbG9vckRhdGFCZWZvcmVBbGxvY2F0aW9uID0ge1xyXG4gICAgICAgIGxheW91dFBvbHlnb246IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikpLFxyXG4gICAgICAgIGNlbnRlckZpeHR1cmU6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSkpLFxyXG4gICAgICAgIG90aGVyRWxlbWVudHM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cykpLFxyXG4gICAgICAgIHN0YXR1czogdGhpcy5mbG9vckRhdGEuc3RhdHVzLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5yZW9yZGVyRml4dHVyZU51bWJlckJ5RGlzc2VjdGlvbigpO1xyXG5cclxuICAgICAgY29uc3Qgc3RvcmVOYW1lID0gdGhpcy5mbG9vckRhdGE/LnN0b3JlTmFtZSB8fCB0aGlzLnBsYW5vRGF0YT8uc3RvcmVOYW1lO1xyXG4gICAgICBpZiAoIXN0b3JlTmFtZSkge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJTdG9yZSBuYW1lIGlzIHJlcXVpcmVkXCIpO1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgc3RvcmVOYW1lOiBzdG9yZU5hbWUsXHJcbiAgICAgICAgICBsYXlvdXRQb2x5Z29uOiB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uIHx8IFtdLFxyXG4gICAgICAgICAgY2VudGVyRml4dHVyZTogdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSB8fCBbXSxcclxuICAgICAgICAgIG90aGVyRWxlbWVudHM6IHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMgfHwgW10sXHJcbiAgICAgICAgICBzdGF0dXM6IHRoaXMuZmxvb3JEYXRhLnN0YXR1cyB8fCBcImRyYWZ0XCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdG9yZU5hbWU6IHN0b3JlTmFtZSwgLy8gQWxzbyBhZGQgYXQgcm9vdCBsZXZlbCBhcyBmYWxsYmFja1xyXG4gICAgICAgIHR5cGU6IFwiaXZtXCIsXHJcbiAgICAgICAgaW5pdGlhbDogdHJ1ZSxcclxuICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UucnVuQWxvY2F0aW9uKHBheWxvYWQpLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uID1cclxuICAgICAgICAgIHJlc3BvbnNlLmRhdGEubGF5b3V0UG9seWdvbiB8fCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uO1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgPVxyXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YS5jZW50ZXJGaXh0dXJlIHx8IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cyA9XHJcbiAgICAgICAgICByZXNwb25zZS5kYXRhLm90aGVyRWxlbWVudHMgfHwgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cztcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5zdGF0dXMgPSByZXNwb25zZS5kYXRhLnN0YXR1cyB8fCB0aGlzLmZsb29yRGF0YS5zdGF0dXM7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBbGxvY2F0aW9uUnVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpc2FibGVFZGl0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5leHRyYWN0QWxsRml4dHVyZXModGhpcy5mbG9vckRhdGEpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJsZWZ0XCIsIHRydWUpO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChcclxuICAgICAgICAgIFwiQWxsb2NhdGlvbiBsb2dpYyBhcHBsaWVkIHN1Y2Nlc3NmdWxseVwiLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBhcHBseUlWTUxvZ2ljIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gYXBwbHkgYWxsb2NhdGlvbiBsb2dpY1wiKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNCdXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhcHByb3ZlTGF5b3V0KCkge1xyXG4gICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGZsb29ySWQgPSB0aGlzLmZsb29yRGF0YS5faWQ7XHJcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVTdG9yZVBsYW5vKHtcclxuICAgICAgICAgIGZsb29ySWQsXHJcbiAgICAgICAgICBkYXRhOiB7IC4uLnRoaXMuZmxvb3JEYXRhLCBzdGF0dXM6IFwiYWxsb2NhdGlvblBlbmRpbmdcIiB9LFxyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5mbG9vckRhdGEuaXNQbGFub0FwcHJvdmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5mbG9vckRhdGEuc3RhdHVzID0gXCJhbGxvY2F0aW9uUGVuZGluZ1wiO1xyXG5cclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KFwiTGF5b3V0IGFwcHJvdmVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgdGhpcy5sYXlvdXRGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pc1J1bkFsbG9jYXRpb25BbGxvd2VkKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcclxuICAgICAgICAgIGAvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtcy9vbmJvYXJkYCxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiYXBwcm92ZUxheW91dCBmYWlsZWQ6XCIsIGVycm9yKTtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBhcHByb3ZlIGxheW91dFwiKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNCdXR0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW9yZGVyRml4dHVyZU51bWJlckJ5RGlzc2VjdGlvbigpIHtcclxuICAgIGNvbnN0IGZsb29yRGF0YSA9IHRoaXMuZmxvb3JEYXRhO1xyXG4gICAgaWYgKCFmbG9vckRhdGEpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB3YWxsRml4dHVyZXM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBmbG9vckZpeHR1cmVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSAhPT0gXCJ3YWxsXCIpIHJldHVybjtcclxuICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIWZpeHR1cmU/Lmdob3N0KSB3YWxsRml4dHVyZXMucHVzaChmaXh0dXJlKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmbG9vckRhdGEuY2VudGVyRml4dHVyZS5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFmaXh0dXJlPy5naG9zdCkgZmxvb3JGaXh0dXJlcy5wdXNoKGZpeHR1cmUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZGlzc2VjdGlvblJlZmVyZW5jZSA9IHRoaXMuZ2V0RW50cmFuY2VEaXNzZWN0aW9uUmVmZXJlbmNlKGZsb29yRGF0YSk7XHJcbiAgICBjb25zdCBvcmRlcmVkV2FsbEZpeHR1cmVzID0gdGhpcy5zb3J0Rml4dHVyZXNCeURpc3NlY3Rpb25Qcmlvcml0eShcclxuICAgICAgd2FsbEZpeHR1cmVzLFxyXG4gICAgICBkaXNzZWN0aW9uUmVmZXJlbmNlLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IG9yZGVyZWRGbG9vckZpeHR1cmVzID0gdGhpcy5zb3J0Rml4dHVyZXNCeURpc3NlY3Rpb25Qcmlvcml0eShcclxuICAgICAgZmxvb3JGaXh0dXJlcyxcclxuICAgICAgZGlzc2VjdGlvblJlZmVyZW5jZSxcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGZpeHR1cmVOdW1iZXIgPSAxO1xyXG4gICAgWy4uLm9yZGVyZWRXYWxsRml4dHVyZXMsIC4uLm9yZGVyZWRGbG9vckZpeHR1cmVzXS5mb3JFYWNoKFxyXG4gICAgICAoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RW50cmFuY2VEaXNzZWN0aW9uUmVmZXJlbmNlKGZsb29yRGF0YTogYW55KToge1xyXG4gICAgb3JpZ2luOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XHJcbiAgICBkaXJlY3Rpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcclxuICB9IHwgbnVsbCB7XHJcbiAgICBjb25zdCBlbnRyYW5jZXMgPVxyXG4gICAgICBmbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZpbHRlcihcclxuICAgICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50Py5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiLFxyXG4gICAgICApID8/IFtdO1xyXG5cclxuICAgIGlmICghZW50cmFuY2VzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgcHJpbWFyeUVudHJhbmNlID0gWy4uLmVudHJhbmNlc10uc29ydChcclxuICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxyXG4gICAgICAgIChOdW1iZXIoYT8uZWxlbWVudE51bWJlcikgfHwgMCkgLSAoTnVtYmVyKGI/LmVsZW1lbnROdW1iZXIpIHx8IDApLFxyXG4gICAgKVswXTtcclxuXHJcbiAgICBjb25zdCBvcmlnaW5Vbml0ID0gcHJpbWFyeUVudHJhbmNlPy5yZWxhdGl2ZVBvc2l0aW9uPy51bml0IHx8IFwiZnRcIjtcclxuICAgIGNvbnN0IG9yaWdpbiA9IHtcclxuICAgICAgeDogdGhpcy50b1BpeGVscyhwcmltYXJ5RW50cmFuY2U/LnJlbGF0aXZlUG9zaXRpb24/LnggfHwgMCwgb3JpZ2luVW5pdCksXHJcbiAgICAgIHk6IHRoaXMudG9QaXhlbHMocHJpbWFyeUVudHJhbmNlPy5yZWxhdGl2ZVBvc2l0aW9uPy55IHx8IDAsIG9yaWdpblVuaXQpLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBhbmdsZURlZyA9IGZsb29yRGF0YT8uY2FkTGF5b3V0XHJcbiAgICAgID8gMFxyXG4gICAgICA6IE51bWJlcihcclxuICAgICAgICAgIHByaW1hcnlFbnRyYW5jZT8uYW5nbGUgPz9cclxuICAgICAgICAgICAgcHJpbWFyeUVudHJhbmNlPy5yZWxhdGl2ZVBvc2l0aW9uPy5hbmdsZSA/P1xyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICk7XHJcbiAgICBjb25zdCBhbmdsZVJhZCA9IChhbmdsZURlZyAqIE1hdGguUEkpIC8gMTgwO1xyXG5cclxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHtcclxuICAgICAgeDogTWF0aC5jb3MoYW5nbGVSYWQpLFxyXG4gICAgICB5OiBNYXRoLnNpbihhbmdsZVJhZCksXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB7IG9yaWdpbiwgZGlyZWN0aW9uIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNvcnRGaXh0dXJlc0J5RGlzc2VjdGlvblByaW9yaXR5KFxyXG4gICAgZml4dHVyZXM6IGFueVtdLFxyXG4gICAgZGlzc2VjdGlvblJlZmVyZW5jZToge1xyXG4gICAgICBvcmlnaW46IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcclxuICAgICAgZGlyZWN0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07XHJcbiAgICB9IHwgbnVsbCxcclxuICApOiBhbnlbXSB7XHJcbiAgICBpZiAoIWZpeHR1cmVzPy5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICBpZiAoIWRpc3NlY3Rpb25SZWZlcmVuY2UpIHtcclxuICAgICAgcmV0dXJuIFsuLi5maXh0dXJlc10uc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBlbGVtZW50RGVsdGEgPVxyXG4gICAgICAgICAgKE51bWJlcihhPy5hc3NvY2lhdGVkRWxlbWVudE51bWJlcikgfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIC1cclxuICAgICAgICAgIChOdW1iZXIoYj8uYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIpIHx8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcclxuICAgICAgICBpZiAoZWxlbWVudERlbHRhICE9PSAwKSByZXR1cm4gZWxlbWVudERlbHRhO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgKE51bWJlcihhPy5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIpIHx8XHJcbiAgICAgICAgICAgIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSAtXHJcbiAgICAgICAgICAoTnVtYmVyKGI/LmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcikgfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeyBvcmlnaW4sIGRpcmVjdGlvbiB9ID0gZGlzc2VjdGlvblJlZmVyZW5jZTtcclxuICAgIGNvbnN0IHNpZGVSYW5rID0gKHNpZGU6IG51bWJlcikgPT4gKHNpZGUgPCAwID8gMCA6IHNpZGUgPiAwID8gMSA6IDIpO1xyXG4gICAgY29uc3QgcHJvamVjdGlvblRvbGVyYW5jZSA9IDI0OyAvLyBweFxyXG5cclxuICAgIGNvbnN0IHBvc2l0aW9uZWQgPSBmaXh0dXJlcy5tYXAoKGZpeHR1cmU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBjb25zdCBmaXh0dXJlUG9pbnQgPSB0aGlzLmdldEZpeHR1cmVBbmNob3JQb2ludChmaXh0dXJlKTtcclxuICAgICAgY29uc3QgcmVsYXRpdmVYID0gZml4dHVyZVBvaW50LnggLSBvcmlnaW4ueDtcclxuICAgICAgY29uc3QgcmVsYXRpdmVZID0gZml4dHVyZVBvaW50LnkgLSBvcmlnaW4ueTtcclxuICAgICAgY29uc3QgY3Jvc3MgPSBkaXJlY3Rpb24ueCAqIHJlbGF0aXZlWSAtIGRpcmVjdGlvbi55ICogcmVsYXRpdmVYO1xyXG4gICAgICBjb25zdCBkb3QgPSBkaXJlY3Rpb24ueCAqIHJlbGF0aXZlWCArIGRpcmVjdGlvbi55ICogcmVsYXRpdmVZO1xyXG4gICAgICBjb25zdCBzaWRlID0gTWF0aC5hYnMoY3Jvc3MpIDwgMWUtNCA/IDAgOiBjcm9zcyA+IDAgPyAxIDogLTE7XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpeHR1cmUsXHJcbiAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgc2lkZSxcclxuICAgICAgICBwcm9qZWN0aW9uOiBkb3QsXHJcbiAgICAgICAgZGlzdGFuY2VGcm9tTGluZTogTWF0aC5hYnMoY3Jvc3MpLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcG9zaXRpb25lZC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNpZGVEZWx0YSA9IHNpZGVSYW5rKGEuc2lkZSkgLSBzaWRlUmFuayhiLnNpZGUpO1xyXG4gICAgICBpZiAoc2lkZURlbHRhICE9PSAwKSByZXR1cm4gc2lkZURlbHRhO1xyXG5cclxuICAgICAgY29uc3QgcHJvamVjdGlvbkRlbHRhID0gYS5wcm9qZWN0aW9uIC0gYi5wcm9qZWN0aW9uO1xyXG4gICAgICBpZiAoTWF0aC5hYnMocHJvamVjdGlvbkRlbHRhKSA+IHByb2plY3Rpb25Ub2xlcmFuY2UpXHJcbiAgICAgICAgcmV0dXJuIHByb2plY3Rpb25EZWx0YTtcclxuXHJcbiAgICAgIGNvbnN0IGxpbmVEaXN0YW5jZURlbHRhID0gYi5kaXN0YW5jZUZyb21MaW5lIC0gYS5kaXN0YW5jZUZyb21MaW5lO1xyXG4gICAgICBpZiAoTWF0aC5hYnMobGluZURpc3RhbmNlRGVsdGEpID4gMWUtNCkgcmV0dXJuIGxpbmVEaXN0YW5jZURlbHRhO1xyXG5cclxuICAgICAgY29uc3QgZWxlbWVudERlbHRhID1cclxuICAgICAgICAoTnVtYmVyKGEuZml4dHVyZT8uYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIpIHx8XHJcbiAgICAgICAgICBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgLVxyXG4gICAgICAgIChOdW1iZXIoYi5maXh0dXJlPy5hc3NvY2lhdGVkRWxlbWVudE51bWJlcikgfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgICBpZiAoZWxlbWVudERlbHRhICE9PSAwKSByZXR1cm4gZWxlbWVudERlbHRhO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZURlbHRhID1cclxuICAgICAgICAoTnVtYmVyKGEuZml4dHVyZT8uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyKSB8fFxyXG4gICAgICAgICAgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIC1cclxuICAgICAgICAoTnVtYmVyKGIuZml4dHVyZT8uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyKSB8fFxyXG4gICAgICAgICAgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgICBpZiAoZml4dHVyZURlbHRhICE9PSAwKSByZXR1cm4gZml4dHVyZURlbHRhO1xyXG5cclxuICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHBvc2l0aW9uZWQubWFwKChpdGVtKSA9PiBpdGVtLmZpeHR1cmUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaXh0dXJlQW5jaG9yUG9pbnQoZml4dHVyZTogYW55KTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHtcclxuICAgIGNvbnN0IHBvc2l0aW9uVW5pdCA9IGZpeHR1cmU/LnJlbGF0aXZlUG9zaXRpb24/LnVuaXQgfHwgXCJmdFwiO1xyXG4gICAgY29uc3Qgd2lkdGhVbml0ID0gZml4dHVyZT8uZml4dHVyZVN0YXRpY1dpZHRoPy51bml0IHx8IFwiZnRcIjtcclxuICAgIGNvbnN0IGxlbmd0aFVuaXQgPSBmaXh0dXJlPy5maXh0dXJlU3RhdGljTGVuZ3RoPy51bml0IHx8IFwiZnRcIjtcclxuXHJcbiAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhmaXh0dXJlPy5yZWxhdGl2ZVBvc2l0aW9uPy54IHx8IDAsIHBvc2l0aW9uVW5pdCk7XHJcbiAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhmaXh0dXJlPy5yZWxhdGl2ZVBvc2l0aW9uPy55IHx8IDAsIHBvc2l0aW9uVW5pdCk7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIGZpeHR1cmU/LmZpeHR1cmVTdGF0aWNXaWR0aD8udmFsdWUgfHwgMCxcclxuICAgICAgd2lkdGhVbml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIGZpeHR1cmU/LmZpeHR1cmVTdGF0aWNMZW5ndGg/LnZhbHVlIHx8IDAsXHJcbiAgICAgIGxlbmd0aFVuaXQsXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHg6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgIHk6IHkgKyBoZWlnaHQgLyAyLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZHJhd0VudHJhbmNlRGlzc2VjdGlvbkxpbmUoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICBhcnJvd0dyb3VwOiBmYWJyaWMuR3JvdXAsXHJcbiAgICBhcnJvd1dpZHRoOiBudW1iZXIsXHJcbiAgICBhcnJvd0hlaWdodDogbnVtYmVyLFxyXG4gICAgYW5nbGU6IG51bWJlcixcclxuICApIHtcclxuICAgIC8vIEdldCB0aGUgYXJyb3cgcGF0aCBmcm9tIHRoZSBncm91cFxyXG4gICAgY29uc3Qgb2JqZWN0cyA9IGFycm93R3JvdXAuZ2V0T2JqZWN0cygpO1xyXG4gICAgY29uc3QgYXJyb3dQYXRoID0gb2JqZWN0cy5maW5kKChvYmopID0+IG9iai50eXBlID09PSBcInBhdGhcIikgYXMgZmFicmljLlBhdGg7XHJcblxyXG4gICAgaWYgKCFhcnJvd1BhdGgpIHJldHVybjtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGdyb3VwJ3MgYm91bmRpbmcgYm94IHRvIGZpbmQgdGhlIGNlbnRlclxyXG4gICAgY29uc3QgZ3JvdXBCb3VuZHMgPSBhcnJvd0dyb3VwLmdldEJvdW5kaW5nUmVjdCgpO1xyXG5cclxuICAgIC8vIFRoZSBwYXRoJ3MgcG9zaXRpb24gd2l0aGluIHRoZSBncm91cFxyXG4gICAgY29uc3QgcGF0aExlZnQgPSBhcnJvd1BhdGgubGVmdCB8fCAwO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSB0aXAgWDogcmlnaHRtb3N0IHBvaW50IG9mIHRoZSBwYXRoXHJcbiAgICBjb25zdCB0aXBJbkdyb3VwWCA9IHBhdGhMZWZ0ICsgYXJyb3dXaWR0aDtcclxuXHJcbiAgICBjb25zdCBncm91cENlbnRlciA9IGFycm93R3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuICAgIGNvbnN0IGludk1hdHJpeCA9IGZhYnJpYy51dGlsLmludmVydFRyYW5zZm9ybShcclxuICAgICAgYXJyb3dHcm91cC5jYWxjVHJhbnNmb3JtTWF0cml4KCksXHJcbiAgICApO1xyXG4gICAgY29uc3QgZ3JvdXBDZW50ZXJJbkdyb3VwID0gZmFicmljLnV0aWwudHJhbnNmb3JtUG9pbnQoXHJcbiAgICAgIGdyb3VwQ2VudGVyLFxyXG4gICAgICBpbnZNYXRyaXgsXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFVzZSB0aGUgZ3JvdXAncyB2ZXJ0aWNhbCBjZW50ZXIgZm9yIFlcclxuICAgIGNvbnN0IHRpcEluR3JvdXBZID0gZ3JvdXBDZW50ZXJJbkdyb3VwLnk7XHJcblxyXG4gICAgLy8gVHJhbnNmb3JtIGZyb20gZ3JvdXAgY29vcmRpbmF0ZXMgdG8gY2FudmFzIGNvb3JkaW5hdGVzXHJcbiAgICBjb25zdCB0aXBQb2ludCA9IG5ldyBmYWJyaWMuUG9pbnQodGlwSW5Hcm91cFgsIHRpcEluR3JvdXBZKTtcclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkUG9pbnQgPSBmYWJyaWMudXRpbC50cmFuc2Zvcm1Qb2ludChcclxuICAgICAgdGlwUG9pbnQsXHJcbiAgICAgIGFycm93R3JvdXAuY2FsY1RyYW5zZm9ybU1hdHJpeCgpLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRpcFggPSB0cmFuc2Zvcm1lZFBvaW50Lng7XHJcbiAgICBjb25zdCB0aXBZID0gdHJhbnNmb3JtZWRQb2ludC55O1xyXG5cclxuICAgIC8vIEdldCBzdG9yZSBib3VuZHNcclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG4gICAgaWYgKCFib3VuZHMud2lkdGggfHwgIWJvdW5kcy5oZWlnaHQpIHJldHVybjtcclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgZGlyZWN0aW9uIHZlY3RvciBwYXJhbGxlbCB0byB0aGUgZW50cmFuY2UgKGluIHRoZSBkaXJlY3Rpb24gdGhlIGFycm93IHBvaW50cylcclxuICAgIGNvbnN0IHJhZCA9IChhbmdsZSAqIE1hdGguUEkpIC8gMTgwO1xyXG4gICAgY29uc3QgZGlyZWN0aW9uWCA9IE1hdGguY29zKHJhZCk7XHJcbiAgICBjb25zdCBkaXJlY3Rpb25ZID0gTWF0aC5zaW4ocmFkKTtcclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgaW50ZXJzZWN0aW9uIHBvaW50cyB3aXRoIHN0b3JlIGJvdW5kYXJpZXMgdXNpbmcgbGluZS1yZWN0YW5nbGUgaW50ZXJzZWN0aW9uXHJcbiAgICBjb25zdCBpbnRlcnNlY3Rpb25zOiBBcnJheTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0+ID0gW107XHJcblxyXG4gICAgLy8gQ2hlY2sgaW50ZXJzZWN0aW9uIHdpdGggZWFjaCBib3VuZGFyeSBlZGdlXHJcbiAgICBjb25zdCBlZGdlcyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHgxOiBib3VuZHMubGVmdCxcclxuICAgICAgICB5MTogYm91bmRzLnRvcCxcclxuICAgICAgICB4MjogYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGgsXHJcbiAgICAgICAgeTI6IGJvdW5kcy50b3AsXHJcbiAgICAgIH0sIC8vIFRvcFxyXG4gICAgICB7XHJcbiAgICAgICAgeDE6IGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoLFxyXG4gICAgICAgIHkxOiBib3VuZHMudG9wLFxyXG4gICAgICAgIHgyOiBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCxcclxuICAgICAgICB5MjogYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQsXHJcbiAgICAgIH0sIC8vIFJpZ2h0XHJcbiAgICAgIHtcclxuICAgICAgICB4MTogYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGgsXHJcbiAgICAgICAgeTE6IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0LFxyXG4gICAgICAgIHgyOiBib3VuZHMubGVmdCxcclxuICAgICAgICB5MjogYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQsXHJcbiAgICAgIH0sIC8vIEJvdHRvbVxyXG4gICAgICB7XHJcbiAgICAgICAgeDE6IGJvdW5kcy5sZWZ0LFxyXG4gICAgICAgIHkxOiBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCxcclxuICAgICAgICB4MjogYm91bmRzLmxlZnQsXHJcbiAgICAgICAgeTI6IGJvdW5kcy50b3AsXHJcbiAgICAgIH0sIC8vIExlZnRcclxuICAgIF07XHJcblxyXG4gICAgLy8gRXh0ZW5kIGxpbmUgaW4gYm90aCBkaXJlY3Rpb25zIHRvIGZpbmQgaW50ZXJzZWN0aW9uc1xyXG4gICAgY29uc3QgbWF4RGlzdGFuY2UgPSBNYXRoLm1heChib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpICogMjtcclxuICAgIGZvciAoY29uc3QgZWRnZSBvZiBlZGdlcykge1xyXG4gICAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSB0aGlzLmxpbmVJbnRlcnNlY3Rpb24oXHJcbiAgICAgICAgdGlwWCxcclxuICAgICAgICB0aXBZLFxyXG4gICAgICAgIHRpcFggKyBkaXJlY3Rpb25YICogbWF4RGlzdGFuY2UsXHJcbiAgICAgICAgdGlwWSArIGRpcmVjdGlvblkgKiBtYXhEaXN0YW5jZSxcclxuICAgICAgICBlZGdlLngxLFxyXG4gICAgICAgIGVkZ2UueTEsXHJcbiAgICAgICAgZWRnZS54MixcclxuICAgICAgICBlZGdlLnkyLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uKSB7XHJcbiAgICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdGlvbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbkJhY2sgPSB0aGlzLmxpbmVJbnRlcnNlY3Rpb24oXHJcbiAgICAgICAgdGlwWCxcclxuICAgICAgICB0aXBZLFxyXG4gICAgICAgIHRpcFggLSBkaXJlY3Rpb25YICogbWF4RGlzdGFuY2UsXHJcbiAgICAgICAgdGlwWSAtIGRpcmVjdGlvblkgKiBtYXhEaXN0YW5jZSxcclxuICAgICAgICBlZGdlLngxLFxyXG4gICAgICAgIGVkZ2UueTEsXHJcbiAgICAgICAgZWRnZS54MixcclxuICAgICAgICBlZGdlLnkyLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uQmFjaykge1xyXG4gICAgICAgIGludGVyc2VjdGlvbnMucHVzaChpbnRlcnNlY3Rpb25CYWNrKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgIC8vIEZpbmQgdGhlIHR3byBwb2ludHMgdGhhdCBhcmUgZmFydGhlc3QgYXBhcnQgKHRvIGRyYXcgdGhlIGZ1bGwgbGluZSBhY3Jvc3MgdGhlIHN0b3JlKVxyXG4gICAgICBsZXQgbWF4RGlzdCA9IDA7XHJcbiAgICAgIGxldCBwb2ludDEgPSBpbnRlcnNlY3Rpb25zWzBdO1xyXG4gICAgICBsZXQgcG9pbnQyID0gaW50ZXJzZWN0aW9uc1sxXTtcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50ZXJzZWN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGludGVyc2VjdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IGRpc3QgPSBNYXRoLnNxcnQoXHJcbiAgICAgICAgICAgIE1hdGgucG93KGludGVyc2VjdGlvbnNbaV0ueCAtIGludGVyc2VjdGlvbnNbal0ueCwgMikgK1xyXG4gICAgICAgICAgICAgIE1hdGgucG93KGludGVyc2VjdGlvbnNbaV0ueSAtIGludGVyc2VjdGlvbnNbal0ueSwgMiksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGRpc3QgPiBtYXhEaXN0KSB7XHJcbiAgICAgICAgICAgIG1heERpc3QgPSBkaXN0O1xyXG4gICAgICAgICAgICBwb2ludDEgPSBpbnRlcnNlY3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBwb2ludDIgPSBpbnRlcnNlY3Rpb25zW2pdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRHJhdyB0aGUgbGluZVxyXG4gICAgICBjb25zdCBsaW5lID0gbmV3IGZhYnJpYy5MaW5lKFtwb2ludDEueCwgcG9pbnQxLnksIHBvaW50Mi54LCBwb2ludDIueV0sIHtcclxuICAgICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgfSkgYXMgZmFicmljLkxpbmUgJiB7IGlzRGlzc2VjdGlvbkxpbmU/OiBib29sZWFuIH07XHJcblxyXG4gICAgICBsaW5lLmlzRGlzc2VjdGlvbkxpbmUgPSB0cnVlO1xyXG5cclxuICAgICAgY2FudmFzLmFkZChsaW5lKTtcclxuICAgICAgY2FudmFzLnNlbmRPYmplY3RUb0JhY2sobGluZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpbmVJbnRlcnNlY3Rpb24oXHJcbiAgICB4MTogbnVtYmVyLFxyXG4gICAgeTE6IG51bWJlcixcclxuICAgIHgyOiBudW1iZXIsXHJcbiAgICB5MjogbnVtYmVyLFxyXG4gICAgeDM6IG51bWJlcixcclxuICAgIHkzOiBudW1iZXIsXHJcbiAgICB4NDogbnVtYmVyLFxyXG4gICAgeTQ6IG51bWJlcixcclxuICApOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsIHtcclxuICAgIGNvbnN0IGRlbm9tID0gKHgxIC0geDIpICogKHkzIC0geTQpIC0gKHkxIC0geTIpICogKHgzIC0geDQpO1xyXG4gICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8IDFlLTEwKSByZXR1cm4gbnVsbDsgLy8gTGluZXMgYXJlIHBhcmFsbGVsXHJcblxyXG4gICAgY29uc3QgdCA9ICgoeDEgLSB4MykgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MykgKiAoeDMgLSB4NCkpIC8gZGVub207XHJcbiAgICBjb25zdCB1ID0gLSgoeDEgLSB4MikgKiAoeTEgLSB5MykgLSAoeTEgLSB5MikgKiAoeDEgLSB4MykpIC8gZGVub207XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgaW50ZXJzZWN0aW9uIGlzIHdpdGhpbiBib3RoIGxpbmUgc2VnbWVudHNcclxuICAgIGlmICh0ID49IDAgJiYgdCA8PSAxICYmIHUgPj0gMCAmJiB1IDw9IDEpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB4OiB4MSArIHQgKiAoeDIgLSB4MSksXHJcbiAgICAgICAgeTogeTEgKyB0ICogKHkyIC0geTEpLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVEaXNzZWN0aW9uTGluZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGNvbnN0IGRpc3NlY3Rpb25MaW5lcyA9IG9iamVjdHMuZmlsdGVyKFxyXG4gICAgICAob2JqOiBhbnkpID0+IG9iai5pc0Rpc3NlY3Rpb25MaW5lID09PSB0cnVlLFxyXG4gICAgKTtcclxuXHJcbiAgICBkaXNzZWN0aW9uTGluZXMuZm9yRWFjaCgobGluZSkgPT4ge1xyXG4gICAgICB0aGlzLmNhbnZhcz8ucmVtb3ZlKGxpbmUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVEaXNzZWN0aW9uTGluZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5yZW1vdmVEaXNzZWN0aW9uTGluZXMoKTtcclxuXHJcbiAgICBjb25zdCBlbnRyYW5jZU9iamVjdHMgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iajogYW55KSA9PiBvYmoub2JqVHlwZSA9PT0gXCJlbnRyYW5jZVwiKSBhcyBmYWJyaWMuR3JvdXBbXTtcclxuXHJcbiAgICBlbnRyYW5jZU9iamVjdHMuZm9yRWFjaCgoZW50cmFuY2VHcm91cCkgPT4ge1xyXG4gICAgICBjb25zdCBlbGVtZW50RGF0YSA9IChlbnRyYW5jZUdyb3VwIGFzIGFueSkuZGF0YTtcclxuICAgICAgaWYgKCFlbGVtZW50RGF0YSkgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3Qgd2lkdGggPSBlbnRyYW5jZUdyb3VwLmdldFNjYWxlZFdpZHRoKCkgfHwgODA7XHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IGVudHJhbmNlR3JvdXAuZ2V0U2NhbGVkSGVpZ2h0KCkgfHwgNzU7XHJcbiAgICAgIGNvbnN0IGFuZ2xlID0gZW50cmFuY2VHcm91cC5hbmdsZSB8fCAwO1xyXG5cclxuICAgICAgdGhpcy5kcmF3RW50cmFuY2VEaXNzZWN0aW9uTGluZShcclxuICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICBlbnRyYW5jZUdyb3VwLFxyXG4gICAgICAgIHdpZHRoLFxyXG4gICAgICAgIGhlaWdodCxcclxuICAgICAgICBhbmdsZSxcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cIm9uYm9hcmQtcGxhbm9cIj5cclxuICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJpc1BhZ2VMb2FkaW5nXCIgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG0tMFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyU2tlbGV0b25cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNrZWxldG9uTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza2VsZXRvbkxvYWRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2tlbGV0b25Mb2FkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQ29udGVudCAtLT5cclxuICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogaXNQYWdlTG9hZGluZyB9XCI+XHJcbiAgICAgICAgPCEtLSBIZWFkZXIgQWNjb3JkaW9uIC0tPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJoZWFkZXJcIiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiIGNsYXNzPVwibXktNFwiPlxyXG4gICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkl0ZW09XCJkZXRhaWxzXCIgW2NvbGxhcHNlZF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25IZWFkZXIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHB4LTYgcHktM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDo1cHg7XCIgKm5nSWY9XCJwbGFub0RhdGE/LnN0b3JlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSd0aXRsZSc+e3twbGFub0RhdGE/LnN0b3JlTmFtZX19IC0gUGxhbm88L2gyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgKm5nSWY9XCJmbG9vcnNMaXN0Lmxlbmd0aFwiIFtmb3JtQ29udHJvbF09XCJzZWxlY3RlZEZsb29ySWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiIFtkYXRhXT1cImZsb29yc0xpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWVkaXRGaXh0dXJlXCIgY2xhc3M9XCJ1cGRhdGVDbGFzc1wiPkxhc3QgVXBkYXRlOiB7e2Zsb29yRGF0YT8udXBkYXRlZEF0fX08L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVkaXQgRml4dHVyZSBNb2RlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25GaXh0dXJlUGFnZUNhbmNlbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCIgKGNsaWNrKT1cIm9uRml4dHVyZVNhdmUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlICYgQ2xvc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JBY2NvcmRpb25CdXR0b24+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJoZWFkZXJcIiBjbGFzcz1cInJvdyBteC0wIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBsYW5vIENvbXBsZXRpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY3Vyc29yOiB1bnNldDtcIiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGFubyBDb21wbGV0aW9uICVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIG5nYlRvb2x0aXA9XCIlIG9mIG92ZXJhbGwgcGxhbm9ncmFtIGNvbXBsZXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTUxN18xMjk4MDUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05IDEyVjlNOSA2SDkuMDA3NU0xNi41IDlDMTYuNSAxMy4xNDIxIDEzLjE0MjEgMTYuNSA5IDE2LjVDNC44NTc4NiAxNi41IDEuNSAxMy4xNDIxIDEuNSA5QzEuNSA0Ljg1Nzg2IDQuODU3ODYgMS41IDkgMS41QzEzLjE0MjEgMS41IDE2LjUgNC44NTc4NiAxNi41IDlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTUxN18xMjk4MDVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBzdHlsZT1cImhlaWdodDogNHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhclwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsyNSwgNTBdLmluY2x1ZGVzKGdldFByb2dyZXNzVmFsdWUpID8gJ2JnLXdhcm5pbmcnIDogJ2JnLXN1Y2Nlc3MnXCIgcm9sZT1cInByb2dyZXNzYmFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIid3aWR0aDonICsgZ2V0UHJvZ3Jlc3NWYWx1ZSArICclJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiZ2V0UHJvZ3Jlc3NWYWx1ZVwiIGFyaWEtdmFsdWVtaW49XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW1heD1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj57eyBnZXRQcm9ncmVzc1ZhbHVlIH19JTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMYXlvdXQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY3Vyc29yOiB1bnNldDtcIiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPjxiPnt7Zmxvb3JEYXRhPy5mbG9vck51bWJlcn19L3t7IHBsYW5vRGF0YT8uZmxvb3JzPy5sZW5ndGggfX08L2I+IExheW91dDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZGljYXRvciBtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzID09PSAnYWxsb2NhdGlvblBlbmRpbmcnID8gJ2NvbXBsZXRlZCcgOiAnZHJhZnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFN0YXR1cyA9PT0gJ2FsbG9jYXRpb25QZW5kaW5nJyA/ICdDb21wbGV0ZWQnIDogJ0RyYWZ0JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaXh0dXJlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjdXJzb3I6IHVuc2V0O1wiIGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGI+e3sgYWxsRml4dHVyZUluc3RhbmNlcy5sZW5ndGggfX08L2I+IEZpeHR1cmVzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kaWNhdG9yIG10LTJcIiBbbmdDbGFzc109XCJnZXRTdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U3RhdHVzVGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBCb2R5IC0tPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJib2R5XCIgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPCEtLSBMZWZ0IENvbHVtbiAtLT5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sbGFwc2VkLWNvbCc6IGlzTGVmdFBhbmVsQ29sbGFwc2VkLCAnY29sLTMnOiAhaXNMZWZ0UGFuZWxDb2xsYXBzZWQsJ2Qtbm9uZSc6IGVkaXRGaXh0dXJlICB9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicy1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW25nQ2xhc3NdPVwieyAnZC1ub25lJzogaXNMZWZ0UGFuZWxDb2xsYXBzZWQgfVwiIFtmb3JtR3JvdXBdPVwibGF5b3V0Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbiBhY2NvcmRpb249XCJOZ2JBY2NvcmRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gV2FsbHMgU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtV2FsbHMuY29udHJvbHMubGVuZ3RoOyBlbHNlIGFkZFdhbGxBY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJ3YWxsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBnZXRGb3JtV2FsbHMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiIFtuZ2JBY2NvcmRpb25JdGVtXT1cImkudG9TdHJpbmcoKVwiIGNsYXNzPVwibWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWFpbmhlYWRpbmcgcC0wXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgd2FsbC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5nZXQoXCJlbGVtZW50VHlwZVwiKT8udmFsdWUgfCB0aXRsZWNhc2UgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihsYXlvdXRGb3JtLmVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTFcIiBuZ2JUb29sdGlwPVwiUm90YXRlIHRoaXMgd2FsbC5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJvdGF0ZVdhbGwoZ2V0RWxlbWVudE51bWJlcihncm91cCkhKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjczNzM1IDguMjUwMTFDNC4xMjE5MyA4LjI0MzYyIDQuNDQzNzcgOC41Mjc3NiA0LjQ5MzM4IDguODk5OThMNC40OTk5IDguOTg3MzVMNC41MDI2MiA5LjE1NTE2QzQuNTg0MzQgMTEuNTc0MSA2LjU3MjQzIDEzLjUgOSAxMy41QzkuMTQwMjIgMTMuNSA5LjI3OTUxIDEzLjQ5MzYgOS40MTc1NiAxMy40ODA5TDkuMjE5NjcgMTMuMjgwM0M4LjkyNjc4IDEyLjk4NzQgOC45MjY3OCAxMi41MTI2IDkuMjE5NjcgMTIuMjE5N0M5LjUxMjU3IDExLjkyNjggOS45ODc0NCAxMS45MjY4IDEwLjI4MDMgMTIuMjE5N0wxMS43ODAzIDEzLjcxOTdDMTIuMDczMiAxNC4wMTI2IDEyLjA3MzIgMTQuNDg3NCAxMS43ODAzIDE0Ljc4MDNMMTAuMjgwMyAxNi4yODAzQzkuOTg3NDQgMTYuNTczMiA5LjUxMjU3IDE2LjU3MzIgOS4yMTk2NyAxNi4yODAzQzguOTI2NzggMTUuOTg3NCA4LjkyNjc4IDE1LjUxMjYgOS4yMTk2NyAxNS4yMTk3TDkuNDU4MzcgMTQuOTgyN0M5LjMwNjQ2IDE0Ljk5NDIgOS4xNTM1OSAxNSA5IDE1QzUuODI2NTMgMTUgMy4yMTY2NSAxMi41MzIxIDMuMDEyNSA5LjM4Mjg5TDMuMDAzMTUgOS4xOTMxNEwzLjAwMDExIDkuMDEyNjVDMi45OTMxMiA4LjU5ODQ5IDMuMzIzMiA4LjI1NzA5IDMuNzM3MzUgOC4yNTAxMVpNOC43ODAzMyAxLjcxOTY3QzkuMDUwNyAxLjk5MDAzIDkuMDcxNDkgMi40MTU0NiA4Ljg0MjcyIDIuNzA5NjdMOC43ODAzMyAyLjc4MDMzTDguNTQxODcgMy4wMTcyNkM4LjY5MzcxIDMuMDA1NzggOC44NDY1IDMgOSAzQzEyLjMxMzcgMyAxNSA1LjY4NjI5IDE1IDlDMTUgOS40MTQyMSAxNC42NjQyIDkuNzUgMTQuMjUgOS43NUMxMy44MzU4IDkuNzUgMTMuNSA5LjQxNDIxIDEzLjUgOUMxMy41IDYuNTE0NzIgMTEuNDg1MyA0LjUgOSA0LjVDOC44NTk3IDQuNSA4LjcyMDM0IDQuNTA2NCA4LjU4MjIxIDQuNTE5MDlMOC43ODAzMyA0LjcxOTY3QzkuMDczMjMgNS4wMTI1NiA5LjA3MzIzIDUuNDg3NDQgOC43ODAzMyA1Ljc4MDMzQzguNTA5OTcgNi4wNTA2OSA4LjA4NDU1IDYuMDcxNDkgNy43OTAzMyA1Ljg0MjcyTDcuNzE5NjcgNS43ODAzM0w2LjIxOTY3IDQuMjgwMzNDNS45NDkzMSA0LjAwOTk3IDUuOTI4NTEgMy41ODQ1NCA2LjE1NzI4IDMuMjkwMzNMNi4yMTk2NyAzLjIxOTY3TDcuNzE5NjcgMS43MTk2N0M4LjAxMjU3IDEuNDI2NzggOC40ODc0NCAxLjQyNjc4IDguNzgwMzMgMS43MTk2N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIHN0cm9rZT1cIiM0NzU0NjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIwLjAwMDY0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiIG5nYlRvb2x0aXA9XCJJbnNlcnQgbmV3IHdhbGwgYmVsb3cuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdXYWxsKGdldEVsZW1lbnROdW1iZXIoZ3JvdXApISk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzYyXzgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgOS43NUMxMS4wNzA3IDkuNzUgMTIuNzUgMTEuNDI5MyAxMi43NSAxMy41QzEyLjc1IDE1LjU3MDggMTEuMDcwNyAxNy4yNSA5IDE3LjI1QzYuOTI5MjUgMTcuMjUgNS4yNSAxNS41NzA4IDUuMjUgMTMuNUM1LjI1IDExLjQyOTMgNi45MjkyNSA5Ljc1IDkgOS43NVpNOS43NSAxMS4yNUg4LjI1VjEyLjc0OTNMNi43NSAxMi43NVYxNC4yNUw4LjI1IDE0LjI0OTNWMTUuNzVIOS43NVYxNC4yNDkzTDExLjI1IDE0LjI1VjEyLjc1TDkuNzUgMTIuNzQ5M1YxMS4yNVpNMTUgMi4yNUMxNS40MTQgMi4yNSAxNS43NSAyLjU4NiAxNS43NSAzVjcuNUMxNS43NSA3LjkxNCAxNS40MTQgOC4yNSAxNSA4LjI1SDNDMi41ODYgOC4yNSAyLjI1IDcuOTE0IDIuMjUgNy41VjNDMi4yNSAyLjU4NiAyLjU4NiAyLjI1IDMgMi4yNUgxNVpNMy43NSAzLjc1VjYuNzVIMTQuMjVWMy43NUgzLjc1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82Ml84XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiUmVtb3ZlIHRoaXMgd2FsbCBhbmQgaXRzIGZpeHR1cmVzLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlV2FsbChnZXRFbGVtZW50TnVtYmVyKGdyb3VwKSEpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF82M18yNSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNzA5NCAxLjVDMTEuMzU1MSAxLjUgMTEuOTI4MyAxLjkxMzE0IDEyLjEzMjQgMi41MjU2NUwxMi41NDA2IDMuNzVIMTVDMTUuNDE0MiAzLjc1IDE1Ljc1IDQuMDg1NzkgMTUuNzUgNC41QzE1Ljc1IDQuOTE0MiAxNS40MTQyIDUuMjQ5OTkgMTUgNS4yNUwxNC45OTgxIDUuMzAzNDRMMTQuMzQ3NiAxNC40MTAzQzE0LjI2MzUgMTUuNTg3OCAxMy4yODM4IDE2LjUgMTIuMTAzNCAxNi41SDUuODk2NjhDNC43MTYyNCAxNi41IDMuNzM2NSAxNS41ODc4IDMuNjUyNCAxNC40MTAzTDMuMDAxOTEgNS4zMDM0NEMzLjAwMDYyIDUuMjg1NTEgMi45OTk5OCA1LjI2NzY5IDIuOTk5OTcgNS4yNUMyLjU4NTc3IDUuMjQ5OTkgMi4yNSA0LjkxNDIgMi4yNSA0LjVDMi4yNSA0LjA4NTc5IDIuNTg1NzkgMy43NSAzIDMuNzVINS40NTk0M0w1Ljg2NzU0IDIuNTI1NjVDNi4wNzE3MiAxLjkxMzE0IDYuNjQ0OTMgMS41IDcuMjkwNTcgMS41SDEwLjcwOTRaTTEzLjQ5ODEgNS4yNUg0LjUwMTkxTDUuMTQ4NTggMTQuMzAzNEM1LjE3NjYyIDE0LjY5NiA1LjUwMzIgMTUgNS44OTY2OCAxNUgxMi4xMDM0QzEyLjQ5NjggMTUgMTIuODIzNCAxNC42OTYgMTIuODUxNCAxNC4zMDM0TDEzLjQ5ODEgNS4yNVpNNy41IDcuNUM3Ljg4NDY0IDcuNSA4LjIwMTYzIDcuNzg5NTIgOC4yNDQ5NSA4LjE2MjUzTDguMjUgOC4yNVYxMkM4LjI1IDEyLjQxNDIgNy45MTQyMiAxMi43NSA3LjUgMTIuNzVDNy4xMTUzNyAxMi43NSA2Ljc5ODM3IDEyLjQ2MDUgNi43NTUwNSAxMi4wODc1TDYuNzUgMTJWOC4yNUM2Ljc1IDcuODM1NzggNy4wODU3OCA3LjUgNy41IDcuNVpNMTAuNSA3LjVDMTAuOTE0MiA3LjUgMTEuMjUgNy44MzU3OCAxMS4yNSA4LjI1VjEyQzExLjI1IDEyLjQxNDIgMTAuOTE0MiAxMi43NSAxMC41IDEyLjc1QzEwLjA4NTggMTIuNzUgOS43NSAxMi40MTQyIDkuNzUgMTJWOC4yNUM5Ljc1IDcuODM1NzggMTAuMDg1OCA3LjUgMTAuNSA3LjVaTTEwLjcwOTQgM0g3LjI5MDU3TDcuMDQwNTcgMy43NUgxMC45NTk1TDEwLjcwOTQgM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGMzJCMkJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNjNfMjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJwcy0wIHBlLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWluLWhlaWdodDogNTBweFwiIGRuZERyb3B6b25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkbmREcm9wKT1cIm9uRHJvcCgkZXZlbnQsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRml4dHVyZXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtRml4dHVyZXMoaSkuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmaXh0dXJlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpeHR1cmUgb2YgZ2V0Rm9ybUZpeHR1cmVzKGkpLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZG5kRHJvcHpvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkbmREcm9wKT1cIm9uRHJvcCgkZXZlbnQsIGksIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZERyYWdnYWJsZV09XCJ7IHdhbGxJbmRleDogaSwgZml4dHVyZUluZGV4OiBqIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZEVmZmVjdEFsbG93ZWRdPVwiJ2FsbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3cgZy0wIG1iLTVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZERpc2FibGVEcmFnSWZdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBkbmREcmFnSW1hZ2VSZWZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7IGN1cnNvcjogbGF5b3V0Rm9ybS5kaXNhYmxlZCA/ICdkZWZhdWx0JyA6ICdtb3ZlJywgb3BhY2l0eTogJzAuNScgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI1cHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0gNC40OTYwOTQgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAtNiA2IGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIC02IDYgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gMCAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiZ3JleVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpeHR1cmVDb25maWdJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInbmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJmaXh0dXJlVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidGaXh0dXJlICcgKyAoaiArIDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1YlRleHRGaWVsZF09XCInc3VidGV4dCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZGVsZXRlRml4dHVyZSgnd2FsbCcsIGosIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiAxOHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTAgMTBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDFMMSA5TTEgMUw5IDlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3Rml4dHVyZSgnd2FsbCcsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGZpeHR1cmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggZGFzaGVkICMwMDAwMDA7XCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gT3RoZXIgRWxlbWVudHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0V2FsbE90aGVyRWxlbWVudHMoaSkuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJvdGhlckVsZW1lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRXYWxsT3RoZXJFbGVtZW50cyhpKS5jb250cm9sczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImpcIiBjbGFzcz1cInJvdyBnLTAgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaiArIDEgfX08L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIGJvdW5kIHRvICd0eXBlJyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbaWRGaWVsZF09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwib3RoZXJFbGVtZW50TGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZWxlbWVudExhYmVsJyArIGpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgY3VzdG9tIHRleHQgaW5wdXQgb25seSB3aGVuICdPdGhlcnMnIGlzIHNlbGVjdGVkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihmaXh0dXJlLmdldCgndHlwZScpPy52YWx1ZSkgPT09ICdPdGhlcnMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgY3VzdG9tIGVsZW1lbnQgbmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwicmVtb3ZlT3RoZXJFbGVtZW50KCd3YWxsJywgaiwgaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMUwxIDlNMSAxTDkgOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJsaW5rLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdPdGhlckVsZW1lbnRzKCd3YWxsJywgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhZGRXYWxsQWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZE5ld1dhbGwoMClcIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgdy0xMDAgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc2VydCBuZXcgd2FsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggZGFzaGVkICMwMDAwMDA7XCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZsb29yIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ2JBY2NvcmRpb25JdGVtXT1cIidmbG9vcidcIiBjbGFzcz1cIm1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1haW5oZWFkaW5nIHAtMFwiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMiB3YWxsLWxhYmVsXCI+Rmxvb3I8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5IGNsYXNzPVwicHMtMCBwZS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDUwcHhcIiBkbmREcm9wem9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG5kRHJvcCk9XCJvbkRyb3AoJGV2ZW50LCAnZmxvb3InKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZsb29yIEZpeHR1cmVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Rm9ybUZsb29yRml4dHVyZXMuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmbG9vckZpeHR1cmVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRGb3JtRmxvb3JGaXh0dXJlcy5jb250cm9sczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRuZERyb3B6b25lIChkbmREcm9wKT1cIm9uRHJvcCgkZXZlbnQsICdmbG9vcicsIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZERyYWdnYWJsZV09XCJ7IHdhbGxJbmRleDogJ2Zsb29yJywgZml4dHVyZUluZGV4OiBqIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZEVmZmVjdEFsbG93ZWRdPVwiJ2FsbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZERpc2FibGVEcmFnSWZdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyBnLTAgbWItNVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBkbmREcmFnSW1hZ2VSZWZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBtb3ZlOyBvcGFjaXR5OiAwLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNXB4XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJtIDQuNDk2MDk0IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gLTYgNiBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAtNiA2IGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDAgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImdyZXlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaXh0dXJlQ29uZmlnSWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInX2lkJ1wiIFtuYW1lRmllbGRdPVwiJ25hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZml4dHVyZVRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInRml4dHVyZSAnICsgKGogKyAxKVwiIFtzZWFyY2hdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWJUZXh0RmllbGRdPVwiJ3N1YnRleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImRlbGV0ZUZpeHR1cmUoJ2Zsb29yJywgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDEwIDEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMUwxIDlNMSAxTDkgOVwiIHN0cm9rZT1cIiMzNDQwNTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImxpbmstYnRuXCIgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdGaXh0dXJlKCdmbG9vcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGZpeHR1cmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggZGFzaGVkICMwMDAwMDA7XCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmxvb3IgT3RoZXIgRWxlbWVudHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLmNvbnRyb2xzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiZmxvb3JPdGhlckVsZW1lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwialwiIGNsYXNzPVwicm93IGctMCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTExXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+RWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBqICsgMSB9fTwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gZm9yIHR5cGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ2xhYmVsJ1wiIFtkYXRhXT1cIm90aGVyRWxlbWVudExpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Zsb29yRWxlbWVudExhYmVsJyArIGpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbmRpdGlvbmFsIGlucHV0IGZvciBjdXN0b20gbmFtZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoZml4dHVyZS5nZXQoJ3R5cGUnKT8udmFsdWUpID09PSAnT3RoZXJzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbXQtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImN1c3RvbU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGN1c3RvbSBlbGVtZW50IG5hbWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cInJlbW92ZU90aGVyRWxlbWVudCgnZmxvb3InLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogMThweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMTAgMTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCIgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1idG5cIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld090aGVyRWxlbWVudHMoJ2Zsb29yJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ2VudGVyIENvbHVtbiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBvdmVyZmxvdy1oaWRkZW4gcG9zaXRpb24tcmVsYXRpdmVcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBlZGl0Rml4dHVyZSB9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiY2FudmFzLWNhcmRcIiBjbGFzcz1cImMtY2FyZCBwb3NpdGlvbi1yZWxhdGl2ZVwiICNjYW52YXNDb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBDYW52YXMgVmlldyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8Y2FudmFzIGlkPVwiYmFzZS1jYW52YXNcIiAjYmFzZUNhbnZhcz48L2NhbnZhcz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAyNHB4OyByaWdodDogMjZweDt3aWR0aDogY2FsYygxMDAlIC0gNTBweCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRW50cmFuY2UgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGF5b3V0Rm9ybS5lbmFibGVkXCIgbmdiVG9vbHRpcD1cIllvdSBjYW4gYWRkIHVwIHRvIHR3byBlbnRyYW5jZXMuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCJnZXRFbnRyYW5jZXM/Lmxlbmd0aCA8IDJcIiBjbGFzcz1cIm1lLWF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwicGFkZGluZzogOHB4IDIwcHggIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgYmctd2hpdGUgc2hhZG93LXNtIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldEVudHJhbmNlcz8ubGVuZ3RoID49IDJcIiAoY2xpY2spPVwiYWRkTmV3RW50cmFuY2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBFbnRyYW5jZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDYW5jZWwgZWRpdCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGxheW91dEZvcm0uZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoZ2V0U3RhdHVzID09PSAnYWxsb2NhdGlvblBlbmRpbmcnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBiZy13aGl0ZSBzaGFkb3ctc21cIiAoY2xpY2spPVwiY2FuY2VsRWRpdCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfUBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tdGV4dFwiIChjbGljayk9XCJjYW5jZWxFZGl0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2F2ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGxheW91dEZvcm0uZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoZ2V0U3RhdHVzID09PSAnZHJhZnQnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBzaGFkb3ctc20gYmctd2hpdGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDEzMHB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1NhdmluZ0xheW91dFwiIChjbGljayk9XCJ1cGRhdGVMYXlvdXQodHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ0xheW91dFwiIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlIGFzIERyYWZ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9QGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiA4cHggMjBweCAhaW1wb3J0YW50O21pbi13aWR0aDogOTBweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNTYXZpbmdMYXlvdXRcIiAoY2xpY2spPVwidXBkYXRlTGF5b3V0KHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNTYXZpbmdMYXlvdXRcIiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbXBhY3QgYnV0dG9uIChDQUQgbGF5b3V0cyBvbmx5LCB2aWV3IG1vZGUpIOKAlCBvbmUtc2hvdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja2luZyBjb21wYWN0cyB0aGUgbGF5b3V0IGFuZCBkcm9wcyB0aGUgdXNlciBpbnRvIGVkaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlIHNvIHRoZSBjaGFuZ2UgaXMgcmV2ZXJ0YWJsZSB2aWEgQ2FuY2VsIGFuZCBwZXJzaXN0YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpYSBTYXZlIC8gU3VibWl0LiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGNhblNob3dDb21wYWN0VG9nZ2xlICYmIGxheW91dEZvcm0uZGlzYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBzaGFkb3ctc20gYmctd2hpdGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29tcGFjdExheW91dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiQ29tcGFjdCBsYXlvdXQuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz1cIjQgMTQgMTAgMTQgMTAgMjBcIj48L3BvbHlsaW5lPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cG9seWxpbmUgcG9pbnRzPVwiMjAgMTAgMTQgMTAgMTQgNFwiPjwvcG9seWxpbmU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPVwiMTRcIiB5MT1cIjEwXCIgeDI9XCIyMVwiIHkyPVwiM1wiPjwvbGluZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9XCIzXCIgeTE9XCIyMVwiIHgyPVwiMTBcIiB5Mj1cIjE0XCI+PC9saW5lPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRWRpdCBCdXR0b24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpc0VkaXRMYXlvdXRBbGxvd2VkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRWRpdCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTMyMl81MzI1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0LjE2NjcgMi40OTk5M0MxNC4zODU2IDIuMjgxMDYgMTQuNjQ1NSAyLjEwNzQ0IDE0LjkzMTQgMS45ODg5OUMxNS4yMTc0IDEuODcwNTQgMTUuNTIzOSAxLjgwOTU3IDE1LjgzMzQgMS44MDk1N0MxNi4xNDI5IDEuODA5NTcgMTYuNDQ5NCAxLjg3MDU0IDE2LjczNTQgMS45ODg5OUMxNy4wMjE0IDIuMTA3NDQgMTcuMjgxMiAyLjI4MTA2IDE3LjUwMDEgMi40OTk5M0MxNy43MTkgMi43MTg4IDE3Ljg5MjYgMi45Nzg2MyAxOC4wMTEgMy4yNjQ2QzE4LjEyOTUgMy41NTA1NyAxOC4xOTA0IDMuODU3MDYgMTguMTkwNCA0LjE2NjU5QzE4LjE5MDQgNC40NzYxMiAxOC4xMjk1IDQuNzgyNjIgMTguMDExIDUuMDY4NTlDMTcuODkyNiA1LjM1NDU1IDE3LjcxOSA1LjYxNDM5IDE3LjUwMDEgNS44MzMyNkw2LjI1MDA4IDE3LjA4MzNMMS42NjY3NSAxOC4zMzMzTDIuOTE2NzUgMTMuNzQ5OUwxNC4xNjY3IDIuNDk5OTNaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzEzMjJfNTMyNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2FuY2VsIEJ1dHRvbiAoRnJvbSBhbGxvY2F0aW9uKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImxheW91dEZvcm0uZGlzYWJsZWQgJiYgaXNBbGxvY2F0aW9uUnVuXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBiZy13aGl0ZSBzaGFkb3ctc21cIiAoY2xpY2spPVwib25DbGlja1JldmVydEFsbG9jYXRpb24oKSBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJ1biBhbGxvY2F0aW9uIC8gQ29tcGxldGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpc1J1bkFsbG9jYXRpb25BbGxvd2VkICYmIGxheW91dEZvcm0uZGlzYWJsZWQgJiYgZ2V0U3RhdHVzID09PSAnYWxsb2NhdGlvblBlbmRpbmcnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiIWlzQWxsb2NhdGlvblJ1biAmJiBoYXNJbnZhbGlkSGVhZGVyRml4dHVyZXMgPyBpbnZhbGlkSGVhZGVyRml4dHVyZUNvdW50ICsgJyBmaXh0dXJlJyArIChpbnZhbGlkSGVhZGVyRml4dHVyZUNvdW50ID09PSAxID8gJycgOiAncycpICsgJyBoYXZlIHVucmVjb2duaXplZCBoZWFkZXJzLiBGaXggdGhlbSB0byBydW4gYWxsb2NhdGlvbicgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwicGFkZGluZzogOHB4IDIwcHggIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvY2F0aW9uUnVuICYmIGhhc0ludmFsaWRIZWFkZXJGaXh0dXJlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrUnVuQWxsb2NhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGlzQWxsb2NhdGlvblJ1biA/ICdDb21wbGV0ZSBBbGxvY2F0aW9uJyA6ICdSdW4gQWxsb2NhdGlvbicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImdldFN0YXR1cyA9PT0gJ2RyYWZ0J1wiIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cInBhZGRpbmc6IDhweCAyMHB4ICFpbXBvcnRhbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwib25DbGlja0FwcHJvdmVMYXlvdXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VibWl0IGZvciBtZXJjaCBhbGxvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSb3RhdGUgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImxheW91dEZvcm0uZGlzYWJsZWRcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJvdGF0ZUNhbnZhcyhjYW52YXMsOTApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIiB2aWV3Qm94PVwiMCAwIDI2IDI2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4zNjI2NSA3LjE3ODg3TDcuMTc2MjUgNi4zNjI4N0w1LjkwNDI1IDUuMDkyMDdMNS4wODk0NSA1LjkwNTY3TDYuMzYyNjUgNy4xNzg4N1pNMTUuNjcxIDYuMzY0MDdMMTkuNjM3OSAxMC4zMzA5TDIwLjkwOTkgOS4wNTc2OUwxNi45NDQyIDUuMDkwODdMMTUuNjcxIDYuMzY0MDdaTTE5LjYzNzkgMTguODI1N0wxOC44MjQzIDE5LjYzOTNMMjAuMDk2MyAyMC45MTAxTDIwLjkwOTkgMjAuMDk3N0wxOS42Mzc5IDE4LjgyNTdaTTEwLjMyOTUgMTkuNjM5M0w2LjM2MjY1IDE1LjY3MjVMNS4wOTA2NSAxNi45NDU3TDkuMDU2MjYgMjAuOTExM0wxMC4zMjk1IDE5LjYzOTNaTTE4LjgyNDMgMTkuNjM5M0MxNy42NTQzIDIwLjgwODEgMTYuODQwNyAyMS42MTkzIDE2LjE0NTkgMjIuMTQ5N0MxNS40NzE1IDIyLjY2NDUgMTUuMDE1NSAyMi44Mjg5IDE0LjU3NjMgMjIuODI4OVYyNC42Mjg5QzE1LjU2NzUgMjQuNjI4OSAxNi40MDI3IDI0LjIxNzMgMTcuMjM2NyAyMy41ODEzQzE4LjA1MDMgMjIuOTYwOSAxOC45NjM1IDIyLjA0NTMgMjAuMDk2MyAyMC45MTI1TDE4LjgyNDMgMTkuNjM5M1pNOS4wNTYyNiAyMC45MTEzQzEwLjE4OTEgMjIuMDQ1MyAxMS4xMDIzIDIyLjk1OTcgMTEuOTE1OSAyMy41ODEzQzEyLjc0OTkgMjQuMjE3MyAxMy41ODUxIDI0LjYyODkgMTQuNTc2MyAyNC42Mjg5VjIyLjgyODlDMTQuMTM3MSAyMi44Mjg5IDEzLjY4MjMgMjIuNjY0NSAxMy4wMDY3IDIyLjE0OTdDMTIuMzExOSAyMS42MTkzIDExLjQ5ODMgMjAuODA4MSAxMC4zMjk1IDE5LjYzOTNMOS4wNTYyNiAyMC45MTEzWk0xOS42Mzc5IDEwLjMzMDlDMjAuODA2NyAxMS40OTk3IDIxLjYxNzkgMTIuMzEzMyAyMi4xNDgzIDEzLjAwODFDMjIuNjYzMSAxMy42ODM3IDIyLjgyNzUgMTQuMTM4NSAyMi44Mjc1IDE0LjU3NzdIMjQuNjI3NUMyNC42Mjc1IDEzLjU4NjUgMjQuMjE1OSAxMi43NTEzIDIzLjU3OTkgMTEuOTE3M0MyMi45NTk1IDExLjEwMzcgMjIuMDQyNyAxMC4xOTA1IDIwLjkwOTkgOS4wNTc2OUwxOS42Mzc5IDEwLjMzMDlaTTIwLjkwOTkgMjAuMDk3N0MyMi4wNDM5IDE4Ljk2MzcgMjIuOTU4MyAxOC4wNTE3IDIzLjU3OTkgMTcuMjM4MUMyNC4yMTU5IDE2LjQwNDEgMjQuNjI3NSAxNS41Njg5IDI0LjYyNzUgMTQuNTc3N0gyMi44Mjc1QzIyLjgyNzUgMTUuMDE2OSAyMi42NjMxIDE1LjQ3MjkgMjIuMTQ4MyAxNi4xNDczQzIxLjYxNzkgMTYuODQyMSAyMC44MDY3IDE3LjY1NTcgMTkuNjM3OSAxOC44MjU3TDIwLjkwOTkgMjAuMDk3N1pNNy4xNzYyNSA2LjM2Mjg3QzguMzQ2MjUgNS4xOTQwNyA5LjE1OTg1IDQuMzgxNjcgOS44NTQ2NSAzLjg1MTI3QzEwLjUyOSAzLjMzNjQ3IDEwLjk4NSAzLjE3MzI3IDExLjQyNDIgMy4xNzMyN1YxLjM3MjA3QzEwLjQzMyAxLjM3MjA3IDkuNTk3ODUgMS43ODM2NyA4Ljc2Mzg1IDIuNDE5NjdDNy45NDkwNSAzLjA0MTI3IDcuMDM3MDUgMy45NTU2NyA1LjkwNDI1IDUuMDg4NDdMNy4xNzYyNSA2LjM2Mjg3Wk0xNi45NDQyIDUuMDkwODdDMTUuODExNCAzLjk1Njg3IDE0Ljg5ODIgMy4wNDEyNyAxNC4wODQ2IDIuNDE5NjdDMTMuMjUwNiAxLjc4MzY3IDEyLjQxNTQgMS4zNzIwNyAxMS40MjQyIDEuMzcyMDdWMy4xNzMyN0MxMS44NjM0IDMuMTczMjcgMTIuMzE4MiAzLjMzNjQ3IDEyLjk5MzggMy44NTEyN0MxMy42ODg2IDQuMzgxNjcgMTQuNTAyMiA1LjE5Mjg3IDE1LjY3MSA2LjM2MTY3TDE2Ljk0NDIgNS4wOTA4N1pNNS4wODk0NSA1LjkwMzI3QzMuOTU2NjUgNy4wMzYwNyAzLjA0MjI1IDcuOTQ4MDcgMi40MjA2NSA4Ljc2Mjg3QzEuNzg0NjUgOS41OTY4NyAxLjM3MzA1IDEwLjQzMjEgMS4zNzMwNSAxMS40MjMzSDMuMTczMDVDMy4xNzMwNSAxMC45ODQxIDMuMzM3NDUgMTAuNTI4MSAzLjg1MjI1IDkuODUzNjdDNC4zODI2NSA5LjE1ODg3IDUuMTkzODUgOC4zNDUyNyA2LjM2MjY1IDcuMTc1MjdMNS4wODk0NSA1LjkwMzI3Wk02LjM2MjY1IDE1LjY3MTNDNS4xOTM4NSAxNC41MDEzIDQuMzgyNjUgMTMuNjg3NyAzLjg1MjI1IDEyLjk5MjlDMy4zMzc0NSAxMi4zMTg1IDMuMTczMDUgMTEuODYyNSAzLjE3MzA1IDExLjQyMzNIMS4zNzMwNUMxLjM3MzA1IDEyLjQxNDUgMS43ODQ2NSAxMy4yNDk3IDIuNDIwNjUgMTQuMDgzN0MzLjA0MjI1IDE0Ljg5NzMgMy45NTY2NSAxNS44MTA1IDUuMDg5NDUgMTYuOTQzM0w2LjM2MjY1IDE1LjY3MTNaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxRDI5MzlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjMuMiA2Ljk4MzJMMjUgOC4yQzI1IDQuNTgyIDIyLjQwNTYgMS41Nzk2IDE5IDFNMi44IDE5LjAxNjhMMSAxNy44QzEgMjEuNDE4IDMuNTk0NCAyNC40MjA0IDcgMjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMUQyOTM5XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERvd25sb2FkIEJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQ2FudmFzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgc3Ryb2tlPVwiIzAwMDAwMFwiIHN0cm9rZS13aWR0aD1cIjAuMjQwMDAwMDAwMDAwMDAwMDVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNDQ0NDQ0NcIiBzdHJva2Utd2lkdGg9XCIwLjM4NFwiPjwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuNTUzNSAxNi41MDYxQzEyLjQxMTQgMTYuNjYxNSAxMi4yMTA2IDE2Ljc1IDEyIDE2Ljc1QzExLjc4OTQgMTYuNzUgMTEuNTg4NiAxNi42NjE1IDExLjQ0NjUgMTYuNTA2MUw3LjQ0NjQ4IDEyLjEzMTFDNy4xNjY5OCAxMS44MjU0IDcuMTg4MjIgMTEuMzUxIDcuNDkzOTIgMTEuMDcxNUM3Ljc5OTYzIDEwLjc5MiA4LjI3NDAyIDEwLjgxMzIgOC41NTM1MiAxMS4xMTg5TDExLjI1IDE0LjA2ODJWM0MxMS4yNSAyLjU4NTc5IDExLjU4NTggMi4yNSAxMiAyLjI1QzEyLjQxNDIgMi4yNSAxMi43NSAyLjU4NTc5IDEyLjc1IDNWMTQuMDY4MkwxNS40NDY1IDExLjExODlDMTUuNzI2IDEwLjgxMzIgMTYuMjAwNCAxMC43OTIgMTYuNTA2MSAxMS4wNzE1QzE2LjgxMTggMTEuMzUxIDE2LjgzMyAxMS44MjU0IDE2LjU1MzUgMTIuMTMxMUwxMi41NTM1IDE2LjUwNjFaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUQyOTM5XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjc1IDE1QzMuNzUgMTQuNTg1OCAzLjQxNDIyIDE0LjI1IDMgMTQuMjVDMi41ODU3OSAxNC4yNSAyLjI1IDE0LjU4NTggMi4yNSAxNVYxNS4wNTQ5QzIuMjQ5OTggMTYuNDIyNSAyLjI0OTk2IDE3LjUyNDggMi4zNjY1MiAxOC4zOTE4QzIuNDg3NTQgMTkuMjkxOSAyLjc0NjQzIDIwLjA0OTcgMy4zNDgzNSAyMC42NTE2QzMuOTUwMjcgMjEuMjUzNiA0LjcwODE0IDIxLjUxMjUgNS42MDgyNSAyMS42MzM1QzYuNDc1MjIgMjEuNzUgNy41Nzc1NCAyMS43NSA4Ljk0NTEzIDIxLjc1SDE1LjA1NDlDMTYuNDIyNSAyMS43NSAxNy41MjQ4IDIxLjc1IDE4LjM5MTggMjEuNjMzNUMxOS4yOTE5IDIxLjUxMjUgMjAuMDQ5NyAyMS4yNTM2IDIwLjY1MTcgMjAuNjUxNkMyMS4yNTM2IDIwLjA0OTcgMjEuNTEyNSAxOS4yOTE5IDIxLjYzMzUgMTguMzkxOEMyMS43NSAxNy41MjQ4IDIxLjc1IDE2LjQyMjUgMjEuNzUgMTUuMDU0OVYxNUMyMS43NSAxNC41ODU4IDIxLjQxNDIgMTQuMjUgMjEgMTQuMjVDMjAuNTg1OCAxNC4yNSAyMC4yNSAxNC41ODU4IDIwLjI1IDE1QzIwLjI1IDE2LjQzNTQgMjAuMjQ4NCAxNy40MzY1IDIwLjE0NjkgMTguMTkxOUMyMC4wNDgyIDE4LjkyNTcgMTkuODY3OCAxOS4zMTQyIDE5LjU5MSAxOS41OTFDMTkuMzE0MiAxOS44Njc4IDE4LjkyNTcgMjAuMDQ4MiAxOC4xOTE5IDIwLjE0NjlDMTcuNDM2NSAyMC4yNDg0IDE2LjQzNTQgMjAuMjUgMTUgMjAuMjVIOUM3LjU2NDU5IDIwLjI1IDYuNTYzNDcgMjAuMjQ4NCA1LjgwODEyIDIwLjE0NjlDNS4wNzQzNSAyMC4wNDgyIDQuNjg1NzcgMTkuODY3OCA0LjQwOTAxIDE5LjU5MUM0LjEzMjI1IDE5LjMxNDIgMy45NTE4IDE4LjkyNTcgMy44NTMxNSAxOC4xOTE5QzMuNzUxNTkgMTcuNDM2NSAzLjc1IDE2LjQzNTQgMy43NSAxNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxRDI5MzlcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gUGFuZWwgQ29sbGFwc2UgSGFuZGxlcnMgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UtaGFuZGxlciBsZWZ0XCIgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKCdsZWZ0JylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzTGVmdFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjI3MzA4IDEyLjYzNkw0LjYzNjcyIDguOTk5NjRMOC4yNzMwOCA1LjM2MzI4TTEzLjM2NCAxMi42MzZMOS43Mjc2MyA4Ljk5OTY0TDEzLjM2NCA1LjM2MzI4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuNzI2OTIgNS4zNjM5OUwxMy4zNjMzIDkuMDAwMzZMOS43MjY5MiAxMi42MzY3TTQuNjM2MDEgNS4zNjM5OUw4LjI3MjM3IDkuMDAwMzZMNC42MzYwMSAxMi42MzY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZS1oYW5kbGVyIHJpZ2h0XCIgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKCdyaWdodCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImlzUmlnaHRQYW5lbENvbGxhcHNlZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4yNzMwOCAxMi42MzZMNC42MzY3MiA4Ljk5OTY0TDguMjczMDggNS4zNjMyOE0xMy4zNjQgMTIuNjM2TDkuNzI3NjMgOC45OTk2NEwxMy4zNjQgNS4zNjMyOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuNzI2OTIgNS4zNjM5OUwxMy4zNjMzIDkuMDAwMzZMOS43MjY5MiAxMi42MzY3TTQuNjM2MDEgNS4zNjM5OUw4LjI3MjM3IDkuMDAwMzZMNC42MzYwMSAxMi42MzY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRWRpdCBGaXh0dXJlIEJvZHkgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiAhZWRpdEZpeHR1cmUgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImVkaXQtYm9keVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibXgtMyBteS01IG5hdiBuYXYtcGlsbHNcIiByb2xlPVwidGFibGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBjdXJzb3ItcG9pbnRlclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJzdWJtaXRGaXh0dXJlID0gZmFsc2U7IGVkaXRGaXh0dXJlU2VjdGlvbiA9ICdiYXNpYy1kZXRhaWxzJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAnYmFzaWMtZGV0YWlscycgPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJuYXYtbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljIGRldGFpbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gY3Vyc29yLXBvaW50ZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwic3VibWl0Rml4dHVyZSA9IGZhbHNlOyBlZGl0Rml4dHVyZVNlY3Rpb24gPSAncHJvZHVjdHMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdwcm9kdWN0cycgPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJuYXYtbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInN1Ym1pdEZpeHR1cmUgPSBmYWxzZTsgZWRpdEZpeHR1cmVTZWN0aW9uID0gJ3ZtcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ3ZtcycgPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJuYXYtbGlua1wiIHJvbGU9XCJ0YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXN1YWwgTWVyY2hhbmRpc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdiYXNpYy1kZXRhaWxzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1pbnN0YW5jZS1iYXNpYy1kZXRhaWxzIFtmaXh0dXJlRGF0YV09XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCIgW2VkaXRNb2RlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1N1Ym1pdHRlZF09XCJzdWJtaXRGaXh0dXJlXCIgKHN1Ym1pdEV2ZW50KT1cIm9uRml4dHVyZVN1Ym1pdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1pbnN0YW5jZS1iYXNpYy1kZXRhaWxzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdwcm9kdWN0cydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItaW5zdGFuY2UtcHJvZHVjdHMgW2ZpeHR1cmVEYXRhXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBbZWRpdE1vZGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzU3VibWl0dGVkXT1cInN1Ym1pdEZpeHR1cmVcIiAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLWluc3RhbmNlLXByb2R1Y3RzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICd2bXMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWluc3RhbmNlLXZtcyBbZml4dHVyZURhdGFdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFtlZGl0TW9kZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNTdWJtaXR0ZWRdPVwic3VibWl0Rml4dHVyZVwiIChzdWJtaXRFdmVudCk9XCJvbkZpeHR1cmVTdWJtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItaW5zdGFuY2Utdm1zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnY29sbGFwc2VkLWNvbCc6IGlzUmlnaHRQYW5lbENvbGxhcHNlZCwgJ2NvbC0zJzogIWlzUmlnaHRQYW5lbENvbGxhcHNlZCB9XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7J21pbi13aWR0aCc6IGlzUmlnaHRQYW5lbENvbGxhcHNlZCA/ICcwJyA6ICBpc0FsbG9jYXRpb25SdW4gPyc2ODBweCcgOiAnNDY0cHgnIH1cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaXh0dXJlUHJldmlld0NvbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZml4dHVyZVByZXZpZXdDb2w+XHJcbiAgICA8ZGl2IGNsYXNzPVwicy1jYXJkXCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzplZGl0Rml4dHVyZSA/ICc3MnB4JyA6ICcwcHgnfVwiPlxyXG4gICAgICAgIDxvbmJvYXJkLWZpeHR1cmUgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkfVwiXHJcbiAgICAgICAgICAgIChvbkNsb3NlKT1cInRvZ2dsZVBhbmVsKCdyaWdodCcpOyBzZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDsgcmVtb3ZlSGlnaGxpZ2h0KCk7XCJcclxuICAgICAgICAgICAgW2ZpeHR1cmVEYXRhXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBbaXNBbGxvY2F0aW9uUnVuXT1cImlzQWxsb2NhdGlvblJ1blwiXHJcbiAgICAgICAgICAgIFthbGxGaXh0dXJlc109XCJhbGxGaXh0dXJlSW5zdGFuY2VzXCI+PC9vbmJvYXJkLWZpeHR1cmU+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjaGVhZGVyU2tlbGV0b24+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IG0tMCBnLTAgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lciB3LTEwMCBwLTQgcm91bmRlZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBtdC0wIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNza2VsZXRvbkxvYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lciByb3VuZGVkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXBwbHlMb2dpY3MgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBtYi00XCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0yMC44MzMgMjEuNjY2NUMxOC4wMzMgMjEuNjY2NSAxNy4xMTY0IDIyLjc5MTUgMTYuODE2NCAyMy41MzMyQzE3LjcwOCAyMy45MTY1IDE4LjMzMyAyNC43OTk4IDE4LjMzMyAyNS44MzMyQzE4LjMzMyAyNi40OTYyIDE4LjA2OTYgMjcuMTMyMSAxNy42MDA4IDI3LjYwMDlDMTcuMTMxOSAyOC4wNjk4IDE2LjQ5NjEgMjguMzMzMiAxNS44MzMgMjguMzMzMkMxNS4xNyAyOC4zMzMyIDE0LjUzNDEgMjguMDY5OCAxNC4wNjUzIDI3LjYwMDlDMTMuNTk2NCAyNy4xMzIxIDEzLjMzMyAyNi40OTYyIDEzLjMzMyAyNS44MzMyQzEzLjMzMyAyNC43NDE1IDE0LjAyNDcgMjMuODE2NSAxNC45OTk3IDIzLjQ3NDhWMTYuNTI0OEMxNC41MTE0IDE2LjM1MzUgMTQuMDg4NSAxNi4wMzQ0IDEzLjc4OTkgMTUuNjExN0MxMy40OTEyIDE1LjE4OTEgMTMuMzMxNSAxNC42ODQgMTMuMzMzIDE0LjE2NjVDMTMuMzMzIDEzLjUwMzUgMTMuNTk2NCAxMi44Njc2IDE0LjA2NTMgMTIuMzk4N0MxNC41MzQxIDExLjkyOTkgMTUuMTcgMTEuNjY2NSAxNS44MzMgMTEuNjY2NUMxNi40OTYxIDExLjY2NjUgMTcuMTMxOSAxMS45Mjk5IDE3LjYwMDggMTIuMzk4N0MxOC4wNjk2IDEyLjg2NzYgMTguMzMzIDEzLjUwMzUgMTguMzMzIDE0LjE2NjVDMTguMzMzIDE1LjI1ODIgMTcuNjQxNCAxNi4xODMyIDE2LjY2NjQgMTYuNTI0OFYyMC45MzMyQzE3LjM5OTcgMjAuMzkxNSAxOC40NjY0IDE5Ljk5OTggMTkuOTk5NyAxOS45OTk4QzIyLjIyNDcgMTkuOTk5OCAyMi45NjY0IDE4Ljg4MzIgMjMuMjA4IDE4LjE0MTVDMjIuNzUyMSAxNy45NTE2IDIyLjM2MjUgMTcuNjMxMSAyMi4wODgyIDE3LjIyMDRDMjEuODEzOSAxNi44MDk3IDIxLjY2NzEgMTYuMzI3MSAyMS42NjY0IDE1LjgzMzJDMjEuNjY2NCAxNS4xNzAxIDIxLjkyOTcgMTQuNTM0MiAyMi4zOTg2IDE0LjA2NTRDMjIuODY3NCAxMy41OTY2IDIzLjUwMzMgMTMuMzMzMiAyNC4xNjY0IDEzLjMzMzJDMjQuODI5NCAxMy4zMzMyIDI1LjQ2NTMgMTMuNTk2NiAyNS45MzQxIDE0LjA2NTRDMjYuNDAzIDE0LjUzNDIgMjYuNjY2NCAxNS4xNzAxIDI2LjY2NjQgMTUuODMzMkMyNi42NjY0IDE2Ljk0OTggMjUuOTMzIDE3LjkxNjUgMjQuOTI0NyAxOC4yMTY1QzI0LjcwOCAxOS40MDgyIDIzLjg5OTcgMjEuNjY2NSAyMC44MzMgMjEuNjY2NVpNMTUuODMzIDI0Ljk5OThDMTUuNjEyIDI0Ljk5OTggMTUuNCAyNS4wODc2IDE1LjI0MzggMjUuMjQzOUMxNS4wODc1IDI1LjQwMDIgMTQuOTk5NyAyNS42MTIyIDE0Ljk5OTcgMjUuODMzMkMxNC45OTk3IDI2LjA1NDIgMTUuMDg3NSAyNi4yNjYxIDE1LjI0MzggMjYuNDIyNEMxNS40IDI2LjU3ODcgMTUuNjEyIDI2LjY2NjUgMTUuODMzIDI2LjY2NjVDMTYuMDU0IDI2LjY2NjUgMTYuMjY2IDI2LjU3ODcgMTYuNDIyMyAyNi40MjI0QzE2LjU3ODYgMjYuMjY2MSAxNi42NjY0IDI2LjA1NDIgMTYuNjY2NCAyNS44MzMyQzE2LjY2NjQgMjUuNjEyMiAxNi41Nzg2IDI1LjQwMDIgMTYuNDIyMyAyNS4yNDM5QzE2LjI2NiAyNS4wODc2IDE2LjA1NCAyNC45OTk4IDE1LjgzMyAyNC45OTk4Wk0xNS44MzMgMTMuMzMzMkMxNS42MTIgMTMuMzMzMiAxNS40IDEzLjQyMSAxNS4yNDM4IDEzLjU3NzJDMTUuMDg3NSAxMy43MzM1IDE0Ljk5OTcgMTMuOTQ1NSAxNC45OTk3IDE0LjE2NjVDMTQuOTk5NyAxNC4zODc1IDE1LjA4NzUgMTQuNTk5NSAxNS4yNDM4IDE0Ljc1NThDMTUuNCAxNC45MTIgMTUuNjEyIDE0Ljk5OTggMTUuODMzIDE0Ljk5OThDMTYuMDU0IDE0Ljk5OTggMTYuMjY2IDE0LjkxMiAxNi40MjIzIDE0Ljc1NThDMTYuNTc4NiAxNC41OTk1IDE2LjY2NjQgMTQuMzg3NSAxNi42NjY0IDE0LjE2NjVDMTYuNjY2NCAxMy45NDU1IDE2LjU3ODYgMTMuNzMzNSAxNi40MjIzIDEzLjU3NzJDMTYuMjY2IDEzLjQyMSAxNi4wNTQgMTMuMzMzMiAxNS44MzMgMTMuMzMzMlpNMjQuMTY2NCAxNC45OTk4QzIzLjk0NTMgMTQuOTk5OCAyMy43MzM0IDE1LjA4NzYgMjMuNTc3MSAxNS4yNDM5QzIzLjQyMDggMTUuNDAwMiAyMy4zMzMgMTUuNjEyMiAyMy4zMzMgMTUuODMzMkMyMy4zMzMgMTYuMDU0MiAyMy40MjA4IDE2LjI2NjEgMjMuNTc3MSAxNi40MjI0QzIzLjczMzQgMTYuNTc4NyAyMy45NDUzIDE2LjY2NjUgMjQuMTY2NCAxNi42NjY1QzI0LjM4NzQgMTYuNjY2NSAyNC41OTkzIDE2LjU3ODcgMjQuNzU1NiAxNi40MjI0QzI0LjkxMTkgMTYuMjY2MSAyNC45OTk3IDE2LjA1NDIgMjQuOTk5NyAxNS44MzMyQzI0Ljk5OTcgMTUuNjEyMiAyNC45MTE5IDE1LjQwMDIgMjQuNzU1NiAxNS4yNDM5QzI0LjU5OTMgMTUuMDg3NiAyNC4zODc0IDE0Ljk5OTggMjQuMTY2NCAxNC45OTk4WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMDlCRjNcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwibWItM1wiPlJ1biBBbGxvY2F0aW9uIExvZ2ljPC9oMj5cclxuICAgICAgICAgICAgPHA+VGhpcyB3aWxsIG1hcCBhbGwgZml4dHVyZXMgYW5kIGFwcGx5IGFsbG9jYXRpb25zIGJhc2VkIG9uIHRoZSBidXNpbmVzcy1kZWZpbmVkIGxvZ2ljLCB0aGVuIG1vdmUgdGhlbSB0b1xyXG4gICAgICAgICAgICAgICAgdGhlIHZlcmlmaWNhdGlvbiBzZWN0aW9uLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29udGludWU/PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJtb2RhbC5jbG9zZSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0J1dHRvbkxvYWRpbmdcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwicnVuQWxsb2NhdGlvbigpXCIgW2Rpc2FibGVkXT1cImlzQnV0dG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNCdXR0b25Mb2FkaW5nXCI+IFJ1biBhbGxvY2F0aW9uIExvZ2ljPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cIndpZHRoOiAxNDFweDtcIiAqbmdJZj1cImlzQnV0dG9uTG9hZGluZ1wiIGNsYXNzPVwic3Bpbm5lclwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwicGF0aFwiIGN4PVwiMjVcIiBjeT1cIjI1XCIgcj1cIjIwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCI0XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXBwcm92ZUxheW91dE1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwibWItM1wiPkFwcHJvdmUgJiBTdWJtaXQ8L2gyPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIFRoaXMgd2lsbCBjb21wbGV0ZSB0aGUgbGF5b3V0IGFuZCBtYWtlIGl0IHJlYWR5IGZvciBhbGxvY2F0aW9uLiBFbnN1cmUgdGhhdCBhbGwgZml4dHVyZSBjb3VudHMgYW5kXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRzIGFyZSBhcyBwZXIgdGhlIHBsYW4uXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBAaWYoaGFzSW52YWxpZEhlYWRlckZpeHR1cmVzKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQgZ2FwLTIgcC0zIG1iLTMgcm91bmRlZFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNGRkZBRUI7IGJvcmRlcjogMXB4IHNvbGlkICNGRUM4NEI7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmxleC1zaHJpbms6IDA7IG1hcmdpbi10b3A6IDFweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuOTk5NjUgNi42NjY2N1YxME05Ljk5OTY1IDEzLjMzMzNIMTAuMDA4TTguNTc0NjUgMi4zODMzNEwxLjUxNjMyIDE0LjE2NjdDMS4zNzA3OSAxNC40MTg3IDEuMjkzNzkgMTQuNzA0NCAxLjI5Mjk4IDE0Ljk5NTRDMS4yOTIxNiAxNS4yODY1IDEuMzY3NTYgMTUuNTcyNiAxLjUxMTY3IDE1LjgyNTRDMS42NTU3OSAxNi4wNzgzIDEuODYzNTkgMTYuMjg5IDIuMTE0NDEgMTYuNDM2NkMyLjM2NTIzIDE2LjU4NDEgMi42NTAzMiAxNi42NjM1IDIuOTQxMzIgMTYuNjY2N0gxNy4wNThDMTcuMzQ5IDE2LjY2MzUgMTcuNjM0MSAxNi41ODQxIDE3Ljg4NDkgMTYuNDM2NkMxOC4xMzU3IDE2LjI4OSAxOC4zNDM1IDE2LjA3ODMgMTguNDg3NiAxNS44MjU0QzE4LjYzMTcgMTUuNTcyNiAxOC43MDcxIDE1LjI4NjUgMTguNzA2MyAxNC45OTU0QzE4LjcwNTUgMTQuNzA0NCAxOC42Mjg1IDE0LjQxODcgMTguNDgzIDE0LjE2NjdMMTEuNDI0NyAyLjM4MzM0QzExLjI3NjEgMi4xMzg0MyAxMS4wNjY5IDEuOTM1OTQgMTAuODE3MyAxLjc5NTQxQzEwLjU2NzcgMS42NTQ4OCAxMC4yODYxIDEuNTgxMDUgOS45OTk2NSAxLjU4MTA1QzkuNzEzMjEgMS41ODEwNSA5LjQzMTU5IDEuNjU0ODggOS4xODE5OSAxLjc5NTQxQzguOTMyMzggMS45MzU5NCA4LjcyMzIxIDIuMTM4NDMgOC41NzQ2NSAyLjM4MzM0WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGNTlFMEJcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCIgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7IGNvbG9yOiAjOTI0MDBFO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3tpbnZhbGlkSGVhZGVyRml4dHVyZUNvdW50fX0gZml4dHVyZXt7aW52YWxpZEhlYWRlckZpeHR1cmVDb3VudCA9PT0gMSA/ICcnIDogJ3MnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tpbnZhbGlkSGVhZGVyRml4dHVyZUNvdW50ID09PSAxID8gJ2hhcycgOiAnaGF2ZSd9fSBhbiB1bnJlY29nbml6ZWQgaGVhZGVyLjwvc3Ryb25nPlxyXG4gICAgICAgICAgICAgICAgICAgIFRoZXNlIGFyZSBoaWdobGlnaHRlZCBpbiByZWQgb24gdGhlIGxheW91dCBhbmQgbXVzdCBiZSBjb3JyZWN0ZWQgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIHJ1bGUgY2FuIHJ1bi5cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJtb2RhbC5jbG9zZSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0J1dHRvbkxvYWRpbmdcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiYXBwcm92ZUxheW91dCgpXCIgW2Rpc2FibGVkXT1cImlzQnV0dG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNCdXR0b25Mb2FkaW5nXCI+U3VibWl0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImlzQnV0dG9uTG9hZGluZ1wiIGNsYXNzPVwic3Bpbm5lclwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwicGF0aFwiIGN4PVwiMjVcIiBjeT1cIjI1XCIgcj1cIjIwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCI0XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcmV2ZXJ0QWxsb2NhdGlvbk1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgbWItNFwiPlxyXG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBmaWxsPVwiI0ZFRjNDN1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMjAgMTMuMzMzM1YyME0yMCAyNi42NjY3SDIwLjAxNjdNMjguMzMzMyAyMEMyOC4zMzMzIDI0LjYwMjQgMjQuNjAyNCAyOC4zMzMzIDIwIDI4LjMzMzNDMTUuMzk3NiAyOC4zMzMzIDExLjY2NjcgMjQuNjAyNCAxMS42NjY3IDIwQzExLjY2NjcgMTUuMzk3NiAxNS4zOTc2IDExLjY2NjcgMjAgMTEuNjY2N0MyNC42MDI0IDExLjY2NjcgMjguMzMzMyAxNS4zOTc2IDI4LjMzMzMgMjBaXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRjU5RTBCXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1iLTNcIj5SZXZlcnQgQWxsb2NhdGlvbjwvaDI+XHJcbiAgICAgICAgICAgIDxwPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXZlcnQgdGhlIGFsbG9jYXRpb24/IFRoaXMgd2lsbCByZXN0b3JlIHRoZSBzdGF0ZSBiZWZvcmUgcnVubmluZyBhbGxvY2F0aW9uLlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQnV0dG9uTG9hZGluZ1wiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJyZXZlcnRBbGxvY2F0aW9uKCk7IG1vZGFsLmNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQnV0dG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNCdXR0b25Mb2FkaW5nXCI+UmV2ZXJ0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cIndpZHRoOiAxNDFweDtcIiAqbmdJZj1cImlzQnV0dG9uTG9hZGluZ1wiIGNsYXNzPVwic3Bpbm5lclwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwicGF0aFwiIGN4PVwiMjVcIiBjeT1cIjI1XCIgcj1cIjIwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCI0XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29tcGxldGVBbGxvY2F0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBtYi00XCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0yMC44MzMgMjEuNjY2NUMxOC4wMzMgMjEuNjY2NSAxNy4xMTY0IDIyLjc5MTUgMTYuODE2NCAyMy41MzMyQzE3LjcwOCAyMy45MTY1IDE4LjMzMyAyNC43OTk4IDE4LjMzMyAyNS44MzMyQzE4LjMzMyAyNi40OTYyIDE4LjA2OTYgMjcuMTMyMSAxNy42MDA4IDI3LjYwMDlDMTcuMTMxOSAyOC4wNjk4IDE2LjQ5NjEgMjguMzMzMiAxNS44MzMgMjguMzMzMkMxNS4xNyAyOC4zMzMyIDE0LjUzNDEgMjguMDY5OCAxNC4wNjUzIDI3LjYwMDlDMTMuNTk2NCAyNy4xMzIxIDEzLjMzMyAyNi40OTYyIDEzLjMzMyAyNS44MzMyQzEzLjMzMyAyNC43NDE1IDE0LjAyNDcgMjMuODE2NSAxNC45OTk3IDIzLjQ3NDhWMTYuNTI0OEMxNC41MTE0IDE2LjM1MzUgMTQuMDg4NSAxNi4wMzQ0IDEzLjc4OTkgMTUuNjExN0MxMy40OTEyIDE1LjE4OTEgMTMuMzMxNSAxNC42ODQgMTMuMzMzIDE0LjE2NjVDMTMuMzMzIDEzLjUwMzUgMTMuNTk2NCAxMi44Njc2IDE0LjA2NTMgMTIuMzk4N0MxNC41MzQxIDExLjkyOTkgMTUuMTcgMTEuNjY2NSAxNS44MzMgMTEuNjY2NUMxNi40OTYxIDExLjY2NjUgMTcuMTMxOSAxMS45Mjk5IDE3LjYwMDggMTIuMzk4N0MxOC4wNjk2IDEyLjg2NzYgMTguMzMzIDEzLjUwMzUgMTguMzMzIDE0LjE2NjVDMTguMzMzIDE1LjI1ODIgMTcuNjQxNCAxNi4xODMyIDE2LjY2NjQgMTYuNTI0OFYyMC45MzMyQzE3LjM5OTcgMjAuMzkxNSAxOC40NjY0IDE5Ljk5OTggMTkuOTk5NyAxOS45OTk4QzIyLjIyNDcgMTkuOTk5OCAyMi45NjY0IDE4Ljg4MzIgMjMuMjA4IDE4LjE0MTVDMjIuNzUyMSAxNy45NTE2IDIyLjM2MjUgMTcuNjMxMSAyMi4wODgyIDE3LjIyMDRDMjEuODEzOSAxNi44MDk3IDIxLjY2NzEgMTYuMzI3MSAyMS42NjY0IDE1LjgzMzJDMjEuNjY2NCAxNS4xNzAxIDIxLjkyOTcgMTQuNTM0MiAyMi4zOTg2IDE0LjA2NTRDMjIuODY3NCAxMy41OTY2IDIzLjUwMzMgMTMuMzMzMiAyNC4xNjY0IDEzLjMzMzJDMjQuODI5NCAxMy4zMzMyIDI1LjQ2NTMgMTMuNTk2NiAyNS45MzQxIDE0LjA2NTRDMjYuNDAzIDE0LjUzNDIgMjYuNjY2NCAxNS4xNzAxIDI2LjY2NjQgMTUuODMzMkMyNi42NjY0IDE2Ljk0OTggMjUuOTMzIDE3LjkxNjUgMjQuOTI0NyAxOC4yMTY1QzI0LjcwOCAxOS40MDgyIDIzLjg5OTcgMjEuNjY2NSAyMC44MzMgMjEuNjY2NVpNMTUuODMzIDI0Ljk5OThDMTUuNjEyIDI0Ljk5OTggMTUuNCAyNS4wODc2IDE1LjI0MzggMjUuMjQzOUMxNS4wODc1IDI1LjQwMDIgMTQuOTk5NyAyNS42MTIyIDE0Ljk5OTcgMjUuODMzMkMxNC45OTk3IDI2LjA1NDIgMTUuMDg3NSAyNi4yNjYxIDE1LjI0MzggMjYuNDIyNEMxNS40IDI2LjU3ODcgMTUuNjEyIDI2LjY2NjUgMTUuODMzIDI2LjY2NjVDMTYuMDU0IDI2LjY2NjUgMTYuMjY2IDI2LjU3ODcgMTYuNDIyMyAyNi40MjI0QzE2LjU3ODYgMjYuMjY2MSAxNi42NjY0IDI2LjA1NDIgMTYuNjY2NCAyNS44MzMyQzE2LjY2NjQgMjUuNjEyMiAxNi41Nzg2IDI1LjQwMDIgMTYuNDIyMyAyNS4yNDM5QzE2LjI2NiAyNS4wODc2IDE2LjA1NCAyNC45OTk4IDE1LjgzMyAyNC45OTk4Wk0xNS44MzMgMTMuMzMzMkMxNS42MTIgMTMuMzMzMiAxNS40IDEzLjQyMSAxNS4yNDM4IDEzLjU3NzJDMTUuMDg3NSAxMy43MzM1IDE0Ljk5OTcgMTMuOTQ1NSAxNC45OTk3IDE0LjE2NjVDMTQuOTk5NyAxNC4zODc1IDE1LjA4NzUgMTQuNTk5NSAxNS4yNDM4IDE0Ljc1NThDMTUuNCAxNC45MTIgMTUuNjEyIDE0Ljk5OTggMTUuODMzIDE0Ljk5OThDMTYuMDU0IDE0Ljk5OTggMTYuMjY2IDE0LjkxMiAxNi40MjIzIDE0Ljc1NThDMTYuNTc4NiAxNC41OTk1IDE2LjY2NjQgMTQuMzg3NSAxNi42NjY0IDE0LjE2NjVDMTYuNjY2NCAxMy45NDU1IDE2LjU3ODYgMTMuNzMzNSAxNi40MjIzIDEzLjU3NzJDMTYuMjY2IDEzLjQyMSAxNi4wNTQgMTMuMzMzMiAxNS44MzMgMTMuMzMzMlpNMjQuMTY2NCAxNC45OTk4QzIzLjk0NTMgMTQuOTk5OCAyMy43MzM0IDE1LjA4NzYgMjMuNTc3MSAxNS4yNDM5QzIzLjQyMDggMTUuNDAwMiAyMy4zMzMgMTUuNjEyMiAyMy4zMzMgMTUuODMzMkMyMy4zMzMgMTYuMDU0MiAyMy40MjA4IDE2LjI2NjEgMjMuNTc3MSAxNi40MjI0QzIzLjczMzQgMTYuNTc4NyAyMy45NDUzIDE2LjY2NjUgMjQuMTY2NCAxNi42NjY1QzI0LjM4NzQgMTYuNjY2NSAyNC41OTkzIDE2LjU3ODcgMjQuNzU1NiAxNi40MjI0QzI0LjkxMTkgMTYuMjY2MSAyNC45OTk3IDE2LjA1NDIgMjQuOTk5NyAxNS44MzMyQzI0Ljk5OTcgMTUuNjEyMiAyNC45MTE5IDE1LjQwMDIgMjQuNzU1NiAxNS4yNDM5QzI0LjU5OTMgMTUuMDg3NiAyNC4zODc0IDE0Ljk5OTggMjQuMTY2NCAxNC45OTk4WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMDlCRjNcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJtYi0zXCI+U2F2ZSBhbmQgY29tcGxldGUgYWxsb2NhdGlvbjwvaDI+XHJcbiAgICAgICAgICAgIDxwPllvdSBhcmUgYWJvdXQgdG8gY29tcGxldGUgdGhlIG1lcmNoIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhpcyB3aWxsIG1ha2UgdGhlIHN0b3JlIHJlYWR5IGZvciBmaXh0dXJlXHJcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb24gYW5kIG1vdmUgaXQgdG8gdGhlIHZlcmlmaWNhdGlvbiBzdGFnZS4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/PC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJtb2RhbC5jbG9zZSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0J1dHRvbkxvYWRpbmdcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiY29tcGxldGVBbGxvY2F0aW9uKCk7XCIgW2Rpc2FibGVkXT1cImlzQnV0dG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNCdXR0b25Mb2FkaW5nXCI+Q29tcGxldGUgYWxsb2NhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzdmcgc3R5bGU9XCJ3aWR0aDogMTA3cHg7XCIgKm5nSWY9XCJpc0J1dHRvbkxvYWRpbmdcIiBjbGFzcz1cInNwaW5uZXJcIiB2aWV3Qm94PVwiMCAwIDUwIDUwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz1cInBhdGhcIiBjeD1cIjI1XCIgY3k9XCIyNVwiIHI9XCIyMFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiNFwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
4018
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ib2FyZC1zdG9yZS1wbGFuby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9vbmJvYXJkLXN0b3JlLXBsYW5vL29uYm9hcmQtc3RvcmUtcGxhbm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvb25ib2FyZC1zdG9yZS1wbGFuby9vbmJvYXJkLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsWUFBWSxFQUlaLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQVksYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUQsT0FBTyxFQUdMLFdBQVcsRUFFWCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQ0wsT0FBTyxFQUVQLFlBQVksRUFDWixjQUFjLEVBQ2QsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUdkLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBTWpDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBQ3hILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBRTFHLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixHQUNqQixNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFRakMsTUFBTSxPQUFPLDBCQUEwQjtJQTRJM0I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQWxKVixTQUFTLENBQWlDO0lBQ1os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QVM7dUJBQUMsWUFBWTtnQkFFTyxZQUFZO3NCQUF6QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDRixtQkFBbUI7c0JBQTVDLFNBQVM7dUJBQUMsYUFBYTtnQkFDUyxxQkFBcUI7c0JBQXJELFNBQVM7dUJBQUMsb0JBQW9CO2dCQUUvQix3QkFBd0I7c0JBRHZCLFNBQVM7dUJBQUMsdUJBQXVCO2dCQUdsQywwQkFBMEI7c0JBRHpCLFNBQVM7dUJBQUMseUJBQXlCO2dCQUlwQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7IExvY2F0aW9uLCBUaXRsZUNhc2VQaXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxuaW1wb3J0IHtcclxuICBGb3JtQXJyYXksXHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICBTdWJqZWN0LFxyXG4gIFN1YnNjcmlwdGlvbixcclxuICBkZWJvdW5jZVRpbWUsXHJcbiAgZmlyc3RWYWx1ZUZyb20sXHJcbiAgZnJvbUV2ZW50LFxyXG4gIHRha2VVbnRpbCxcclxufSBmcm9tIFwicnhqc1wiO1xyXG5cclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuXHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuXHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExheW91dEVkaXRDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vcG9wdXBzL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi9sYXlvdXQtZWRpdC1jb25maXJtYXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvZGVsZXRlLWNvbmZpcm1hdGlvbi9kZWxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEcm9wZG93bklGIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvcGxhbm8tZ2VuZXJhbC5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtcclxuICBERUZBVUxUX0NPTVBBQ1RJT05fQ09ORklHLFxyXG4gIGNvbXBhY3RGbG9vckRlc3RydWN0aXZlLFxyXG4gIGdldEZsb29yQm91bmRzRnQsXHJcbn0gZnJvbSBcIi4vdXRpbHMvYXhpcy1jb21wYWN0aW9uXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItb25ib2FyZC1zdG9yZS1wbGFub1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vb25ib2FyZC1zdG9yZS1wbGFuby5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vb25ib2FyZC1zdG9yZS1wbGFuby5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIHByb3ZpZGVyczogW1RpdGxlQ2FzZVBpcGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgT25ib2FyZFN0b3JlUGxhbm9Db21wb25lbnRcclxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0XHJcbntcclxuICBAVmlld0NoaWxkKFwiYmFzZUNhbnZhc1wiKVxyXG4gIGNhbnZhc1JlZiE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoXCJjYW52YXNDb250YWluZXJcIikgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChcImFwcGx5TG9naWNzXCIpIGFwcGx5TG9naWNzTW9kYWxSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhcHByb3ZlTGF5b3V0TW9kYWxcIikgYXBwcm92ZUxheW91dE1vZGFsUmVmITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwicmV2ZXJ0QWxsb2NhdGlvbk1vZGFsXCIpXHJcbiAgcmV2ZXJ0QWxsb2NhdGlvbk1vZGFsUmVmITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiY29tcGxldGVBbGxvY2F0aW9uTW9kYWxcIilcclxuICBjb21wbGV0ZUFsbG9jYXRpb25Nb2RhbFJlZiE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIpXHJcbiAgb25SZXNpemUoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcblxyXG4gIGNhbnZhcyE6IGZhYnJpYy5DYW52YXM7XHJcbiAgem9vbUxldmVsOiBudW1iZXIgPSAxO1xyXG4gIHdhbGxUaGlja25lc3MgPSAzMDtcclxuICB2ZXJ0aWNhbE1hcmdpbiA9ICgxLjI1IC8gMTAwKSAqIHRoaXMudG9QaXhlbHMoMTUyNCwgXCJtbVwiKTtcclxuXHJcbiAgbGF5b3V0Rm9ybTogRm9ybUdyb3VwO1xyXG4gIHNlbGVjdGVkRmxvb3JJZCA9IG5ldyBGb3JtQ29udHJvbChcIlwiKTtcclxuICBmbG9vcnNMaXN0OiBEcm9wZG93bklGW11bXSA9IFtdO1xyXG4gIGZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIGZpeHR1cmVUZW1wbGF0ZUlkU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBvdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcGxhbm9EYXRhOiBhbnk7XHJcblxyXG4gIGZsb29yRGF0YTogYW55O1xyXG4gIHJlYWRvbmx5IG9yaWdpbmFsRmxvb3JEYXRhOiBhbnk7IC8vIHVzZWQgdG8gcm9sbGJhY2sgdG8gb3JpZ2luYWwgbGF5b3V0IHN0YXRlIG9uIGNsaWNrIGNhbmNlbCB3aGlsZSBlZGl0aW5nLlxyXG5cclxuICAvKipcclxuICAgKiBDb21wYWN0IGlzIGEgb25lLXNob3QgYWN0aW9uLCBub3QgYSB0b2dnbGUuIENsaWNraW5nIGl0IGNvbXBhY3RzIHRoZVxyXG4gICAqIGxheW91dCBkZXN0cnVjdGl2ZWx5IGFuZCBkcm9wcyB0aGUgdXNlciBpbnRvIGVkaXQgbW9kZSBzbyB0aGUgY2hhbmdlXHJcbiAgICogc2hvd3MgdXAgYXMgYW4gdW5zYXZlZCBlZGl0IChyZXZlcnRhYmxlIHZpYSBDYW5jZWwsIHBlcnNpc3RhYmxlIHZpYVxyXG4gICAqIFNhdmUgLyBTdWJtaXQpLiBJZiBubyBjb21wYWN0aW9uIGlzIHBvc3NpYmxlIHdlIGtlZXAgdGhlIHVzZXIgaW4gdmlld1xyXG4gICAqIG1vZGUgYW5kIHN1cmZhY2UgdGhlIHJlYXNvbiB2aWEgdG9hc3Qg4oCUIG5vIHNpbGVudCBuby1vcHMuXHJcbiAgICovXHJcbiAgY29tcGFjdExheW91dCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5mbG9vckRhdGEpIHJldHVybjtcclxuICAgIGNvbnN0IGJlZm9yZSA9IGdldEZsb29yQm91bmRzRnQodGhpcy5mbG9vckRhdGEpO1xyXG4gICAgY29uc3QgY29tcGFjdGVkID0gY29tcGFjdEZsb29yRGVzdHJ1Y3RpdmUoXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLFxyXG4gICAgICBERUZBVUxUX0NPTVBBQ1RJT05fQ09ORklHLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGFmdGVyID0gZ2V0Rmxvb3JCb3VuZHNGdChjb21wYWN0ZWQpO1xyXG4gICAgY29uc3Qgd2lkdGhTaHJpbmsgPSAoYmVmb3JlLm1heFggLSBiZWZvcmUubWluWCkgLSAoYWZ0ZXIubWF4WCAtIGFmdGVyLm1pblgpO1xyXG4gICAgY29uc3QgaGVpZ2h0U2hyaW5rID0gKGJlZm9yZS5tYXhZIC0gYmVmb3JlLm1pblkpIC0gKGFmdGVyLm1heFkgLSBhZnRlci5taW5ZKTtcclxuICAgIGlmICh3aWR0aFNocmluayA8IDAuNSAmJiBoZWlnaHRTaHJpbmsgPCAwLjUpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0V2FybmluZ1RvYXN0KFxyXG4gICAgICAgIFwiTGF5b3V0IGlzIGFscmVhZHkgY29tcGFjdCDigJQgbm8gZnVydGhlciBjb21wYWN0aW9uIHBvc3NpYmxlXCIsXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24gPSBjb21wYWN0ZWQubGF5b3V0UG9seWdvbjtcclxuICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgPSBjb21wYWN0ZWQuY2VudGVyRml4dHVyZTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBhY3RlZC5vdGhlckVsZW1lbnRzKSkge1xyXG4gICAgICB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzID0gY29tcGFjdGVkLm90aGVyRWxlbWVudHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlb3JkZXJGaXh0dXJlKHRoaXMuZmxvb3JEYXRhKTtcclxuICAgIC8vIERyb3AgaW50byBlZGl0IG1vZGUgc28gdGhlIGNvbXBhY3Rpb24gbGl2ZXMgYXMgYW4gdW5zYXZlZCBlZGl0IOKAlFxyXG4gICAgLy8gQ2FuY2VsIHdpbGwgcmVmZXRjaCBhbmQgcmV2ZXJ0IGl0LCBTYXZlIC8gU3VibWl0IHdpbGwgcGVyc2lzdCBpdC5cclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCB0cnVlKTtcclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJsZWZ0XCIsIGZhbHNlKTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgdGhpcy5sYXlvdXRGb3JtLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhblNob3dDb21wYWN0VG9nZ2xlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5mbG9vckRhdGE/Ll9pZCAmJiB0aGlzLmdldFN0YXR1cyA9PT0gXCJkcmFmdFwiO1xyXG4gIH1cclxuXHJcbiAgY2RuVXJsOiBzdHJpbmc7XHJcbiAgZml4dHVyZVRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBhbGxGaXh0dXJlczogYW55W10gPSBbXTsgLy8gYWxsIGZpeHR1cmVzIGluY2x1ZGluZyB0aGUgbWFzdGVyIHRlbXBsYXRlcyBmb3IgdHJlZSB2aWV3XHJcbiAgLy8gYWxsRml4dHVyZUluc3RhbmNlczogYW55W10gPSBbXTsgLy8gb25seSB0aGUgbGF5b3V0IGZpeHR1cmVzIGluc3RhbmNlcy5cclxuICBzdG9yZUZlZWRiYWNrOiBhbnk7XHJcblxyXG4gIHNlbGVjdGVkRml4dHVyZTogYW55O1xyXG4gIHNlbGVjdGVkRml4dHVyZURhdGE6IGFueTtcclxuICBlZGl0Rml4dHVyZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVkaXRGaXh0dXJlU2VjdGlvbjogXCJiYXNpYy1kZXRhaWxzXCIgfCBcInByb2R1Y3RzXCIgfCBcInZtc1wiID0gXCJiYXNpYy1kZXRhaWxzXCI7XHJcbiAgc3VibWl0Rml4dHVyZSA9IGZhbHNlO1xyXG5cclxuICBsYXlvdXRNZXRyaWNzID0ge1xyXG4gICAgYWxsU3RvcmU6IDAsXHJcbiAgICBhbGxvY2F0aW9uUGVuZGluZzogMCxcclxuICAgIGRyYWZ0OiAwLFxyXG4gIH07XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzUmlnaHRQYW5lbENvbGxhcHNlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNMZWZ0UGFuZWxDb2xsYXBzZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBkaXNhYmxlRWRpdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNTYXZpbmdMYXlvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNBbGxvY2F0aW9uUnVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZmxvb3JEYXRhQmVmb3JlQWxsb2NhdGlvbjogYW55ID0gbnVsbDtcclxuXHJcbiAgb3RoZXJFbGVtZW50TGlzdDogRHJvcGRvd25JRltdID0gW1xyXG4gICAgeyBsYWJlbDogXCJQT1MgQ291bnRlclwiLCB2YWx1ZTogXCJQT1MgQ291bnRlclwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIkRpc2N1c3Npb24gVGFibGVcIiwgdmFsdWU6IFwiRGlzY3Vzc2lvbiBUYWJsZVwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIk1pcnJvclwiLCB2YWx1ZTogXCJNaXJyb3JcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJPdGhlcnNcIiwgdmFsdWU6IFwiT3RoZXJzXCIgfSxcclxuICBdO1xyXG4gIHN0b3JlTGlzdDogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRTdG9yZU5hbWU6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBhY3RpdmVIaWdobGlnaHQ6IGZhYnJpYy5SZWN0IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBjYW5jZWxIaWdobGlnaHRCbGluayA9IGZhbHNlO1xyXG5cclxuICBpc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgbGF5b3V0Qm91bmRzOiBhbnk7XHJcblxyXG4gIGlzUnVuQWxsb2NhdGlvbkFsbG93ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXZtQWxpYXNLZXlzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcclxuXHJcbiAgcmVzdHJpY3RlZFVzZXJzOiBzdHJpbmdbXSA9IFtcclxuICAgIFwibWF0aGV3LnJoZWFAbGVuc2thcnQuY29tXCIsXHJcbiAgICBcInNhd3Jhbi5zaW5naEBkZWFsc2thcnQuaW5cIixcclxuICAgIFwiYWJoaW5hdi5rcmlzaG5hQGxlbnNrYXJ0LmluXCIsXHJcbiAgICBcInN1ZGhhQHRhbmdvdGVjaC5jby5pblwiLFxyXG4gICAgLy8gXCJnb3BpbmF0aEB0YW5nb3RlY2guY28uaW5cIlxyXG4gIF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgdGl0bGVDYXNlOiBUaXRsZUNhc2VQaXBlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcGFnZUluZm86IFBhZ2VJbmZvU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkge1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcblxyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB0aGlzLmNkblVybCA9IGUucGxhbm9ncmFtQ0ROO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICBpZiAocGFyYW1zPy5wbGFub0lkKSB7XHJcbiAgICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXMocGFyYW1zPy5wbGFub0lkKTtcclxuICAgICAgICAgIGlmIChwYXJhbXM/LmZsb29ySWQpIHtcclxuICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEgPSB7IF9pZDogcGFyYW1zPy5mbG9vcklkIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdG9yZWRVc2VySW5mbyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlci1pbmZvXCIpO1xyXG4gICAgICAgIGNvbnN0IHVzZXJEYXRhID0gc3RvcmVkVXNlckluZm8gPyBKU09OLnBhcnNlKHN0b3JlZFVzZXJJbmZvKSA6IG51bGw7XHJcbiAgICAgICAgY29uc3QgaXNOb25SZXN0cmljdGVkVXNlciA9XHJcbiAgICAgICAgICAhIXVzZXJEYXRhICYmICF0aGlzLnJlc3RyaWN0ZWRVc2Vycy5pbmNsdWRlcyh1c2VyRGF0YT8uZW1haWwpO1xyXG4gICAgICAgIGNvbnN0IGlzQWxsb2NhdGlvbk92ZXJyaWRlRW5hYmxlZCA9IHBhcmFtcz8uYWxsb2NhdGlvbiA9PT0gXCJ0cnVlXCI7XHJcblxyXG4gICAgICAgIGlmIChpc05vblJlc3RyaWN0ZWRVc2VyIHx8IGlzQWxsb2NhdGlvbk92ZXJyaWRlRW5hYmxlZCkge1xyXG4gICAgICAgICAgdGhpcy5pc1J1bkFsbG9jYXRpb25BbGxvd2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRGbG9vcklkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoYXN5bmMgKGlkKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsaWNrZWRGbG9vciA9IHRoaXMucGxhbm9EYXRhPy5mbG9vcnM/LmZpbmQoXHJcbiAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IGlkLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKGNsaWNrZWRGbG9vci5zdGF0dXMgPT09IFwiY29tcGxldGVkXCIpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAgICAgYG1hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXBsYW5vZ3JhbT9wbGFub0lkPSR7Y2xpY2tlZEZsb29yLnBsYW5vSWR9JmZsb29ySWQ9JHtjbGlja2VkRmxvb3IuX2lkfWAsXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhID0gY2xpY2tlZEZsb29yO1xyXG4gICAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuICAgICAgICB0aGlzLmxheW91dEZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgY29uc3QgbmV3UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuICAgICAgICBuZXdQYXJhbXMuc2V0KFwicGxhbm9JZFwiLCB0aGlzLmZsb29yRGF0YS5wbGFub0lkKTtcclxuICAgICAgICBuZXdQYXJhbXMuc2V0KFwiZmxvb3JJZFwiLCB0aGlzLmZsb29yRGF0YS5faWQpO1xyXG5cclxuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcclxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcclxuICAgICAgICAgIG5ld1BhcmFtcy50b1N0cmluZygpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQuc2V0VmFsdWUodGhpcy5mbG9vckRhdGEuX2lkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXModGhpcy5jYW52YXNSZWY/Lm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgc2VsZWN0aW9uRnVsbHlDb250YWluZWQ6IHRydWUsXHJcbiAgICAgIHBlclBpeGVsVGFyZ2V0RmluZDogdHJ1ZSxcclxuICAgICAgdGFyZ2V0RmluZFRvbGVyYW5jZTogNSxcclxuICAgIH0pO1xyXG5cclxuICAgIGZyb21FdmVudCh0aGlzLmNhbnZhcyBhcyBhbnksIFwib2JqZWN0Om1vZGlmaWVkXCIpXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBtb3ZlZE9iajogYW55ID0gZS50YXJnZXQ7XHJcblxyXG4gICAgICAgIGlmICghbW92ZWRPYmopIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKG1vdmVkT2JqPy50eXBlID09PSBcImFjdGl2ZVNlbGVjdGlvblwiKSB7XHJcbiAgICAgICAgICB0aGlzLmFwcGx5R3JvdXBUcmFuc2Zvcm0obW92ZWRPYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZS50cmFuc2Zvcm0/LmFjdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgaXNSZXNpemUgPVxyXG4gICAgICAgICAgYWN0aW9uID09PSBcInNjYWxlXCIgfHwgYWN0aW9uID09PSBcInNjYWxlWFwiIHx8IGFjdGlvbiA9PT0gXCJzY2FsZVlcIjtcclxuXHJcbiAgICAgICAgaWYgKGlzUmVzaXplKSB7XHJcbiAgICAgICAgICBjb25zdCB0eXBlID0gbW92ZWRPYmo/Lm9ialR5cGUgPz8gXCJncm91cFwiO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHg6IG1vdmVkT2JqLmxlZnQsXHJcbiAgICAgICAgICAgIHk6IG1vdmVkT2JqLnRvcCxcclxuICAgICAgICAgICAgd2lkdGg6IG1vdmVkT2JqLmdldFNjYWxlZFdpZHRoKCksXHJcbiAgICAgICAgICAgIGhlaWdodDogbW92ZWRPYmouZ2V0U2NhbGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgIGFuZ2xlOiBtb3ZlZE9iai5hbmdsZSxcclxuICAgICAgICAgICAgZWxlbWVudERhdGE6IG1vdmVkT2JqLmRhdGEsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwid2FsbFwiOiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKG1vdmVkT2JqKTtcclxuICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhLmFuZ2xlID0gdXBkYXRlZENvbmZpZy5hbmdsZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3V2FsbCA9IGF3YWl0IHRoaXMuZHJhd1dhbGwoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueCxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueSxcclxuICAgICAgICAgICAgICAgIHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcud2lkdGggLSAwLjI3LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YSxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAobmV3V2FsbCBhcyBhbnkpLm9ialR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgICAgICAobmV3V2FsbCBhcyBhbnkpLmRhdGEgPSB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QobmV3V2FsbCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhc2UgXCJvdGhlcnNcIjoge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShtb3ZlZE9iaik7XHJcbiAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YS5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID1cclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuYW5nbGU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld090aGVyID0gdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy54LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy55LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5hbmdsZSxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcud2lkdGggLSAyLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5oZWlnaHQgLSAyLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YSxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAobmV3T3RoZXIgYXMgYW55KS5vYmpUeXBlID0gXCJvdGhlcnNcIjtcclxuICAgICAgICAgICAgICAobmV3T3RoZXIgYXMgYW55KS5kYXRhID0gdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KG5ld090aGVyKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FzZSBcImVudHJhbmNlXCI6IHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FzZSBcImZpeHR1cmVcIjoge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlV2FsbENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU90aGVyRWxlbWVudHNDb29yZGluYXRlcygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRW50cmFuY2VDb29yZGluYXRlcygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldHVwWm9vbUhhbmRsZXJzKCk7XHJcblxyXG4gICAgdGhpcy5saXN0ZW5Ub0RlbGV0ZUtleSgpO1xyXG4gICAgdGhpcy50b2dnbGVQYW5lbChcImxlZnRcIiwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVBbGxQb3NpdGlvbnMoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxDb29yZGluYXRlcygpO1xyXG4gICAgdGhpcy51cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoKTtcclxuICAgIHRoaXMudXBkYXRlT3RoZXJFbGVtZW50c0Nvb3JkaW5hdGVzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5jYWRMYXlvdXQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFwcGx5R3JvdXBUcmFuc2Zvcm0oc2VsZWN0aW9uOiBmYWJyaWMuQWN0aXZlU2VsZWN0aW9uKSB7XHJcbiAgICBjb25zdCBtYXRyaXggPSBzZWxlY3Rpb24uY2FsY1RyYW5zZm9ybU1hdHJpeCgpO1xyXG5cclxuICAgIHNlbGVjdGlvbi5nZXRPYmplY3RzKCkuZm9yRWFjaCgob2JqOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqTWF0cml4ID0gb2JqLmNhbGNUcmFuc2Zvcm1NYXRyaXgoKTtcclxuICAgICAgY29uc3QgZmluYWxNYXRyaXggPSBmYWJyaWMudXRpbC5tdWx0aXBseVRyYW5zZm9ybU1hdHJpY2VzKFxyXG4gICAgICAgIG1hdHJpeCxcclxuICAgICAgICBvYmpNYXRyaXgsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBwb2ludCA9IG5ldyBmYWJyaWMuUG9pbnQoMCwgMCkudHJhbnNmb3JtKGZpbmFsTWF0cml4KTtcclxuXHJcbiAgICAgIG9iai5zZXQoe1xyXG4gICAgICAgIGxlZnQ6IHBvaW50LngsXHJcbiAgICAgICAgdG9wOiBwb2ludC55LFxyXG4gICAgICAgIGFuZ2xlOiBzZWxlY3Rpb24uYW5nbGUgKyAob2JqLmFuZ2xlID8/IDApLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG9iai5zZXRDb29yZHMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFVuZ3JvdXAgYWZ0ZXIgYXBwbHlpbmcgdHJhbnNmb3JtXHJcbiAgICB0aGlzLmNhbnZhcy5kaXNjYXJkQWN0aXZlT2JqZWN0KCk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICByZXNpemVDYW52YXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgdGhpcy5jYW52YXMuc2V0RGltZW5zaW9ucyh7XHJcbiAgICAgIHdpZHRoOiBjb250YWluZXIuY2xpZW50V2lkdGggLSA1MCxcclxuXHJcbiAgICAgIGhlaWdodDogY29udGFpbmVyLmNsaWVudEhlaWdodCAtIDQwLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBzZXR1cFpvb21IYW5kbGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcblxyXG4gICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgIC8vIHRoaXMuaXNVc2VySW50ZXJhY3RlZFdpdGhDYW52YXMgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVk7XHJcbiAgICAgICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuXHJcbiAgICAgICAgem9vbSA9IE1hdGgubWF4KDAuMDUsIE1hdGgubWluKHpvb20sIDUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGUub2Zmc2V0WCxcclxuICAgICAgICAgICAgeTogZS5vZmZzZXRZLFxyXG4gICAgICAgICAgfSBhcyBmYWJyaWMuUG9pbnQsXHJcbiAgICAgICAgICB6b29tLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgbGV0IGxhc3RQb3NYID0gMDtcclxuICAgIGxldCBsYXN0UG9zWSA9IDA7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIW9wdC50YXJnZXQpIHtcclxuICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6bW92ZVwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzRHJhZ2dpbmcgJiYgdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0pIHtcclxuICAgICAgICAvLyB0aGlzLmlzVXNlckludGVyYWN0ZWRXaXRoQ2FudmFzID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgdnB0WzRdICs9IGUuY2xpZW50WCAtIGxhc3RQb3NYO1xyXG4gICAgICAgIHZwdFs1XSArPSBlLmNsaWVudFkgLSBsYXN0UG9zWTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6dXBcIiwgKCkgPT4ge1xyXG4gICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIkNyZWF0ZSBTdG9yZSBQbGFub1wiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiUGxhbm9ncmFtXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtcy9vbmJvYXJkXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlwiLFxyXG4gICAgICAgIHBhdGg6IFwiXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBvbkZpeHR1cmVTYXZlKCkge1xyXG4gICAgdGhpcy5zdWJtaXRGaXh0dXJlID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN1Ym1pdEZpeHR1cmUgPSBmYWxzZTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkZpeHR1cmVQYWdlQ2FuY2VsKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgIHRoaXMuZWRpdEZpeHR1cmVTZWN0aW9uID0gXCJiYXNpYy1kZXRhaWxzXCI7XHJcbiAgICB0aGlzLmVkaXRGaXh0dXJlID0gZmFsc2U7XHJcbiAgICBhd2FpdCB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgb25GaXh0dXJlU3VibWl0KGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgJiYgIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChldmVudD8uc2hlbGYgJiYgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5zaGVsZkNvbmZpZykge1xyXG4gICAgICBldmVudC5zaGVsZiA9IGV2ZW50LnNoZWxmLm1hcCgoc2hlbGY6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBmaW5kU2hlbGYgPSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuc2hlbGZDb25maWcuZmluZChcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlLnNoZWxmTnVtYmVyID09IGluZGV4ICsgMSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChmaW5kU2hlbGYpIHtcclxuICAgICAgICAgIHNoZWxmID0geyAuLi5maW5kU2hlbGYsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBkZXRhaWxzID1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnW1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5zaGVsZkNvbmZpZy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICBkZXRhaWxzLnNoZWxmTnVtYmVyID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgc2hlbGYgPSB7IC4uLmRldGFpbHMsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaGVsZjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJzaGVsZkNvbmZpZ1wiXSA9IGV2ZW50Py5zaGVsZjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1wiZGVzY3JpcHRpb25cIl0gPSBldmVudD8uZGVzY3JpcHRpb24gPz8gXCJcIjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1widGVtcGxhdGVHcm91cE5hbWVcIl0gPVxyXG4gICAgICAgIGV2ZW50Py50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuaGVhZGVyLmxhYmVsID0gZXZlbnQ/LmhlYWRlckxhYmVsID8/IFwiXCI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5mb290ZXIubGFiZWwgPSBldmVudD8uZm9vdGVyTGFiZWwgPz8gXCJcIjtcclxuXHJcbiAgICAgIHRoaXMudmFsaWRhdGVGaXh0dXJlSGVhZGVycygpO1xyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnNlY3Rpb24pIHtcclxuICAgICAgZXZlbnQuc2VjdGlvbi5mb3JFYWNoKChzZWM6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBudW1iZXIgPSBzZWM/LnNoZWx2ZXM/Lm1hcCgoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICBwYXJzZUludChlbGUuc3BsaXQoXCIgXCIpWzFdKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uc2hlbGZDb25maWcuZm9yRWFjaCgoc2hlbGY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG51bWJlci5pbmNsdWRlcyhzaGVsZi5zaGVsZk51bWJlcikpIHtcclxuICAgICAgICAgICAgc2hlbGYuem9uZSA9IHNlYy56b25lO1xyXG4gICAgICAgICAgICBzaGVsZi5wcm9kdWN0QnJhbmROYW1lID0gc2VjLnByb2R1Y3RCcmFuZE5hbWU7XHJcbiAgICAgICAgICAgIHNoZWxmLnByb2R1Y3RDYXRlZ29yeSA9IHNlYy5wcm9kdWN0Q2F0ZWdvcnk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChldmVudD8udm1Db25maWcgJiYgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy52bUNvbmZpZykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJ2bUNvbmZpZ1wiXSA9IGV2ZW50Py52bUNvbmZpZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgIC8vIHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lZGl0Rml4dHVyZVNlY3Rpb24gPSBcImJhc2ljLWRldGFpbHNcIjtcclxuICAgICAgICB0aGlzLmVkaXRGaXh0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhPy5faWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVQYW5lbChzaWRlOiBcImxlZnRcIiB8IFwicmlnaHRcIiwgYWN0aW9uPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHNpZGUgPT09IFwibGVmdFwiKSB7XHJcbiAgICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSBhY3Rpb24gPz8gIXRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQ7XHJcbiAgICAgIGlmICghdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCkgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBhY3Rpb24gPz8gIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkO1xyXG4gICAgICBpZiAoIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkKSB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCA0MDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0VGVtcGxhdGUoZml4dHVyZUNvbmZpZ0lkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldEZpeHR1cmVUZW1wbGF0ZShmaXh0dXJlQ29uZmlnSWQpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHRyYW5zZmVyQXJyYXlJdGVtPFQgPSBhbnk+KFxyXG4gICAgY3VycmVudEFycmF5OiBUW10sXHJcbiAgICB0YXJnZXRBcnJheTogVFtdLFxyXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXHJcbiAgICB0YXJnZXRJbmRleDogbnVtYmVyLFxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZnJvbSA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1cnJlbnRBcnJheS5sZW5ndGggLSAxLCBjdXJyZW50SW5kZXgpKTtcclxuICAgIGNvbnN0IHRvID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGFyZ2V0QXJyYXkubGVuZ3RoLCB0YXJnZXRJbmRleCkpO1xyXG5cclxuICAgIGlmIChjdXJyZW50QXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgIHRhcmdldEFycmF5LnNwbGljZSh0bywgMCwgY3VycmVudEFycmF5LnNwbGljZShmcm9tLCAxKVswXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW9yZGVyRml4dHVyZShmbG9vckRhdGE6IGFueSkge1xyXG4gICAgLy8gV2FsbHNcclxuICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcblxyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IGVsZW1lbnQuZWxlbWVudE51bWJlcjtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2VudGVyIGZsb29yIGZpeHR1cmVzXHJcbiAgICBsZXQgZmxvb3JBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcImZsb29yXCI7XHJcblxyXG4gICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBmbG9vckFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEVsZW1lbnRWYWx1ZShncm91cDogYW55KSB7XHJcbiAgICByZXR1cm4gZ3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdhbGxCeU51bWJlcihlbGVtZW50TnVtYmVyOiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5maW5kKFxyXG4gICAgICAodzogYW55KSA9PiB3LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3LmVsZW1lbnROdW1iZXIgPT09IGVsZW1lbnROdW1iZXIsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcm91bmRUb1R3byhudW06IG51bWJlcikge1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtICogMTAwKSAvIDEwMDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFN0b3JlRml4dHVyZXMoc3RvcmVJZDogc3RyaW5nLCBlbmFibGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICghdGhpcy5maXh0dXJlVGVtcGxhdGVzLmxlbmd0aCkge1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEZpeHR1cmVUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0gbnVsbDtcclxuICAgIHRoaXMuYXBpU2VydmljZVxyXG4gICAgICAuZ2V0U3RvcmVGaXh0dXJlcyh7IGlkOiBbc3RvcmVJZF0gfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICghcmVzPy5kYXRhPy5bMF0/LmZsb29ycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnBsYW5vRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShyZXMuZGF0YVswXSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5mbG9vckRhdGE/Ll9pZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShcclxuICAgICAgICAgICAgICByZXMuZGF0YVswXS5mbG9vcnMuZmluZChcclxuICAgICAgICAgICAgICAgIChmbG9vcjogYW55KSA9PiBmbG9vcj8uX2lkID09PSB0aGlzLmZsb29yRGF0YT8uX2lkLFxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShyZXMuZGF0YVswXS5mbG9vcnNbMF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5mbG9vcnNMaXN0ID0gdGhpcy5wbGFub0RhdGEuZmxvb3JzLm1hcCgoZjogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICBsYWJlbDogZi5mbG9vck51bSxcclxuICAgICAgICAgICAgdmFsdWU6IGYuX2lkLFxyXG4gICAgICAgICAgICAvLyBkaXNhYmxlZDogZi5zdGF0dXMgPT09IFwiY29tcGxldGVkXCIsXHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5leHRyYWN0QWxsRml4dHVyZXModGhpcy5mbG9vckRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQuc2V0VmFsdWUodGhpcy5mbG9vckRhdGEuX2lkLCB7XHJcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVFZGl0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLml2bUFsaWFzS2V5cy5zaXplKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hJdm1BbGlhcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUZpeHR1cmVIZWFkZXJzKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJGbG9vcigpO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGVuYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxheW91dEZvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHBsYW5vXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdEFsbEZpeHR1cmVzKGZsb29yRGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBleHRyYWN0ZWRGaXh0dXJlID0gW1xyXG4gICAgICAuLi4oZmxvb3JEYXRhPy5tYXN0ZXJUZW1wbGF0ZXMgPz8gW10pLFxyXG4gICAgICAuLi4oZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlID8/IFtdKSxcclxuICAgIF07XHJcblxyXG4gICAgZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5mb3JFYWNoKChscDogYW55KSA9PiB7XHJcbiAgICAgIGV4dHJhY3RlZEZpeHR1cmUucHVzaCguLi4obHAuZml4dHVyZXMgPz8gW10pKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWxsRml4dHVyZXMgPSBleHRyYWN0ZWRGaXh0dXJlO1xyXG5cclxuICAgIC8vIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcyA9IFtcclxuICAgIC8vICAgLi4udGhpcy5mbG9vckRhdGEhLmxheW91dFBvbHlnb24uZmxhdE1hcCgoZTogYW55KSA9PiBlPy5maXh0dXJlcyA/PyBbXSksXHJcbiAgICAvLyAgIC4uLih0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZSA/PyBbXSksXHJcbiAgICAvLyBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFsbEZpeHR1cmVJbnN0YW5jZXMoKSB7XHJcbiAgICBjb25zdCBhbGxGaXh0dXJlcyA9IFtcclxuICAgICAgLi4uKHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5mbGF0TWFwKFxyXG4gICAgICAgIChlOiBhbnkpID0+IGU/LmZpeHR1cmVzID8/IFtdLFxyXG4gICAgICApID8/IFtdKSxcclxuICAgICAgLi4uKHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlID8/IFtdKSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3Qgc2VlbkZpeHR1cmVzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBjb25zdCB1bmlxdWVGaXh0dXJlczogYW55W10gPSBbXTtcclxuXHJcbiAgICBhbGxGaXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFmaXh0dXJlKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlSWQgPSBmaXh0dXJlLl9pZDtcclxuXHJcbiAgICAgIGlmICghc2VlbkZpeHR1cmVzLmhhcyhmaXh0dXJlSWQpKSB7XHJcbiAgICAgICAgc2VlbkZpeHR1cmVzLmFkZChmaXh0dXJlSWQpO1xyXG4gICAgICAgIHVuaXF1ZUZpeHR1cmVzLnB1c2goZml4dHVyZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB1bmlxdWVGaXh0dXJlcztcclxuICB9XHJcblxyXG4gIGFzeW5jIGZldGNoSXZtQWxpYXMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRJdm1Db252ZXJzaW9uQWxpYXMoKSxcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJlcz8uZGF0YSAmJiB0eXBlb2YgcmVzLmRhdGEgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICB0aGlzLml2bUFsaWFzS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocmVzLmRhdGEpKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIC8vIHNpbGVudGx5IGZhaWwg4oCUIHZhbGlkYXRpb24gc2tpcHBlZCBpZiBhbGlhcyB1bmF2YWlsYWJsZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVGaXh0dXJlSGVhZGVycygpIHtcclxuICAgIGlmICghdGhpcy5pdm1BbGlhc0tleXMuc2l6ZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZml4dHVyZS5maXh0dXJlTmFtZSA9PT0gXCJzcGFjZVwiKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGhlYWRlckxhYmVsOiBzdHJpbmcgPSBmaXh0dXJlPy5oZWFkZXI/LmxhYmVsID8/IFwiXCI7XHJcbiAgICAgIGZpeHR1cmUuaGVhZGVySW52YWxpZCA9ICFoZWFkZXJMYWJlbCB8fCAhdGhpcy5pdm1BbGlhc0tleXMuaGFzKGhlYWRlckxhYmVsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0ludmFsaWRIZWFkZXJGaXh0dXJlcygpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5pdm1BbGlhc0tleXMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5zb21lKFxyXG4gICAgICAoZjogYW55KSA9PiBmLmZpeHR1cmVOYW1lICE9PSBcInNwYWNlXCIgJiYgZi5oZWFkZXJJbnZhbGlkLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldCBpbnZhbGlkSGVhZGVyRml4dHVyZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKGY6IGFueSkgPT4gZi5maXh0dXJlTmFtZSAhPT0gXCJzcGFjZVwiICYmIGYuaGVhZGVySW52YWxpZCxcclxuICAgICkubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRWRpdExheW91dEFsbG93ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkICYmICF0aGlzLmlzQWxsb2NhdGlvblJ1bikge1xyXG4gICAgICBpZiAodGhpcy5nZXRTdGF0dXMgPT09IFwiZHJhZnRcIikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5nZXRTdGF0dXMgPT09IFwiYWxsb2NhdGlvblBlbmRpbmdcIiAmJlxyXG4gICAgICAgIHRoaXMuaXNSdW5BbGxvY2F0aW9uQWxsb3dlZFxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRmxvb3IodXBkYXRlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5kcmF3SW5pdGlhbENvbnRlbnQoKTtcclxuICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcblxyXG4gICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHdhbGw6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgY29uc3Qgd2FsbEl0ZW0gPSB0aGlzLnBhdGNoV2FsbEVsZW1lbnRzKHtcclxuICAgICAgICAgICAgZWxlbWVudFR5cGU6IHdhbGwuZWxlbWVudFR5cGUsXHJcbiAgICAgICAgICAgIGVsZW1lbnROdW1iZXI6IHdhbGwuZWxlbWVudE51bWJlcixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHdhbGwuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaXh0dXJlPy5maXh0dXJlTmFtZSA9PT0gXCJzcGFjZVwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogZml4dHVyZS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IGZpeHR1cmUuZml4dHVyZUNvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgIF9pZDogZml4dHVyZS5faWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAod2FsbEl0ZW0uZ2V0KFwiZml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB3YWxsLm90aGVyRWxlbWVudHM/LmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgICAgdHlwZTogW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgICAgPyBlbGUuZml4dHVyZU5hbWVcclxuICAgICAgICAgICAgICAgICAgOiBcIk90aGVyc1wiLFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgY3VzdG9tTmFtZTogW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgICAgPyBcIlwiXHJcbiAgICAgICAgICAgICAgICAgIDogZWxlLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAod2FsbEl0ZW0uZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZWxlR3JvdXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5nZXRGb3JtV2FsbHMucHVzaCh3YWxsSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgICAgICAgIGZpeHR1cmVOYW1lOiBmaXh0dXJlLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IGZpeHR1cmUuZml4dHVyZUNvbmZpZ0lkLFxyXG4gICAgICAgICAgICBfaWQ6IGZpeHR1cmUuX2lkLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgICAgICBmaXh0dXJlR3JvdXAsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZWxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgdHlwZTogW1xyXG4gICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICA/IGVsZS5maXh0dXJlTmFtZVxyXG4gICAgICAgICAgICAgICAgOiBcIk90aGVyc1wiLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBjdXN0b21OYW1lOiBbXHJcbiAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgID8gXCJcIlxyXG4gICAgICAgICAgICAgICAgOiBlbGUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yT3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgICAgIGVsZUdyb3VwLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlVG9GaXh0dXJlQ29uZmlnSWRDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvT3RoZXJFbGVtZW50c0NoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdJbml0aWFsQ29udGVudCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuY2FudmFzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnJlb3JkZXJGaXh0dXJlKHRoaXMuZmxvb3JEYXRhKTtcclxuICAgIGF3YWl0IHRoaXMuZHJhd0xheW91dEVsZW1lbnRzKCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgMzAwKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUFsbFBvc2l0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGdWxsTGF5b3V0Qm91bmRzKCkge1xyXG4gICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHJldHVybiB7IGxlZnQ6IDAsIHRvcDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG5cclxuICAgIGxldCBtaW5YID0gSW5maW5pdHksXHJcbiAgICAgIG1pblkgPSBJbmZpbml0eSxcclxuICAgICAgbWF4WCA9IC1JbmZpbml0eSxcclxuICAgICAgbWF4WSA9IC1JbmZpbml0eTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IG9iaiBvZiBvYmplY3RzKSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCByZWN0LmxlZnQpO1xyXG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcmVjdC50b3ApO1xyXG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCk7XHJcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsZWZ0OiBtaW5YLFxyXG4gICAgICB0b3A6IG1pblksXHJcbiAgICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcclxuICAgICAgaGVpZ2h0OiBtYXhZIC0gbWluWSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQoZHVyYXRpb24gPSA0MDApIHtcclxuICAgIGlmICghdGhpcy5jYW52YXMpIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoKTtcclxuICAgIGlmICghYm91bmRzLndpZHRoIHx8ICFib3VuZHMuaGVpZ2h0KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY2FudmFzVyA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICBjb25zdCBjYW52YXNIID0gdGhpcy5jYW52YXMuZ2V0SGVpZ2h0KCk7XHJcblxyXG4gICAgLy8gRmluYWwgem9vbSB0byBmaXQgKHdpdGggcGFkZGluZylcclxuICAgIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1cgLyBib3VuZHMud2lkdGg7XHJcbiAgICBjb25zdCBzY2FsZVkgPSBjYW52YXNIIC8gYm91bmRzLmhlaWdodDtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSkgKiAwLjk7IC8vIHBhZGRpbmcgMTAlXHJcblxyXG4gICAgLy8gRGVzaXJlZCB2aWV3cG9ydCBvZmZzZXQgdG8gY2VudGVyIGxheW91dFxyXG4gICAgY29uc3QgdGFyZ2V0VnB0ID0gW1xyXG4gICAgICAuLi4odGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0gfHwgWzEsIDAsIDAsIDEsIDAsIDBdKSxcclxuICAgIF0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICB0YXJnZXRWcHRbMF0gPSB0YXJnZXRab29tOyAvLyBzY2FsZVhcclxuICAgIHRhcmdldFZwdFszXSA9IHRhcmdldFpvb207IC8vIHNjYWxlWVxyXG5cclxuICAgIGNvbnN0IGV4dHJhVG9wUGFkZGluZ1B4ID0gMjQ7XHJcbiAgICB0YXJnZXRWcHRbNF0gPSBjYW52YXNXIC8gMiAtIChib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAvIDIpICogdGFyZ2V0Wm9vbTsgLy8gY2VudGVyIFhcclxuICAgIHRhcmdldFZwdFs1XSA9XHJcbiAgICAgIGNhbnZhc0ggLyAyIC1cclxuICAgICAgKGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMikgKiB0YXJnZXRab29tICtcclxuICAgICAgZXh0cmFUb3BQYWRkaW5nUHg7IC8vIGNlbnRlciBZICsgZXh0cmEgdG9wIHBhZGRpbmdcclxuXHJcbiAgICAvLyBDdXJyZW50IHZpZXdwb3J0IChzdGFydGluZyBwb2ludCBvZiBhbmltYXRpb24pXHJcbiAgICBjb25zdCBzdGFydFZwdCA9IFsuLi50aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSFdIGFzIGZhYnJpYy5UTWF0MkQ7XHJcblxyXG4gICAgZmFicmljLnV0aWwuYW5pbWF0ZSh7XHJcbiAgICAgIHN0YXJ0VmFsdWU6IDAsXHJcbiAgICAgIGVuZFZhbHVlOiAxLFxyXG4gICAgICBkdXJhdGlvbixcclxuICAgICAgZWFzaW5nOiBmYWJyaWMudXRpbC5lYXNlLmVhc2VPdXRDdWJpYyxcclxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hO1xyXG5cclxuICAgICAgICAvLyBJbnRlcnBvbGF0ZSBtYXRyaXggdmFsdWVzXHJcbiAgICAgICAgdnB0WzBdID0gc3RhcnRWcHRbMF0gKyAodGFyZ2V0VnB0WzBdIC0gc3RhcnRWcHRbMF0pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzNdID0gc3RhcnRWcHRbM10gKyAodGFyZ2V0VnB0WzNdIC0gc3RhcnRWcHRbM10pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzRdID0gc3RhcnRWcHRbNF0gKyAodGFyZ2V0VnB0WzRdIC0gc3RhcnRWcHRbNF0pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzVdID0gc3RhcnRWcHRbNV0gKyAodGFyZ2V0VnB0WzVdIC0gc3RhcnRWcHRbNV0pICogdmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0xheW91dEVsZW1lbnRzKCkge1xyXG4gICAgY29uc3QgZmxvb3IgPSB0aGlzLmZsb29yRGF0YTtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmbG9vci5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gZmxvb3IubGF5b3V0UG9seWdvbltpbmRleF07XHJcblxyXG4gICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24gPz89IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIGVsZW1lbnQudW5pdCk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBlbGVtZW50LnVuaXQpO1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy53YWxsVGhpY2tuZXNzO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5kaXN0YW5jZSwgZWxlbWVudC51bml0KTtcclxuICAgICAgICBpZiAod2lkdGggPCBoZWlnaHQpIHdpZHRoID0gdGhpcy53YWxsVGhpY2tuZXNzICsgMTtcclxuICAgICAgICBhd2FpdCB0aGlzLmRyYXdXYWxsKHRoaXMuY2FudmFzLCB4LCB5LCBoZWlnaHQsIHdpZHRoLCBlbGVtZW50KTtcclxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIpIHtcclxuICAgICAgICBjb25zdCBhcnJvd1dpZHRoID0gODA7XHJcbiAgICAgICAgY29uc3QgYXJyb3dIZWlnaHQgPSA3NTtcclxuICAgICAgICBjb25zdCBhcnJvd0Jhc2UgPSA0MDtcclxuICAgICAgICB0aGlzLmRyYXdFbnRyYW5jZShcclxuICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgeCxcclxuICAgICAgICAgIHksXHJcbiAgICAgICAgICBhcnJvd1dpZHRoLFxyXG4gICAgICAgICAgYXJyb3dIZWlnaHQsXHJcbiAgICAgICAgICBhcnJvd0Jhc2UsXHJcbiAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3IgY2FkIGxheW91dHMgb25seS5cclxuICAgIHRoaXMubGF5b3V0Qm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGZsb29yLmxheW91dFBvbHlnb24ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBmbG9vci5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgIT09IFwid2FsbFwiKSBjb250aW51ZTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmVHcm91cHM6IGZhYnJpYy5Hcm91cFtdID0gW107XHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/LmZpeHR1cmVzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSBlbGVtZW50LmZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZVdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBsZXQgeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHkgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBvdmVycmlkZSB0aGUgZml4dHVyZSBwb3NpdGlvbiBmb3IgaW5pdGlhbCBjYWQgbGF5b3V0cy5cclxuICAgICAgICAvLyBpZiAodGhpcy5mbG9vckRhdGE/LmNhZExheW91dCkge1xyXG4gICAgICAgIC8vICAgY29uc3QgYmFzZVggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIC8vICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICAvLyAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICAgLy8gICApO1xyXG5cclxuICAgICAgICAvLyAgIGNvbnN0IGJhc2VZID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAvLyAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAgICAgLy8gICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICAgIC8vICAgKTtcclxuICAgICAgICAvLyAgIGNvbnN0IHN0YXJ0QnVmZmVyID0gNDA7XHJcbiAgICAgICAgLy8gICBjb25zdCBzcGFjaW5nID0gMTM2O1xyXG4gICAgICAgIC8vICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRCdWZmZXIgKyBzcGFjaW5nICogajtcclxuXHJcbiAgICAgICAgLy8gICBjb25zdCBhbmdsZVJhZCA9IGZhYnJpYy51dGlsLmRlZ3JlZXNUb1JhZGlhbnMoZWxlbWVudC5hbmdsZSk7XHJcblxyXG4gICAgICAgIC8vICAgY29uc3QgZGlyWCA9IE1hdGguY29zKGFuZ2xlUmFkKTtcclxuICAgICAgICAvLyAgIGNvbnN0IGRpclkgPSBNYXRoLnNpbihhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIC8vICAgY29uc3Qgbm9ybWFsT2Zmc2V0ID0gdGhpcy53YWxsVGhpY2tuZXNzO1xyXG5cclxuICAgICAgICAvLyAgIGNvbnN0IG5vcm1YID0gTWF0aC5jb3MoYW5nbGVSYWQgKyBNYXRoLlBJIC8gMikgKiBub3JtYWxPZmZzZXQ7XHJcbiAgICAgICAgLy8gICBjb25zdCBub3JtWSA9IE1hdGguc2luKGFuZ2xlUmFkICsgTWF0aC5QSSAvIDIpICogbm9ybWFsT2Zmc2V0O1xyXG5cclxuICAgICAgICAvLyAgIHggPSBiYXNlWCArIGRpclggKiBvZmZzZXQgKyBub3JtWDtcclxuICAgICAgICAvLyAgIHkgPSBiYXNlWSArIGRpclkgKiBvZmZzZXQgKyBub3JtWTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVPYmogPSBhd2FpdCB0aGlzLmRyYXdGaXh0dXJlKFxyXG4gICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICB4LFxyXG4gICAgICAgICAgeSxcclxuICAgICAgICAgIGZpeHR1cmVIZWlnaHQsXHJcbiAgICAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAgICAgICBmaXh0dXJlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZml4dHVyZUdyb3Vwcy5wdXNoKGZpeHR1cmVPYmogYXMgZmFicmljLkdyb3VwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IGVsZW1lbnQub3RoZXJFbGVtZW50c1tqXTtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgICAgY29uc3QgYSA9IG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG4gICAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgIHgsXHJcbiAgICAgICAgICB5LFxyXG4gICAgICAgICAgYSxcclxuICAgICAgICAgIHcsXHJcbiAgICAgICAgICBoLFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAvL0lmIENBRCBsYXlvdXRcclxuICAgIC8vIGlmICh0aGlzLmZsb29yRGF0YT8uY2FkTGF5b3V0ICYmIHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlPy5sZW5ndGgpIHtcclxuICAgIC8vICAgY29uc3QgZml4dHVyZXMgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlO1xyXG5cclxuICAgIC8vICAgY29uc3QgbGF5b3V0UG9seWdvbiA9IHRoaXMuYnVpbGRMYXlvdXRQb2x5Z29uRnJvbVdhbGxzKCk7XHJcbiAgICAvLyAgIGNvbnN0IG9jY3VwaWVkUmVjdHMgPSB0aGlzLmdldE9jY3VwaWVkUmVjdHMoKTtcclxuXHJcbiAgICAvLyAgIGNvbnN0IGZpeHR1cmVXaWR0aFB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgIC8vICAgICBmaXh0dXJlc1swXS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAvLyAgICAgZml4dHVyZXNbMF0uZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAvLyAgICk7XHJcblxyXG4gICAgLy8gICBjb25zdCBmaXh0dXJlSGVpZ2h0UHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgLy8gICAgIGZpeHR1cmVzWzBdLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAvLyAgICAgZml4dHVyZXNbMF0uZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgLy8gICApO1xyXG5cclxuICAgIC8vICAgY29uc3QgdG90YWwgPSBmaXh0dXJlcy5sZW5ndGg7XHJcblxyXG4gICAgLy8gICBjb25zdCBtYXhSb3dzID0gMjtcclxuICAgIC8vICAgY29uc3Qgcm93cyA9IE1hdGgubWluKG1heFJvd3MsIHRvdGFsKTtcclxuICAgIC8vICAgY29uc3QgY29sdW1ucyA9IE1hdGguY2VpbCh0b3RhbCAvIHJvd3MpO1xyXG5cclxuICAgIC8vICAgY29uc3QgZ3JpZFdpZHRoID0gY29sdW1ucyAqIGZpeHR1cmVXaWR0aFB4O1xyXG4gICAgLy8gICBjb25zdCBncmlkSGVpZ2h0ID0gcm93cyAqIGZpeHR1cmVIZWlnaHRQeDtcclxuXHJcbiAgICAvLyAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG4gICAgLy8gICBjb25zdCBjZW50ZXJYID0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyO1xyXG4gICAgLy8gICBjb25zdCBjZW50ZXJZID0gYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLyAyO1xyXG5cclxuICAgIC8vICAgY29uc3QgaXNJbnNpZGVQb2x5Z29uID0gKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PiB7XHJcbiAgICAvLyAgICAgcmV0dXJuIChcclxuICAgIC8vICAgICAgIHRoaXMuaXNQb2ludEluc2lkZVBvbHlnb24oeyB4LCB5IH0sIGxheW91dFBvbHlnb24pICYmXHJcbiAgICAvLyAgICAgICB0aGlzLmlzUG9pbnRJbnNpZGVQb2x5Z29uKHsgeDogeCArIGdyaWRXaWR0aCwgeSB9LCBsYXlvdXRQb2x5Z29uKSAmJlxyXG4gICAgLy8gICAgICAgdGhpcy5pc1BvaW50SW5zaWRlUG9seWdvbih7IHgsIHk6IHkgKyBncmlkSGVpZ2h0IH0sIGxheW91dFBvbHlnb24pICYmXHJcbiAgICAvLyAgICAgICB0aGlzLmlzUG9pbnRJbnNpZGVQb2x5Z29uKFxyXG4gICAgLy8gICAgICAgICB7IHg6IHggKyBncmlkV2lkdGgsIHk6IHkgKyBncmlkSGVpZ2h0IH0sXHJcbiAgICAvLyAgICAgICAgIGxheW91dFBvbHlnb24sXHJcbiAgICAvLyAgICAgICApXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgfTtcclxuXHJcbiAgICAvLyAgIGNvbnN0IG92ZXJsYXBzT2NjdXBpZWQgPSAoeDogbnVtYmVyLCB5OiBudW1iZXIpID0+IHtcclxuICAgIC8vICAgICBjb25zdCBncmlkUmVjdCA9IHsgeCwgeSwgdzogZ3JpZFdpZHRoLCBoOiBncmlkSGVpZ2h0IH07XHJcblxyXG4gICAgLy8gICAgIGZvciAoY29uc3Qgb2NjIG9mIG9jY3VwaWVkUmVjdHMpIHtcclxuICAgIC8vICAgICAgIGlmICh0aGlzLnJlY3RzT3ZlcmxhcChncmlkUmVjdCwgb2NjKSkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vICAgfTtcclxuXHJcbiAgICAvLyAgIGNvbnN0IGZpbmRCZXN0UG9zaXRpb24gPSAobW9kZTogXCJzdHJpY3RcIiB8IFwicmVsYXhlZFwiKSA9PiB7XHJcbiAgICAvLyAgICAgbGV0IGJlc3RTY29yZSA9IC1JbmZpbml0eTtcclxuICAgIC8vICAgICBsZXQgYmVzdFBvczogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLy8gICAgIGNvbnN0IHN0ZXAgPSBmaXh0dXJlV2lkdGhQeCAvIDI7XHJcblxyXG4gICAgLy8gICAgIGZvciAoXHJcbiAgICAvLyAgICAgICBsZXQgeSA9IGJvdW5kcy50b3A7XHJcbiAgICAvLyAgICAgICB5IDw9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC0gZ3JpZEhlaWdodDtcclxuICAgIC8vICAgICAgIHkgKz0gc3RlcFxyXG4gICAgLy8gICAgICkge1xyXG4gICAgLy8gICAgICAgZm9yIChcclxuICAgIC8vICAgICAgICAgbGV0IHggPSBib3VuZHMubGVmdDtcclxuICAgIC8vICAgICAgICAgeCA8PSBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAtIGdyaWRXaWR0aDtcclxuICAgIC8vICAgICAgICAgeCArPSBzdGVwXHJcbiAgICAvLyAgICAgICApIHtcclxuICAgIC8vICAgICAgICAgaWYgKCFpc0luc2lkZVBvbHlnb24oeCwgeSkpIGNvbnRpbnVlO1xyXG5cclxuICAgIC8vICAgICAgICAgaWYgKG1vZGUgPT09IFwic3RyaWN0XCIgJiYgb3ZlcmxhcHNPY2N1cGllZCh4LCB5KSkgY29udGludWU7XHJcblxyXG4gICAgLy8gICAgICAgICBjb25zdCBncmlkUmVjdCA9IHsgeCwgeSwgdzogZ3JpZFdpZHRoLCBoOiBncmlkSGVpZ2h0IH07XHJcblxyXG4gICAgLy8gICAgICAgICBjb25zdCBlbXB0eU1hcmdpbiA9IHRoaXMuY29tcHV0ZUVtcHR5TWFyZ2luKFxyXG4gICAgLy8gICAgICAgICAgIGdyaWRSZWN0LFxyXG4gICAgLy8gICAgICAgICAgIGJvdW5kcyxcclxuICAgIC8vICAgICAgICAgICBvY2N1cGllZFJlY3RzLFxyXG4gICAgLy8gICAgICAgICApO1xyXG5cclxuICAgIC8vICAgICAgICAgY29uc3QgZHggPSBjZW50ZXJYIC0gKHggKyBncmlkV2lkdGggLyAyKTtcclxuICAgIC8vICAgICAgICAgY29uc3QgZHkgPSBjZW50ZXJZIC0gKHkgKyBncmlkSGVpZ2h0IC8gMik7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGNlbnRlclBlbmFsdHkgPSBkeCAqIGR4ICsgZHkgKiBkeTtcclxuXHJcbiAgICAvLyAgICAgICAgIGNvbnN0IHNjb3JlID0gZW1wdHlNYXJnaW4gKiAxMDAwIC0gY2VudGVyUGVuYWx0eSAqIDAuMDAxO1xyXG5cclxuICAgIC8vICAgICAgICAgaWYgKHNjb3JlID4gYmVzdFNjb3JlKSB7XHJcbiAgICAvLyAgICAgICAgICAgYmVzdFNjb3JlID0gc2NvcmU7XHJcbiAgICAvLyAgICAgICAgICAgYmVzdFBvcyA9IHsgeCwgeSB9O1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICByZXR1cm4gYmVzdFBvcztcclxuICAgIC8vICAgfTtcclxuXHJcbiAgICAvLyAgIGxldCBiZXN0UG9zID0gZmluZEJlc3RQb3NpdGlvbihcInN0cmljdFwiKTtcclxuXHJcbiAgICAvLyAgIGlmICghYmVzdFBvcykge1xyXG4gICAgLy8gICAgIGNvbnNvbGUud2FybihcIlN0cmljdCBwbGFjZW1lbnQgZmFpbGVkLiBUcnlpbmcgcmVsYXhlZCBtb2RlLi4uXCIpO1xyXG4gICAgLy8gICAgIGJlc3RQb3MgPSBmaW5kQmVzdFBvc2l0aW9uKFwicmVsYXhlZFwiKTtcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgaWYgKCFiZXN0UG9zKSB7XHJcbiAgICAvLyAgICAgY29uc29sZS53YXJuKFwiUmVsYXhlZCBwbGFjZW1lbnQgZmFpbGVkLiBGYWxsaW5nIGJhY2sgdG8gY2VudGVyLlwiKTtcclxuICAgIC8vICAgICBiZXN0UG9zID0ge1xyXG4gICAgLy8gICAgICAgeDogY2VudGVyWCAtIGdyaWRXaWR0aCAvIDIsXHJcbiAgICAvLyAgICAgICB5OiBjZW50ZXJZIC0gZ3JpZEhlaWdodCAvIDIsXHJcbiAgICAvLyAgICAgfTtcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAvLyAgICAgLy8gTi1zaGFwZSB0cmF2ZXJzYWw6IGNvbCBmaWxscyBsZWZ0LXRvLXJpZ2h0LCBlYWNoIGNvbHVtbiBmaWxscyBib3R0b20gcm93IGZpcnN0IHRoZW4gdG9wIHJvd1xyXG4gICAgLy8gICAgIGNvbnN0IGNvbCA9IE1hdGguZmxvb3IoaW5kZXggLyAyKTtcclxuICAgIC8vICAgICBjb25zdCByb3cgPSBpbmRleCAlIDIgPT09IDAgPyAxIDogMDtcclxuXHJcbiAgICAvLyAgICAgY29uc3QgeCA9IGJlc3RQb3MhLnggKyBjb2wgKiBmaXh0dXJlV2lkdGhQeDtcclxuICAgIC8vICAgICBjb25zdCB5ID0gYmVzdFBvcyEueSArIHJvdyAqIGZpeHR1cmVIZWlnaHRQeDtcclxuXHJcbiAgICAvLyAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLmZyb21QaXhlbHMoeCwgXCJmdFwiKTtcclxuICAgIC8vICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMuZnJvbVBpeGVscyh5LCBcImZ0XCIpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhPy5jYWRMYXlvdXQgJiZcclxuICAgICAgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmU/Lmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY29tcGFjdENlbnRlckZpeHR1cmVzKHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxvb3I/LmNlbnRlckZpeHR1cmU/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSBmbG9vci5jZW50ZXJGaXh0dXJlW2ldO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZUhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZVdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSxcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoXHJcbiAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgeCxcclxuICAgICAgICB5LFxyXG4gICAgICAgIGZpeHR1cmVIZWlnaHQsXHJcbiAgICAgICAgZml4dHVyZVdpZHRoLFxyXG4gICAgICAgIGZpeHR1cmUsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBmbG9vcj8ub3RoZXJFbGVtZW50cz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3Qgb3RoZXJFbGVtZW50ID0gZmxvb3Iub3RoZXJFbGVtZW50c1tqXTtcclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKTtcclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgXCJmdFwiKTtcclxuICAgICAgY29uc3QgYSA9IG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG4gICAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwodGhpcy5jYW52YXMsIHgsIHksIGEsIHcsIGgsIG90aGVyRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb21wYWN0Q2VudGVyRml4dHVyZXMoZml4dHVyZXM6IGFueVtdKSB7XHJcbiAgICBpZiAoIWZpeHR1cmVzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBHQVBfRkFDVE9SID0gMC4zOyAvLyA3MCUgcmVkdWN0aW9uXHJcblxyXG4gICAgY29uc3QgaXRlbXMgPSBmaXh0dXJlcy5tYXAoKGYpID0+IHtcclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgaCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIGYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoZi5yZWxhdGl2ZVBvc2l0aW9uLngsIGYucmVsYXRpdmVQb3NpdGlvbi51bml0KTtcclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoZi5yZWxhdGl2ZVBvc2l0aW9uLnksIGYucmVsYXRpdmVQb3NpdGlvbi51bml0KTtcclxuXHJcbiAgICAgIHJldHVybiB7IGYsIHgsIHksIHcsIGggfTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIPCfkYkgQ2FwdHVyZSBvcmlnaW5hbCBjZW50ZXJcclxuICAgIGNvbnN0IGdldEJvdW5kcyA9IChsaXN0OmFueSkgPT4ge1xyXG4gICAgICBjb25zdCBtaW5YID0gTWF0aC5taW4oLi4ubGlzdC5tYXAoKGk6YW55KSA9PiBpLngpKTtcclxuICAgICAgY29uc3QgbWluWSA9IE1hdGgubWluKC4uLmxpc3QubWFwKChpOmFueSkgPT4gaS55KSk7XHJcbiAgICAgIGNvbnN0IG1heFggPSBNYXRoLm1heCguLi5saXN0Lm1hcCgoaTphbnkpID0+IGkueCArIGkudykpO1xyXG4gICAgICBjb25zdCBtYXhZID0gTWF0aC5tYXgoLi4ubGlzdC5tYXAoKGk6YW55KSA9PiBpLnkgKyBpLmgpKTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbWluWCxcclxuICAgICAgICBtaW5ZLFxyXG4gICAgICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcclxuICAgICAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZLFxyXG4gICAgICAgIGNlbnRlclg6IG1pblggKyAobWF4WCAtIG1pblgpIC8gMixcclxuICAgICAgICBjZW50ZXJZOiBtaW5ZICsgKG1heFkgLSBtaW5ZKSAvIDIsXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9yaWdpbmFsQm91bmRzID0gZ2V0Qm91bmRzKGl0ZW1zKTtcclxuXHJcbiAgICAvLyBTVEVQIDE6IGdyb3VwIHJvd3NcclxuICAgIGNvbnN0IHJvd1RocmVzaG9sZCA9IE1hdGgubWluKC4uLml0ZW1zLm1hcCgoaSkgPT4gaS5oKSkgLyAyO1xyXG5cclxuICAgIGNvbnN0IHJvd3M6IGFueVtdW10gPSBbXTtcclxuICAgIGl0ZW1zLnNvcnQoKGEsIGIpID0+IGEueSAtIGIueSk7XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgIGxldCBwbGFjZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcclxuICAgICAgICBpZiAoTWF0aC5hYnMocm93WzBdLnkgLSBpdGVtLnkpIDwgcm93VGhyZXNob2xkKSB7XHJcbiAgICAgICAgICByb3cucHVzaChpdGVtKTtcclxuICAgICAgICAgIHBsYWNlZCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghcGxhY2VkKSByb3dzLnB1c2goW2l0ZW1dKTtcclxuICAgIH1cclxuXHJcbiAgICByb3dzLmZvckVhY2goKHJvdykgPT4gcm93LnNvcnQoKGEsIGIpID0+IGEueCAtIGIueCkpO1xyXG5cclxuICAgIC8vIFNURVAgMjogaG9yaXpvbnRhbCBjb21wYWN0aW9uIChzY2FsZWQgZ2FwcylcclxuICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcHJldiA9IHJvd1tpIC0gMV07XHJcbiAgICAgICAgY29uc3QgY3VyciA9IHJvd1tpXTtcclxuXHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxHYXAgPSBjdXJyLnggLSAocHJldi54ICsgcHJldi53KTtcclxuXHJcbiAgICAgICAgaWYgKG9yaWdpbmFsR2FwID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgbmV3R2FwID0gb3JpZ2luYWxHYXAgKiBHQVBfRkFDVE9SO1xyXG4gICAgICAgICAgY3Vyci54ID0gcHJldi54ICsgcHJldi53ICsgbmV3R2FwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gU1RFUCAzOiB2ZXJ0aWNhbCBjb21wYWN0aW9uIChzY2FsZWQgZ2FwcylcclxuICAgIGZvciAobGV0IHIgPSAxOyByIDwgcm93cy5sZW5ndGg7IHIrKykge1xyXG4gICAgICBjb25zdCBwcmV2Um93ID0gcm93c1tyIC0gMV07XHJcbiAgICAgIGNvbnN0IGN1cnJSb3cgPSByb3dzW3JdO1xyXG5cclxuICAgICAgY29uc3QgcHJldkJvdHRvbSA9IE1hdGgubWF4KC4uLnByZXZSb3cubWFwKChpKSA9PiBpLnkgKyBpLmgpKTtcclxuICAgICAgY29uc3QgY3VyclRvcCA9IE1hdGgubWluKC4uLmN1cnJSb3cubWFwKChpKSA9PiBpLnkpKTtcclxuXHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsR2FwID0gY3VyclRvcCAtIHByZXZCb3R0b207XHJcblxyXG4gICAgICBpZiAob3JpZ2luYWxHYXAgPiAwKSB7XHJcbiAgICAgICAgY29uc3QgbmV3R2FwID0gb3JpZ2luYWxHYXAgKiBHQVBfRkFDVE9SO1xyXG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gb3JpZ2luYWxHYXAgLSBuZXdHYXA7XHJcblxyXG4gICAgICAgIGN1cnJSb3cuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgaXRlbS55IC09IHNoaWZ0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU1RFUCA0OiByZXN0b3JlIGNlbnRlclxyXG4gICAgY29uc3QgbmV3Qm91bmRzID0gZ2V0Qm91bmRzKGl0ZW1zKTtcclxuXHJcbiAgICBjb25zdCBkeCA9IG9yaWdpbmFsQm91bmRzLmNlbnRlclggLSBuZXdCb3VuZHMuY2VudGVyWDtcclxuICAgIGNvbnN0IGR5ID0gb3JpZ2luYWxCb3VuZHMuY2VudGVyWSAtIG5ld0JvdW5kcy5jZW50ZXJZO1xyXG5cclxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS54ICs9IGR4O1xyXG4gICAgICBpdGVtLnkgKz0gZHk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBTVEVQIDU6IHdyaXRlIGJhY2tcclxuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaXRlbS5mLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMuZnJvbVBpeGVscyhpdGVtLngsIFwiZnRcIik7XHJcbiAgICAgIGl0ZW0uZi5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLmZyb21QaXhlbHMoaXRlbS55LCBcImZ0XCIpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBpc1BvaW50SW5zaWRlUG9seWdvbihcclxuICAgIHBvaW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sXHJcbiAgICBwb2x5Z29uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1bXSxcclxuICApOiBib29sZWFuIHtcclxuICAgIGxldCBpbnNpZGUgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IHBvbHlnb24ubGVuZ3RoIC0gMTsgaSA8IHBvbHlnb24ubGVuZ3RoOyBqID0gaSsrKSB7XHJcbiAgICAgIGNvbnN0IHhpID0gcG9seWdvbltpXS54LFxyXG4gICAgICAgIHlpID0gcG9seWdvbltpXS55O1xyXG4gICAgICBjb25zdCB4aiA9IHBvbHlnb25bal0ueCxcclxuICAgICAgICB5aiA9IHBvbHlnb25bal0ueTtcclxuXHJcbiAgICAgIGNvbnN0IGludGVyc2VjdCA9XHJcbiAgICAgICAgeWkgPiBwb2ludC55ICE9PSB5aiA+IHBvaW50LnkgJiZcclxuICAgICAgICBwb2ludC54IDwgKCh4aiAtIHhpKSAqIChwb2ludC55IC0geWkpKSAvICh5aiAtIHlpKSArIHhpO1xyXG5cclxuICAgICAgaWYgKGludGVyc2VjdCkgaW5zaWRlID0gIWluc2lkZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaW5zaWRlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPY2N1cGllZFJlY3RzKCk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLm1hcCgob2JqKSA9PiB7XHJcbiAgICAgIGNvbnN0IHIgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgeDogci5sZWZ0LFxyXG4gICAgICAgIHk6IHIudG9wLFxyXG4gICAgICAgIHc6IHIud2lkdGgsXHJcbiAgICAgICAgaDogci5oZWlnaHQsXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjdHNPdmVybGFwKFxyXG4gICAgYTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSxcclxuICAgIGI6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0sXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIShcclxuICAgICAgYS54ICsgYS53IDw9IGIueCB8fFxyXG4gICAgICBhLnggPj0gYi54ICsgYi53IHx8XHJcbiAgICAgIGEueSArIGEuaCA8PSBiLnkgfHxcclxuICAgICAgYS55ID49IGIueSArIGIuaFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZUVtcHR5TWFyZ2luKFxyXG4gICAgZ3JpZFJlY3Q6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0sXHJcbiAgICBib3VuZHM6IHsgbGVmdDogbnVtYmVyOyB0b3A6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcclxuICAgIG9jY3VwaWVkUmVjdHM6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHc6IG51bWJlcjsgaDogbnVtYmVyIH1bXSxcclxuICApOiBudW1iZXIge1xyXG4gICAgbGV0IG1pbk1hcmdpbiA9IEluZmluaXR5O1xyXG5cclxuICAgIC8vIGRpc3RhbmNlIHRvIGxheW91dCBib3VuZHNcclxuICAgIG1pbk1hcmdpbiA9IE1hdGgubWluKFxyXG4gICAgICBtaW5NYXJnaW4sXHJcbiAgICAgIGdyaWRSZWN0LnggLSBib3VuZHMubGVmdCxcclxuICAgICAgYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLSAoZ3JpZFJlY3QueCArIGdyaWRSZWN0LncpLFxyXG4gICAgICBncmlkUmVjdC55IC0gYm91bmRzLnRvcCxcclxuICAgICAgYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLSAoZ3JpZFJlY3QueSArIGdyaWRSZWN0LmgpLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBkaXN0YW5jZSB0byBvdGhlciBvYmplY3RzXHJcbiAgICBmb3IgKGNvbnN0IG9jYyBvZiBvY2N1cGllZFJlY3RzKSB7XHJcbiAgICAgIC8vIGhvcml6b250YWwgZ2FwXHJcbiAgICAgIGlmIChvY2MueSA8IGdyaWRSZWN0LnkgKyBncmlkUmVjdC5oICYmIG9jYy55ICsgb2NjLmggPiBncmlkUmVjdC55KSB7XHJcbiAgICAgICAgaWYgKG9jYy54ICsgb2NjLncgPD0gZ3JpZFJlY3QueCkge1xyXG4gICAgICAgICAgbWluTWFyZ2luID0gTWF0aC5taW4obWluTWFyZ2luLCBncmlkUmVjdC54IC0gKG9jYy54ICsgb2NjLncpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG9jYy54ID49IGdyaWRSZWN0LnggKyBncmlkUmVjdC53KSB7XHJcbiAgICAgICAgICBtaW5NYXJnaW4gPSBNYXRoLm1pbihtaW5NYXJnaW4sIG9jYy54IC0gKGdyaWRSZWN0LnggKyBncmlkUmVjdC53KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB2ZXJ0aWNhbCBnYXBcclxuICAgICAgaWYgKG9jYy54IDwgZ3JpZFJlY3QueCArIGdyaWRSZWN0LncgJiYgb2NjLnggKyBvY2MudyA+IGdyaWRSZWN0LngpIHtcclxuICAgICAgICBpZiAob2NjLnkgKyBvY2MuaCA8PSBncmlkUmVjdC55KSB7XHJcbiAgICAgICAgICBtaW5NYXJnaW4gPSBNYXRoLm1pbihtaW5NYXJnaW4sIGdyaWRSZWN0LnkgLSAob2NjLnkgKyBvY2MuaCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAob2NjLnkgPj0gZ3JpZFJlY3QueSArIGdyaWRSZWN0LmgpIHtcclxuICAgICAgICAgIG1pbk1hcmdpbiA9IE1hdGgubWluKG1pbk1hcmdpbiwgb2NjLnkgLSAoZ3JpZFJlY3QueSArIGdyaWRSZWN0LmgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWluTWFyZ2luO1xyXG4gIH1cclxuXHJcbiAgZHJhd0ZpeHR1cmVSb3dMYWJlbCh0ZXh0OiBzdHJpbmcsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsYWJlbCA9IG5ldyBmYWJyaWMuVGV4dCh0ZXh0LCB7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgZm9udFNpemU6IDE0LFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKGxhYmVsKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdXYWxsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueSxcclxuICApIHtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBmaWxsQ29sb3IgPSBcIiNGNkZDRkZcIjtcclxuICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gXCIjRDBENUREXCI7XHJcbiAgICBjb25zdCBsYWJlbENvbG9yID0gXCIjMDA5QkYzXCI7XHJcbiAgICBsZXQgdGV4dCA9IGAke3RoaXMudGl0bGVDYXNlLnRyYW5zZm9ybShlbGVtZW50RGF0YS5lbGVtZW50VHlwZSl9ICR7XHJcbiAgICAgIGVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXJcclxuICAgIH1gO1xyXG5cclxuICAgIGNvbnN0IHdhbGwgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiAwLFxyXG4gICAgICB0b3A6IDAsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIGZpbGw6IGZpbGxDb2xvcixcclxuICAgICAgc3Ryb2tlOiBzdHJva2VDb2xvcixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBzdHJva2VVbmlmb3JtOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY2VudGVyWCA9IHdpZHRoIC8gMjtcclxuICAgIGNvbnN0IGNlbnRlclkgPSBoZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IGhlaWdodCA+IHdpZHRoO1xyXG5cclxuICAgIGNvbnN0IGxhYmVsID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KHRleHQsIHtcclxuICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICBmb250U2l6ZTogMTAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgYW5nbGU6IGlzVmVydGljYWwgPyAtOTAgOiAwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGFycm93SGVhZCA9IDU7XHJcbiAgICBjb25zdCBlbGVtZW50czogZmFicmljLk9iamVjdFtdID0gW3dhbGwsIGxhYmVsXTtcclxuXHJcbiAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCB0b3BBcnJvd1kgPSA1O1xyXG4gICAgICBjb25zdCB0b3BBcnJvd0VuZFkgPSBjZW50ZXJZIC0gdGV4dFdpZHRoIC8gMiAtIDU7XHJcblxyXG4gICAgICBpZiAodG9wQXJyb3dFbmRZID4gdG9wQXJyb3dZICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShbY2VudGVyWCwgdG9wQXJyb3dZLCBjZW50ZXJYLCB0b3BBcnJvd0VuZFldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiB0b3BBcnJvd1ksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogMCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBib3R0b21BcnJvd1N0YXJ0WSA9IGNlbnRlclkgKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dFbmRZID0gaGVpZ2h0IC0gNTtcclxuXHJcbiAgICAgIGlmIChib3R0b21BcnJvd0VuZFkgPiBib3R0b21BcnJvd1N0YXJ0WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtjZW50ZXJYLCBib3R0b21BcnJvd1N0YXJ0WSwgY2VudGVyWCwgYm90dG9tQXJyb3dFbmRZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBib3R0b21BcnJvd0VuZFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogMTgwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGxhYmVsLndpZHRoIHx8IDA7XHJcbiAgICAgIGNvbnN0IGxlZnRBcnJvd1N0YXJ0WCA9IDU7XHJcbiAgICAgIGNvbnN0IGxlZnRBcnJvd0VuZFggPSBjZW50ZXJYIC0gdGV4dFdpZHRoIC8gMiAtIDU7XHJcblxyXG4gICAgICBpZiAobGVmdEFycm93RW5kWCA+IGxlZnRBcnJvd1N0YXJ0WCArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2xlZnRBcnJvd1N0YXJ0WCwgY2VudGVyWSwgbGVmdEFycm93RW5kWCwgY2VudGVyWV0sIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0QXJyb3dTdGFydFgsXHJcbiAgICAgICAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmlnaHRBcnJvd1N0YXJ0WCA9IGNlbnRlclggKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgcmlnaHRBcnJvd0VuZFggPSB3aWR0aCAtIDU7XHJcblxyXG4gICAgICBpZiAocmlnaHRBcnJvd0VuZFggPiByaWdodEFycm93U3RhcnRYICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW3JpZ2h0QXJyb3dTdGFydFgsIGNlbnRlclksIHJpZ2h0QXJyb3dFbmRYLCBjZW50ZXJZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogcmlnaHRBcnJvd0VuZFgsXHJcbiAgICAgICAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiA5MCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbG9ja1N2Z1N0cmluZyA9IGA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgIDxwYXRoIGQ9XCJNNyAxMVY3QzcgNS42NzM5MiA3LjUyNjc4IDQuNDAyMTUgOC40NjQ0NyAzLjQ2NDQ3QzkuNDAyMTUgMi41MjY3OCAxMC42NzM5IDIgMTIgMkMxMy4zMjYxIDIgMTQuNTk3OSAyLjUyNjc4IDE1LjUzNTUgMy40NjQ0N0MxNi40NzMyIDQuNDAyMTUgMTcgNS42NzM5MiAxNyA3VjExTTUgMTFIMTlDMjAuMTA0NiAxMSAyMSAxMS44OTU0IDIxIDEzVjIwQzIxIDIxLjEwNDYgMjAuMTA0NiAyMiAxOSAyMkg1QzMuODk1NDMgMjIgMyAyMS4xMDQ2IDMgMjBWMTNDMyAxMS44OTU0IDMuODk1NDMgMTEgNSAxMVpcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgIDwvc3ZnPmA7XHJcblxyXG4gICAgbGV0IGxvYWRlZFNWRzogYW55ID0gYXdhaXQgZmFicmljLmxvYWRTVkdGcm9tU3RyaW5nKGxvY2tTdmdTdHJpbmcpO1xyXG5cclxuICAgIGxldCBsb2NrU3ZnID0gZmFicmljLnV0aWwuZ3JvdXBTVkdFbGVtZW50cyhcclxuICAgICAgbG9hZGVkU1ZHLm9iamVjdHMsXHJcbiAgICAgIGxvYWRlZFNWRy5vcHRpb25zLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB3YWxsQ2VudGVyWCA9IHdpZHRoIC8gMjtcclxuICAgIGNvbnN0IHdhbGxDZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuXHJcbiAgICBsb2NrU3ZnLnNjYWxlVG9XaWR0aCgyMCk7XHJcbiAgICBsb2NrU3ZnLnNjYWxlVG9IZWlnaHQoMjApO1xyXG5cclxuICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgIGxvY2tTdmcuc2V0KHtcclxuICAgICAgICBsZWZ0OiB3YWxsQ2VudGVyWCxcclxuICAgICAgICB0b3A6IHdhbGxDZW50ZXJZLFxyXG4gICAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxvY2tTdmcuc2V0KHtcclxuICAgICAgICBsZWZ0OiB3YWxsQ2VudGVyWCxcclxuICAgICAgICB0b3A6IHdhbGxDZW50ZXJZLFxyXG4gICAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9ja1N2Zy5zZXQoe1xyXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGxvY2tTdmcub24oXCJtb3VzZWRvd25cIiwgKG9wdCkgPT4ge1xyXG4gICAgICBpZiAob3B0ICYmIG9wdC5lICYmIG9wdC5lLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgIG9wdC5lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgZWxlbWVudERhdGEuaXNMb2NrZWQgPSAhZWxlbWVudERhdGE/LmlzTG9ja2VkO1xyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGVsZW1lbnRzLnB1c2gobG9ja1N2Zyk7XHJcblxyXG4gICAgbGV0IG1vZENlbnRlclggPSB4O1xyXG4gICAgbGV0IG1vZENlbnRlclkgPSB5O1xyXG4gICAgbGV0IGFuZ2xlID0gZWxlbWVudERhdGEuYW5nbGU7XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKGVsZW1lbnRzLCB7XHJcbiAgICAgIGxlZnQ6IG1vZENlbnRlclgsXHJcbiAgICAgIHRvcDogbW9kQ2VudGVyWSxcclxuICAgICAgaGFzQ29udHJvbHM6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWDogaXNWZXJ0aWNhbCxcclxuICAgICAgbG9ja1NjYWxpbmdZOiAhaXNWZXJ0aWNhbCxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgYW5nbGU6IGFuZ2xlLFxyXG4gICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBlbGVtZW50RGF0YS5lbGVtZW50VHlwZTtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50RGF0YTtcclxuXHJcbiAgICBjYW52YXMuYWRkKGdyb3VwKTtcclxuXHJcbiAgICAvLyBJZiBuZXdseSBhZGRlZCwgZm9jdXMgaXQgb25jZVxyXG4gICAgaWYgKChlbGVtZW50RGF0YSBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChncm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZWxlbWVudERhdGEgYXMgYW55KS5uZXdBZGRlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3Rml4dHVyZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGZpeHR1cmVEYXRhOiBhbnksXHJcbiAgKSB7XHJcbiAgICBjb25zdCBhY3R1YWxTaGVsdmVzID1cclxuICAgICAgZml4dHVyZURhdGEuc2hlbGZDb25maWc/LmZpbHRlcigoczogYW55KSA9PiBzLnNoZWxmVHlwZSAhPSBcInZtb25seVwiKSA/P1xyXG4gICAgICBbXTtcclxuXHJcbiAgICBsZXQgZml4dHVyZUNvbG9yOiBhbnk7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhLmZpeHR1cmVOYW1lID09PSBcInNwYWNlXCIpIHJldHVybjtcclxuXHJcbiAgICAvLyBSZXNvbHZlIHRoZSBhbmdsZSB0aGUgZml4dHVyZSBncm91cCB3aWxsIHJlbmRlciBhdC4gRm9yIGZpcnN0LXJlbmRlciBvZiBhXHJcbiAgICAvLyBDQUQtdXBsb2FkZWQgbGF5b3V0LCB0aGUgd2FsbCBhbmdsZSBpcyB0aGUgc291cmNlIG9mIHRydXRoIChvdGhlcndpc2Ugd2VcclxuICAgIC8vIGhvbm9yIHRoZSBmaXh0dXJlJ3Mgb3duIHNhdmVkIGFuZ2xlKS4gV2hlbiB0aGF0IGFuZ2xlIGxpZXMgaW4gdGhlXHJcbiAgICAvLyB1cHNpZGUtZG93biByYW5nZSAoOTDCsCwgMjcwwrApLCB3ZSBmbGlwIHRoZSBmaXh0dXJlIGJvZHkgMTgwwrAgaW4gcGxhY2Ugc29cclxuICAgIC8vIGl0IHJlbmRlcnMgY2Fub25pY2FsIChoZWFkZXIgYXQgdG9wLCBzdG9yYWdlIGF0IGJvdHRvbSkuIFRoZSBib2R5IGZsaXBcclxuICAgIC8vIGFsc28gYnJpbmdzIHRoZSB0ZXh0IHVwcmlnaHQgYXMgYSBzaWRlIGVmZmVjdCwgc28gbm8gcGVyLXRleHQgcm90YXRpb25cclxuICAgIC8vIGlzIG5lZWRlZC4gVHJhZGUtb2ZmOiBvbiBmbGlwcGVkIHdhbGxzIHRoZSBzdG9yYWdlIGJveCBlbmRzIHVwIHZpc3VhbGx5XHJcbiAgICAvLyB0b3VjaGluZyB0aGUgd2FsbCBpbnN0ZWFkIG9mIHRoZSBoZWFkZXIuXHJcbiAgICBsZXQgYW5nbGUgPSBmaXh0dXJlRGF0YT8ucmVsYXRpdmVQb3NpdGlvbj8uYW5nbGUgPz8gMDtcclxuICAgIGlmICh0aGlzLmZsb29yRGF0YS5jYWRMYXlvdXQgJiYgZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxEYXRhID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgICAgICAgZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIsXHJcbiAgICAgICk7XHJcbiAgICAgIGFuZ2xlID0gd2FsbERhdGE/LmFuZ2xlID8/IDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBub3JtQW5nbGUgPSAoKCgoYW5nbGUgYXMgbnVtYmVyKSAlIDM2MCkgKyAzNjApICUgMzYwKTtcclxuICAgIGNvbnN0IHNob3VsZEZsaXBCb2R5ID1cclxuICAgICAgdGhpcy5mbG9vckRhdGEuY2FkTGF5b3V0ICYmXHJcbiAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICBub3JtQW5nbGUgPiA5MCAmJlxyXG4gICAgICBub3JtQW5nbGUgPCAyNzA7XHJcblxyXG4gICAgLy8gVG8gcm90YXRlIHRoZSBib2R5IDE4MMKwIHdoaWxlIGtlZXBpbmcgdGhlIHNhbWUgb24tY2FudmFzIHJlZ2lvbiwgc2hpZnRcclxuICAgIC8vIHRoZSBhbmNob3IgYnkgUihvcmlnaW5hbEFuZ2xlKcK3KHdpZHRoLCBoZWlnaHQpIOKAlCB0aGF0J3MgdGhlIGNhbnZhc1xyXG4gICAgLy8gcG9zaXRpb24gb2YgdGhlIHVuLXJvdGF0ZWQgYmJveCdzIGJvdHRvbS1yaWdodCBjb3JuZXIgcmVsYXRpdmUgdG8gdGhlXHJcbiAgICAvLyBhbmNob3Ig4oCUIGFuZCBhZGQgMTgwwrAgdG8gdGhlIHJvdGF0aW9uLiBmYWJyaWMgc3RpbGwgcGl2b3RzIGFyb3VuZFxyXG4gICAgLy8gdG9wLWxlZnQgb2YgdGhlIHVuLXJvdGF0ZWQgYmJveCBhdCB0aGUgbmV3IGFuY2hvci5cclxuICAgIGxldCByZW5kZXJYID0geDtcclxuICAgIGxldCByZW5kZXJZID0geTtcclxuICAgIGxldCByZW5kZXJBbmdsZSA9IGFuZ2xlIGFzIG51bWJlcjtcclxuICAgIGlmIChzaG91bGRGbGlwQm9keSkge1xyXG4gICAgICBjb25zdCByYWQgPSAoKGFuZ2xlIGFzIG51bWJlcikgKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgICAgY29uc3QgY29zQSA9IE1hdGguY29zKHJhZCk7XHJcbiAgICAgIGNvbnN0IHNpbkEgPSBNYXRoLnNpbihyYWQpO1xyXG4gICAgICByZW5kZXJYID0geCArIGNvc0EgKiB3aWR0aCAtIHNpbkEgKiBoZWlnaHQ7XHJcbiAgICAgIHJlbmRlclkgPSB5ICsgc2luQSAqIHdpZHRoICsgY29zQSAqIGhlaWdodDtcclxuICAgICAgcmVuZGVyQW5nbGUgPSAoYW5nbGUgYXMgbnVtYmVyKSArIDE4MDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByYWRpdXMgPSA1O1xyXG4gICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgdG9wQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogdG9wWCxcclxuICAgICAgdG9wOiB0b3BZLFxyXG4gICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgIGhlaWdodDogdG9wSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGlubmVyVG9wQm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgIFEgJHt0b3BYfSAke3RvcFl9ICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgdG9wRmllbGRUZXh0ID1cclxuICAgICAgKGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIlxyXG4gICAgICAgID8gYFdhbGwtJHtmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcn0gLSBgXHJcbiAgICAgICAgOiBcIkZsb29yIC0gXCIpICtcclxuICAgICAgYEZpeHR1cmUgJHtcclxuICAgICAgICBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgID8gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyICtcclxuICAgICAgICAgICAgKGZpeHR1cmVEYXRhPy5maXh0dXJlTnVtYmVyXHJcbiAgICAgICAgICAgICAgPyBcIiAtIEZYLVwiICsgZml4dHVyZURhdGEuZml4dHVyZU51bWJlclxyXG4gICAgICAgICAgICAgIDogXCJcIilcclxuICAgICAgICAgIDogXCJuZXdcIlxyXG4gICAgICB9YDtcclxuXHJcbiAgICBjb25zdCB0b3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHRvcEZpZWxkVGV4dCwge1xyXG4gICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICB0b3A6IHRvcFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlY29uZEJveFkgPSB0b3BZICsgaW5uZXJCb3hIZWlnaHQ7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3R0b21Cb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFl9IFxyXG4gICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgIHRvcFggKyB0b3BXaWR0aCAtIHJhZGl1c1xyXG4gICAgIH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7XHJcbiAgICAgICBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgICB9IFxyXG4gICAgIEwgJHt0b3BYfSAke3NlY29uZEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogXCIjMzQ0MDU0XCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICBsZXQgYm90dG9tVGV4dDtcclxuXHJcbiAgICBjb25zdCB0ZXh0Q29udGVudCA9IGZpeHR1cmVEYXRhLmZpeHR1cmVOYW1lLmluY2x1ZGVzKFwiLWZ0XCIpXHJcbiAgICAgID8gZml4dHVyZURhdGEuZml4dHVyZU5hbWVcclxuICAgICAgOiBgJHtmaXh0dXJlRGF0YS5maXh0dXJlTmFtZX0gLSAke2ZpeHR1cmVEYXRhLmZpeHR1cmVXaWR0aC52YWx1ZX0gJHtmaXh0dXJlRGF0YS5maXh0dXJlV2lkdGgudW5pdH1gO1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZUJvdHRvbVRleHQgPSAoZnM6IGFueSkgPT5cclxuICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIGJvdHRvbVRleHQgPSBjcmVhdGVCb3R0b21UZXh0KGZvbnRTaXplKTtcclxuICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgfSB3aGlsZSAoYm90dG9tVGV4dC5oZWlnaHQgPiBpbm5lckJveEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB0b3BZICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCBtaWRDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICB0b3A6IG1pZFksXHJcbiAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBtaWRIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2hlbGZDb3VudCA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5sZW5ndGg7XHJcbiAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAoc2hlbGZDb3VudCArIDIpO1xyXG4gICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuXHJcbiAgICBjb25zdCBmaXJzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIG1pZFdpZHRofSAke1xyXG4gICAgICAgICAgIGZpcnN0Qm94WSArIHJhZGl1c1xyXG4gICAgICAgICB9IFxyXG4gICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgIFEgJHttaWRYfSAke2ZpcnN0Qm94WX0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmhlYWRlckludmFsaWRcclxuICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICA6IFwiI0VBRjhGRlwiLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5oZWFkZXJJbnZhbGlkXHJcbiAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uaGVhZGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmhlYWRlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBmaXJzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA3LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVEYXRhLmhlYWRlckludmFsaWQgPyBcIiNmZmZcIiA6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzaGVsdmVzID0gW107XHJcbiAgICBjb25zdCBzaGVsZkhlaWdodCA9IG1pZEhlaWdodCAtIDIgKiBib3hIZWlnaHQ7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDFcIikge1xyXG4gICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0O1xyXG5cclxuICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHNoZWxmSGVpZ2h0LFxyXG4gICAgICAgIC8vIHN0cm9rZTogJyM1MUMxRkYnLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5oZWFkZXJJbnZhbGlkXHJcbiAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgdGV4dCA9IGZpeHR1cmVEYXRhPy5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGggYW5kIHNocmluayB0byBmaXQgdmVydGljYWwgc3BhY2VcclxuICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBzaGVsZkhlaWdodCAqIDAuODtcclxuICAgICAgbGV0IGZvbnRTaXplTDEgPSA2O1xyXG5cclxuICAgICAgY29uc3QgY3JlYXRlV3JhcHBlZFRleHRib3ggPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemVMMSA+IDIpIHtcclxuICAgICAgICBmb250U2l6ZUwxIC09IDAuNTtcclxuICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBNYXRoLm1pbihtYXhUZXh0V2lkdGgsIHdyYXBwZWRUZXh0LndpZHRoISkgKyBwYWRkaW5nLFxyXG4gICAgICAgIGhlaWdodDogd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyAyLFxyXG4gICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgcng6IDEsXHJcbiAgICAgICAgcnk6IDEsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmLCBiYWNrZ3JvdW5kLCB3cmFwcGVkVGV4dCk7XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoZWxmQ291bnQ7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoaSArIDEpO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmhlYWRlckludmFsaWRcclxuICAgICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0udHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHQgPVxyXG4gICAgICAgICAgZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAgIC8vIEwyOiBTaW5nbGUtbGluZSBlbGxpcHNpcyBhZ2FpbnN0IGZ1bGwgc2hlbGYgd2lkdGhcclxuICAgICAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IDY7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gTWF0aC5tYXgoMCwgbWlkV2lkdGggLSBob3Jpem9udGFsUGFkZGluZyk7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGJveEhlaWdodCAqIDAuODtcclxuICAgICAgICBjb25zdCBiYXNlRm9udFNpemUgPSA1O1xyXG5cclxuICAgICAgICBjb25zdCBtZWFzdXJlID0gKHQ6IHN0cmluZykgPT5cclxuICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dCh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgZGlzcGxheVRleHQgPSB0ZXh0O1xyXG4gICAgICAgIGxldCBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG5cclxuICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbiAgICAgICAgICBsZXQgbGVmdElkeCA9IDA7XHJcbiAgICAgICAgICBsZXQgcmlnaHRJZHggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAobGVmdElkeCA8IHJpZ2h0SWR4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pZElkeCA9IE1hdGguZmxvb3IoKGxlZnRJZHggKyByaWdodElkeCkgLyAyKTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGV4dC5zbGljZSgwLCBtaWRJZHgpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShjYW5kaWRhdGUpO1xyXG4gICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgcmlnaHRJZHggPSBtaWRJZHg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGVmdElkeCA9IG1pZElkeCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRpc3BsYXlUZXh0ID0gdGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0SWR4IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihtYXhUZXh0SGVpZ2h0LCBtZWFzdXJlZC5oZWlnaHQgPz8gMTApICsgMixcclxuICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICByeTogMSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZmluYWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0KGRpc3BsYXlUZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChiYWNrZ3JvdW5kLCBmaW5hbFRleHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIikge1xyXG4gICAgICBjb25zdCBzZXF1ZW50aWFsR3JvdXBzOiB7IHpvbmU6IHN0cmluZzsgc2hlbHZlczogYW55W10gfVtdID0gW107XHJcblxyXG4gICAgICBsZXQgcHJldmlvdXNab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgc2hlbGYgb2YgZml4dHVyZURhdGEuc2hlbGZDb25maWcpIHtcclxuICAgICAgICBjb25zdCB6b25lID0gc2hlbGYuem9uZSB8fCBcIlVua25vd25cIjtcclxuICAgICAgICBpZiAoem9uZSAhPT0gcHJldmlvdXNab25lKSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzLnB1c2goeyB6b25lLCBzaGVsdmVzOiBbc2hlbGZdIH0pO1xyXG4gICAgICAgICAgcHJldmlvdXNab25lID0gem9uZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VxdWVudGlhbEdyb3Vwc1tzZXF1ZW50aWFsR3JvdXBzLmxlbmd0aCAtIDFdLnNoZWx2ZXMucHVzaChzaGVsZik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY3VycmVudFNoZWxmSW5kZXggPSAwO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBzZXF1ZW50aWFsR3JvdXBzKSB7XHJcbiAgICAgICAgY29uc3QgeyB6b25lLCBzaGVsdmVzOiBzaGVsdmVzSW5Hcm91cCB9ID0gZ3JvdXA7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwU3RhcnRJbmRleCA9IGN1cnJlbnRTaGVsZkluZGV4O1xyXG4gICAgICAgIGNvbnN0IGdyb3VwTGVuZ3RoID0gc2hlbHZlc0luR3JvdXAubGVuZ3RoO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoZ3JvdXBTdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21ZID0gZ3JvdXBUb3BZICsgYm94SGVpZ2h0ICogZ3JvdXBMZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2hlbHZlc0luR3JvdXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IHNoZWxmRGF0YSA9IHNoZWx2ZXNJbkdyb3VwW2pdO1xyXG4gICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChjdXJyZW50U2hlbGZJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNoZWxmUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgIDogZml4dHVyZURhdGEuaGVhZGVySW52YWxpZFxyXG4gICAgICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZlJlY3QpO1xyXG5cclxuICAgICAgICAgIGlmIChzaGVsZkRhdGEuc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IHNoZWxmRGF0YS50cmF5Um93cyB8fCAwO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0UGVyU2hlbGYgPSBzaGVsZkRhdGEucHJvZHVjdFBlclNoZWxmIHx8IDA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBtaWRXaWR0aCAvIHByb2R1Y3RQZXJTaGVsZjtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDE7IGMgPCBwcm9kdWN0UGVyU2hlbGY7IGMrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVYID0gbWlkWCArIGMgKiBjb2x1bW5TcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbExpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godmVydGljYWxMaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGN1cnJlbnRTaGVsZkluZGV4Kys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBncm91cEJvdHRvbUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICBbbWlkWCwgZ3JvdXBCb3R0b21ZLCBtaWRYICsgbWlkV2lkdGgsIGdyb3VwQm90dG9tWV0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmhlYWRlckludmFsaWRcclxuICAgICAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC0gbGFiZWxQYWRkaW5nLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwicmlnaHRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2gobGFiZWxUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWCA9IG1pZFggKyBtaWRXaWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJZID0gZ3JvdXBUb3BZICsgKGdyb3VwQm90dG9tWSAtIGdyb3VwVG9wWSkgLyAyO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uQnJhbmRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbkJyYW5kcy5hZGQoYnJhbmQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChbLi4uc2VjdGlvbkJyYW5kc10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNjtcclxuICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBDZW50ZXJUZXh0LCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZURhdGEudm1Db25maWcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB2bSA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnW2ldO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgc3RhcnRJbmRleCA+IGZpeHR1cmVEYXRhPy5zaGVsZkNvbmZpZy5sZW5ndGggfHxcclxuICAgICAgICAgIGVuZEluZGV4ID4gZml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmxlbmd0aFxyXG4gICAgICAgIClcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZlRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0U3BhbiA9IGJveEhlaWdodCAqIChlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgbGV0IHZtSGVpZ2h0UHg6IG51bWJlciA9IHNoZWxmSGVpZ2h0U3BhbjtcclxuICAgICAgICBsZXQgeTogbnVtYmVyID0gc2hlbGZUb3BZO1xyXG5cclxuICAgICAgICBpZiAodm0ueVpvbmUgJiYgdm0ueVpvbmUgIT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB2bUhlaWdodFB4ID0gc2hlbGZIZWlnaHRTcGFuIC8gMztcclxuXHJcbiAgICAgICAgICBzd2l0Y2ggKHZtLnlab25lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgMiAqIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB4ID0gbWlkWDtcclxuICAgICAgICBsZXQgd2lkdGggPSBtaWRXaWR0aDtcclxuXHJcbiAgICAgICAgaWYgKCF2bS54Wm9uZSB8fCB2bS54Wm9uZSA9PT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvbldpZHRoID0gbWlkV2lkdGggLyAzO1xyXG4gICAgICAgICAgc3dpdGNoICh2bS54Wm9uZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFggKyBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYICsgMiAqIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZtLnZtSW1hZ2VVcmwpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZtSW1hZ2U6IGFueSA9IGF3YWl0IGZhYnJpYy5GYWJyaWNJbWFnZS5mcm9tVVJMKFxyXG4gICAgICAgICAgICAgIGAke3RoaXMuY2RuVXJsfSR7dm0udm1JbWFnZVVybH0/dj0ke0RhdGUubm93KCl9YCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdm1JbWFnZS5zZXQoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHNjYWxlWDogd2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtSW1hZ2UpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgaW1hZ2UgZm9yIFZNOiAke3ZtLnZtSW1hZ2VVcmx9YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgdm1Cb3ggPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8udm1GaWxsID8/IFwiIzY5MzhFRlwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgICAgICAgbGV0IHZtVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVWbVRleHQgPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHZtLnZtTmFtZSB8fCBcIlwiLCB7XHJcbiAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHZtVGV4dCA9IGNyZWF0ZVZtVGV4dChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHZtVGV4dC5oZWlnaHQgPiB2bUhlaWdodFB4ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHZtQm94LCB2bVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHNoZWxmQ291bnQgKyAxKTtcclxuICAgIGNvbnN0IGxhc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICAgICBtaWRYICsgbWlkV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICBRICR7bWlkWH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHttaWRYfSAke1xyXG4gICAgICAgICAgIGxhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgIH0gXHJcbiAgICAgICAgIEwgJHttaWRYfSAke2xhc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaGVhZGVySW52YWxpZFxyXG4gICAgICAgICAgICA/IFwiI0ZFRTRFMlwiXHJcbiAgICAgICAgICAgIDogXCIjRUFGOEZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmhlYWRlckludmFsaWRcclxuICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBsYXN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmZvb3Rlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWd0aDogYm94SGVpZ2h0LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBib3R0b21XaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IGJvdHRvbUhlaWdodCA9ICgzIC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IGJvdHRvbVggPSB4ICsgKHdpZHRoIC0gYm90dG9tV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSBtaWRZICsgbWlkSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCBib3R0b21Db250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBib3R0b21YLFxyXG4gICAgICB0b3A6IGJvdHRvbVksXHJcbiAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBib3R0b21UZXh0Q29udGVudCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYFNoZWx2ZXMgLSAke2FjdHVhbFNoZWx2ZXMubGVuZ3RofSAuIFByb2R1Y3RzIC0gICR7XHJcbiAgICAgICAgZml4dHVyZURhdGE/LmZpeHR1cmVDYXBhY2l0eSA/PyAwXHJcbiAgICAgIH0gLiBWTSAtICR7Zml4dHVyZURhdGE/LnZtQ29uZmlnPy5sZW5ndGggPz8gMH1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogYm90dG9tWCArIGJvdHRvbVdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzdmdTdHJpbmcgPSBgXHJcbiAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiMTJcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICA8cGF0aCBkPVwiTTE0Ljk5OTggNi42MDAwMUMxNS4xNTc0IDYuNDQyNDMgMTUuMzQ0NSA2LjMxNzQyIDE1LjU1MDQgNi4yMzIxNEMxNS43NTYzIDYuMTQ2ODUgMTUuOTc3IDYuMTAyOTYgMTYuMTk5OCA2LjEwMjk2QzE2LjQyMjcgNi4xMDI5NiAxNi42NDM0IDYuMTQ2ODUgMTYuODQ5MiA2LjIzMjE0QzE3LjA1NTEgNi4zMTc0MiAxNy4yNDIyIDYuNDQyNDMgMTcuMzk5OCA2LjYwMDAxQzE3LjU1NzQgNi43NTc2IDE3LjY4MjQgNi45NDQ2OCAxNy43Njc3IDcuMTUwNThDMTcuODUzIDcuMzU2NDggMTcuODk2OSA3LjU3NzE1IDE3Ljg5NjkgNy44MDAwMUMxNy44OTY5IDguMDIyODggMTcuODUzIDguMjQzNTUgMTcuNzY3NyA4LjQ0OTQ1QzE3LjY4MjQgOC42NTUzNSAxNy41NTc0IDguODQyNDMgMTcuMzk5OCA5LjAwMDAxTDkuMjk5ODIgMTcuMUw1Ljk5OTgyIDE4TDYuODk5ODIgMTQuN0wxNC45OTk4IDYuNjAwMDFaXCIgc3Ryb2tlPVwiIzFEMjkzOVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgIDwvc3ZnPmA7XHJcblxyXG4gICAgbGV0IGxvYWRlZFNWRzogYW55ID0gYXdhaXQgZmFicmljLmxvYWRTVkdGcm9tU3RyaW5nKHN2Z1N0cmluZyk7XHJcblxyXG4gICAgbGV0IGVkaXRTdmcgPSBmYWJyaWMudXRpbC5ncm91cFNWR0VsZW1lbnRzKFxyXG4gICAgICBsb2FkZWRTVkcub2JqZWN0cyxcclxuICAgICAgbG9hZGVkU1ZHLm9wdGlvbnMsXHJcbiAgICApO1xyXG5cclxuICAgIGVkaXRTdmcuc2V0KHtcclxuICAgICAgc2NhbGVYOiAxLFxyXG4gICAgICBzY2FsZVk6IDEsXHJcbiAgICAgIGxlZnQ6IHggKyB3aWR0aCAtIDMwLFxyXG4gICAgICB0b3A6IHkgKyAxNCxcclxuICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLCAvLyBhbGxvdyBldmVudHNcclxuICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgZWRpdFN2Zy5vbihcIm1vdXNlZG93blwiLCAob3B0KSA9PiB7XHJcbiAgICAgIGlmIChvcHQgJiYgb3B0LmUgJiYgb3B0LmUuc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgICAgICAgb3B0LmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgZml4dHVyZVR5cGU6IGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlLFxyXG4gICAgICAgIHdhbGxJbmRleDogZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIsXHJcbiAgICAgICAgZml4dHVyZUluZGV4OiBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIsXHJcbiAgICAgICAgZml4dHVyZUlkOiBmaXh0dXJlRGF0YS5faWQsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3Qgd2FsbCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudE51bWJlciA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUud2FsbEluZGV4LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB3YWxsLmZpeHR1cmVzLmZpbmQoXHJcbiAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gZml4dHVyZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZmluZChcclxuICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBmaXh0dXJlO1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0aGlzPy5zZWxlY3RlZEZpeHR1cmVEYXRhPy50YXNrVHlwZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZURhdGEgPSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE7XHJcbiAgICAgIHRoaXMuZWRpdEZpeHR1cmUgPSB0cnVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZml4dHVyZUdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChcclxuICAgICAgW1xyXG4gICAgICAgIG1haW5Db250YWluZXIsXHJcbiAgICAgICAgdG9wQ29udGFpbmVyLFxyXG4gICAgICAgIGlubmVyVG9wQm94LFxyXG4gICAgICAgIHRvcFRleHQsXHJcbiAgICAgICAgaW5uZXJCb3R0b21Cb3gsXHJcbiAgICAgICAgYm90dG9tVGV4dCxcclxuICAgICAgICBtaWRDb250YWluZXIsXHJcbiAgICAgICAgZmlyc3RCb3gsXHJcbiAgICAgICAgZmlyc3RCb3hUZXh0LFxyXG4gICAgICAgIC4uLnNoZWx2ZXMsXHJcbiAgICAgICAgbGFzdEJveCxcclxuICAgICAgICBsYXN0Qm94VGV4dCxcclxuICAgICAgICBib3R0b21Db250YWluZXIsXHJcbiAgICAgICAgYm90dG9tVGV4dENvbnRlbnQsXHJcbiAgICAgICAgZWRpdFN2ZyxcclxuICAgICAgXSxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IHJlbmRlclgsXHJcbiAgICAgICAgdG9wOiByZW5kZXJZLFxyXG4gICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICAgIHNlbGVjdGFibGU6IHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkLFxyXG4gICAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAgICAgYW5nbGU6IHJlbmRlckFuZ2xlLFxyXG4gICAgICB9LFxyXG4gICAgKSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIHdhbGxJbmRleDogbnVtYmVyO1xyXG4gICAgICBmaXh0dXJlSW5kZXg6IG51bWJlcjtcclxuICAgICAgZml4dHVyZUlkOiBzdHJpbmc7XHJcbiAgICAgIGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIjtcclxuICAgICAgaXNzdWU6IGJvb2xlYW47XHJcbiAgICAgIGlzc3VlRGF0YTogYW55O1xyXG4gICAgICB0YXNrVHlwZTogc3RyaW5nO1xyXG4gICAgICB2bUNvbmZpZzogW107XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhZml4dHVyZURhdGE/Lmlzc3VlICYmXHJcbiAgICAgICFmaXh0dXJlRGF0YT8udW5zYXZlZENoYW5nZXMgJiZcclxuICAgICAgdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWRcclxuICAgICkge1xyXG4gICAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGVkaXRTdmcuc2V0KFwidmlzaWJsZVwiLCB0cnVlKTtcclxuICAgICAgICBjYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZW91dFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZWRpdFN2Zy5zZXQoXCJ2aXNpYmxlXCIsIGZhbHNlKTtcclxuICAgICAgICBjYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlZG93blwiLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZVBhbmVsKFwicmlnaHRcIiwgZmFsc2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGFyZ2V0KTtcclxuICAgICAgdGhpcy5zZWxlY3RGaXh0dXJlT25DYW52YXNDbGljayh0YXJnZXQsIHRydWUpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBmaXh0dXJlRGF0YTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlVHlwZSA9IGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLndhbGxJbmRleCA9IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJbmRleCA9IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSWQgPSBmaXh0dXJlRGF0YS5faWQ7XHJcbiAgICBmaXh0dXJlR3JvdXAuaXNzdWUgPSBmaXh0dXJlRGF0YS5pc3N1ZTtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZURhdGEgPSBmaXh0dXJlRGF0YS5pc3N1ZURhdGE7XHJcbiAgICBmaXh0dXJlR3JvdXAudGFza1R5cGUgPSBmaXh0dXJlRGF0YS50YXNrVHlwZTtcclxuICAgIGZpeHR1cmVHcm91cC52bUNvbmZpZyA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnO1xyXG4gICAgZml4dHVyZUdyb3VwLm9ialR5cGUgPSBcImZpeHR1cmVcIjtcclxuXHJcbiAgICAvLyB0aGlzLmNhbnZhcy5vbihcIm9iamVjdDptb3ZpbmdcIiwgKGUpID0+IHtcclxuICAgIC8vICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgYW55O1xyXG4gICAgLy8gICBpZiAoIXRhcmdldCB8fCB0YXJnZXQub2JqVHlwZSAhPT0gXCJmaXh0dXJlXCIpIHJldHVybjtcclxuXHJcbiAgICAvLyAgIGNvbnN0IGFuZ2xlRGVnID0gdGFyZ2V0LmFuZ2xlIHx8IDA7XHJcbiAgICAvLyAgIGNvbnN0IGFuZ2xlID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcbiAgICAvLyAgIGlmICghdGFyZ2V0Ll9sYXN0TGVmdCkge1xyXG4gICAgLy8gICAgIHRhcmdldC5fbGFzdExlZnQgPSB0YXJnZXQubGVmdDtcclxuICAgIC8vICAgICB0YXJnZXQuX2xhc3RUb3AgPSB0YXJnZXQudG9wO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGNvbnN0IGR4ID0gdGFyZ2V0LmxlZnQgLSB0YXJnZXQuX2xhc3RMZWZ0O1xyXG4gICAgLy8gICBjb25zdCBkeSA9IHRhcmdldC50b3AgLSB0YXJnZXQuX2xhc3RUb3A7XHJcbiAgICAvLyAgIGNvbnN0IHByb2plY3RlZCA9IGR4ICogTWF0aC5jb3MoYW5nbGUpICsgZHkgKiBNYXRoLnNpbihhbmdsZSk7XHJcbiAgICAvLyAgIHRhcmdldC5sZWZ0ID0gdGFyZ2V0Ll9sYXN0TGVmdCArIHByb2plY3RlZCAqIE1hdGguY29zKGFuZ2xlKTtcclxuICAgIC8vICAgdGFyZ2V0LnRvcCA9IHRhcmdldC5fbGFzdFRvcCArIHByb2plY3RlZCAqIE1hdGguc2luKGFuZ2xlKTtcclxuICAgIC8vICAgdGFyZ2V0Ll9sYXN0TGVmdCA9IHRhcmdldC5sZWZ0O1xyXG4gICAgLy8gICB0YXJnZXQuX2xhc3RUb3AgPSB0YXJnZXQudG9wO1xyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgY2FudmFzLmFkZChmaXh0dXJlR3JvdXApO1xyXG5cclxuICAgIC8vIElmIG5ld2x5IGFkZGVkLCBmb2N1cyBpdCBvbmNlXHJcbiAgICBpZiAoKGZpeHR1cmVEYXRhIGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZml4dHVyZURhdGEgYXMgYW55KS5uZXdBZGRlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZml4dHVyZUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0VudHJhbmNlKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgYXJyb3dXaWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueSxcclxuICApIHtcclxuICAgIGNvbnN0IGJvZHlXaWR0aCA9IHdpZHRoIC0gYXJyb3dXaWR0aDtcclxuICAgIGNvbnN0IGFuZ2xlID0gZWxlbWVudERhdGEuYW5nbGU7XHJcblxyXG4gICAgY29uc3QgcGF0aERhdGEgPSBbXHJcbiAgICAgIGBNIDAgMGAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7LWhlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHt3aWR0aH0gJHtoZWlnaHQgLyAyfWAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAke2hlaWdodCArIGhlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0fWAsXHJcbiAgICAgIGBMIDAgJHtoZWlnaHR9YCxcclxuICAgICAgYFpgLFxyXG4gICAgXS5qb2luKFwiIFwiKTtcclxuXHJcbiAgICBjb25zdCBhcnJvdyA9IG5ldyBmYWJyaWMuUGF0aChwYXRoRGF0YSwge1xyXG4gICAgICBmaWxsOiBcIiMwM0E5RjRcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGhlaWdodCAtIDY7XHJcbiAgICBjb25zdCB0ZXh0ID0gbmV3IGZhYnJpYy5UZXh0KFwiRW50cmFuY2VcIiwge1xyXG4gICAgICBmb250RmFtaWx5OiBcIkFyaWFsXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGxlZnQ6IDE1LFxyXG4gICAgICB0b3A6IGhlaWdodCAvIDIsXHJcbiAgICAgIGZvbnRTaXplOiAyMCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGV4dEJvdW5kcyA9IHRleHQuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gbWF4VGV4dEhlaWdodCAvIHRleHRCb3VuZHMuaGVpZ2h0O1xyXG4gICAgICB0ZXh0LnNldChcImZvbnRTaXplXCIsIHRleHQuZm9udFNpemUhICogc2NhbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbYXJyb3csIHRleHRdLCB7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ0ZsaXA6IHRydWUsXHJcbiAgICAgIGFuZ2xlOiBhbmdsZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBlbGVtZW50RGF0YS5lbGVtZW50VHlwZTtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50RGF0YTtcclxuXHJcbiAgICBjYW52YXMuYWRkKGdyb3VwKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5kcmF3RW50cmFuY2VEaXNzZWN0aW9uTGluZShjYW52YXMsIGdyb3VwLCB3aWR0aCwgaGVpZ2h0LCBhbmdsZSk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIGRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgYTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgZWxlbWVudDogYW55LFxyXG4gICk6IGZhYnJpYy5Hcm91cCB7XHJcbiAgICBjb25zdCByZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgcng6IDIsXHJcbiAgICAgIHJ5OiAyLFxyXG4gICAgICBmaWxsOiBcIiNEQUYxRkZcIixcclxuICAgICAgc3Ryb2tlOiBcIiM2QkNBRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KGVsZW1lbnQuZml4dHVyZU5hbWUsIHtcclxuICAgICAgd2lkdGg6IHdpZHRoIC0gOCxcclxuICAgICAgZm9udFNpemU6IDE0LFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIGVkaXRhYmxlOiBmYWxzZSxcclxuICAgICAgc3BsaXRCeUdyYXBoZW1lOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGV4dEJvdW5kcyA9IHRleHQuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgaWYgKHRleHRCb3VuZHMuaGVpZ2h0ID4gaGVpZ2h0IC0gOCkge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IChoZWlnaHQgLSA4KSAvIHRleHRCb3VuZHMuaGVpZ2h0O1xyXG4gICAgICB0ZXh0LnNldChcImZvbnRTaXplXCIsIHRleHQuZm9udFNpemUhICogc2NhbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbcmVjdCwgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBhbmdsZTogYSxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gXCJvdGhlcnNcIjtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50O1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIGlmICgoZWxlbWVudCBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChncm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZWxlbWVudCBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdCZygpIHtcclxuICAgIGNvbnN0IHdhbGwxID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZTogYW55KSA9PiBlLmVsZW1lbnROdW1iZXIgPT09IDEgJiYgZS5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIsXHJcbiAgICApO1xyXG4gICAgY29uc3Qgd2FsbDIgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlOiBhbnkpID0+IGUuZWxlbWVudE51bWJlciA9PT0gMiAmJiBlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIixcclxuICAgICk7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMod2FsbDEuZGlzdGFuY2UsIHdhbGwxLnVuaXQpO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyh3YWxsMi5kaXN0YW5jZSwgd2FsbDIudW5pdCk7XHJcblxyXG4gICAgY29uc3QgYmcgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB0aGlzLndhbGxUaGlja25lc3MsXHJcbiAgICAgIHRvcDogdGhpcy53YWxsVGhpY2tuZXNzLFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICBmaWxsOiBcIiNlYWVjZjBcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKGJnKTtcclxuICAgIHRoaXMuY2FudmFzLnJlbW92ZShiZyk7XHJcbiAgICB0aGlzLmNhbnZhcy5pbnNlcnRBdCgwLCBiZyk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHN1YnNjcmliZVRvRml4dHVyZUNvbmZpZ0lkQ2hhbmdlcygpIHtcclxuICAgIHRoaXMuZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLmZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zID0gW107XHJcblxyXG4gICAgdGhpcy5nZXRGb3JtV2FsbHMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCwgaSkgPT4ge1xyXG4gICAgICBjb25zdCB3YWxsR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgY29uc3QgZml4dHVyZXNBcnJheSA9IHdhbGxHcm91cC5nZXQoXCJmaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXk7XHJcblxyXG4gICAgICBmaXh0dXJlc0FycmF5LmNvbnRyb2xzLmZvckVhY2goKGZpeHR1cmVDb250cm9sLCBqKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gZml4dHVyZUNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgIGNvbnN0IHN1YiA9IGZpeHR1cmVHcm91cFxyXG4gICAgICAgICAgLmdldChcImZpeHR1cmVDb25maWdJZFwiKVxyXG4gICAgICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZUZpeHR1cmVUZW1wbGF0ZShuZXdWYWx1ZSwgXCJ3YWxsXCIsIGosIGkpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChzdWIpIHRoaXMuZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnMucHVzaChzdWIpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMuY29udHJvbHMuZm9yRWFjaCgoZml4dHVyZUNvbnRyb2wsIGspID0+IHtcclxuICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gZml4dHVyZUNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBzdWIgPSBmaXh0dXJlR3JvdXBcclxuICAgICAgICAuZ2V0KFwiZml4dHVyZUNvbmZpZ0lkXCIpXHJcbiAgICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgobmV3VmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRml4dHVyZVRlbXBsYXRlKG5ld1ZhbHVlLCBcImZsb29yXCIsIGspO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHN1YikgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucy5wdXNoKHN1Yik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN1YnNjcmliZVRvT3RoZXJFbGVtZW50c0NoYW5nZXMoKSB7XHJcbiAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViPy51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMgPSBbXTtcclxuXHJcbiAgICAvLyBXYWxsLWxldmVsIG90aGVyRWxlbWVudHMgbGFiZWwgc3Vic2NyaXB0aW9uc1xyXG4gICAgdGhpcy5nZXRGb3JtV2FsbHMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xyXG4gICAgICBjb25zdCB3YWxsR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgY29uc3Qgb3RoZXJBcnJheSA9IHdhbGxHcm91cC5nZXQoXCJvdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheTtcclxuXHJcbiAgICAgIG90aGVyQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoY3RybCwgb3RoZXJJZHgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGVtZW50R3JvdXAgPSBjdHJsIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBjb25zdCB0eXBlQ29udHJvbCA9IGVsZW1lbnRHcm91cC5nZXQoXCJ0eXBlXCIpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbU5hbWVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcImN1c3RvbU5hbWVcIikgYXMgRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgICAgIGNvbnN0IHdhbGxNZXRhID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgKGVsOiBhbnkpID0+XHJcbiAgICAgICAgICAgIGVsLmVsZW1lbnRUeXBlID09PSB3YWxsR3JvdXAuZ2V0KFwiZWxlbWVudFR5cGVcIik/LnZhbHVlICYmXHJcbiAgICAgICAgICAgIGVsLmVsZW1lbnROdW1iZXIgPT09IHdhbGxHcm91cC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSB3YWxsTWV0YT8ub3RoZXJFbGVtZW50cz8uW290aGVySWR4XTtcclxuICAgICAgICBpZiAoIWVsZW1lbnRSZWYpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gd2hlbiB0eXBlIGNoYW5nZXMgKGRyb3Bkb3duKVxyXG4gICAgICAgIGNvbnN0IHN1YlR5cGUgPSB0eXBlQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgLy8gaWYgdXNlciBwaWNrcyBcIk90aGVyc1wiLCBwcmVmZXIgY3VzdG9tTmFtZSBpZiBwcmVzZW50LCBvdGhlcndpc2Ugc2V0IGZpeHR1cmVOYW1lIHRvIFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgZWxlbWVudFJlZi5maXh0dXJlTmFtZSA9XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWQgPT09IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICAgID8gY3VzdG9tTmFtZUNvbnRyb2w/LnZhbHVlIHx8IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICAgIDogc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gd2hlbiBjdXN0b21OYW1lIGNoYW5nZXMgKHRleHQgaW5wdXQgdmlzaWJsZSBvbmx5IHdoZW4gdHlwZSA9PT0gJ090aGVycycpXHJcbiAgICAgICAgY29uc3Qgc3ViQ3VzdG9tID0gY3VzdG9tTmFtZUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChjdXN0b206IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodHlwZUNvbnRyb2wudmFsdWUgPT09IFwiT3RoZXJzXCIpIHtcclxuICAgICAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID0gY3VzdG9tO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zLnB1c2goc3ViVHlwZSwgc3ViQ3VzdG9tKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBGbG9vci1sZXZlbCBvdGhlckVsZW1lbnRzIGxhYmVsIHN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMuZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5jb250cm9scy5mb3JFYWNoKChjdHJsLCBpZHgpID0+IHtcclxuICAgICAgY29uc3QgZWxlbWVudEdyb3VwID0gY3RybCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IHR5cGVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcInR5cGVcIikgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgIGNvbnN0IGN1c3RvbU5hbWVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcImN1c3RvbU5hbWVcIikgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSB0aGlzLmZsb29yRGF0YT8ub3RoZXJFbGVtZW50cz8uW2lkeF07XHJcbiAgICAgIGlmICghZWxlbWVudFJlZikgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3Qgc3ViVHlwZSA9IHR5cGVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID1cclxuICAgICAgICAgICAgc2VsZWN0ZWQgPT09IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICA/IGN1c3RvbU5hbWVDb250cm9sPy52YWx1ZSB8fCBcIk90aGVyc1wiXHJcbiAgICAgICAgICAgICAgOiBzZWxlY3RlZDtcclxuICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBzdWJDdXN0b20gPSBjdXN0b21OYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoY3VzdG9tOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlQ29udHJvbC52YWx1ZSA9PT0gXCJPdGhlcnNcIikge1xyXG4gICAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID0gY3VzdG9tO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbnZhc090aGVyRWxlbWVudExhYmVsKGVsZW1lbnRSZWYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9ucy5wdXNoKHN1YlR5cGUsIHN1YkN1c3RvbSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUNhbnZhc090aGVyRWxlbWVudExhYmVsKGVsZW1lbnRSZWY6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maW5kKFxyXG4gICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgIG9iaj8ub2JqVHlwZSA9PT0gXCJvdGhlcnNcIiAmJiBvYmo/LmRhdGEuX2lkID09PSBlbGVtZW50UmVmLl9pZCxcclxuICAgICAgKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKCFncm91cCkgcmV0dXJuO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnRSZWY7XHJcblxyXG4gICAgY29uc3QgdGV4dE9iaiA9IChncm91cC5nZXRPYmplY3RzKCkgfHwgW10pLmZpbmQoXHJcbiAgICAgIChvOiBhbnkpID0+IG8/LnR5cGUgPT09IFwidGV4dFwiIHx8IG8/LnR5cGUgPT09IFwidGV4dGJveFwiLFxyXG4gICAgKSBhcyBmYWJyaWMuVGV4dCB8IGZhYnJpYy5UZXh0Ym94IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmICh0ZXh0T2JqKSB7XHJcbiAgICAgICh0ZXh0T2JqIGFzIGFueSkuc2V0KHsgdGV4dDogZWxlbWVudFJlZi5maXh0dXJlTmFtZSB9KTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm90YXRlQ2FudmFzKGNhbnZhczogZmFicmljLkNhbnZhcywgYW5nbGVEZWc6IG51bWJlcikge1xyXG4gICAgaWYgKCFjYW52YXMpIHJldHVybjtcclxuICAgIGNvbnN0IGFsbE9iamVjdHMgPSBjYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgaWYgKCFhbGxPYmplY3RzIHx8IGFsbE9iamVjdHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ3JlYXRlIGFuIEFjdGl2ZVNlbGVjdGlvbiBjb250YWluaW5nIGFsbCBvYmplY3RzIG9uIHRoZSBjYW52YXNcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IG5ldyBmYWJyaWMuQWN0aXZlU2VsZWN0aW9uKGFsbE9iamVjdHMgYXMgYW55LCB7IGNhbnZhcyB9KTtcclxuICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3Qoc2VsZWN0aW9uKTtcclxuXHJcbiAgICAvLyBSb3RhdGUgdGhlIEFjdGl2ZVNlbGVjdGlvbiBkaXJlY3RseSAod29ya3MgbGlrZSBhIHRlbXBvcmFyeSBncm91cClcclxuICAgIGNvbnN0IGFjdGl2ZTogYW55ID0gY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpO1xyXG4gICAgaWYgKCFhY3RpdmUpIHtcclxuICAgICAgY2FudmFzLmRpc2NhcmRBY3RpdmVPYmplY3QoKTtcclxuICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRBbmdsZSA9IGFjdGl2ZS5hbmdsZSB8fCAwO1xyXG4gICAgYWN0aXZlLnJvdGF0ZShjdXJyZW50QW5nbGUgKyBhbmdsZURlZyk7XHJcbiAgICBhY3RpdmUuc2V0Q29vcmRzKCk7XHJcblxyXG4gICAgLy8gQ2xlYXIgc2VsZWN0aW9uIGJ1dCBrZWVwIHJvdGF0ZWQgcG9zaXRpb25zIG9mIGNoaWxkIG9iamVjdHNcclxuICAgIGNhbnZhcy5kaXNjYXJkQWN0aXZlT2JqZWN0KCk7XHJcbiAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Rml4dHVyZU9uQ2FudmFzQ2xpY2sodGFyZ2V0OiBhbnksIGNvbGxhcHNlVGFza0luZm86IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKHRhcmdldCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHtcclxuICAgICAgICBmaXh0dXJlVHlwZTogdGFyZ2V0LmZpeHR1cmVUeXBlLFxyXG4gICAgICAgIHdhbGxJbmRleDogdGFyZ2V0LndhbGxJbmRleCxcclxuICAgICAgICBmaXh0dXJlSW5kZXg6IHRhcmdldC5maXh0dXJlSW5kZXgsXHJcbiAgICAgICAgZml4dHVyZUlkOiB0YXJnZXQuZml4dHVyZUlkLFxyXG4gICAgICAgIGlzc3VlOiB0YXJnZXQuaXNzdWUsXHJcbiAgICAgICAgaXNzdWVEYXRhOiB0YXJnZXQuaXNzdWVEYXRhLFxyXG4gICAgICAgIHZtQ29uZmlnOiB0YXJnZXQudm1Db25maWcsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRGaXh0dXJlVGVtcGxhdGVzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICB9O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldEFsbFRlbXBsYXRlcyhwYXlsb2FkKSxcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZGF0YSA9IHJlcz8uZGF0YTtcclxuXHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVzID0gZGF0YS5tYXAoKHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgX2lkOiB0Ll9pZCxcclxuICAgICAgICAgICAgbmFtZTogdC5maXh0dXJlTmFtZS5pbmNsdWRlcyhcIi1mdFwiKVxyXG4gICAgICAgICAgICAgID8gdC5maXh0dXJlTmFtZVxyXG4gICAgICAgICAgICAgIDogYCR7dC5maXh0dXJlTmFtZX0gLSAke3QuZml4dHVyZVdpZHRoLnZhbHVlfSAke3QuZml4dHVyZVdpZHRoLnVuaXR9YCxcclxuICAgICAgICAgICAgc3VidGV4dDogYCR7dC5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiLCBcIil9YCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBmaXh0dXJlIHRlbXBsYXRlczpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybSgpIHtcclxuICAgIHRoaXMubGF5b3V0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB3YWxsczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIGZsb29yRml4dHVyZXM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBmbG9vck90aGVyRWxlbWVudHM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0Rm9ybVdhbGxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJ3YWxsc1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0Rm9ybUZsb29yRml4dHVyZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldEZvcm1GbG9vck90aGVyRWxlbWVudHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yT3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0RW50cmFuY2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5maWx0ZXIoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2FsbE90aGVyRWxlbWVudHMod2FsbEluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAodGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHdhbGxJbmRleClcclxuICAgICAgLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJ3YWxsc1wiKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgIC5hdCh3YWxsSW5kZXgpXHJcbiAgICAgIC5nZXQoXCJmaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwYXRjaFdhbGxFbGVtZW50cyh7IGVsZW1lbnRUeXBlLCBlbGVtZW50TnVtYmVyIH06IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgZWxlbWVudFR5cGU6IFtlbGVtZW50VHlwZSA/IGVsZW1lbnRUeXBlIDogXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZWxlbWVudE51bWJlcjogW2VsZW1lbnROdW1iZXIgPyBlbGVtZW50TnVtYmVyIDogMCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZml4dHVyZXM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBvdGhlckVsZW1lbnRzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBwYXRjaEZpeHR1cmUoeyBmaXh0dXJlTmFtZSwgZml4dHVyZUNvbmZpZ0lkLCBfaWQgfTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBmaXh0dXJlTmFtZTogW2ZpeHR1cmVOYW1lID8gZml4dHVyZU5hbWUgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBmaXh0dXJlQ29uZmlnSWQ6IFtcclxuICAgICAgICBmaXh0dXJlQ29uZmlnSWQgPyBmaXh0dXJlQ29uZmlnSWQgOiBcIlwiLFxyXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgXSxcclxuICAgICAgX2lkOiBbX2lkID8gX2lkIDogXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBhZGRXYWxsU3BhY2Uod2FsbEluZGV4OiBudW1iZXIsIG9wZXJhdGlvbjogXCJpbmNyZW1lbnRcIiB8IFwiZGVjcmVtZW50XCIpIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNsaWNrZWRXYWxsTnVtYmVyID0gd2FsbEluZGV4ICsgMTtcclxuICAgIGNvbnN0IG1tVG9GZWV0ID0gMzA1O1xyXG4gICAgY29uc3QgZml4dHVyZUhlaWdodCA9IDE1MjQgLyBtbVRvRmVldDsgLy8gfjUgZnQgKGhvcml6b250YWwgaW5jcmVtZW50KVxyXG4gICAgY29uc3QgZml4dHVyZVdpZHRoID0gMTIyMCAvIG1tVG9GZWV0OyAvLyB+NCBmdCAodmVydGljYWwgaW5jcmVtZW50KVxyXG5cclxuICAgIGNvbnN0IGxheW91dCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb247XHJcblxyXG4gICAgY29uc3QgZ2V0V2FsbCA9IChudW06IG51bWJlcikgPT5cclxuICAgICAgbGF5b3V0LmZpbmQoXHJcbiAgICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbC5lbGVtZW50TnVtYmVyID09PSBudW0sXHJcbiAgICAgICk7XHJcblxyXG4gICAgY29uc3QgYW1vdW50ID0gb3BlcmF0aW9uID09PSBcImluY3JlbWVudFwiID8gMSA6IC0xO1xyXG5cclxuICAgIGNvbnN0IHcxID0gZ2V0V2FsbCgxKTtcclxuICAgIGNvbnN0IHcyID0gZ2V0V2FsbCgyKTtcclxuICAgIGNvbnN0IHczID0gZ2V0V2FsbCgzKTtcclxuICAgIGNvbnN0IHc0ID0gZ2V0V2FsbCg0KTtcclxuICAgIGNvbnN0IHc1ID0gZ2V0V2FsbCg1KTtcclxuICAgIGNvbnN0IGVudHJhbmNlID0gbGF5b3V0LmZpbmQoKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIpO1xyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIEhvcml6b250YWwgZ3Jvd3RoICAoV2FsbC0xIC8gV2FsbC0zKVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKGNsaWNrZWRXYWxsTnVtYmVyID09PSAxIHx8IGNsaWNrZWRXYWxsTnVtYmVyID09PSAzKSB7XHJcbiAgICAgIGlmICh3MSkgdzEuZGlzdGFuY2UgKz0gYW1vdW50ICogZml4dHVyZVdpZHRoO1xyXG4gICAgICBpZiAodzMpIHczLmRpc3RhbmNlICs9IGFtb3VudCAqIGZpeHR1cmVXaWR0aDtcclxuXHJcbiAgICAgIGlmICh3Mikge1xyXG4gICAgICAgIHcyLmZpeHR1cmVzLmZvckVhY2goKGZ4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGZ4LnJlbGF0aXZlUG9zaXRpb24ueCA9XHJcbiAgICAgICAgICAgIChmeC5yZWxhdGl2ZVBvc2l0aW9uLnggfHwgMCkgKyBhbW91bnQgKiBmaXh0dXJlV2lkdGg7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBWZXJ0aWNhbCBncm93dGggIChXYWxsLTIgLyBXYWxsLTQgLyBXYWxsLTUpXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAoXHJcbiAgICAgIGNsaWNrZWRXYWxsTnVtYmVyID09PSAyIHx8XHJcbiAgICAgIGNsaWNrZWRXYWxsTnVtYmVyID09PSA0IHx8XHJcbiAgICAgIGNsaWNrZWRXYWxsTnVtYmVyID09PSA1XHJcbiAgICApIHtcclxuICAgICAgaWYgKHcyKSB3Mi5kaXN0YW5jZSArPSBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0O1xyXG5cclxuICAgICAgaWYgKHczKSB7XHJcbiAgICAgICAgdzMuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZngucmVsYXRpdmVQb3NpdGlvbi55ID1cclxuICAgICAgICAgICAgKGZ4LnJlbGF0aXZlUG9zaXRpb24ueSB8fCAwKSArIGFtb3VudCAqIGZpeHR1cmVIZWlnaHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGVudHJhbmNlWSA9IGVudHJhbmNlPy5kaXN0YW5jZSB8fCAwO1xyXG4gICAgICBjb25zdCBleGlzdGluZ1c0ID0gdzQ/LmRpc3RhbmNlIHx8IDA7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nVzUgPSB3NT8uZGlzdGFuY2UgfHwgMDtcclxuXHJcbiAgICAgIC8vIEdyb3cgd2FsbC00IGlmIHdlIGNsaWNrZWQgd2FsbC00IE9SIHdhbGwtMlxyXG4gICAgICBpZiAoKGNsaWNrZWRXYWxsTnVtYmVyID09PSA0IHx8IGNsaWNrZWRXYWxsTnVtYmVyID09PSAyKSAmJiB3NCkge1xyXG4gICAgICAgIHc0LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKGV4aXN0aW5nVzQgKyBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gR3JvdyB3YWxsLTUgaWYgd2UgY2xpY2tlZCB3YWxsLTUgT1Igd2FsbC0yXHJcbiAgICAgIGlmICgoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDUgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIpICYmIHc1KSB7XHJcbiAgICAgICAgdzUuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28oZXhpc3RpbmdXNSArIGFtb3VudCAqIGZpeHR1cmVIZWlnaHQpO1xyXG5cclxuICAgICAgICBpZiAodzQpIHtcclxuICAgICAgICAgIHc0LmZpeHR1cmVzLmZvckVhY2goKGZ4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgZngucmVsYXRpdmVQb3NpdGlvbi55ID1cclxuICAgICAgICAgICAgICAoZngucmVsYXRpdmVQb3NpdGlvbi55IHx8IDApICsgYW1vdW50ICogZml4dHVyZUhlaWdodDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJldmVudCBvdmVyZmxvdzogc2hyaW5rIGJhY2sgaWYgdG90YWwgPiB3MiBzaXplXHJcbiAgICAgIGNvbnN0IHRvdGFsVXNlZCA9IGVudHJhbmNlWSArICh3ND8uZGlzdGFuY2UgfHwgMCkgKyAodzU/LmRpc3RhbmNlIHx8IDApO1xyXG4gICAgICBpZiAodG90YWxVc2VkID4gdzIhLmRpc3RhbmNlKSB7XHJcbiAgICAgICAgaWYgKHc1KSB7XHJcbiAgICAgICAgICB3NS5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhcclxuICAgICAgICAgICAgdzUuZGlzdGFuY2UgLSAodG90YWxVc2VkIC0gdzIhLmRpc3RhbmNlKSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVGaXh0dXJlKFxyXG4gICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLFxyXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXHJcbiAgICB3YWxsSW5kZXg/OiBudW1iZXIsXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghKS5yZW1vdmVBdChmaXh0dXJlSW5kZXgpO1xyXG5cclxuICAgICAgY29uc3Qgd2FsbCA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKTtcclxuICAgICAgaWYgKHdhbGwgJiYgQXJyYXkuaXNBcnJheSh3YWxsLmZpeHR1cmVzKSkge1xyXG4gICAgICAgIHdhbGwuZml4dHVyZXMuc3BsaWNlKGZpeHR1cmVJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLnJlbW92ZUF0KGZpeHR1cmVJbmRleCk7XHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKSkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuc3BsaWNlKGZpeHR1cmVJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlT3RoZXJFbGVtZW50KFxyXG4gICAgZWxlbWVudFR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLFxyXG4gICAgZWxlbWVudEluZGV4OiBudW1iZXIsXHJcbiAgICB3YWxsSW5kZXg/OiBudW1iZXIsXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICB0aGlzLmdldFdhbGxPdGhlckVsZW1lbnRzKHdhbGxJbmRleCEpLnJlbW92ZUF0KGVsZW1lbnRJbmRleCk7XHJcblxyXG4gICAgICBjb25zdCB3YWxsID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG4gICAgICBpZiAod2FsbCAmJiBBcnJheS5pc0FycmF5KHdhbGwub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgICB3YWxsLm90aGVyRWxlbWVudHMuc3BsaWNlKGVsZW1lbnRJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZWxlbWVudFR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICB0aGlzLmdldEZvcm1GbG9vck90aGVyRWxlbWVudHMucmVtb3ZlQXQoZWxlbWVudEluZGV4KTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMpKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cy5zcGxpY2UoZWxlbWVudEluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRml4dHVyZVRlbXBsYXRlKFxyXG4gICAgY29uZmlnSWQ6IHN0cmluZyxcclxuICAgIGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIixcclxuICAgIGZpeHR1cmVJbmRleDogbnVtYmVyLFxyXG4gICAgd2FsbEluZGV4PzogbnVtYmVyLFxyXG4gICkge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5nZXRGaXh0dXJlVGVtcGxhdGUoY29uZmlnSWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlSWQgPSBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgICAgICAgICAgZml4dHVyZU5hbWU6IHRlbXBsYXRlRGF0YS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghKS5zZXRDb250cm9sKFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVJbmRleCxcclxuICAgICAgICAgICAgICBmaXh0dXJlR3JvdXAsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRlbXBsYXRlRGF0YSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHdhbGxSZWYgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSkhO1xyXG4gICAgICAgICAgICB3YWxsUmVmLmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgLi4ud2FsbFJlZi5maXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgIC4uLmZpeHR1cmVEYXRhLFxyXG4gICAgICAgICAgICAgIHVuc2F2ZWRDaGFuZ2VzOiB0cnVlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlSWQgPSBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgICAgICAgICAgZml4dHVyZU5hbWU6IHRlbXBsYXRlRGF0YS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5zZXRDb250cm9sKFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVJbmRleCxcclxuICAgICAgICAgICAgICBmaXh0dXJlR3JvdXAsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRlbXBsYXRlRGF0YSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgLi4uZml4dHVyZURhdGEsXHJcbiAgICAgICAgICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBmZXRjaCB0ZW1wbGF0ZXNcIik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoXHJcbiAgICBldmVudDogYW55LFxyXG4gICAgZGVzdGluYXRpb25XYWxsSW5kZXg6IG51bWJlciB8IFwiZmxvb3JcIixcclxuICAgIGRlc3RpbmF0aW9uRml4dHVyZUluZGV4PzogbnVtYmVyLFxyXG4gICkge1xyXG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGE7XHJcblxyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgaXNTb3VyY2VGbG9vciA9IGRhdGEud2FsbEluZGV4ID09PSBcImZsb29yXCI7XHJcbiAgICBjb25zdCBpc0Rlc3RpbmF0aW9uRmxvb3IgPSBkZXN0aW5hdGlvbldhbGxJbmRleCA9PT0gXCJmbG9vclwiO1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZUZvcm1BcnJheTogRm9ybUFycmF5ID0gaXNTb3VyY2VGbG9vclxyXG4gICAgICA/IHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXNcclxuICAgICAgOiB0aGlzLmdldEZvcm1GaXh0dXJlcyhkYXRhLndhbGxJbmRleCk7XHJcblxyXG4gICAgY29uc3QgZGVzdGluYXRpb25Gb3JtQXJyYXk6IEZvcm1BcnJheSA9IGlzRGVzdGluYXRpb25GbG9vclxyXG4gICAgICA/IHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXNcclxuICAgICAgOiB0aGlzLmdldEZvcm1GaXh0dXJlcyhkZXN0aW5hdGlvbldhbGxJbmRleCBhcyBudW1iZXIpO1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZVdhbGxNZXRhID0gaXNTb3VyY2VGbG9vclxyXG4gICAgICA/IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVcclxuICAgICAgOiAodGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1XYWxscy5hdChkYXRhLndhbGxJbmRleCkuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWUsXHJcbiAgICAgICAgKT8uZml4dHVyZXMgPz8gW10pO1xyXG5cclxuICAgIGNvbnN0IGRlc3RpbmF0aW9uV2FsbE1ldGEgPSBpc0Rlc3RpbmF0aW9uRmxvb3JcclxuICAgICAgPyB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgICAgIDogKHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKFxyXG4gICAgICAgICAgdGhpcy5nZXRGb3JtV2FsbHNcclxuICAgICAgICAgICAgLmF0KGRlc3RpbmF0aW9uV2FsbEluZGV4IGFzIG51bWJlcilcclxuICAgICAgICAgICAgLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlLFxyXG4gICAgICAgICk/LmZpeHR1cmVzID8/IFtdKTtcclxuXHJcbiAgICBjb25zdCBzRml4dHVyZUluZGV4ID0gc291cmNlV2FsbE1ldGEuZmluZEluZGV4KFxyXG4gICAgICAoZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIGZpeHR1cmUuX2lkID09PVxyXG4gICAgICAgIHNvdXJjZUZvcm1BcnJheS5hdChkYXRhLmZpeHR1cmVJbmRleCk/LmdldChcIl9pZFwiKT8udmFsdWUsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGRGaXh0dXJlSW5kZXggPVxyXG4gICAgICBkZXN0aW5hdGlvbkZpeHR1cmVJbmRleCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyBkZXN0aW5hdGlvbldhbGxNZXRhLmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgICBmaXh0dXJlLl9pZCA9PT1cclxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5hdChkZXN0aW5hdGlvbkZpeHR1cmVJbmRleCk/LmdldChcIl9pZFwiKVxyXG4gICAgICAgICAgICAgICAgPy52YWx1ZSxcclxuICAgICAgICAgIClcclxuICAgICAgICA6IGRlc3RpbmF0aW9uRm9ybUFycmF5Lmxlbmd0aDtcclxuXHJcbiAgICBjb25zdCBzUG9zaXRpb24gPSB7XHJcbiAgICAgIGZpeHR1cmVOdW1iZXI6IHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIsXHJcbiAgICAgIGFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjpcclxuICAgICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgZFBvc2l0aW9uID0ge1xyXG4gICAgICBmaXh0dXJlTnVtYmVyOiBkZXN0aW5hdGlvbldhbGxNZXRhW2RGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIsXHJcbiAgICAgIGFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjpcclxuICAgICAgICBkZXN0aW5hdGlvbldhbGxNZXRhW2RGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHNvdXJjZVdhbGxNZXRhID09PSBkZXN0aW5hdGlvbldhbGxNZXRhKSB7XHJcbiAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlciA9XHJcbiAgICAgICAgc1Bvc2l0aW9uLmZpeHR1cmVOdW1iZXI7XHJcbiAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAgICAgICBzUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyID0gZFBvc2l0aW9uLmZpeHR1cmVOdW1iZXI7XHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9XHJcbiAgICAgICAgZFBvc2l0aW9uLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIgPSBkUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAgICAgICBkUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHJhbnNmZXJBcnJheUl0ZW0oXHJcbiAgICAgIHNvdXJjZUZvcm1BcnJheS5jb250cm9scyxcclxuICAgICAgZGVzdGluYXRpb25Gb3JtQXJyYXkuY29udHJvbHMsXHJcbiAgICAgIGRhdGEuZml4dHVyZUluZGV4LFxyXG4gICAgICBkRml4dHVyZUluZGV4LFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnRyYW5zZmVyQXJyYXlJdGVtKFxyXG4gICAgICBzb3VyY2VXYWxsTWV0YSxcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YSxcclxuICAgICAgc0ZpeHR1cmVJbmRleCxcclxuICAgICAgZEZpeHR1cmVJbmRleCxcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZENhbnZhcygpIHtcclxuICAgIGlmICghdGhpcy5jYW52YXMpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBvcmlnaW5hbFZpZXdwb3J0ID0gW1xyXG4gICAgICAuLi50aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSEsXHJcbiAgICBdIGFzIGZhYnJpYy5UTWF0MkQ7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuc2V0Vmlld3BvcnRUcmFuc2Zvcm0oWzEsIDAsIDAsIDEsIDAsIDBdKTtcclxuXHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoKTtcclxuXHJcbiAgICBjb25zdCBkYXRhVVJMID0gdGhpcy5jYW52YXMudG9EYXRhVVJMKHtcclxuICAgICAgZm9ybWF0OiBcInBuZ1wiLFxyXG4gICAgICBsZWZ0OiBib3VuZHMubGVmdCxcclxuICAgICAgdG9wOiBib3VuZHMudG9wLFxyXG4gICAgICB3aWR0aDogYm91bmRzLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQsXHJcbiAgICAgIG11bHRpcGxpZXI6IDIsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5zZXRWaWV3cG9ydFRyYW5zZm9ybShvcmlnaW5hbFZpZXdwb3J0KTtcclxuXHJcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICBsaW5rLmhyZWYgPSBkYXRhVVJMO1xyXG4gICAgbGluay5kb3dubG9hZCA9IGAke3RoaXMucGxhbm9EYXRhLnN0b3JlTmFtZX1fJHt0aGlzLmZsb29yRGF0YS5mbG9vck5hbWV9LnBuZ2A7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUV4cG9ydExheW91dEJhY2tncm91bmQoKSB7XHJcbiAgICBjb25zdCBwb2ludHMgPSB0aGlzLmJ1aWxkTGF5b3V0UG9seWdvbkZyb21XYWxscygpO1xyXG5cclxuICAgIHJldHVybiBuZXcgZmFicmljLlBvbHlnb24ocG9pbnRzLCB7XHJcbiAgICAgIGZpbGw6IFwiI2VhZWNmMFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIG9iamVjdENhY2hpbmc6IGZhbHNlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkTGF5b3V0UG9seWdvbkZyb21XYWxscygpIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgIC5maWx0ZXIoKHc6IGFueSkgPT4gdy5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpXHJcbiAgICAgIC5tYXAoKHc6IGFueSkgPT4gKHtcclxuICAgICAgICB4OiB0aGlzLnRvUGl4ZWxzKHcucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpLFxyXG4gICAgICAgIHk6IHRoaXMudG9QaXhlbHMody5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIiksXHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHJvdGF0ZVdhbGwoZWxlTnVtYmVyOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlbDogYW55KSA9PiBlbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWwuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyLFxyXG4gICAgKTtcclxuICAgIGlmICh3YWxsLmFuZ2xlICsgOTAgPCAzNjApIHtcclxuICAgICAgd2FsbC5hbmdsZSArPSA5MDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdhbGwuYW5nbGUgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICB9XHJcblxyXG4gIGFkZE5ld1dhbGwoZWxlTnVtYmVyOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGdldFdhbGxFbmRQb2ludCA9ICh3YWxsOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgYW5nbGVSYWQgPSAod2FsbC5hbmdsZSAqIE1hdGguUEkpIC8gMTgwO1xyXG4gICAgICBjb25zdCBsZW5ndGggPSB3YWxsLmRpc3RhbmNlO1xyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB4OiB3YWxsLnJlbGF0aXZlUG9zaXRpb24ueCArIGxlbmd0aCAqIE1hdGguY29zKGFuZ2xlUmFkKSxcclxuICAgICAgICB5OiB3YWxsLnJlbGF0aXZlUG9zaXRpb24ueSArIGxlbmd0aCAqIE1hdGguc2luKGFuZ2xlUmFkKSxcclxuICAgICAgICB1bml0OiB3YWxsLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmRJbmRleChcclxuICAgICAgKHc6IGFueSkgPT4gdy5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgdy5lbGVtZW50TnVtYmVyID09PSBlbGVOdW1iZXIsXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChpbmRleCA9PT0gLTEgJiYgZWxlTnVtYmVyICE9PSAwKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHN0YXJ0UG9zaXRpb247XHJcblxyXG4gICAgaWYgKGVsZU51bWJlciA9PT0gMCkge1xyXG4gICAgICBzdGFydFBvc2l0aW9uID0ge1xyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMCxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwcmV2V2FsbCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25baW5kZXhdO1xyXG4gICAgICBzdGFydFBvc2l0aW9uID0gZ2V0V2FsbEVuZFBvaW50KHByZXZXYWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiYXNlV2FsbCA9XHJcbiAgICAgIGVsZU51bWJlciA9PT0gMFxyXG4gICAgICAgID8geyBhbmdsZTogMCwgZGlyZWN0aW9uOiBcInJpZ2h0XCIsIHVuaXQ6IFwiZnRcIiB9XHJcbiAgICAgICAgOiB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuXHJcbiAgICBjb25zdCBuZXdXYWxsID0ge1xyXG4gICAgICBlbGVtZW50VHlwZTogXCJ3YWxsXCIsXHJcbiAgICAgIGRpc3RhbmNlOiAxNSxcclxuICAgICAgdW5pdDogYmFzZVdhbGwudW5pdCxcclxuICAgICAgZGlyZWN0aW9uOiBiYXNlV2FsbC5kaXJlY3Rpb24sXHJcbiAgICAgIGFuZ2xlOiBiYXNlV2FsbC5hbmdsZSxcclxuICAgICAgZWxlbWVudE51bWJlcjogZWxlTnVtYmVyICsgMSxcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjogc3RhcnRQb3NpdGlvbixcclxuICAgICAgZml4dHVyZXM6IFtdLFxyXG4gICAgICBvdGhlckVsZW1lbnRzOiBbXSxcclxuICAgICAgbmV3QWRkZWQ6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uc3BsaWNlKFxyXG4gICAgICBlbGVOdW1iZXIgPT09IDAgPyAwIDogaW5kZXggKyAxLFxyXG4gICAgICAwLFxyXG4gICAgICBuZXdXYWxsLFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxFbGVtZW50TnVtYmVyKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxDb29yZGluYXRlcygpO1xyXG4gICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICB9XHJcblxyXG4gIGFkZE5ld0VudHJhbmNlKCkge1xyXG4gICAgY29uc3QgbGF5b3V0UG9seWdvbiA9IHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uID8/IFtdO1xyXG4gICAgY29uc3QgZWxlTnVtYmVyID1cclxuICAgICAgbGF5b3V0UG9seWdvbi5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIilcclxuICAgICAgICA/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgIGNvbnN0IGdhcFB4ID0gMjQ7XHJcbiAgICBjb25zdCBkZWZhdWx0RW50cmFuY2VXaWR0aFB4ID0gODA7XHJcblxyXG4gICAgbGV0IHhGdCA9IDA7XHJcbiAgICBsZXQgeUZ0ID0gMDtcclxuICAgIGxldCBhbmdsZSA9IDA7XHJcbiAgICBsZXQgaXNQb3NpdGlvblJlc29sdmVkID0gZmFsc2U7XHJcblxyXG4gICAgLy8gMSkgSWYgZW50cmFuY2UocykgYWxyZWFkeSBleGlzdCwgcGxhY2UgbmV4dCB0byB0aGUgbGF0ZXN0IG9uZS5cclxuICAgIGNvbnN0IGV4aXN0aW5nRW50cmFuY2VPYmplY3RzID0gKHRoaXMuY2FudmFzPy5nZXRPYmplY3RzKCkgPz8gW10pXHJcbiAgICAgIC5maWx0ZXIoKG9iajogYW55KSA9PiBvYmo/Lm9ialR5cGUgPT09IFwiZW50cmFuY2VcIilcclxuICAgICAgLnNvcnQoXHJcbiAgICAgICAgKGE6IGFueSwgYjogYW55KSA9PlxyXG4gICAgICAgICAgTnVtYmVyKGE/LmRhdGE/LmVsZW1lbnROdW1iZXIgfHwgMCkgLVxyXG4gICAgICAgICAgTnVtYmVyKGI/LmRhdGE/LmVsZW1lbnROdW1iZXIgfHwgMCksXHJcbiAgICAgICk7XHJcblxyXG4gICAgY29uc3QgbGF0ZXN0RW50cmFuY2VPYmogPSBleGlzdGluZ0VudHJhbmNlT2JqZWN0cy5hdCgtMSkgYXMgYW55O1xyXG5cclxuICAgIGlmIChsYXRlc3RFbnRyYW5jZU9iaikge1xyXG4gICAgICBjb25zdCBsZWZ0UHggPSBsYXRlc3RFbnRyYW5jZU9iai5sZWZ0ID8/IDA7XHJcbiAgICAgIGNvbnN0IHRvcFB4ID0gbGF0ZXN0RW50cmFuY2VPYmoudG9wID8/IDA7XHJcbiAgICAgIGNvbnN0IHdpZHRoUHggPVxyXG4gICAgICAgIGxhdGVzdEVudHJhbmNlT2JqLmdldFNjYWxlZFdpZHRoPy4oKSB8fCBkZWZhdWx0RW50cmFuY2VXaWR0aFB4O1xyXG4gICAgICBjb25zdCBhbmNob3JBbmdsZSA9IE51bWJlcihsYXRlc3RFbnRyYW5jZU9iai5hbmdsZSB8fCAwKTtcclxuICAgICAgY29uc3QgYW5nbGVSYWQgPSAoYW5jaG9yQW5nbGUgKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgICAgY29uc3Qgc3RlcFB4ID0gd2lkdGhQeCArIGdhcFB4O1xyXG5cclxuICAgICAgeEZ0ID0gdGhpcy5mcm9tUGl4ZWxzKGxlZnRQeCArIHN0ZXBQeCAqIE1hdGguY29zKGFuZ2xlUmFkKSwgXCJmdFwiKTtcclxuICAgICAgeUZ0ID0gdGhpcy5mcm9tUGl4ZWxzKHRvcFB4ICsgc3RlcFB4ICogTWF0aC5zaW4oYW5nbGVSYWQpLCBcImZ0XCIpO1xyXG4gICAgICBhbmdsZSA9IGFuY2hvckFuZ2xlO1xyXG4gICAgICBpc1Bvc2l0aW9uUmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNQb3NpdGlvblJlc29sdmVkKSB7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nRW50cmFuY2VzID0gbGF5b3V0UG9seWdvblxyXG4gICAgICAgIC5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIilcclxuICAgICAgICAuc29ydChcclxuICAgICAgICAgIChhOiBhbnksIGI6IGFueSkgPT5cclxuICAgICAgICAgICAgTnVtYmVyKGE/LmVsZW1lbnROdW1iZXIgfHwgMCkgLSBOdW1iZXIoYj8uZWxlbWVudE51bWJlciB8fCAwKSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgY29uc3QgbGF0ZXN0RW50cmFuY2UgPSBleGlzdGluZ0VudHJhbmNlcy5hdCgtMSk7XHJcbiAgICAgIGlmIChsYXRlc3RFbnRyYW5jZSkge1xyXG4gICAgICAgIGNvbnN0IGFuY2hvckFuZ2xlID0gTnVtYmVyKGxhdGVzdEVudHJhbmNlPy5hbmdsZSB8fCAwKTtcclxuICAgICAgICBjb25zdCBhbmdsZVJhZCA9IChhbmNob3JBbmdsZSAqIE1hdGguUEkpIC8gMTgwO1xyXG4gICAgICAgIGNvbnN0IHN0ZXBGdCA9XHJcbiAgICAgICAgICBOdW1iZXIoXHJcbiAgICAgICAgICAgIGxhdGVzdEVudHJhbmNlPy5kaXN0YW5jZSB8fFxyXG4gICAgICAgICAgICAgIHRoaXMuZnJvbVBpeGVscyhkZWZhdWx0RW50cmFuY2VXaWR0aFB4LCBcImZ0XCIpLFxyXG4gICAgICAgICAgKSArIHRoaXMuZnJvbVBpeGVscyhnYXBQeCwgXCJmdFwiKTtcclxuXHJcbiAgICAgICAgeEZ0ID1cclxuICAgICAgICAgIE51bWJlcihsYXRlc3RFbnRyYW5jZT8ucmVsYXRpdmVQb3NpdGlvbj8ueCB8fCAwKSArXHJcbiAgICAgICAgICBzdGVwRnQgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcbiAgICAgICAgeUZ0ID1cclxuICAgICAgICAgIE51bWJlcihsYXRlc3RFbnRyYW5jZT8ucmVsYXRpdmVQb3NpdGlvbj8ueSB8fCAwKSArXHJcbiAgICAgICAgICBzdGVwRnQgKiBNYXRoLnNpbihhbmdsZVJhZCk7XHJcbiAgICAgICAgYW5nbGUgPSBhbmNob3JBbmdsZTtcclxuICAgICAgICBpc1Bvc2l0aW9uUmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMikgSWYgbm8gZW50cmFuY2UsIHBsYWNlIG5leHQgdG8gd2FsbC0xLlxyXG4gICAgaWYgKCFpc1Bvc2l0aW9uUmVzb2x2ZWQpIHtcclxuICAgICAgY29uc3Qgd2FsbDEgPSBsYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgKGVsZTogYW55KSA9PlxyXG4gICAgICAgICAgZWxlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBOdW1iZXIoZWxlLmVsZW1lbnROdW1iZXIpID09PSAxLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHdhbGwxKSB7XHJcbiAgICAgICAgY29uc3Qgd2FsbEFuZ2xlID0gTnVtYmVyKHdhbGwxPy5hbmdsZSB8fCAwKTtcclxuICAgICAgICBjb25zdCB3YWxsQW5nbGVSYWQgPSAod2FsbEFuZ2xlICogTWF0aC5QSSkgLyAxODA7XHJcbiAgICAgICAgY29uc3QgYWxvbmdXYWxsRnQgPSBNYXRoLm1pbihOdW1iZXIod2FsbDE/LmRpc3RhbmNlIHx8IDApIC8gMiwgNCk7XHJcbiAgICAgICAgY29uc3Qgc2lkZU9mZnNldEZ0ID0gMS41O1xyXG4gICAgICAgIGNvbnN0IHdhbGxYID0gTnVtYmVyKHdhbGwxPy5yZWxhdGl2ZVBvc2l0aW9uPy54IHx8IDApO1xyXG4gICAgICAgIGNvbnN0IHdhbGxZID0gTnVtYmVyKHdhbGwxPy5yZWxhdGl2ZVBvc2l0aW9uPy55IHx8IDApO1xyXG5cclxuICAgICAgICB4RnQgPVxyXG4gICAgICAgICAgd2FsbFggK1xyXG4gICAgICAgICAgYWxvbmdXYWxsRnQgKiBNYXRoLmNvcyh3YWxsQW5nbGVSYWQpICtcclxuICAgICAgICAgIHNpZGVPZmZzZXRGdCAqIC1NYXRoLnNpbih3YWxsQW5nbGVSYWQpO1xyXG4gICAgICAgIHlGdCA9XHJcbiAgICAgICAgICB3YWxsWSArXHJcbiAgICAgICAgICBhbG9uZ1dhbGxGdCAqIE1hdGguc2luKHdhbGxBbmdsZVJhZCkgK1xyXG4gICAgICAgICAgc2lkZU9mZnNldEZ0ICogTWF0aC5jb3Mod2FsbEFuZ2xlUmFkKTtcclxuICAgICAgICBhbmdsZSA9IHdhbGxBbmdsZTtcclxuICAgICAgICBpc1Bvc2l0aW9uUmVzb2x2ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMykgSWYgbm8gd2FsbCAoZS5nLiBsYXlvdXRQb2x5Z29uIGlzIGVtcHR5KSwgcGxhY2UgbmV4dCB0byBhbnkgY2FudmFzIG9iamVjdC5cclxuICAgIGlmICghaXNQb3NpdGlvblJlc29sdmVkKSB7XHJcbiAgICAgIGNvbnN0IGFuY2hvck9iaiA9ICh0aGlzLmNhbnZhcz8uZ2V0T2JqZWN0cygpID8/IFtdKS5maW5kKChvYmo6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiAhIW9iaj8ub2JqVHlwZSAmJiBvYmo/LmlzRGlzc2VjdGlvbkxpbmUgIT09IHRydWU7XHJcbiAgICAgIH0pIGFzIGFueTtcclxuXHJcbiAgICAgIGlmIChhbmNob3JPYmopIHtcclxuICAgICAgICBjb25zdCBsZWZ0UHggPSBhbmNob3JPYmoubGVmdCA/PyAwO1xyXG4gICAgICAgIGNvbnN0IHRvcFB4ID0gYW5jaG9yT2JqLnRvcCA/PyAwO1xyXG4gICAgICAgIGNvbnN0IHdpZHRoUHggPSBhbmNob3JPYmouZ2V0U2NhbGVkV2lkdGg/LigpIHx8IGRlZmF1bHRFbnRyYW5jZVdpZHRoUHg7XHJcblxyXG4gICAgICAgIHhGdCA9IHRoaXMuZnJvbVBpeGVscyhsZWZ0UHggKyB3aWR0aFB4ICsgZ2FwUHgsIFwiZnRcIik7XHJcbiAgICAgICAgeUZ0ID0gdGhpcy5mcm9tUGl4ZWxzKHRvcFB4LCBcImZ0XCIpO1xyXG4gICAgICAgIGFuZ2xlID0gTnVtYmVyKGFuY2hvck9iaj8uYW5nbGUgfHwgMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdFbnRyYW5jZSA9IHtcclxuICAgICAgZWxlbWVudFR5cGU6IFwiZW50cmFuY2VcIixcclxuICAgICAgZGlzdGFuY2U6IDYsXHJcbiAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgZGlyZWN0aW9uOiBcInVwXCIsXHJcbiAgICAgIGFuZ2xlLFxyXG4gICAgICBlbGVtZW50TnVtYmVyOiBlbGVOdW1iZXIgKyAxLFxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7XHJcbiAgICAgICAgeDogeEZ0LFxyXG4gICAgICAgIHk6IHlGdCxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVzOiBbXSxcclxuICAgICAgb3RoZXJFbGVtZW50czogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24ucHVzaChuZXdFbnRyYW5jZSk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZE5ld0ZpeHR1cmUoZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLCB3YWxsSW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAgIGNvbnN0IHRlbXBsYXRlOiBhbnkgPSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlKHRoaXMuZml4dHVyZVRlbXBsYXRlc1swXS5faWQpO1xyXG4gICAgY29uc3QgdGVtcGxhdGVEYXRhID0gdGVtcGxhdGUuZGF0YTtcclxuICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgIGZpeHR1cmVOYW1lOiB0ZW1wbGF0ZURhdGEuZml4dHVyZU5hbWUsXHJcbiAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBmaXh0dXJlRGF0YSA9IHtcclxuICAgICAgLi4udGVtcGxhdGVEYXRhLFxyXG4gICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb246IHsgeDogMCwgeTogMCwgYW5nbGU6IDAsIHVuaXQ6IFwiZnRcIiB9LFxyXG4gICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgIG5ld0FkZGVkOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxEYXRhID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG5cclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3cCA9IHRoaXMuZnJvbVBpeGVscyh3LCBcImZ0XCIpO1xyXG5cclxuICAgICAgaWYgKHdhbGxEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeDAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICAgICAgY29uc3QgeTAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YS5hbmdsZSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcbiAgICAgICAgY29uc3QgY29zQSA9IE1hdGguY29zKGFuZ2xlUmFkKTtcclxuICAgICAgICBjb25zdCBzaW5BID0gTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICAvLyBQcm9qZWN0IGFsbCBleGlzdGluZyBmaXh0dXJlcyBvbnRvIHRoZSB3YWxsIGF4aXMgdG8gZ2V0IG9jY3VwaWVkIHJhbmdlcyAoaW4gZnQpLlxyXG4gICAgICAgIC8vIFByb2plY3Rpb24gcmVjb3ZlcnMgdCBjb3JyZWN0bHkgZXZlbiB3aXRoIHRoZSAxZnQgcGVycGVuZGljdWxhciBvZmZzZXQgYXBwbGllZFxyXG4gICAgICAgIC8vIGR1cmluZyBwbGFjZW1lbnQ6ICjiiJJzaW5Bwrdjb3NBICsgY29zQcK3c2luQSkgY2FuY2VscyB0byAwLlxyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRml4dHVyZXMgPSAod2FsbERhdGEuZml4dHVyZXMgfHwgW10pLmZpbHRlcihcclxuICAgICAgICAgIChmOiBhbnkpID0+IGYuZml4dHVyZU5hbWUgIT09IFwic3BhY2VcIixcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBvY2N1cGllZDogQXJyYXk8W251bWJlciwgbnVtYmVyXT4gPSBleGlzdGluZ0ZpeHR1cmVzLm1hcChcclxuICAgICAgICAgIChmOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZldpZHRoID0gdGhpcy5mcm9tUGl4ZWxzKFxyXG4gICAgICAgICAgICAgIHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgICAgICBmLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICBcImZ0XCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZIZWlnaHQgPSB0aGlzLmZyb21QaXhlbHMoXHJcbiAgICAgICAgICAgICAgdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgICAgIGYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgXCJmdFwiLFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgLy8gQ0FELXVwbG9hZGVkIGZpeHR1cmVzIG9uIGludmVydGVkIHdhbGxzICh3YWxsIGFuZ2xlIOKIiCAoOTDCsCwgMjcwwrApKVxyXG4gICAgICAgICAgICAvLyBoYXZlIHRoZWlyIHNhdmVkICh4LCB5KSBzaGlmdGVkIGJ5IFIod2FsbEFuZ2xlKcK3KHcsIGgpIHRvIGtlZXAgdGhlXHJcbiAgICAgICAgICAgIC8vIGNhbm9uaWNhbCB2aXN1YWwgYWZ0ZXIgYSAxODDCsCBib2R5IGZsaXAg4oCUIHNlZSBkcmF3Rml4dHVyZS4gVG9cclxuICAgICAgICAgICAgLy8gcmVjb3ZlciB0aGUgd2FsbC1heGlzIHBvc2l0aW9uIHRoZSBnYXAtZmluZGVyIG5lZWRzLCB1bnNoaWZ0IGFueVxyXG4gICAgICAgICAgICAvLyBmaXh0dXJlIHdob3NlIHNhdmVkIGFuZ2xlIGRpZmZlcnMgZnJvbSB0aGUgd2FsbCBhbmdsZSBieSB+MTgwwrAuXHJcbiAgICAgICAgICAgIGNvbnN0IGZBbmdsZSA9IChmLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPz8gMCkgYXMgbnVtYmVyO1xyXG4gICAgICAgICAgICBjb25zdCBhbmdsZURpZmYgPVxyXG4gICAgICAgICAgICAgICgoKChmQW5nbGUgLSBhbmdsZURlZykgJSAzNjApICsgMzYwKSAlIDM2MCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzRmxpcHBlZCA9IE1hdGguYWJzKGFuZ2xlRGlmZiAtIDE4MCkgPCAxO1xyXG5cclxuICAgICAgICAgICAgbGV0IHByb2pYID0gZi5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICAgICAgICAgIGxldCBwcm9qWSA9IGYucmVsYXRpdmVQb3NpdGlvbi55O1xyXG4gICAgICAgICAgICBpZiAoaXNGbGlwcGVkKSB7XHJcbiAgICAgICAgICAgICAgcHJvalggLT0gY29zQSAqIGZXaWR0aCAtIHNpbkEgKiBmSGVpZ2h0O1xyXG4gICAgICAgICAgICAgIHByb2pZIC09IHNpbkEgKiBmV2lkdGggKyBjb3NBICogZkhlaWdodDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdFN0YXJ0ID0gKHByb2pYIC0geDApICogY29zQSArIChwcm9qWSAtIHkwKSAqIHNpbkE7XHJcbiAgICAgICAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgdFN0YXJ0KSwgTWF0aC5tYXgoMCwgdFN0YXJ0KSArIGZXaWR0aF0gYXMgW1xyXG4gICAgICAgICAgICAgIG51bWJlcixcclxuICAgICAgICAgICAgICBudW1iZXIsXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIG9jY3VwaWVkLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKTtcclxuXHJcbiAgICAgICAgLy8gV2FsayBmcm9tIHdhbGwgc3RhcnQ7IGZpbmQgZmlyc3QgZ2FwIHRoYXQgZml0cyB0aGUgbmV3IGZpeHR1cmUuXHJcbiAgICAgICAgLy8gRVBTSUxPTiBhYnNvcmJzIGZsb2F0aW5nLXBvaW50IGRyaWZ0IGZyb20gcmVwZWF0ZWQgdW5pdCByb3VuZC10cmlwcy5cclxuICAgICAgICBjb25zdCBFUFNJTE9OID0gMC4wMDE7XHJcbiAgICAgICAgbGV0IHBsYWNlbWVudFQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGxldCBjdXJzb3IgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IFtyYW5nZVN0YXJ0LCByYW5nZUVuZF0gb2Ygb2NjdXBpZWQpIHtcclxuICAgICAgICAgIGlmIChyYW5nZVN0YXJ0IC0gY3Vyc29yID49IHdwIC0gRVBTSUxPTikge1xyXG4gICAgICAgICAgICBwbGFjZW1lbnRUID0gY3Vyc29yO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN1cnNvciA9IE1hdGgubWF4KGN1cnNvciwgcmFuZ2VFbmQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTm8gZ2FwIGZvdW5kIOKGkiBwbGFjZSBhZnRlciBsYXN0IGZpeHR1cmUuXHJcbiAgICAgICAgLy8gT3ZlcmZsb3cgYmV5b25kIHdhbGwgbGVuZ3RoIGlzIGludGVudGlvbmFsIHBlciByZXF1aXJlbWVudHMuXHJcbiAgICAgICAgaWYgKHBsYWNlbWVudFQgPT09IG51bGwpIHtcclxuICAgICAgICAgIHBsYWNlbWVudFQgPSBjdXJzb3I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmeCA9IHgwICsgcGxhY2VtZW50VCAqIGNvc0E7XHJcbiAgICAgICAgY29uc3QgZnkgPSB5MCArIHBsYWNlbWVudFQgKiBzaW5BO1xyXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDAuOTtcclxuICAgICAgICBjb25zdCBmeF9vZmZzZXQgPSBmeCArIG9mZnNldCAqIC1zaW5BO1xyXG4gICAgICAgIGNvbnN0IGZ5X29mZnNldCA9IGZ5ICsgb2Zmc2V0ICogY29zQTtcclxuXHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi54ID0gZnhfb2Zmc2V0O1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24ueSA9IGZ5X29mZnNldDtcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gYW5nbGVEZWc7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSB3YWxsIGFuZ2xlIHB1dHMgdGhlIGZpeHR1cmUgaW4gdGhlIHVwc2lkZS1kb3duIHJhbmdlLCBiYWtlXHJcbiAgICAgICAgLy8gdGhlIHNhbWUgMTgwwrAgYm9keSBmbGlwIGRyYXdGaXh0dXJlIGFwcGxpZXMgZHVyaW5nIENBRCBmaXJzdC1yZW5kZXJcclxuICAgICAgICAvLyAoc2hpZnQgYW5jaG9yIGJ5IFIod2FsbEFuZ2xlKcK3KHcsIGgpIGFuZCByb3RhdGUgKzE4MMKwKS4gZHJhd0ZpeHR1cmUnc1xyXG4gICAgICAgIC8vIG93biBmbGlwIHBhdGggaXMgZ2F0ZWQgb24gY2FkTGF5b3V0PXRydWUsIHNvIGZvciBmaXh0dXJlcyBhZGRlZFxyXG4gICAgICAgIC8vIHBvc3QtQ0FEIHZpYSB0aGUgc2lkZSBwYW5lbCB3ZSBoYXZlIHRvIGJha2UgdGhlIGZsaXAgaGVyZSDigJQgaXRcclxuICAgICAgICAvLyBtYWtlcyB0aGUgbmV3IGZpeHR1cmUgbGFuZCBjYW5vbmljYWwgaW5zdGVhZCBvZiB1cHNpZGUtZG93bi5cclxuICAgICAgICBjb25zdCBub3JtV2FsbEFuZ2xlID0gKCgoYW5nbGVEZWcgJSAzNjApICsgMzYwKSAlIDM2MCk7XHJcbiAgICAgICAgaWYgKG5vcm1XYWxsQW5nbGUgPiA5MCAmJiBub3JtV2FsbEFuZ2xlIDwgMjcwKSB7XHJcbiAgICAgICAgICBjb25zdCB3aWR0aEZ0ID0gdGhpcy5mcm9tUGl4ZWxzKFxyXG4gICAgICAgICAgICB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgXCJmdFwiLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGhlaWdodEZ0ID0gdGhpcy5mcm9tUGl4ZWxzKFxyXG4gICAgICAgICAgICB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBcImZ0XCIsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi54ID1cclxuICAgICAgICAgICAgZnhfb2Zmc2V0ICsgY29zQSAqIHdpZHRoRnQgLSBzaW5BICogaGVpZ2h0RnQ7XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICBmeV9vZmZzZXQgKyBzaW5BICogd2lkdGhGdCArIGNvc0EgKiBoZWlnaHRGdDtcclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBhbmdsZURlZyArIDE4MDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICh0aGlzLmdldEZvcm1XYWxscy5hdCh3YWxsSW5kZXghKS5nZXQoXCJmaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgZml4dHVyZUdyb3VwLFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk/LmZpeHR1cmVzLnB1c2goZml4dHVyZURhdGEpO1xyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVXaWR0aFB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0UHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gTi1zaGFwZSBncmlkIHBsYWNlbWVudDogY29sIGZpbGxzIGxlZnQtdG8tcmlnaHQsIGVhY2ggY29sdW1uIGZpbGxzIGJvdHRvbSByb3cgKHJvdz0xKSBmaXJzdCB0aGVuIHRvcCByb3cgKHJvdz0wKVxyXG4gICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUubGVuZ3RoO1xyXG4gICAgICBjb25zdCBuZXdDb2wgPSBNYXRoLmZsb29yKG5ld0luZGV4IC8gMik7XHJcbiAgICAgIGNvbnN0IG5ld1JvdyA9IG5ld0luZGV4ICUgMiA9PT0gMCA/IDEgOiAwO1xyXG5cclxuICAgICAgbGV0IGdyaWRPcmlnaW5YOiBudW1iZXI7XHJcbiAgICAgIGxldCBncmlkT3JpZ2luWTogbnVtYmVyO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIFJlY292ZXIgZ3JpZCBvcmlnaW4gZnJvbSBmaXh0dXJlIGF0IGluZGV4IDAgKGFsd2F5cyBwbGFjZWQgYXQgcm93PTEsIGNvbD0wKVxyXG4gICAgICAgIGNvbnN0IGYwID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVswXTtcclxuICAgICAgICBjb25zdCBmMHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgZjAucmVsYXRpdmVQb3NpdGlvbi54LFxyXG4gICAgICAgICAgZjAucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZjB5ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGYwLnJlbGF0aXZlUG9zaXRpb24ueSxcclxuICAgICAgICAgIGYwLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGYwIGlzIGF0IHJvdz0xIOKGkiBncmlkT3JpZ2luWSA9IGYweSAtIDEgKiBmaXh0dXJlSGVpZ2h0UHg7IGNvbD0wIOKGkiBncmlkT3JpZ2luWCA9IGYweFxyXG4gICAgICAgIGdyaWRPcmlnaW5YID0gZjB4O1xyXG4gICAgICAgIGdyaWRPcmlnaW5ZID0gZjB5IC0gZml4dHVyZUhlaWdodFB4O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIE5vIGV4aXN0aW5nIGNlbnRlciBmaXh0dXJlcyDigJQgZmluZCBiZXN0IGdyaWQgb3JpZ2luIHZpYSBwb2x5Z29uIHNjYW4gKHNhbWUgYXMgZHJhd0xheW91dEVsZW1lbnRzKVxyXG4gICAgICAgIGNvbnN0IGxheW91dFBvbHlnb24gPSB0aGlzLmJ1aWxkTGF5b3V0UG9seWdvbkZyb21XYWxscygpO1xyXG4gICAgICAgIGNvbnN0IG9jY3VwaWVkUmVjdHMgPSB0aGlzLmdldE9jY3VwaWVkUmVjdHMoKTtcclxuICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoKTtcclxuXHJcbiAgICAgICAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgMiByb3dzIGFuZCAxIGNvbHVtbiBhcyB0aGUgc3RhcnRpbmcgZ3JpZCBmb290cHJpbnRcclxuICAgICAgICBjb25zdCBncmlkVyA9IGZpeHR1cmVXaWR0aFB4O1xyXG4gICAgICAgIGNvbnN0IGdyaWRIID0gMiAqIGZpeHR1cmVIZWlnaHRQeDtcclxuXHJcbiAgICAgICAgY29uc3QgY2VudGVyWCA9IGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBjZW50ZXJZID0gYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLyAyO1xyXG5cclxuICAgICAgICBjb25zdCBmaXRzSW5Qb2x5Z29uID0gKHg6IG51bWJlciwgeTogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgdGhpcy5pc1BvaW50SW5zaWRlUG9seWdvbih7IHgsIHkgfSwgbGF5b3V0UG9seWdvbikgJiZcclxuICAgICAgICAgIHRoaXMuaXNQb2ludEluc2lkZVBvbHlnb24oeyB4OiB4ICsgZ3JpZFcsIHkgfSwgbGF5b3V0UG9seWdvbikgJiZcclxuICAgICAgICAgIHRoaXMuaXNQb2ludEluc2lkZVBvbHlnb24oeyB4LCB5OiB5ICsgZ3JpZEggfSwgbGF5b3V0UG9seWdvbikgJiZcclxuICAgICAgICAgIHRoaXMuaXNQb2ludEluc2lkZVBvbHlnb24oXHJcbiAgICAgICAgICAgIHsgeDogeCArIGdyaWRXLCB5OiB5ICsgZ3JpZEggfSxcclxuICAgICAgICAgICAgbGF5b3V0UG9seWdvbixcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG92ZXJsYXBzT2NjdXBpZWQgPSAoeDogbnVtYmVyLCB5OiBudW1iZXIpID0+XHJcbiAgICAgICAgICBvY2N1cGllZFJlY3RzLnNvbWUoKG9jYykgPT5cclxuICAgICAgICAgICAgdGhpcy5yZWN0c092ZXJsYXAoeyB4LCB5LCB3OiBncmlkVywgaDogZ3JpZEggfSwgb2NjKSxcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjYW5Gb3JCZXN0T3JpZ2luID0gKHNraXBPdmVybGFwOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICBsZXQgYmVzdFNjb3JlID0gLUluZmluaXR5O1xyXG4gICAgICAgICAgbGV0IGJlc3RQb3M6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgY29uc3Qgc3RlcCA9IGZpeHR1cmVXaWR0aFB4IC8gMjtcclxuXHJcbiAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICBsZXQgeSA9IGJvdW5kcy50b3A7XHJcbiAgICAgICAgICAgIHkgPD0gYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLSBncmlkSDtcclxuICAgICAgICAgICAgeSArPSBzdGVwXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgICBsZXQgeCA9IGJvdW5kcy5sZWZ0O1xyXG4gICAgICAgICAgICAgIHggPD0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLSBncmlkVztcclxuICAgICAgICAgICAgICB4ICs9IHN0ZXBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFmaXRzSW5Qb2x5Z29uKHgsIHkpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICBpZiAoIXNraXBPdmVybGFwICYmIG92ZXJsYXBzT2NjdXBpZWQoeCwgeSkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBncmlkUmVjdCA9IHsgeCwgeSwgdzogZ3JpZFcsIGg6IGdyaWRIIH07XHJcbiAgICAgICAgICAgICAgY29uc3QgZW1wdHlNYXJnaW4gPSB0aGlzLmNvbXB1dGVFbXB0eU1hcmdpbihcclxuICAgICAgICAgICAgICAgIGdyaWRSZWN0LFxyXG4gICAgICAgICAgICAgICAgYm91bmRzLFxyXG4gICAgICAgICAgICAgICAgb2NjdXBpZWRSZWN0cyxcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGR4ID0gY2VudGVyWCAtICh4ICsgZ3JpZFcgLyAyKTtcclxuICAgICAgICAgICAgICBjb25zdCBkeSA9IGNlbnRlclkgLSAoeSArIGdyaWRIIC8gMik7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2NvcmUgPSBlbXB0eU1hcmdpbiAqIDEwMDAgLSAoZHggKiBkeCArIGR5ICogZHkpICogMC4wMDE7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChzY29yZSA+IGJlc3RTY29yZSkge1xyXG4gICAgICAgICAgICAgICAgYmVzdFNjb3JlID0gc2NvcmU7XHJcbiAgICAgICAgICAgICAgICBiZXN0UG9zID0geyB4LCB5IH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gYmVzdFBvcztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBiZXN0UG9zID0gc2NhbkZvckJlc3RPcmlnaW4oZmFsc2UpID8/XHJcbiAgICAgICAgICBzY2FuRm9yQmVzdE9yaWdpbih0cnVlKSA/PyB7XHJcbiAgICAgICAgICAgIHg6IGNlbnRlclggLSBncmlkVyAvIDIsXHJcbiAgICAgICAgICAgIHk6IGNlbnRlclkgLSBncmlkSCAvIDIsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICBncmlkT3JpZ2luWCA9IGJlc3RQb3MueDtcclxuICAgICAgICBncmlkT3JpZ2luWSA9IGJlc3RQb3MueTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgeCA9IGdyaWRPcmlnaW5YICsgbmV3Q29sICogZml4dHVyZVdpZHRoUHg7XHJcbiAgICAgIGNvbnN0IHkgPSBncmlkT3JpZ2luWSArIG5ld1JvdyAqIGZpeHR1cmVIZWlnaHRQeDtcclxuXHJcbiAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMuZnJvbVBpeGVscyh4LCBcImZ0XCIpO1xyXG4gICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLmZyb21QaXhlbHMoeSwgXCJmdFwiKTtcclxuXHJcbiAgICAgICh0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZml4dHVyZUdyb3VwKTtcclxuICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5wdXNoKGZpeHR1cmVEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIHRoaXMudXBkYXRlRml4dHVyZUNvb3JkaW5hdGVzKCk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdPdGhlckVsZW1lbnRzKHBvc1R5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLCB3YWxsSW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBwb3NEYXRhID0ge1xyXG4gICAgICBfaWQ6IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWAsXHJcbiAgICAgIGZpeHR1cmVOYW1lOiBgUE9TIENvdW50ZXJgLFxyXG4gICAgICBmaXh0dXJlVHlwZTogXCJvdGhlclwiLFxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIGFuZ2xlOiAwLCB1bml0OiBcImZ0XCIgfSxcclxuICAgICAgZml4dHVyZVN0YXRpY0xlbmd0aDoge1xyXG4gICAgICAgIHZhbHVlOiAzLFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgICAgZml4dHVyZVN0YXRpY1dpZHRoOiB7XHJcbiAgICAgICAgdmFsdWU6IDUsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgeCA9IHBvc0RhdGEucmVsYXRpdmVQb3NpdGlvbi54O1xyXG4gICAgbGV0IHkgPSBwb3NEYXRhLnJlbGF0aXZlUG9zaXRpb24ueTtcclxuICAgIGxldCBhID0gcG9zRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG5cclxuICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgIHBvc0RhdGEuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbmV3T3RoZXJHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB0eXBlOiBbcG9zRGF0YS5maXh0dXJlTmFtZSB8fCBcIlBPUyBDb3VudGVyXCJdLCAvLyBkZWZhdWx0IHNlbGVjdGVkIGxhYmVsXHJcbiAgICAgIGN1c3RvbU5hbWU6IFtcIlwiXSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChwb3NUeXBlID09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxEYXRhID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG4gICAgICBpZiAod2FsbERhdGEpIHtcclxuICAgICAgICBjb25zdCB4MCA9IHdhbGxEYXRhLnJlbGF0aXZlUG9zaXRpb24ueDtcclxuICAgICAgICBjb25zdCB5MCA9IHdhbGxEYXRhLnJlbGF0aXZlUG9zaXRpb24ueTtcclxuICAgICAgICBjb25zdCBsZW5ndGggPSB3YWxsRGF0YS5kaXN0YW5jZTtcclxuICAgICAgICBjb25zdCBhbmdsZURlZyA9IHdhbGxEYXRhLmFuZ2xlIHx8IDA7XHJcbiAgICAgICAgY29uc3QgYW5nbGVSYWQgPSAoYW5nbGVEZWcgKiBNYXRoLlBJKSAvIDE4MDtcclxuXHJcbiAgICAgICAgY29uc3QgZnggPSB4MCArIChsZW5ndGggLyAyKSAqIE1hdGguY29zKGFuZ2xlUmFkKTtcclxuICAgICAgICBjb25zdCBmeSA9IHkwICsgKGxlbmd0aCAvIDIpICogTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDIuNTtcclxuICAgICAgICBjb25zdCBmeF9vZmZzZXQgPSBmeCArIG9mZnNldCAqIC1NYXRoLnNpbihhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3QgZnlfb2Zmc2V0ID0gZnkgKyBvZmZzZXQgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIHggPSB0aGlzLnRvUGl4ZWxzKGZ4X29mZnNldCwgXCJmdFwiKTtcclxuICAgICAgICB5ID0gdGhpcy50b1BpeGVscyhmeV9vZmZzZXQsIFwiZnRcIik7XHJcbiAgICAgICAgYSA9IGFuZ2xlRGVnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBPYmplY3QuYXNzaWduKHBvc0RhdGEsIHtcclxuICAgICAgICBhc3NvY2lhdGVkRWxlbWVudE51bWJlcjogd2FsbEluZGV4ISArIDEsXHJcbiAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnRUeXBlOiBcIndhbGxcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAodGhpcy5nZXRGb3JtV2FsbHMuYXQod2FsbEluZGV4ISkuZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgbmV3T3RoZXJHcm91cCxcclxuICAgICAgKTtcclxuICAgICAgd2FsbERhdGEub3RoZXJFbGVtZW50cy5wdXNoKHsgLi4ucG9zRGF0YSwgbmV3QWRkZWQ6IHRydWUgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBvc1R5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yT3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgbmV3T3RoZXJHcm91cCxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cy5wdXNoKHsgLi4ucG9zRGF0YSwgbmV3QWRkZWQ6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVjdEdyb3VwID0gdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgIHgsXHJcbiAgICAgIHksXHJcbiAgICAgIGEsXHJcbiAgICAgIHcsXHJcbiAgICAgIGgsXHJcbiAgICAgIHBvc0RhdGEsXHJcbiAgICApO1xyXG5cclxuICAgIC8vIG1ha2UgYWN0aXZlXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QocmVjdEdyb3VwKTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfSBjYXRjaCB7fVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlVG9PdGhlckVsZW1lbnRzQ2hhbmdlcygpO1xyXG4gICAgdGhpcy51cGRhdGVPdGhlckVsZW1lbnRzQ29vcmRpbmF0ZXMoKTtcclxuICB9XHJcblxyXG4gIGZpbmRFbXB0eUNlbnRlclNwb3QoXHJcbiAgICBvYmplY3RXaWR0aFB4OiBudW1iZXIsXHJcbiAgICBvYmplY3RIZWlnaHRQeDogbnVtYmVyLFxyXG4gICAgdGVtcE9jY3VwaWVkOiB7XHJcbiAgICAgIHg6IG51bWJlcjtcclxuICAgICAgeTogbnVtYmVyO1xyXG4gICAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgICBoZWlnaHQ6IG51bWJlcjtcclxuICAgIH1bXSA9IFtdLFxyXG4gICkge1xyXG4gICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGNvbnN0IENFTlRFUl9PRkZTRVRfWCA9IC0zMDA7XHJcbiAgICBjb25zdCBDRU5URVJfT0ZGU0VUX1kgPSAwO1xyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcblxyXG4gICAgY29uc3QgY2VudGVyWCA9IGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC8gMiArIENFTlRFUl9PRkZTRVRfWDtcclxuXHJcbiAgICBjb25zdCBjZW50ZXJZID0gYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLyAyICsgQ0VOVEVSX09GRlNFVF9ZO1xyXG5cclxuICAgIC8vIDIuIFNwaXJhbCBzZWFyY2ggcGFyYW1ldGVyc1xyXG4gICAgY29uc3Qgc3RlcCA9IDIwO1xyXG4gICAgY29uc3QgbWF4UmFkaXVzID0gTWF0aC5tYXgoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcclxuXHJcbiAgICBmb3IgKGxldCByYWRpdXMgPSAwOyByYWRpdXMgPCBtYXhSYWRpdXM7IHJhZGl1cyArPSBzdGVwKSB7XHJcbiAgICAgIGZvciAobGV0IGFuZ2xlID0gMDsgYW5nbGUgPCAzNjA7IGFuZ2xlICs9IDMwKSB7XHJcbiAgICAgICAgY29uc3QgcmFkID0gKGFuZ2xlICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIC8vIPCflKcgRklYOiBjZW50ZXIg4oaSIHRvcC1sZWZ0XHJcbiAgICAgICAgY29uc3QgeCA9IGNlbnRlclggKyByYWRpdXMgKiBNYXRoLmNvcyhyYWQpIC0gb2JqZWN0V2lkdGhQeCAvIDI7XHJcbiAgICAgICAgY29uc3QgeSA9IGNlbnRlclkgKyByYWRpdXMgKiBNYXRoLnNpbihyYWQpIC0gb2JqZWN0SGVpZ2h0UHggLyAyO1xyXG5cclxuICAgICAgICBjb25zdCB0ZXN0UmVjdCA9IHtcclxuICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICB3aWR0aDogb2JqZWN0V2lkdGhQeCxcclxuICAgICAgICAgIGhlaWdodDogb2JqZWN0SGVpZ2h0UHgsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gMy4gQ2hlY2sgY29sbGlzaW9uIHdpdGggZXhpc3RpbmcgY2FudmFzIG9iamVjdHNcclxuICAgICAgICBjb25zdCBjYW52YXNDb2xsaXNpb24gPSBvYmplY3RzLnNvbWUoKG9iaikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVjdCA9IG9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgICAgIHJldHVybiAhKFxyXG4gICAgICAgICAgICByZWN0LmxlZnQgPiB0ZXN0UmVjdC5sZWZ0ICsgdGVzdFJlY3Qud2lkdGggfHxcclxuICAgICAgICAgICAgcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCA8IHRlc3RSZWN0LmxlZnQgfHxcclxuICAgICAgICAgICAgcmVjdC50b3AgPiB0ZXN0UmVjdC50b3AgKyB0ZXN0UmVjdC5oZWlnaHQgfHxcclxuICAgICAgICAgICAgcmVjdC50b3AgKyByZWN0LmhlaWdodCA8IHRlc3RSZWN0LnRvcFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGNhbnZhc0NvbGxpc2lvbikgY29udGludWU7XHJcblxyXG4gICAgICAgIC8vIDQuIENoZWNrIGNvbGxpc2lvbiB3aXRoIHRlbXAgcGxhY2VkIGZpeHR1cmVzIChDQUQgYmF0Y2gpXHJcbiAgICAgICAgY29uc3QgdGVtcENvbGxpc2lvbiA9IHRlbXBPY2N1cGllZC5zb21lKChvKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gIShcclxuICAgICAgICAgICAgby54ID4gdGVzdFJlY3QubGVmdCArIHRlc3RSZWN0LndpZHRoIHx8XHJcbiAgICAgICAgICAgIG8ueCArIG8ud2lkdGggPCB0ZXN0UmVjdC5sZWZ0IHx8XHJcbiAgICAgICAgICAgIG8ueSA+IHRlc3RSZWN0LnRvcCArIHRlc3RSZWN0LmhlaWdodCB8fFxyXG4gICAgICAgICAgICBvLnkgKyBvLmhlaWdodCA8IHRlc3RSZWN0LnRvcFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRlbXBDb2xsaXNpb24pIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICByZXR1cm4geyB4LCB5IH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNhbmNlbEVkaXQoKSB7XHJcbiAgICBhd2FpdCB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGEuX2lkKTtcclxuICB9XHJcblxyXG4gIGxpc3RlblRvRGVsZXRlS2V5KCkge1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHtcclxuICAgICAgaWYgKGUua2V5ID09PSBcIkRlbGV0ZVwiICYmIHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5jYW52YXM/LmdldEFjdGl2ZU9iamVjdCgpIGFzIGFueTtcclxuXHJcbiAgICAgICAgaWYgKGFjdGl2ZSAmJiAoYWN0aXZlIGFzIGFueSkub2JqVHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0ZUVudHJhbmNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYWN0aXZlICYmIChhY3RpdmUgYXMgYW55KS5vYmpUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgaWYgKGFjdGl2ZT8uZGF0YT8uZWxlbWVudE51bWJlcikge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVdhbGwoYWN0aXZlPy5kYXRhPy5lbGVtZW50TnVtYmVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhY3RpdmUgJiYgKGFjdGl2ZSBhcyBhbnkpLm9ialR5cGUgPT09IFwiZml4dHVyZVwiKSB7XHJcbiAgICAgICAgICBpZiAoYWN0aXZlPy5maXh0dXJlVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUZpeHR1cmUoXHJcbiAgICAgICAgICAgICAgYWN0aXZlPy5maXh0dXJlVHlwZSxcclxuICAgICAgICAgICAgICBhY3RpdmU/LmZpeHR1cmVJbmRleCAtIDEsXHJcbiAgICAgICAgICAgICAgYWN0aXZlPy53YWxsSW5kZXggLSAxLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVFbnRyYW5jZSgpIHtcclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpIGFzIGFueTtcclxuXHJcbiAgICBpZiAoYWN0aXZlICYmIGFjdGl2ZS5vYmpUeXBlID09PSBcImVudHJhbmNlXCIpIHtcclxuICAgICAgY29uc3QgaSA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZEluZGV4KFxyXG4gICAgICAgIChlbDogYW55KSA9PlxyXG4gICAgICAgICAgZWwuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIiAmJlxyXG4gICAgICAgICAgZWwuZWxlbWVudE51bWJlciA9PT0gYWN0aXZlLmRhdGEuZWxlbWVudE51bWJlcixcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChpID49IDApIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnNwbGljZShpLCAxKTtcclxuICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZVdhbGwoZWxlTnVtYmVyOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT5cclxuICAgICAgICBlbGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsZS5lbGVtZW50TnVtYmVyID09PSBlbGVOdW1iZXIsXHJcbiAgICApO1xyXG4gICAgaWYgKHdhbGwuZml4dHVyZXMubGVuZ3RoIHx8IHdhbGwub3RoZXJFbGVtZW50cy5sZW5ndGgpXHJcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZVdhbGwoKSkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kSW5kZXgoXHJcbiAgICAgIChlbDogYW55KSA9PiBlbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWwuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyLFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnNwbGljZShpLCAxKTtcclxuICAgIHRoaXMudXBkYXRlV2FsbEVsZW1lbnROdW1iZXIoKTtcclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVdhbGxFbGVtZW50TnVtYmVyKCkge1xyXG4gICAgY29uc3Qgb25seVdhbGxzID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbj8uZmlsdGVyKFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiLFxyXG4gICAgKTtcclxuXHJcbiAgICBvbmx5V2FsbHM/LmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBpdGVtLmVsZW1lbnROdW1iZXIgPSBpbmRleCArIDE7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvUGl4ZWxzKHZhbHVlOiBudW1iZXIsIHVuaXQ6IHN0cmluZywgZHBpID0gMi44KSB7XHJcbiAgICBsZXQgcGl4ZWxzOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICBwaXhlbHMgPSAodmFsdWUgLyAyNS40KSAqIGRwaTtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHBpeGVscyA9IHZhbHVlICogMTIgKiBkcGk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHBpeGVscy50b0ZpeGVkKDQpKTtcclxuICB9XHJcblxyXG4gIGZyb21QaXhlbHMocGl4ZWxzOiBudW1iZXIsIHVuaXQ6IHN0cmluZywgZHBpID0gMi44KTogbnVtYmVyIHtcclxuICAgIGxldCB2YWx1ZTogbnVtYmVyO1xyXG5cclxuICAgIC8vIHBpeGVscyA9IHBpeGVscyA+PSB0aGlzLndhbGxUaGlja25lc3MgPyBwaXhlbHMgLSB0aGlzLndhbGxUaGlja25lc3MgOiB0aGlzLndhbGxUaGlja25lc3M7XHJcblxyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICB2YWx1ZSA9IChwaXhlbHMgLyBkcGkpICogMjUuNDtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHZhbHVlID0gcGl4ZWxzIC8gKDEyICogZHBpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHVuaXQuIFVzZSAnbW0nIG9yICdmdCcuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOdW1iZXIodmFsdWUudG9GaXhlZCg0KSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtU2F2ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihMYXlvdXRFZGl0Q29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9IFwiU2F2ZSBhcyBkcmFmdFwiO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbW92ZSB0aGlzIGJhY2sgdG8gRHJhZnQ/IFRoaXMgd2lsbCBrZWVwIHRoZSBwbGFub2dyYW0gaW4gRHJhZnQgYW5kIG1ha2UgaXQgcmVhZHkgZm9yIGFsbG9jYXRpb24gb25jZSBhcHByb3ZlZC5cIjtcclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gXCJva1wiKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1EZWxldGVXYWxsKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gXCJEZWxldGUgd2FsbFwiO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgd2FsbCBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIGZpeHR1cmVzIGFuZCBlbGVtZW50cz9cIjtcclxuXHJcbiAgICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoZml4dHVyZXM/OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpeHR1cmVzRnJvbUNhbnZhcyA9XHJcbiAgICAgIGZpeHR1cmVzID8/XHJcbiAgICAgIHRoaXMuY2FudmFzXHJcbiAgICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLmZpeHR1cmVJZClcclxuICAgICAgICAubWFwKChvYmopID0+ICh7XHJcbiAgICAgICAgICBpZDogKG9iaiBhcyBhbnkpLmZpeHR1cmVJZCxcclxuICAgICAgICAgIHg6IG9iai5sZWZ0LFxyXG4gICAgICAgICAgeTogb2JqLnRvcCxcclxuICAgICAgICAgIGFuZ2xlOiBvYmo/LmFuZ2xlID8/IDAsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiBmaXh0dXJlc0Zyb21DYW52YXMpIHtcclxuICAgICAgcG9zTWFwLnNldChmaXh0dXJlLmlkLCB7XHJcbiAgICAgICAgeDogdGhpcy5mcm9tUGl4ZWxzKGZpeHR1cmUueCwgXCJmdFwiKSxcclxuICAgICAgICB5OiB0aGlzLmZyb21QaXhlbHMoZml4dHVyZS55LCBcImZ0XCIpLFxyXG4gICAgICAgIGFuZ2xlOiBmaXh0dXJlLmFuZ2xlLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGNmOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgbGF0ZXN0Rml4dHVyZVBvcyA9IHBvc01hcC5nZXQoY2YuX2lkKTtcclxuICAgICAgaWYgKGxhdGVzdEZpeHR1cmVQb3MpIHtcclxuICAgICAgICBjZi5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RGaXh0dXJlUG9zLng7XHJcbiAgICAgICAgY2YucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0Rml4dHVyZVBvcy55O1xyXG4gICAgICAgIGNmLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBsYXRlc3RGaXh0dXJlUG9zLmFuZ2xlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICB3Py5maXh0dXJlcz8uZm9yRWFjaCgod2Y6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdEZpeHR1cmVQb3MgPSBwb3NNYXAuZ2V0KHdmLl9pZCk7XHJcbiAgICAgICAgaWYgKGxhdGVzdEZpeHR1cmVQb3MpIHtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdEZpeHR1cmVQb3MueDtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdEZpeHR1cmVQb3MueTtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBsYXRlc3RGaXh0dXJlUG9zLmFuZ2xlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU90aGVyRWxlbWVudHNDb29yZGluYXRlcygpIHtcclxuICAgIGNvbnN0IG90aGVyc0Zyb21DYW52YXMgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLm9ialR5cGUgPT09IFwib3RoZXJzXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4gKHtcclxuICAgICAgICBpZDogKG9iaiBhcyBhbnkpLmRhdGE/Ll9pZCxcclxuICAgICAgICBsYWJlbDogKG9iaiBhcyBhbnkpLmRhdGE/LmZpeHR1cmVOYW1lLFxyXG4gICAgICAgIHg6IG9iai5sZWZ0LFxyXG4gICAgICAgIHk6IG9iai50b3AsXHJcbiAgICAgICAgYW5nbGU6IG9iaj8uYW5nbGUgPz8gMCxcclxuICAgICAgICB3aWR0aDogdGhpcy5mcm9tUGl4ZWxzKG9iai5nZXRTY2FsZWRXaWR0aCgpIC0gMiwgXCJmdFwiKSxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkSGVpZ2h0KCkgLSAyLCBcImZ0XCIpLFxyXG4gICAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcDxcclxuICAgICAgc3RyaW5nLFxyXG4gICAgICB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBhbmdsZTogbnVtYmVyOyBoOiBudW1iZXI7IHc6IG51bWJlciB9XHJcbiAgICA+KCk7XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVyc0Zyb21DYW52YXMpIHtcclxuICAgICAgaWYgKG90aGVyLmlkKSB7XHJcbiAgICAgICAgcG9zTWFwLnNldChvdGhlci5pZCwge1xyXG4gICAgICAgICAgeDogdGhpcy5mcm9tUGl4ZWxzKG90aGVyLngsIFwiZnRcIiksXHJcbiAgICAgICAgICB5OiB0aGlzLmZyb21QaXhlbHMob3RoZXIueSwgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvdGhlci5hbmdsZSxcclxuICAgICAgICAgIGg6IG90aGVyLmhlaWdodCxcclxuICAgICAgICAgIHc6IG90aGVyLndpZHRoLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0T3RoZXJzUG9zID0gcG9zTWFwLmdldChlbC5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RPdGhlcnNQb3MpIHtcclxuICAgICAgICAgIGVsLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdE90aGVyc1Bvcy54O1xyXG4gICAgICAgICAgZWwucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0T3RoZXJzUG9zLnk7XHJcbiAgICAgICAgICBlbC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0T3RoZXJzUG9zLmFuZ2xlO1xyXG4gICAgICAgICAgZWwuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy5oO1xyXG4gICAgICAgICAgZWwuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlID0gbGF0ZXN0T3RoZXJzUG9zLnc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICB3Py5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKCh3ZjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0T3RoZXJzUG9zID0gcG9zTWFwLmdldCh3Zi5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RPdGhlcnNQb3MpIHtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdE90aGVyc1Bvcy54O1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0T3RoZXJzUG9zLnk7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0T3RoZXJzUG9zLmFuZ2xlO1xyXG4gICAgICAgICAgd2YuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy5oO1xyXG4gICAgICAgICAgd2YuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlID0gbGF0ZXN0T3RoZXJzUG9zLnc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlV2FsbENvb3JkaW5hdGVzKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcigob2JqKSA9PiAob2JqIGFzIGFueSkub2JqVHlwZSA9PT0gXCJ3YWxsXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0b3A6IHRoaXMuZnJvbVBpeGVscyhvYmoudG9wLCBcImZ0XCIpLFxyXG4gICAgICAgICAgbGVmdDogdGhpcy5mcm9tUGl4ZWxzKG9iai5sZWZ0LCBcImZ0XCIpLFxyXG4gICAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSAtIDAuMjcsIFwiZnRcIiksXHJcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkSGVpZ2h0KCkgLSAwLjI3LCBcImZ0XCIpLFxyXG4gICAgICAgICAgYW5nbGU6IG9iai5hbmdsZSxcclxuICAgICAgICAgIGVsZW1lbnREYXRhOiAob2JqIGFzIGFueSkuZGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwb3NNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCB3YWxsIG9mIGRhdGEpIHtcclxuICAgICAgcG9zTWFwLnNldChcclxuICAgICAgICBgJHt3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlfSR7d2FsbC5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyfWAsXHJcbiAgICAgICAgZGF0YS5maW5kKFxyXG4gICAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlID09PSB3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlICYmXHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyID09PSB3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXIsXHJcbiAgICAgICAgKSxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB3YWxsUG9zID0gcG9zTWFwLmdldChgJHt3LmVsZW1lbnRUeXBlfSR7dy5lbGVtZW50TnVtYmVyfWApO1xyXG4gICAgICBpZiAod2FsbFBvcykge1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi54ID0gd2FsbFBvcy5sZWZ0O1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi55ID0gd2FsbFBvcy50b3A7XHJcbiAgICAgICAgdy5hbmdsZSA9IHdhbGxQb3MuYW5nbGU7XHJcbiAgICAgICAgdy5kaXN0YW5jZSA9IHdhbGxQb3Mud2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRW50cmFuY2VDb29yZGluYXRlcygpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLm9ialR5cGUgPT09IFwiZW50cmFuY2VcIilcclxuICAgICAgLm1hcCgob2JqKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHRvcDogdGhpcy5mcm9tUGl4ZWxzKG9iai50b3AsIFwiZnRcIiksXHJcbiAgICAgICAgICBsZWZ0OiB0aGlzLmZyb21QaXhlbHMob2JqLmxlZnQsIFwiZnRcIiksXHJcbiAgICAgICAgICB3aWR0aDogdGhpcy5mcm9tUGl4ZWxzKG9iai5nZXRTY2FsZWRXaWR0aCgpLCBcImZ0XCIpLFxyXG4gICAgICAgICAgYW5nbGU6IG9iai5hbmdsZSxcclxuICAgICAgICAgIGVsZW1lbnREYXRhOiAob2JqIGFzIGFueSkuZGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwb3NNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbnRyYW5jZSBvZiBkYXRhKSB7XHJcbiAgICAgIHBvc01hcC5zZXQoXHJcbiAgICAgICAgYCR7ZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudFR5cGV9JHtlbnRyYW5jZS5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyfWAsXHJcbiAgICAgICAgZGF0YS5maW5kKFxyXG4gICAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlID09PSBlbnRyYW5jZS5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSAmJlxyXG4gICAgICAgICAgICBvYmouZWxlbWVudERhdGEuZWxlbWVudE51bWJlciA9PT1cclxuICAgICAgICAgICAgICBlbnRyYW5jZS5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyLFxyXG4gICAgICAgICksXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgZW50cmFuY2VQb3MgPSBwb3NNYXAuZ2V0KGAke3cuZWxlbWVudFR5cGV9JHt3LmVsZW1lbnROdW1iZXJ9YCk7XHJcbiAgICAgIGlmIChlbnRyYW5jZVBvcykge1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi54ID0gZW50cmFuY2VQb3MubGVmdDtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueSA9IGVudHJhbmNlUG9zLnRvcDtcclxuICAgICAgICB3LmFuZ2xlID0gZW50cmFuY2VQb3MuYW5nbGU7XHJcbiAgICAgICAgdy5kaXN0YW5jZSA9IGVudHJhbmNlUG9zLndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgZGlzc2VjdGlvbiBsaW5lcyB3aGVuZXZlciBlbnRyYW5jZSBjb29yZGluYXRlcyBjaGFuZ2VcclxuICAgIHRoaXMudXBkYXRlRGlzc2VjdGlvbkxpbmVzKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVMYXlvdXQoZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICBlZGl0TW9kZSAmJlxyXG4gICAgLy8gICB0aGlzLmdldFN0YXR1cyA9PT0gXCJhbGxvY2F0aW9uUGVuZGluZ1wiICYmXHJcbiAgICAvLyAgIHVwZGF0ZVN0YXR1cyA9PT0gXCJkcmFmdFwiXHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtU2F2ZSgpKSkge1xyXG4gICAgLy8gICAgIHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIC8vICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIC8vICAgICByZXR1cm47XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBlbGVtZW50LmZpeHR1cmVzID0gZWxlbWVudC5maXh0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gIWZpeHR1cmU/Lmdob3N0ICYmIGZpeHR1cmUuZml4dHVyZU5hbWUgIT09IFwic3BhY2VcIixcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVcclxuICAgICAgLmZpbHRlcigoZml4dHVyZTogYW55KSA9PiAhZml4dHVyZT8uZ2hvc3QpXHJcbiAgICAgIC5tYXAoKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgYXNzb2NpYXRlZEVsZW1lbnRUeXBlLCBhc3NvY2lhdGVkRWxlbWVudE51bWJlciwgLi4ucmVzdCB9ID1cclxuICAgICAgICAgIGZpeHR1cmU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3Q7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5yZW9yZGVyRml4dHVyZSh0aGlzLmZsb29yRGF0YSk7XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICBkYXRhOiB7IC4uLnRoaXMuZmxvb3JEYXRhIH0sXHJcbiAgICAgIGVkaXRNb2RlOiBlZGl0TW9kZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5pc1NhdmluZ0xheW91dCA9IHRydWU7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlU3RvcmVQbGFubyhwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZ0xheW91dCA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlIGxheW91dFwiKTtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nTGF5b3V0ID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tFZGl0KCkge1xyXG4gICAgdGhpcy50b2dnbGVQYW5lbChcInJpZ2h0XCIsIHRydWUpO1xyXG4gICAgdGhpcy50b2dnbGVQYW5lbChcImxlZnRcIiwgZmFsc2UpO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgdGhpcy5sYXlvdXRGb3JtLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldFByb2dyZXNzVmFsdWUoKSB7XHJcbiAgICBpZiAodGhpcy5nZXRTdGF0dXMgPT09IFwiYWxsb2NhdGlvblBlbmRpbmdcIikge1xyXG4gICAgICByZXR1cm4gMjU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBnZXRTdGF0dXNUZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuZ2V0U3RhdHVzID09PSBcImFsbG9jYXRpb25QZW5kaW5nXCIpIHtcclxuICAgICAgcmV0dXJuIFwiQWxsb2NhdGlvbiBwZW5kaW5nXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJEcmFmdFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGdldFN0YXR1cygpIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yRGF0YT8uc3RhdHVzID8/IFwiZHJhZnRcIjtcclxuICB9XHJcblxyXG4gIGdldEVsZW1lbnROdW1iZXIoZ3JvdXA6IGFueSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIGdyb3VwLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRGaXh0dXJlKGdyb3VwOiBhbnksIGJsaW5rOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZW5hYmxlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgIHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmsgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjZW50ZXIgPSBncm91cC5nZXRDZW50ZXJQb2ludCgpO1xyXG5cclxuICAgIGNvbnN0IHJlYWxXaWR0aCA9IGdyb3VwLndpZHRoISAqIGdyb3VwLnNjYWxlWCE7XHJcbiAgICBjb25zdCByZWFsSGVpZ2h0ID0gZ3JvdXAuaGVpZ2h0ISAqIGdyb3VwLnNjYWxlWSE7XHJcblxyXG4gICAgY29uc3QgcmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGNlbnRlci54LFxyXG4gICAgICB0b3A6IGNlbnRlci55LFxyXG4gICAgICB3aWR0aDogcmVhbFdpZHRoICsgOCwgLy8gY29uc2lzdGVudCBwYWRkaW5nXHJcbiAgICAgIGhlaWdodDogcmVhbEhlaWdodCArIDgsXHJcbiAgICAgIHJ4OiA1LFxyXG4gICAgICByeTogNSxcclxuICAgICAgc3Ryb2tlOiBcIiMwMGFhZmZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDMsXHJcbiAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBhbmdsZTogZ3JvdXAuYW5nbGUgfHwgMCxcclxuICAgICAgb3BhY2l0eTogYmxpbmsgPyAwIDogMSxcclxuICAgIH0pO1xyXG5cclxuICAgIChyZWN0IGFzIGFueSkuZGF0YSA9IHsgdHlwZTogXCJmaXh0dXJlLWhpZ2hsaWdodFwiIH07XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKHJlY3QpO1xyXG4gICAgdGhpcy5jYW52YXMubW92ZU9iamVjdFRvKHJlY3QsIHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggLSAxKTtcclxuICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IHJlY3Q7XHJcblxyXG4gICAgLy8gLS0tIE5vIGJsaW5raW5nIG5lZWRlZCAtLS1cclxuICAgIGlmICghYmxpbmspIHJldHVybjtcclxuXHJcbiAgICBsZXQgY3ljbGVzID0gMDtcclxuXHJcbiAgICBjb25zdCBibGlua09uY2UgPSAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlY3QuYW5pbWF0ZShcclxuICAgICAgICB7IG9wYWNpdHk6IDEgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgb25DaGFuZ2U6ICgpID0+IHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKSxcclxuICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVjdC5hbmltYXRlKFxyXG4gICAgICAgICAgICAgIHsgb3BhY2l0eTogMCB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogKCkgPT4gdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpLFxyXG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBjeWNsZXMrKztcclxuICAgICAgICAgICAgICAgICAgaWYgKGN5Y2xlcyA8IDIwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmxpbmtPbmNlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldCh7IG9wYWNpdHk6IDEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGJsaW5rT25jZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSGlnaGxpZ2h0KCkge1xyXG4gICAgdGhpcy5jYW5jZWxIaWdobGlnaHRCbGluayA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYW52YXM/LmdldE9iamVjdHMoKT8uZm9yRWFjaCgob2JqKSA9PiB7XHJcbiAgICAgIGlmICgob2JqIGFzIGFueSkuZGF0YT8udHlwZSA9PT0gXCJmaXh0dXJlLWhpZ2hsaWdodFwiKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKG9iaik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlSGlnaGxpZ2h0ID0gbnVsbDtcclxuICAgIHRoaXMuY2FudmFzPy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBrZWVwSGlnaGxpZ2h0T25Ub3AgPSAoKSA9PiB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aXZlSGlnaGxpZ2h0KSByZXR1cm47XHJcbiAgICBjb25zdCBvYmpzID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgdGhpcy5jYW52YXMubW92ZU9iamVjdFRvKHRoaXMuYWN0aXZlSGlnaGxpZ2h0LCBvYmpzLmxlbmd0aCAtIDEpO1xyXG4gIH07XHJcblxyXG4gIGFzeW5jIG9uQ2xpY2tBcHByb3ZlTGF5b3V0KCkge1xyXG4gICAgaWYgKHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5sZW5ndGggPD0gMCkge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgIFwiTm8gZml4dHVyZXMgZm91bmQuIEFkZCBmaXh0dXJlcyB0byBwcm9jZWVkXCIsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmFwcHJvdmVMYXlvdXRNb2RhbFJlZiwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICB9KS5yZXN1bHQ7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge31cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQ2xpY2tSdW5BbGxvY2F0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5sZW5ndGggPD0gMCkge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgIFwiTm8gZml4dHVyZXMgZm91bmQuIEFkZCBmaXh0dXJlcyB0byBwcm9jZWVkXCIsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzSW52YWxpZEhlYWRlckZpeHR1cmVzKSB7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXHJcbiAgICAgICAgXCJTb21lIGZpeHR1cmVzIGhhdmUgaW52YWxpZCBoZWFkZXJzLiBQbGVhc2UgZml4IGFsbCByZWQgZml4dHVyZXMgYmVmb3JlIHJ1bm5pbmcgYWxsb2NhdGlvbi5cIixcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzQWxsb2NhdGlvblJ1bikge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5jb21wbGV0ZUFsbG9jYXRpb25Nb2RhbFJlZiwge1xyXG4gICAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgICB9KS5yZXN1bHQ7XHJcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7fVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuYXBwbHlMb2dpY3NNb2RhbFJlZiwge1xyXG4gICAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgICB9KS5yZXN1bHQ7XHJcbiAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7fVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25DbGlja1JldmVydEFsbG9jYXRpb24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMucmV2ZXJ0QWxsb2NhdGlvbk1vZGFsUmVmLCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIH0pLnJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7fVxyXG4gIH1cclxuXHJcbiAgcmV2ZXJ0QWxsb2NhdGlvbigpIHtcclxuICAgIGlmICghdGhpcy5mbG9vckRhdGFCZWZvcmVBbGxvY2F0aW9uKSB7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJObyBwcmV2aW91cyBzdGF0ZSBmb3VuZCB0byByZXZlcnRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uID0gSlNPTi5wYXJzZShcclxuICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5mbG9vckRhdGFCZWZvcmVBbGxvY2F0aW9uLmxheW91dFBvbHlnb24pLFxyXG4gICAgKTtcclxuICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgPSBKU09OLnBhcnNlKFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmZsb29yRGF0YUJlZm9yZUFsbG9jYXRpb24uY2VudGVyRml4dHVyZSksXHJcbiAgICApO1xyXG4gICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cyA9IEpTT04ucGFyc2UoXHJcbiAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmxvb3JEYXRhQmVmb3JlQWxsb2NhdGlvbi5vdGhlckVsZW1lbnRzKSxcclxuICAgICk7XHJcbiAgICB0aGlzLmZsb29yRGF0YS5zdGF0dXMgPSB0aGlzLmZsb29yRGF0YUJlZm9yZUFsbG9jYXRpb24uc3RhdHVzO1xyXG5cclxuICAgIHRoaXMuaXNBbGxvY2F0aW9uUnVuID0gZmFsc2U7XHJcbiAgICB0aGlzLmZsb29yRGF0YUJlZm9yZUFsbG9jYXRpb24gPSBudWxsO1xyXG5cclxuICAgIHRoaXMuZXh0cmFjdEFsbEZpeHR1cmVzKHRoaXMuZmxvb3JEYXRhKTtcclxuICAgIHRoaXMuZGlzYWJsZUVkaXQgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IG51bGw7XHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsO1xyXG5cclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJsZWZ0XCIsIGZhbHNlKTtcclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCBmYWxzZSk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuXHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoXCJBbGxvY2F0aW9uIHJldmVydGVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbXBsZXRlQWxsb2NhdGlvbigpIHtcclxuICAgIHRoaXMuaXNCdXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmbG9vcklkID0gdGhpcy5mbG9vckRhdGEuX2lkO1xyXG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlU3RvcmVQbGFubyh7XHJcbiAgICAgICAgICBmbG9vcklkLFxyXG4gICAgICAgICAgb25ib2FyZGluZzogdHJ1ZSxcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgLi4udGhpcy5mbG9vckRhdGEsXHJcbiAgICAgICAgICAgIC8vIGlzUGxhbm9BcHByb3ZlZDogdHJ1ZSxcclxuICAgICAgICAgICAgc3RhdHVzOiBcImNvbXBsZXRlZFwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHN0b3JlTmFtZSA9IHRoaXMuZmxvb3JEYXRhPy5zdG9yZU5hbWUgfHwgdGhpcy5wbGFub0RhdGE/LnN0b3JlTmFtZTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLnRyaWdnZXJDcmVhdGVMYXlvdXQoc3RvcmVOYW1lLCB0aGlzLmNsaWVudElkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGVycm9yOiAoKSA9PiB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIHN1Ym1pdCBsYXlvdXQgY2hhbmdlcy5cIiksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KFwiQWxsb2NhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAgIGBtYW5hZ2UvcGxhbm9ncmFtL21hbmFnZS1wbGFub2dyYW0/cGxhbm9JZD0ke3RoaXMuZmxvb3JEYXRhLnBsYW5vSWR9JmZsb29ySWQ9JHt0aGlzLmZsb29yRGF0YS5faWR9YCxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImNvbXBsZXRlQWxsb2NhdGlvbiBmYWlsZWQ6XCIsIGVycm9yKTtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBjb21wbGV0ZSBhbGxvY2F0aW9uXCIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHJ1bkFsbG9jYXRpb24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmlzQnV0dG9uTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmZsb29yRGF0YUJlZm9yZUFsbG9jYXRpb24gPSB7XHJcbiAgICAgICAgbGF5b3V0UG9seWdvbjogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uKSksXHJcbiAgICAgICAgY2VudGVyRml4dHVyZTogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKSksXHJcbiAgICAgICAgb3RoZXJFbGVtZW50czogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzKSksXHJcbiAgICAgICAgc3RhdHVzOiB0aGlzLmZsb29yRGF0YS5zdGF0dXMsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnJlb3JkZXJGaXh0dXJlTnVtYmVyQnlEaXNzZWN0aW9uKCk7XHJcblxyXG4gICAgICBjb25zdCBzdG9yZU5hbWUgPSB0aGlzLmZsb29yRGF0YT8uc3RvcmVOYW1lIHx8IHRoaXMucGxhbm9EYXRhPy5zdG9yZU5hbWU7XHJcbiAgICAgIGlmICghc3RvcmVOYW1lKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIlN0b3JlIG5hbWUgaXMgcmVxdWlyZWRcIik7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBzdG9yZU5hbWU6IHN0b3JlTmFtZSxcclxuICAgICAgICAgIGxheW91dFBvbHlnb246IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24gfHwgW10sXHJcbiAgICAgICAgICBjZW50ZXJGaXh0dXJlOiB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlIHx8IFtdLFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50czogdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cyB8fCBbXSxcclxuICAgICAgICAgIHN0YXR1czogdGhpcy5mbG9vckRhdGEuc3RhdHVzIHx8IFwiZHJhZnRcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0b3JlTmFtZTogc3RvcmVOYW1lLCAvLyBBbHNvIGFkZCBhdCByb290IGxldmVsIGFzIGZhbGxiYWNrXHJcbiAgICAgICAgdHlwZTogXCJpdm1cIixcclxuICAgICAgICBpbml0aWFsOiB0cnVlLFxyXG4gICAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5ydW5BbG9jYXRpb24ocGF5bG9hZCksXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24gPVxyXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YS5sYXlvdXRQb2x5Z29uIHx8IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb247XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSA9XHJcbiAgICAgICAgICByZXNwb25zZS5kYXRhLmNlbnRlckZpeHR1cmUgfHwgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzID1cclxuICAgICAgICAgIHJlc3BvbnNlLmRhdGEub3RoZXJFbGVtZW50cyB8fCB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLnN0YXR1cyA9IHJlc3BvbnNlLmRhdGEuc3RhdHVzIHx8IHRoaXMuZmxvb3JEYXRhLnN0YXR1cztcclxuXHJcbiAgICAgICAgdGhpcy5pc0FsbG9jYXRpb25SdW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLmV4dHJhY3RBbGxGaXh0dXJlcyh0aGlzLmZsb29yRGF0YSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVQYW5lbChcImxlZnRcIiwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy50b2dnbGVQYW5lbChcInJpZ2h0XCIsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KFxyXG4gICAgICAgICAgXCJBbGxvY2F0aW9uIGxvZ2ljIGFwcGxpZWQgc3VjY2Vzc2Z1bGx5XCIsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLmlzQnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGFwcGx5SVZNTG9naWMgW0VSUl06XCIsIGVycm9yKTtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBhcHBseSBhbGxvY2F0aW9uIGxvZ2ljXCIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFwcHJvdmVMYXlvdXQoKSB7XHJcbiAgICB0aGlzLmlzQnV0dG9uTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZmxvb3JJZCA9IHRoaXMuZmxvb3JEYXRhLl9pZDtcclxuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZVN0b3JlUGxhbm8oe1xyXG4gICAgICAgICAgZmxvb3JJZCxcclxuICAgICAgICAgIGRhdGE6IHsgLi4udGhpcy5mbG9vckRhdGEsIHN0YXR1czogXCJhbGxvY2F0aW9uUGVuZGluZ1wiIH0sXHJcbiAgICAgICAgfSksXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmZsb29yRGF0YS5pc1BsYW5vQXBwcm92ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZsb29yRGF0YS5zdGF0dXMgPSBcImFsbG9jYXRpb25QZW5kaW5nXCI7XHJcblxyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoXCJMYXlvdXQgYXBwcm92ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICB0aGlzLmxheW91dEZvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmlzUnVuQWxsb2NhdGlvbkFsbG93ZWQpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAgICAgYC9tYW5hZ2UvcGxhbm9ncmFtL21hbmFnZS1wbGFub2dyYW1zL29uYm9hcmRgLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJhcHByb3ZlTGF5b3V0IGZhaWxlZDpcIiwgZXJyb3IpO1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGFwcHJvdmUgbGF5b3V0XCIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlb3JkZXJGaXh0dXJlTnVtYmVyQnlEaXNzZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZmxvb3JEYXRhID0gdGhpcy5mbG9vckRhdGE7XHJcbiAgICBpZiAoIWZsb29yRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHdhbGxGaXh0dXJlczogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGZsb29yRml4dHVyZXM6IGFueVtdID0gW107XHJcblxyXG4gICAgZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlICE9PSBcIndhbGxcIikgcmV0dXJuO1xyXG4gICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICghZml4dHVyZT8uZ2hvc3QpIHdhbGxGaXh0dXJlcy5wdXNoKGZpeHR1cmUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWZpeHR1cmU/Lmdob3N0KSBmbG9vckZpeHR1cmVzLnB1c2goZml4dHVyZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkaXNzZWN0aW9uUmVmZXJlbmNlID0gdGhpcy5nZXRFbnRyYW5jZURpc3NlY3Rpb25SZWZlcmVuY2UoZmxvb3JEYXRhKTtcclxuICAgIGNvbnN0IG9yZGVyZWRXYWxsRml4dHVyZXMgPSB0aGlzLnNvcnRGaXh0dXJlc0J5RGlzc2VjdGlvblByaW9yaXR5KFxyXG4gICAgICB3YWxsRml4dHVyZXMsXHJcbiAgICAgIGRpc3NlY3Rpb25SZWZlcmVuY2UsXHJcbiAgICApO1xyXG4gICAgY29uc3Qgb3JkZXJlZEZsb29yRml4dHVyZXMgPSB0aGlzLnNvcnRGaXh0dXJlc0J5RGlzc2VjdGlvblByaW9yaXR5KFxyXG4gICAgICBmbG9vckZpeHR1cmVzLFxyXG4gICAgICBkaXNzZWN0aW9uUmVmZXJlbmNlLFxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgZml4dHVyZU51bWJlciA9IDE7XHJcbiAgICBbLi4ub3JkZXJlZFdhbGxGaXh0dXJlcywgLi4ub3JkZXJlZEZsb29yRml4dHVyZXNdLmZvckVhY2goXHJcbiAgICAgIChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbnRyYW5jZURpc3NlY3Rpb25SZWZlcmVuY2UoZmxvb3JEYXRhOiBhbnkpOiB7XHJcbiAgICBvcmlnaW46IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcclxuICAgIGRpcmVjdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xyXG4gIH0gfCBudWxsIHtcclxuICAgIGNvbnN0IGVudHJhbmNlcyA9XHJcbiAgICAgIGZsb29yRGF0YT8ubGF5b3V0UG9seWdvbj8uZmlsdGVyKFxyXG4gICAgICAgIChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQ/LmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIsXHJcbiAgICAgICkgPz8gW107XHJcblxyXG4gICAgaWYgKCFlbnRyYW5jZXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBjb25zdCBwcmltYXJ5RW50cmFuY2UgPSBbLi4uZW50cmFuY2VzXS5zb3J0KFxyXG4gICAgICAoYTogYW55LCBiOiBhbnkpID0+XHJcbiAgICAgICAgKE51bWJlcihhPy5lbGVtZW50TnVtYmVyKSB8fCAwKSAtIChOdW1iZXIoYj8uZWxlbWVudE51bWJlcikgfHwgMCksXHJcbiAgICApWzBdO1xyXG5cclxuICAgIGNvbnN0IG9yaWdpblVuaXQgPSBwcmltYXJ5RW50cmFuY2U/LnJlbGF0aXZlUG9zaXRpb24/LnVuaXQgfHwgXCJmdFwiO1xyXG4gICAgY29uc3Qgb3JpZ2luID0ge1xyXG4gICAgICB4OiB0aGlzLnRvUGl4ZWxzKHByaW1hcnlFbnRyYW5jZT8ucmVsYXRpdmVQb3NpdGlvbj8ueCB8fCAwLCBvcmlnaW5Vbml0KSxcclxuICAgICAgeTogdGhpcy50b1BpeGVscyhwcmltYXJ5RW50cmFuY2U/LnJlbGF0aXZlUG9zaXRpb24/LnkgfHwgMCwgb3JpZ2luVW5pdCksXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGFuZ2xlRGVnID0gZmxvb3JEYXRhPy5jYWRMYXlvdXRcclxuICAgICAgPyAwXHJcbiAgICAgIDogTnVtYmVyKFxyXG4gICAgICAgICAgcHJpbWFyeUVudHJhbmNlPy5hbmdsZSA/P1xyXG4gICAgICAgICAgICBwcmltYXJ5RW50cmFuY2U/LnJlbGF0aXZlUG9zaXRpb24/LmFuZ2xlID8/XHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgKTtcclxuICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgY29uc3QgZGlyZWN0aW9uID0ge1xyXG4gICAgICB4OiBNYXRoLmNvcyhhbmdsZVJhZCksXHJcbiAgICAgIHk6IE1hdGguc2luKGFuZ2xlUmFkKSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHsgb3JpZ2luLCBkaXJlY3Rpb24gfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc29ydEZpeHR1cmVzQnlEaXNzZWN0aW9uUHJpb3JpdHkoXHJcbiAgICBmaXh0dXJlczogYW55W10sXHJcbiAgICBkaXNzZWN0aW9uUmVmZXJlbmNlOiB7XHJcbiAgICAgIG9yaWdpbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xyXG4gICAgICBkaXJlY3Rpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcclxuICAgIH0gfCBudWxsLFxyXG4gICk6IGFueVtdIHtcclxuICAgIGlmICghZml4dHVyZXM/Lmxlbmd0aCkgcmV0dXJuIFtdO1xyXG5cclxuICAgIGlmICghZGlzc2VjdGlvblJlZmVyZW5jZSkge1xyXG4gICAgICByZXR1cm4gWy4uLmZpeHR1cmVzXS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnREZWx0YSA9XHJcbiAgICAgICAgICAoTnVtYmVyKGE/LmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyKSB8fCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgLVxyXG4gICAgICAgICAgKE51bWJlcihiPy5hc3NvY2lhdGVkRWxlbWVudE51bWJlcikgfHwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xyXG4gICAgICAgIGlmIChlbGVtZW50RGVsdGEgIT09IDApIHJldHVybiBlbGVtZW50RGVsdGE7XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAoTnVtYmVyKGE/LmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcikgfHxcclxuICAgICAgICAgICAgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIC1cclxuICAgICAgICAgIChOdW1iZXIoYj8uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyKSB8fCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUilcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IG9yaWdpbiwgZGlyZWN0aW9uIH0gPSBkaXNzZWN0aW9uUmVmZXJlbmNlO1xyXG4gICAgY29uc3Qgc2lkZVJhbmsgPSAoc2lkZTogbnVtYmVyKSA9PiAoc2lkZSA8IDAgPyAwIDogc2lkZSA+IDAgPyAxIDogMik7XHJcbiAgICBjb25zdCBwcm9qZWN0aW9uVG9sZXJhbmNlID0gMjQ7IC8vIHB4XHJcblxyXG4gICAgY29uc3QgcG9zaXRpb25lZCA9IGZpeHR1cmVzLm1hcCgoZml4dHVyZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVQb2ludCA9IHRoaXMuZ2V0Rml4dHVyZUFuY2hvclBvaW50KGZpeHR1cmUpO1xyXG4gICAgICBjb25zdCByZWxhdGl2ZVggPSBmaXh0dXJlUG9pbnQueCAtIG9yaWdpbi54O1xyXG4gICAgICBjb25zdCByZWxhdGl2ZVkgPSBmaXh0dXJlUG9pbnQueSAtIG9yaWdpbi55O1xyXG4gICAgICBjb25zdCBjcm9zcyA9IGRpcmVjdGlvbi54ICogcmVsYXRpdmVZIC0gZGlyZWN0aW9uLnkgKiByZWxhdGl2ZVg7XHJcbiAgICAgIGNvbnN0IGRvdCA9IGRpcmVjdGlvbi54ICogcmVsYXRpdmVYICsgZGlyZWN0aW9uLnkgKiByZWxhdGl2ZVk7XHJcbiAgICAgIGNvbnN0IHNpZGUgPSBNYXRoLmFicyhjcm9zcykgPCAxZS00ID8gMCA6IGNyb3NzID4gMCA/IDEgOiAtMTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZml4dHVyZSxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICBzaWRlLFxyXG4gICAgICAgIHByb2plY3Rpb246IGRvdCxcclxuICAgICAgICBkaXN0YW5jZUZyb21MaW5lOiBNYXRoLmFicyhjcm9zcyksXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBwb3NpdGlvbmVkLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgY29uc3Qgc2lkZURlbHRhID0gc2lkZVJhbmsoYS5zaWRlKSAtIHNpZGVSYW5rKGIuc2lkZSk7XHJcbiAgICAgIGlmIChzaWRlRGVsdGEgIT09IDApIHJldHVybiBzaWRlRGVsdGE7XHJcblxyXG4gICAgICBjb25zdCBwcm9qZWN0aW9uRGVsdGEgPSBhLnByb2plY3Rpb24gLSBiLnByb2plY3Rpb247XHJcbiAgICAgIGlmIChNYXRoLmFicyhwcm9qZWN0aW9uRGVsdGEpID4gcHJvamVjdGlvblRvbGVyYW5jZSlcclxuICAgICAgICByZXR1cm4gcHJvamVjdGlvbkRlbHRhO1xyXG5cclxuICAgICAgY29uc3QgbGluZURpc3RhbmNlRGVsdGEgPSBiLmRpc3RhbmNlRnJvbUxpbmUgLSBhLmRpc3RhbmNlRnJvbUxpbmU7XHJcbiAgICAgIGlmIChNYXRoLmFicyhsaW5lRGlzdGFuY2VEZWx0YSkgPiAxZS00KSByZXR1cm4gbGluZURpc3RhbmNlRGVsdGE7XHJcblxyXG4gICAgICBjb25zdCBlbGVtZW50RGVsdGEgPVxyXG4gICAgICAgIChOdW1iZXIoYS5maXh0dXJlPy5hc3NvY2lhdGVkRWxlbWVudE51bWJlcikgfHxcclxuICAgICAgICAgIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSAtXHJcbiAgICAgICAgKE51bWJlcihiLmZpeHR1cmU/LmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyKSB8fCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgICAgIGlmIChlbGVtZW50RGVsdGEgIT09IDApIHJldHVybiBlbGVtZW50RGVsdGE7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlRGVsdGEgPVxyXG4gICAgICAgIChOdW1iZXIoYS5maXh0dXJlPy5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIpIHx8XHJcbiAgICAgICAgICBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgLVxyXG4gICAgICAgIChOdW1iZXIoYi5maXh0dXJlPy5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIpIHx8XHJcbiAgICAgICAgICBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XHJcbiAgICAgIGlmIChmaXh0dXJlRGVsdGEgIT09IDApIHJldHVybiBmaXh0dXJlRGVsdGE7XHJcblxyXG4gICAgICByZXR1cm4gYS5pbmRleCAtIGIuaW5kZXg7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcG9zaXRpb25lZC5tYXAoKGl0ZW0pID0+IGl0ZW0uZml4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpeHR1cmVBbmNob3JQb2ludChmaXh0dXJlOiBhbnkpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0ge1xyXG4gICAgY29uc3QgcG9zaXRpb25Vbml0ID0gZml4dHVyZT8ucmVsYXRpdmVQb3NpdGlvbj8udW5pdCB8fCBcImZ0XCI7XHJcbiAgICBjb25zdCB3aWR0aFVuaXQgPSBmaXh0dXJlPy5maXh0dXJlU3RhdGljV2lkdGg/LnVuaXQgfHwgXCJmdFwiO1xyXG4gICAgY29uc3QgbGVuZ3RoVW5pdCA9IGZpeHR1cmU/LmZpeHR1cmVTdGF0aWNMZW5ndGg/LnVuaXQgfHwgXCJmdFwiO1xyXG5cclxuICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmU/LnJlbGF0aXZlUG9zaXRpb24/LnggfHwgMCwgcG9zaXRpb25Vbml0KTtcclxuICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmU/LnJlbGF0aXZlUG9zaXRpb24/LnkgfHwgMCwgcG9zaXRpb25Vbml0KTtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgZml4dHVyZT8uZml4dHVyZVN0YXRpY1dpZHRoPy52YWx1ZSB8fCAwLFxyXG4gICAgICB3aWR0aFVuaXQsXHJcbiAgICApO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgZml4dHVyZT8uZml4dHVyZVN0YXRpY0xlbmd0aD8udmFsdWUgfHwgMCxcclxuICAgICAgbGVuZ3RoVW5pdCxcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeDogeCArIHdpZHRoIC8gMixcclxuICAgICAgeTogeSArIGhlaWdodCAvIDIsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkcmF3RW50cmFuY2VEaXNzZWN0aW9uTGluZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIGFycm93R3JvdXA6IGZhYnJpYy5Hcm91cCxcclxuICAgIGFycm93V2lkdGg6IG51bWJlcixcclxuICAgIGFycm93SGVpZ2h0OiBudW1iZXIsXHJcbiAgICBhbmdsZTogbnVtYmVyLFxyXG4gICkge1xyXG4gICAgLy8gR2V0IHRoZSBhcnJvdyBwYXRoIGZyb20gdGhlIGdyb3VwXHJcbiAgICBjb25zdCBvYmplY3RzID0gYXJyb3dHcm91cC5nZXRPYmplY3RzKCk7XHJcbiAgICBjb25zdCBhcnJvd1BhdGggPSBvYmplY3RzLmZpbmQoKG9iaikgPT4gb2JqLnR5cGUgPT09IFwicGF0aFwiKSBhcyBmYWJyaWMuUGF0aDtcclxuXHJcbiAgICBpZiAoIWFycm93UGF0aCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIEdldCB0aGUgZ3JvdXAncyBib3VuZGluZyBib3ggdG8gZmluZCB0aGUgY2VudGVyXHJcbiAgICBjb25zdCBncm91cEJvdW5kcyA9IGFycm93R3JvdXAuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgLy8gVGhlIHBhdGgncyBwb3NpdGlvbiB3aXRoaW4gdGhlIGdyb3VwXHJcbiAgICBjb25zdCBwYXRoTGVmdCA9IGFycm93UGF0aC5sZWZ0IHx8IDA7XHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIHRpcCBYOiByaWdodG1vc3QgcG9pbnQgb2YgdGhlIHBhdGhcclxuICAgIGNvbnN0IHRpcEluR3JvdXBYID0gcGF0aExlZnQgKyBhcnJvd1dpZHRoO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwQ2VudGVyID0gYXJyb3dHcm91cC5nZXRDZW50ZXJQb2ludCgpO1xyXG4gICAgY29uc3QgaW52TWF0cml4ID0gZmFicmljLnV0aWwuaW52ZXJ0VHJhbnNmb3JtKFxyXG4gICAgICBhcnJvd0dyb3VwLmNhbGNUcmFuc2Zvcm1NYXRyaXgoKSxcclxuICAgICk7XHJcbiAgICBjb25zdCBncm91cENlbnRlckluR3JvdXAgPSBmYWJyaWMudXRpbC50cmFuc2Zvcm1Qb2ludChcclxuICAgICAgZ3JvdXBDZW50ZXIsXHJcbiAgICAgIGludk1hdHJpeCxcclxuICAgICk7XHJcblxyXG4gICAgLy8gVXNlIHRoZSBncm91cCdzIHZlcnRpY2FsIGNlbnRlciBmb3IgWVxyXG4gICAgY29uc3QgdGlwSW5Hcm91cFkgPSBncm91cENlbnRlckluR3JvdXAueTtcclxuXHJcbiAgICAvLyBUcmFuc2Zvcm0gZnJvbSBncm91cCBjb29yZGluYXRlcyB0byBjYW52YXMgY29vcmRpbmF0ZXNcclxuICAgIGNvbnN0IHRpcFBvaW50ID0gbmV3IGZhYnJpYy5Qb2ludCh0aXBJbkdyb3VwWCwgdGlwSW5Hcm91cFkpO1xyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRQb2ludCA9IGZhYnJpYy51dGlsLnRyYW5zZm9ybVBvaW50KFxyXG4gICAgICB0aXBQb2ludCxcclxuICAgICAgYXJyb3dHcm91cC5jYWxjVHJhbnNmb3JtTWF0cml4KCksXHJcbiAgICApO1xyXG4gICAgY29uc3QgdGlwWCA9IHRyYW5zZm9ybWVkUG9pbnQueDtcclxuICAgIGNvbnN0IHRpcFkgPSB0cmFuc2Zvcm1lZFBvaW50Lnk7XHJcblxyXG4gICAgLy8gR2V0IHN0b3JlIGJvdW5kc1xyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcbiAgICBpZiAoIWJvdW5kcy53aWR0aCB8fCAhYm91bmRzLmhlaWdodCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBkaXJlY3Rpb24gdmVjdG9yIHBhcmFsbGVsIHRvIHRoZSBlbnRyYW5jZSAoaW4gdGhlIGRpcmVjdGlvbiB0aGUgYXJyb3cgcG9pbnRzKVxyXG4gICAgY29uc3QgcmFkID0gKGFuZ2xlICogTWF0aC5QSSkgLyAxODA7XHJcbiAgICBjb25zdCBkaXJlY3Rpb25YID0gTWF0aC5jb3MocmFkKTtcclxuICAgIGNvbnN0IGRpcmVjdGlvblkgPSBNYXRoLnNpbihyYWQpO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBpbnRlcnNlY3Rpb24gcG9pbnRzIHdpdGggc3RvcmUgYm91bmRhcmllcyB1c2luZyBsaW5lLXJlY3RhbmdsZSBpbnRlcnNlY3Rpb25cclxuICAgIGNvbnN0IGludGVyc2VjdGlvbnM6IEFycmF5PHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfT4gPSBbXTtcclxuXHJcbiAgICAvLyBDaGVjayBpbnRlcnNlY3Rpb24gd2l0aCBlYWNoIGJvdW5kYXJ5IGVkZ2VcclxuICAgIGNvbnN0IGVkZ2VzID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgeDE6IGJvdW5kcy5sZWZ0LFxyXG4gICAgICAgIHkxOiBib3VuZHMudG9wLFxyXG4gICAgICAgIHgyOiBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCxcclxuICAgICAgICB5MjogYm91bmRzLnRvcCxcclxuICAgICAgfSwgLy8gVG9wXHJcbiAgICAgIHtcclxuICAgICAgICB4MTogYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGgsXHJcbiAgICAgICAgeTE6IGJvdW5kcy50b3AsXHJcbiAgICAgICAgeDI6IGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoLFxyXG4gICAgICAgIHkyOiBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCxcclxuICAgICAgfSwgLy8gUmlnaHRcclxuICAgICAge1xyXG4gICAgICAgIHgxOiBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCxcclxuICAgICAgICB5MTogYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQsXHJcbiAgICAgICAgeDI6IGJvdW5kcy5sZWZ0LFxyXG4gICAgICAgIHkyOiBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCxcclxuICAgICAgfSwgLy8gQm90dG9tXHJcbiAgICAgIHtcclxuICAgICAgICB4MTogYm91bmRzLmxlZnQsXHJcbiAgICAgICAgeTE6IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0LFxyXG4gICAgICAgIHgyOiBib3VuZHMubGVmdCxcclxuICAgICAgICB5MjogYm91bmRzLnRvcCxcclxuICAgICAgfSwgLy8gTGVmdFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyBFeHRlbmQgbGluZSBpbiBib3RoIGRpcmVjdGlvbnMgdG8gZmluZCBpbnRlcnNlY3Rpb25zXHJcbiAgICBjb25zdCBtYXhEaXN0YW5jZSA9IE1hdGgubWF4KGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCkgKiAyO1xyXG4gICAgZm9yIChjb25zdCBlZGdlIG9mIGVkZ2VzKSB7XHJcbiAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IHRoaXMubGluZUludGVyc2VjdGlvbihcclxuICAgICAgICB0aXBYLFxyXG4gICAgICAgIHRpcFksXHJcbiAgICAgICAgdGlwWCArIGRpcmVjdGlvblggKiBtYXhEaXN0YW5jZSxcclxuICAgICAgICB0aXBZICsgZGlyZWN0aW9uWSAqIG1heERpc3RhbmNlLFxyXG4gICAgICAgIGVkZ2UueDEsXHJcbiAgICAgICAgZWRnZS55MSxcclxuICAgICAgICBlZGdlLngyLFxyXG4gICAgICAgIGVkZ2UueTIsXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbnRlcnNlY3Rpb24pIHtcclxuICAgICAgICBpbnRlcnNlY3Rpb25zLnB1c2goaW50ZXJzZWN0aW9uKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uQmFjayA9IHRoaXMubGluZUludGVyc2VjdGlvbihcclxuICAgICAgICB0aXBYLFxyXG4gICAgICAgIHRpcFksXHJcbiAgICAgICAgdGlwWCAtIGRpcmVjdGlvblggKiBtYXhEaXN0YW5jZSxcclxuICAgICAgICB0aXBZIC0gZGlyZWN0aW9uWSAqIG1heERpc3RhbmNlLFxyXG4gICAgICAgIGVkZ2UueDEsXHJcbiAgICAgICAgZWRnZS55MSxcclxuICAgICAgICBlZGdlLngyLFxyXG4gICAgICAgIGVkZ2UueTIsXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbnRlcnNlY3Rpb25CYWNrKSB7XHJcbiAgICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGludGVyc2VjdGlvbkJhY2spO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoID49IDIpIHtcclxuICAgICAgLy8gRmluZCB0aGUgdHdvIHBvaW50cyB0aGF0IGFyZSBmYXJ0aGVzdCBhcGFydCAodG8gZHJhdyB0aGUgZnVsbCBsaW5lIGFjcm9zcyB0aGUgc3RvcmUpXHJcbiAgICAgIGxldCBtYXhEaXN0ID0gMDtcclxuICAgICAgbGV0IHBvaW50MSA9IGludGVyc2VjdGlvbnNbMF07XHJcbiAgICAgIGxldCBwb2ludDIgPSBpbnRlcnNlY3Rpb25zWzFdO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnRlcnNlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgaW50ZXJzZWN0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3QgZGlzdCA9IE1hdGguc3FydChcclxuICAgICAgICAgICAgTWF0aC5wb3coaW50ZXJzZWN0aW9uc1tpXS54IC0gaW50ZXJzZWN0aW9uc1tqXS54LCAyKSArXHJcbiAgICAgICAgICAgICAgTWF0aC5wb3coaW50ZXJzZWN0aW9uc1tpXS55IC0gaW50ZXJzZWN0aW9uc1tqXS55LCAyKSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoZGlzdCA+IG1heERpc3QpIHtcclxuICAgICAgICAgICAgbWF4RGlzdCA9IGRpc3Q7XHJcbiAgICAgICAgICAgIHBvaW50MSA9IGludGVyc2VjdGlvbnNbaV07XHJcbiAgICAgICAgICAgIHBvaW50MiA9IGludGVyc2VjdGlvbnNbal07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBEcmF3IHRoZSBsaW5lXHJcbiAgICAgIGNvbnN0IGxpbmUgPSBuZXcgZmFicmljLkxpbmUoW3BvaW50MS54LCBwb2ludDEueSwgcG9pbnQyLngsIHBvaW50Mi55XSwge1xyXG4gICAgICAgIHN0cm9rZTogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICB9KSBhcyBmYWJyaWMuTGluZSAmIHsgaXNEaXNzZWN0aW9uTGluZT86IGJvb2xlYW4gfTtcclxuXHJcbiAgICAgIGxpbmUuaXNEaXNzZWN0aW9uTGluZSA9IHRydWU7XHJcblxyXG4gICAgICBjYW52YXMuYWRkKGxpbmUpO1xyXG4gICAgICBjYW52YXMuc2VuZE9iamVjdFRvQmFjayhsaW5lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGluZUludGVyc2VjdGlvbihcclxuICAgIHgxOiBudW1iZXIsXHJcbiAgICB5MTogbnVtYmVyLFxyXG4gICAgeDI6IG51bWJlcixcclxuICAgIHkyOiBudW1iZXIsXHJcbiAgICB4MzogbnVtYmVyLFxyXG4gICAgeTM6IG51bWJlcixcclxuICAgIHg0OiBudW1iZXIsXHJcbiAgICB5NDogbnVtYmVyLFxyXG4gICk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwge1xyXG4gICAgY29uc3QgZGVub20gPSAoeDEgLSB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgLSB4NCk7XHJcbiAgICBpZiAoTWF0aC5hYnMoZGVub20pIDwgMWUtMTApIHJldHVybiBudWxsOyAvLyBMaW5lcyBhcmUgcGFyYWxsZWxcclxuXHJcbiAgICBjb25zdCB0ID0gKCh4MSAtIHgzKSAqICh5MyAtIHk0KSAtICh5MSAtIHkzKSAqICh4MyAtIHg0KSkgLyBkZW5vbTtcclxuICAgIGNvbnN0IHUgPSAtKCh4MSAtIHgyKSAqICh5MSAtIHkzKSAtICh5MSAtIHkyKSAqICh4MSAtIHgzKSkgLyBkZW5vbTtcclxuXHJcbiAgICAvLyBDaGVjayBpZiBpbnRlcnNlY3Rpb24gaXMgd2l0aGluIGJvdGggbGluZSBzZWdtZW50c1xyXG4gICAgaWYgKHQgPj0gMCAmJiB0IDw9IDEgJiYgdSA+PSAwICYmIHUgPD0gMSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHg6IHgxICsgdCAqICh4MiAtIHgxKSxcclxuICAgICAgICB5OiB5MSArIHQgKiAoeTIgLSB5MSksXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZURpc3NlY3Rpb25MaW5lcygpIHtcclxuICAgIGlmICghdGhpcy5jYW52YXMpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBvYmplY3RzID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgY29uc3QgZGlzc2VjdGlvbkxpbmVzID0gb2JqZWN0cy5maWx0ZXIoXHJcbiAgICAgIChvYmo6IGFueSkgPT4gb2JqLmlzRGlzc2VjdGlvbkxpbmUgPT09IHRydWUsXHJcbiAgICApO1xyXG5cclxuICAgIGRpc3NlY3Rpb25MaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XHJcbiAgICAgIHRoaXMuY2FudmFzPy5yZW1vdmUobGluZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURpc3NlY3Rpb25MaW5lcygpIHtcclxuICAgIGlmICghdGhpcy5jYW52YXMpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnJlbW92ZURpc3NlY3Rpb25MaW5lcygpO1xyXG5cclxuICAgIGNvbnN0IGVudHJhbmNlT2JqZWN0cyA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcigob2JqOiBhbnkpID0+IG9iai5vYmpUeXBlID09PSBcImVudHJhbmNlXCIpIGFzIGZhYnJpYy5Hcm91cFtdO1xyXG5cclxuICAgIGVudHJhbmNlT2JqZWN0cy5mb3JFYWNoKChlbnRyYW5jZUdyb3VwKSA9PiB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnREYXRhID0gKGVudHJhbmNlR3JvdXAgYXMgYW55KS5kYXRhO1xyXG4gICAgICBpZiAoIWVsZW1lbnREYXRhKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCB3aWR0aCA9IGVudHJhbmNlR3JvdXAuZ2V0U2NhbGVkV2lkdGgoKSB8fCA4MDtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gZW50cmFuY2VHcm91cC5nZXRTY2FsZWRIZWlnaHQoKSB8fCA3NTtcclxuICAgICAgY29uc3QgYW5nbGUgPSBlbnRyYW5jZUdyb3VwLmFuZ2xlIHx8IDA7XHJcblxyXG4gICAgICB0aGlzLmRyYXdFbnRyYW5jZURpc3NlY3Rpb25MaW5lKFxyXG4gICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgIGVudHJhbmNlR3JvdXAsXHJcbiAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgIGFuZ2xlLFxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGlkPVwib25ib2FyZC1wbGFub1wiPlxyXG4gICAgPCEtLSBMb2FkaW5nIFN0YXRlIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImlzUGFnZUxvYWRpbmdcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbS0wXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJTa2VsZXRvblwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2tlbGV0b25Mb2FkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNrZWxldG9uTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza2VsZXRvbkxvYWRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBDb250ZW50IC0tPlxyXG4gICAgPGRpdiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1BhZ2VMb2FkaW5nIH1cIj5cclxuICAgICAgICA8IS0tIEhlYWRlciBBY2NvcmRpb24gLS0+XHJcbiAgICAgICAgPGRpdiBpZD1cImhlYWRlclwiIG5nYkFjY29yZGlvbiAjYWNjb3JkaW9uPVwibmdiQWNjb3JkaW9uXCIgY2xhc3M9XCJteS00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uSXRlbT1cImRldGFpbHNcIiBbY29sbGFwc2VkXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkhlYWRlciBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtNiBweS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtNCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OjVweDtcIiAqbmdJZj1cInBsYW5vRGF0YT8uc3RvcmVOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9J3RpdGxlJz57e3BsYW5vRGF0YT8uc3RvcmVOYW1lfX0gLSBQbGFubzwvaDI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCAqbmdJZj1cImZsb29yc0xpc3QubGVuZ3RoXCIgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkRmxvb3JJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCIgW2RhdGFdPVwiZmxvb3JzTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZWRpdEZpeHR1cmVcIiBjbGFzcz1cInVwZGF0ZUNsYXNzXCI+TGFzdCBVcGRhdGU6IHt7Zmxvb3JEYXRhPy51cGRhdGVkQXR9fTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtNCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRWRpdCBGaXh0dXJlIE1vZGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdEZpeHR1cmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZpeHR1cmVQYWdlQ2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwib25GaXh0dXJlU2F2ZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmUgJiBDbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkFjY29yZGlvbkJ1dHRvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImhlYWRlclwiIGNsYXNzPVwicm93IG14LTAgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUGxhbm8gQ29tcGxldGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjdXJzb3I6IHVuc2V0O1wiIGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYW5vIENvbXBsZXRpb24gJVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgbmdiVG9vbHRpcD1cIiUgb2Ygb3ZlcmFsbCBwbGFub2dyYW0gY29tcGxldGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xNTE3XzEyOTgwNSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgMTJWOU05IDZIOS4wMDc1TTE2LjUgOUMxNi41IDEzLjE0MjEgMTMuMTQyMSAxNi41IDkgMTYuNUM0Ljg1Nzg2IDE2LjUgMS41IDEzLjE0MjEgMS41IDlDMS41IDQuODU3ODYgNC44NTc4NiAxLjUgOSAxLjVDMTMuMTQyMSAxLjUgMTYuNSA0Ljg1Nzg2IDE2LjUgOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNTE3XzEyOTgwNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiIHN0eWxlPVwiaGVpZ2h0OiA0cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWzI1LCA1MF0uaW5jbHVkZXMoZ2V0UHJvZ3Jlc3NWYWx1ZSkgPyAnYmctd2FybmluZycgOiAnYmctc3VjY2VzcydcIiByb2xlPVwicHJvZ3Jlc3NiYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiJ3dpZHRoOicgKyBnZXRQcm9ncmVzc1ZhbHVlICsgJyUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJnZXRQcm9ncmVzc1ZhbHVlXCIgYXJpYS12YWx1ZW1pbj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLXZhbHVlbWF4PVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPnt7IGdldFByb2dyZXNzVmFsdWUgfX0lPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExheW91dCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjdXJzb3I6IHVuc2V0O1wiIGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGI+e3tmbG9vckRhdGE/LmZsb29yTnVtYmVyfX0ve3sgcGxhbm9EYXRhPy5mbG9vcnM/Lmxlbmd0aCB9fTwvYj4gTGF5b3V0PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kaWNhdG9yIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRTdGF0dXMgPT09ICdhbGxvY2F0aW9uUGVuZGluZycgPyAnY29tcGxldGVkJyA6ICdkcmFmdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U3RhdHVzID09PSAnYWxsb2NhdGlvblBlbmRpbmcnID8gJ0NvbXBsZXRlZCcgOiAnRHJhZnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZpeHR1cmVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImN1cnNvcjogdW5zZXQ7XCIgY2xhc3M9XCJjb2wgZmlsdGVyLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz48Yj57eyBhbGxGaXh0dXJlSW5zdGFuY2VzLmxlbmd0aCB9fTwvYj4gRml4dHVyZXM8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgbXQtMlwiIFtuZ0NsYXNzXT1cImdldFN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRTdGF0dXNUZXh0IH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEJvZHkgLS0+XHJcbiAgICAgICAgPGRpdiBpZD1cImJvZHlcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8IS0tIExlZnQgQ29sdW1uIC0tPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjb2xsYXBzZWQtY29sJzogaXNMZWZ0UGFuZWxDb2xsYXBzZWQsICdjb2wtMyc6ICFpc0xlZnRQYW5lbENvbGxhcHNlZCwnZC1ub25lJzogZWRpdEZpeHR1cmUgIH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc0xlZnRQYW5lbENvbGxhcHNlZCB9XCIgW2Zvcm1Hcm91cF09XCJsYXlvdXRGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uIGFjY29yZGlvbj1cIk5nYkFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXYWxscyBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1XYWxscy5jb250cm9scy5sZW5ndGg7IGVsc2UgYWRkV2FsbEFjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUFycmF5TmFtZT1cIndhbGxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdldEZvcm1XYWxscy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCJpXCIgW25nYkFjY29yZGlvbkl0ZW1dPVwiaS50b1N0cmluZygpXCIgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYWluaGVhZGluZyBwLTBcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMiB3YWxsLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmdldChcImVsZW1lbnRUeXBlXCIpPy52YWx1ZSB8IHRpdGxlY2FzZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGxheW91dEZvcm0uZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiIG5nYlRvb2x0aXA9XCJSb3RhdGUgdGhpcyB3YWxsLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicm90YXRlV2FsbChnZXRFbGVtZW50TnVtYmVyKGdyb3VwKSEpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMuNzM3MzUgOC4yNTAxMUM0LjEyMTkzIDguMjQzNjIgNC40NDM3NyA4LjUyNzc2IDQuNDkzMzggOC44OTk5OEw0LjQ5OTkgOC45ODczNUw0LjUwMjYyIDkuMTU1MTZDNC41ODQzNCAxMS41NzQxIDYuNTcyNDMgMTMuNSA5IDEzLjVDOS4xNDAyMiAxMy41IDkuMjc5NTEgMTMuNDkzNiA5LjQxNzU2IDEzLjQ4MDlMOS4yMTk2NyAxMy4yODAzQzguOTI2NzggMTIuOTg3NCA4LjkyNjc4IDEyLjUxMjYgOS4yMTk2NyAxMi4yMTk3QzkuNTEyNTcgMTEuOTI2OCA5Ljk4NzQ0IDExLjkyNjggMTAuMjgwMyAxMi4yMTk3TDExLjc4MDMgMTMuNzE5N0MxMi4wNzMyIDE0LjAxMjYgMTIuMDczMiAxNC40ODc0IDExLjc4MDMgMTQuNzgwM0wxMC4yODAzIDE2LjI4MDNDOS45ODc0NCAxNi41NzMyIDkuNTEyNTcgMTYuNTczMiA5LjIxOTY3IDE2LjI4MDNDOC45MjY3OCAxNS45ODc0IDguOTI2NzggMTUuNTEyNiA5LjIxOTY3IDE1LjIxOTdMOS40NTgzNyAxNC45ODI3QzkuMzA2NDYgMTQuOTk0MiA5LjE1MzU5IDE1IDkgMTVDNS44MjY1MyAxNSAzLjIxNjY1IDEyLjUzMjEgMy4wMTI1IDkuMzgyODlMMy4wMDMxNSA5LjE5MzE0TDMuMDAwMTEgOS4wMTI2NUMyLjk5MzEyIDguNTk4NDkgMy4zMjMyIDguMjU3MDkgMy43MzczNSA4LjI1MDExWk04Ljc4MDMzIDEuNzE5NjdDOS4wNTA3IDEuOTkwMDMgOS4wNzE0OSAyLjQxNTQ2IDguODQyNzIgMi43MDk2N0w4Ljc4MDMzIDIuNzgwMzNMOC41NDE4NyAzLjAxNzI2QzguNjkzNzEgMy4wMDU3OCA4Ljg0NjUgMyA5IDNDMTIuMzEzNyAzIDE1IDUuNjg2MjkgMTUgOUMxNSA5LjQxNDIxIDE0LjY2NDIgOS43NSAxNC4yNSA5Ljc1QzEzLjgzNTggOS43NSAxMy41IDkuNDE0MjEgMTMuNSA5QzEzLjUgNi41MTQ3MiAxMS40ODUzIDQuNSA5IDQuNUM4Ljg1OTcgNC41IDguNzIwMzQgNC41MDY0IDguNTgyMjEgNC41MTkwOUw4Ljc4MDMzIDQuNzE5NjdDOS4wNzMyMyA1LjAxMjU2IDkuMDczMjMgNS40ODc0NCA4Ljc4MDMzIDUuNzgwMzNDOC41MDk5NyA2LjA1MDY5IDguMDg0NTUgNi4wNzE0OSA3Ljc5MDMzIDUuODQyNzJMNy43MTk2NyA1Ljc4MDMzTDYuMjE5NjcgNC4yODAzM0M1Ljk0OTMxIDQuMDA5OTcgNS45Mjg1MSAzLjU4NDU0IDYuMTU3MjggMy4yOTAzM0w2LjIxOTY3IDMuMjE5NjdMNy43MTk2NyAxLjcxOTY3QzguMDEyNTcgMS40MjY3OCA4LjQ4NzQ0IDEuNDI2NzggOC43ODAzMyAxLjcxOTY3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDc1NDY3XCIgc3Ryb2tlPVwiIzQ3NTQ2N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjAuMDAwNjRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0xXCIgbmdiVG9vbHRpcD1cIkluc2VydCBuZXcgd2FsbCBiZWxvdy5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld1dhbGwoZ2V0RWxlbWVudE51bWJlcihncm91cCkhKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNjJfOClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSA5Ljc1QzExLjA3MDcgOS43NSAxMi43NSAxMS40MjkzIDEyLjc1IDEzLjVDMTIuNzUgMTUuNTcwOCAxMS4wNzA3IDE3LjI1IDkgMTcuMjVDNi45MjkyNSAxNy4yNSA1LjI1IDE1LjU3MDggNS4yNSAxMy41QzUuMjUgMTEuNDI5MyA2LjkyOTI1IDkuNzUgOSA5Ljc1Wk05Ljc1IDExLjI1SDguMjVWMTIuNzQ5M0w2Ljc1IDEyLjc1VjE0LjI1TDguMjUgMTQuMjQ5M1YxNS43NUg5Ljc1VjE0LjI0OTNMMTEuMjUgMTQuMjVWMTIuNzVMOS43NSAxMi43NDkzVjExLjI1Wk0xNSAyLjI1QzE1LjQxNCAyLjI1IDE1Ljc1IDIuNTg2IDE1Ljc1IDNWNy41QzE1Ljc1IDcuOTE0IDE1LjQxNCA4LjI1IDE1IDguMjVIM0MyLjU4NiA4LjI1IDIuMjUgNy45MTQgMi4yNSA3LjVWM0MyLjI1IDIuNTg2IDIuNTg2IDIuMjUgMyAyLjI1SDE1Wk0zLjc1IDMuNzVWNi43NUgxNC4yNVYzLjc1SDMuNzVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDc1NDY3XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzYyXzhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJSZW1vdmUgdGhpcyB3YWxsIGFuZCBpdHMgZml4dHVyZXMuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVXYWxsKGdldEVsZW1lbnROdW1iZXIoZ3JvdXApISk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzYzXzI1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC43MDk0IDEuNUMxMS4zNTUxIDEuNSAxMS45MjgzIDEuOTEzMTQgMTIuMTMyNCAyLjUyNTY1TDEyLjU0MDYgMy43NUgxNUMxNS40MTQyIDMuNzUgMTUuNzUgNC4wODU3OSAxNS43NSA0LjVDMTUuNzUgNC45MTQyIDE1LjQxNDIgNS4yNDk5OSAxNSA1LjI1TDE0Ljk5ODEgNS4zMDM0NEwxNC4zNDc2IDE0LjQxMDNDMTQuMjYzNSAxNS41ODc4IDEzLjI4MzggMTYuNSAxMi4xMDM0IDE2LjVINS44OTY2OEM0LjcxNjI0IDE2LjUgMy43MzY1IDE1LjU4NzggMy42NTI0IDE0LjQxMDNMMy4wMDE5MSA1LjMwMzQ0QzMuMDAwNjIgNS4yODU1MSAyLjk5OTk4IDUuMjY3NjkgMi45OTk5NyA1LjI1QzIuNTg1NzcgNS4yNDk5OSAyLjI1IDQuOTE0MiAyLjI1IDQuNUMyLjI1IDQuMDg1NzkgMi41ODU3OSAzLjc1IDMgMy43NUg1LjQ1OTQzTDUuODY3NTQgMi41MjU2NUM2LjA3MTcyIDEuOTEzMTQgNi42NDQ5MyAxLjUgNy4yOTA1NyAxLjVIMTAuNzA5NFpNMTMuNDk4MSA1LjI1SDQuNTAxOTFMNS4xNDg1OCAxNC4zMDM0QzUuMTc2NjIgMTQuNjk2IDUuNTAzMiAxNSA1Ljg5NjY4IDE1SDEyLjEwMzRDMTIuNDk2OCAxNSAxMi44MjM0IDE0LjY5NiAxMi44NTE0IDE0LjMwMzRMMTMuNDk4MSA1LjI1Wk03LjUgNy41QzcuODg0NjQgNy41IDguMjAxNjMgNy43ODk1MiA4LjI0NDk1IDguMTYyNTNMOC4yNSA4LjI1VjEyQzguMjUgMTIuNDE0MiA3LjkxNDIyIDEyLjc1IDcuNSAxMi43NUM3LjExNTM3IDEyLjc1IDYuNzk4MzcgMTIuNDYwNSA2Ljc1NTA1IDEyLjA4NzVMNi43NSAxMlY4LjI1QzYuNzUgNy44MzU3OCA3LjA4NTc4IDcuNSA3LjUgNy41Wk0xMC41IDcuNUMxMC45MTQyIDcuNSAxMS4yNSA3LjgzNTc4IDExLjI1IDguMjVWMTJDMTEuMjUgMTIuNDE0MiAxMC45MTQyIDEyLjc1IDEwLjUgMTIuNzVDMTAuMDg1OCAxMi43NSA5Ljc1IDEyLjQxNDIgOS43NSAxMlY4LjI1QzkuNzUgNy44MzU3OCAxMC4wODU4IDcuNSAxMC41IDcuNVpNMTAuNzA5NCAzSDcuMjkwNTdMNy4wNDA1NyAzLjc1SDEwLjk1OTVMMTAuNzA5NCAzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0YzMkIyQlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82M18yNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keSBjbGFzcz1cInBzLTAgcGUtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtaW4taGVpZ2h0OiA1MHB4XCIgZG5kRHJvcHpvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRuZERyb3ApPVwib25Ecm9wKCRldmVudCwgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaXh0dXJlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1GaXh0dXJlcyhpKS5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImZpeHR1cmVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRGb3JtRml4dHVyZXMoaSkuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkbmREcm9wem9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRuZERyb3ApPVwib25Ecm9wKCRldmVudCwgaSwgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwialwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG5kRHJhZ2dhYmxlXT1cInsgd2FsbEluZGV4OiBpLCBmaXh0dXJlSW5kZXg6IGogfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG5kRWZmZWN0QWxsb3dlZF09XCInYWxsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyBnLTAgbWItNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG5kRGlzYWJsZURyYWdJZl09XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGRuZERyYWdJbWFnZVJlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgY3Vyc29yOiBsYXlvdXRGb3JtLmRpc2FibGVkID8gJ2RlZmF1bHQnIDogJ21vdmUnLCBvcGFjaXR5OiAnMC41JyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjVweFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibSA0LjQ5NjA5NCAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIC02IDYgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gLTYgNiBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAwIDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJncmV5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZml4dHVyZUNvbmZpZ0lkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ19pZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIiduYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImZpeHR1cmVUZW1wbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0ZpeHR1cmUgJyArIChqICsgMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ViVGV4dEZpZWxkXT1cIidzdWJ0ZXh0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkZWxldGVGaXh0dXJlKCd3YWxsJywgaiwgaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMUwxIDlNMSAxTDkgOVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJsaW5rLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdGaXh0dXJlKCd3YWxsJywgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBzdHlsZT1cImJvcmRlci10b3A6IDFweCBkYXNoZWQgIzAwMDAwMDtcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPdGhlciBFbGVtZW50cyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRXYWxsT3RoZXJFbGVtZW50cyhpKS5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cIm90aGVyRWxlbWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaXh0dXJlIG9mIGdldFdhbGxPdGhlckVsZW1lbnRzKGkpLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwialwiIGNsYXNzPVwicm93IGctMCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTExXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+RWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBqICsgMSB9fTwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gYm91bmQgdG8gJ3R5cGUnIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFtpZEZpZWxkXT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJvdGhlckVsZW1lbnRMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidlbGVtZW50TGFiZWwnICsgalwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2hvdyBjdXN0b20gdGV4dCBpbnB1dCBvbmx5IHdoZW4gJ090aGVycycgaXMgc2VsZWN0ZWQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKGZpeHR1cmUuZ2V0KCd0eXBlJyk/LnZhbHVlKSA9PT0gJ090aGVycydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjdXN0b21OYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBjdXN0b20gZWxlbWVudCBuYW1lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJyZW1vdmVPdGhlckVsZW1lbnQoJ3dhbGwnLCBqLCBpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogMThweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDEwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImxpbmstYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld090aGVyRWxlbWVudHMoJ3dhbGwnLCBpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FkZFdhbGxBY3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkTmV3V2FsbCgwKVwiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSB3LTEwMCBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0IG5ldyB3YWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBzdHlsZT1cImJvcmRlci10b3A6IDFweCBkYXNoZWQgIzAwMDAwMDtcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmxvb3IgU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYkFjY29yZGlvbkl0ZW1dPVwiJ2Zsb29yJ1wiIGNsYXNzPVwibWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWFpbmhlYWRpbmcgcC0wXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yIHdhbGwtbGFiZWxcIj5GbG9vcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJwcy0wIHBlLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWluLWhlaWdodDogNTBweFwiIGRuZERyb3B6b25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkbmREcm9wKT1cIm9uRHJvcCgkZXZlbnQsICdmbG9vcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmxvb3IgRml4dHVyZXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtRmxvb3JGaXh0dXJlcy5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImZsb29yRml4dHVyZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaXh0dXJlIG9mIGdldEZvcm1GbG9vckZpeHR1cmVzLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZG5kRHJvcHpvbmUgKGRuZERyb3ApPVwib25Ecm9wKCRldmVudCwgJ2Zsb29yJywgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwialwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG5kRHJhZ2dhYmxlXT1cInsgd2FsbEluZGV4OiAnZmxvb3InLCBmaXh0dXJlSW5kZXg6IGogfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG5kRWZmZWN0QWxsb3dlZF09XCInYWxsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG5kRGlzYWJsZURyYWdJZl09XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IGctMCBtYi01XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGRuZERyYWdJbWFnZVJlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IG1vdmU7IG9wYWNpdHk6IDAuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjI1cHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0gNC40OTYwOTQgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAtNiA2IGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIC02IDYgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gMCAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiZ3JleVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpeHR1cmVDb25maWdJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidfaWQnXCIgW25hbWVGaWVsZF09XCInbmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJmaXh0dXJlVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidGaXh0dXJlICcgKyAoaiArIDEpXCIgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1YlRleHRGaWVsZF09XCInc3VidGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZGVsZXRlRml4dHVyZSgnZmxvb3InLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogMThweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMTAgMTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCIgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1idG5cIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld0ZpeHR1cmUoJ2Zsb29yJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBzdHlsZT1cImJvcmRlci10b3A6IDFweCBkYXNoZWQgIzAwMDAwMDtcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGbG9vciBPdGhlciBFbGVtZW50cyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1GbG9vck90aGVyRWxlbWVudHMuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmbG9vck90aGVyRWxlbWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaXh0dXJlIG9mIGdldEZvcm1GbG9vck90aGVyRWxlbWVudHMuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCJqXCIgY2xhc3M9XCJyb3cgZy0wIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5FbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGogKyAxIH19PC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEcm9wZG93biBmb3IgdHlwZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbaWRGaWVsZF09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInbGFiZWwnXCIgW2RhdGFdPVwib3RoZXJFbGVtZW50TGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZmxvb3JFbGVtZW50TGFiZWwnICsgalwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29uZGl0aW9uYWwgaW5wdXQgZm9yIGN1c3RvbSBuYW1lIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihmaXh0dXJlLmdldCgndHlwZScpPy52YWx1ZSkgPT09ICdPdGhlcnMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtdC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgY3VzdG9tIGVsZW1lbnQgbmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwicmVtb3ZlT3RoZXJFbGVtZW50KCdmbG9vcicsIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiAxOHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAxMCAxMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDFMMSA5TTEgMUw5IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJsaW5rLWJ0blwiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3T3RoZXJFbGVtZW50cygnZmxvb3InKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBDZW50ZXIgQ29sdW1uIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIG92ZXJmbG93LWhpZGRlbiBwb3NpdGlvbi1yZWxhdGl2ZVwiIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IGVkaXRGaXh0dXJlIH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJjYW52YXMtY2FyZFwiIGNsYXNzPVwiYy1jYXJkIHBvc2l0aW9uLXJlbGF0aXZlXCIgI2NhbnZhc0NvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIENhbnZhcyBWaWV3IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9XCJiYXNlLWNhbnZhc1wiICNiYXNlQ2FudmFzPjwvY2FudmFzPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDI0cHg7IHJpZ2h0OiAyNnB4O3dpZHRoOiBjYWxjKDEwMCUgLSA1MHB4KTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFbnRyYW5jZSBCdXR0b24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYXlvdXRGb3JtLmVuYWJsZWRcIiBuZ2JUb29sdGlwPVwiWW91IGNhbiBhZGQgdXAgdG8gdHdvIGVudHJhbmNlcy5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cImdldEVudHJhbmNlcz8ubGVuZ3RoIDwgMlwiIGNsYXNzPVwibWUtYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJwYWRkaW5nOiA4cHggMjBweCAhaW1wb3J0YW50O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBiZy13aGl0ZSBzaGFkb3ctc20gXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0RW50cmFuY2VzPy5sZW5ndGggPj0gMlwiIChjbGljayk9XCJhZGROZXdFbnRyYW5jZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIEVudHJhbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENhbmNlbCBlZGl0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYobGF5b3V0Rm9ybS5lbmFibGVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihnZXRTdGF0dXMgPT09ICdhbGxvY2F0aW9uUGVuZGluZycpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGJnLXdoaXRlIHNoYWRvdy1zbVwiIChjbGljayk9XCJjYW5jZWxFZGl0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi10ZXh0XCIgKGNsaWNrKT1cImNhbmNlbEVkaXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTYXZlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYobGF5b3V0Rm9ybS5lbmFibGVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihnZXRTdGF0dXMgPT09ICdkcmFmdCcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHNoYWRvdy1zbSBiZy13aGl0ZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTMwcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzU2F2aW5nTGF5b3V0XCIgKGNsaWNrKT1cInVwZGF0ZUxheW91dCh0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzU2F2aW5nTGF5b3V0XCIgY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhdmUgYXMgRHJhZnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1AZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDhweCAyMHB4ICFpbXBvcnRhbnQ7bWluLXdpZHRoOiA5MHB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1NhdmluZ0xheW91dFwiIChjbGljayk9XCJ1cGRhdGVMYXlvdXQodHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ0xheW91dFwiIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgc3Bpbm5lci1ib3JkZXItc21cIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29tcGFjdCBidXR0b24gKENBRCBsYXlvdXRzIG9ubHksIHZpZXcgbW9kZSkg4oCUIG9uZS1zaG90OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNraW5nIGNvbXBhY3RzIHRoZSBsYXlvdXQgYW5kIGRyb3BzIHRoZSB1c2VyIGludG8gZWRpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgc28gdGhlIGNoYW5nZSBpcyByZXZlcnRhYmxlIHZpYSBDYW5jZWwgYW5kIHBlcnNpc3RhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlhIFNhdmUgLyBTdWJtaXQuIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoY2FuU2hvd0NvbXBhY3RUb2dnbGUgJiYgbGF5b3V0Rm9ybS5kaXNhYmxlZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHNoYWRvdy1zbSBiZy13aGl0ZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb21wYWN0TGF5b3V0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJDb21wYWN0IGxheW91dC5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cG9seWxpbmUgcG9pbnRzPVwiNCAxNCAxMCAxNCAxMCAyMFwiPjwvcG9seWxpbmU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCIyMCAxMCAxNCAxMCAxNCA0XCI+PC9wb2x5bGluZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9XCIxNFwiIHkxPVwiMTBcIiB4Mj1cIjIxXCIgeTI9XCIzXCI+PC9saW5lPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluZSB4MT1cIjNcIiB5MT1cIjIxXCIgeDI9XCIxMFwiIHkyPVwiMTRcIj48L2xpbmU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFZGl0IEJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGlzRWRpdExheW91dEFsbG93ZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFZGl0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xMzIyXzUzMjUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQuMTY2NyAyLjQ5OTkzQzE0LjM4NTYgMi4yODEwNiAxNC42NDU1IDIuMTA3NDQgMTQuOTMxNCAxLjk4ODk5QzE1LjIxNzQgMS44NzA1NCAxNS41MjM5IDEuODA5NTcgMTUuODMzNCAxLjgwOTU3QzE2LjE0MjkgMS44MDk1NyAxNi40NDk0IDEuODcwNTQgMTYuNzM1NCAxLjk4ODk5QzE3LjAyMTQgMi4xMDc0NCAxNy4yODEyIDIuMjgxMDYgMTcuNTAwMSAyLjQ5OTkzQzE3LjcxOSAyLjcxODggMTcuODkyNiAyLjk3ODYzIDE4LjAxMSAzLjI2NDZDMTguMTI5NSAzLjU1MDU3IDE4LjE5MDQgMy44NTcwNiAxOC4xOTA0IDQuMTY2NTlDMTguMTkwNCA0LjQ3NjEyIDE4LjEyOTUgNC43ODI2MiAxOC4wMTEgNS4wNjg1OUMxNy44OTI2IDUuMzU0NTUgMTcuNzE5IDUuNjE0MzkgMTcuNTAwMSA1LjgzMzI2TDYuMjUwMDggMTcuMDgzM0wxLjY2Njc1IDE4LjMzMzNMMi45MTY3NSAxMy43NDk5TDE0LjE2NjcgMi40OTk5M1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTMyMl81MzI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDYW5jZWwgQnV0dG9uIChGcm9tIGFsbG9jYXRpb24pIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwibGF5b3V0Rm9ybS5kaXNhYmxlZCAmJiBpc0FsbG9jYXRpb25SdW5cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGJnLXdoaXRlIHNoYWRvdy1zbVwiIChjbGljayk9XCJvbkNsaWNrUmV2ZXJ0QWxsb2NhdGlvbigpIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUnVuIGFsbG9jYXRpb24gLyBDb21wbGV0ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGlzUnVuQWxsb2NhdGlvbkFsbG93ZWQgJiYgbGF5b3V0Rm9ybS5kaXNhYmxlZCAmJiBnZXRTdGF0dXMgPT09ICdhbGxvY2F0aW9uUGVuZGluZycpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCIhaXNBbGxvY2F0aW9uUnVuICYmIGhhc0ludmFsaWRIZWFkZXJGaXh0dXJlcyA/IGludmFsaWRIZWFkZXJGaXh0dXJlQ291bnQgKyAnIGZpeHR1cmUnICsgKGludmFsaWRIZWFkZXJGaXh0dXJlQ291bnQgPT09IDEgPyAnJyA6ICdzJykgKyAnIGhhdmUgdW5yZWNvZ25pemVkIGhlYWRlcnMuIEZpeCB0aGVtIHRvIHJ1biBhbGxvY2F0aW9uJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJwYWRkaW5nOiA4cHggMjBweCAhaW1wb3J0YW50O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG9jYXRpb25SdW4gJiYgaGFzSW52YWxpZEhlYWRlckZpeHR1cmVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tSdW5BbGxvY2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNBbGxvY2F0aW9uUnVuID8gJ0NvbXBsZXRlIEFsbG9jYXRpb24nIDogJ1J1biBBbGxvY2F0aW9uJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZ2V0U3RhdHVzID09PSAnZHJhZnQnXCIgdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwicGFkZGluZzogOHB4IDIwcHggIWltcG9ydGFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJvbkNsaWNrQXBwcm92ZUxheW91dCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJtaXQgZm9yIG1lcmNoIGFsbG9jYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJvdGF0ZSBCdXR0b24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicm90YXRlQ2FudmFzKGNhbnZhcyw5MClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIyMlwiIHZpZXdCb3g9XCIwIDAgMjYgMjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjM2MjY1IDcuMTc4ODdMNy4xNzYyNSA2LjM2Mjg3TDUuOTA0MjUgNS4wOTIwN0w1LjA4OTQ1IDUuOTA1NjdMNi4zNjI2NSA3LjE3ODg3Wk0xNS42NzEgNi4zNjQwN0wxOS42Mzc5IDEwLjMzMDlMMjAuOTA5OSA5LjA1NzY5TDE2Ljk0NDIgNS4wOTA4N0wxNS42NzEgNi4zNjQwN1pNMTkuNjM3OSAxOC44MjU3TDE4LjgyNDMgMTkuNjM5M0wyMC4wOTYzIDIwLjkxMDFMMjAuOTA5OSAyMC4wOTc3TDE5LjYzNzkgMTguODI1N1pNMTAuMzI5NSAxOS42MzkzTDYuMzYyNjUgMTUuNjcyNUw1LjA5MDY1IDE2Ljk0NTdMOS4wNTYyNiAyMC45MTEzTDEwLjMyOTUgMTkuNjM5M1pNMTguODI0MyAxOS42MzkzQzE3LjY1NDMgMjAuODA4MSAxNi44NDA3IDIxLjYxOTMgMTYuMTQ1OSAyMi4xNDk3QzE1LjQ3MTUgMjIuNjY0NSAxNS4wMTU1IDIyLjgyODkgMTQuNTc2MyAyMi44Mjg5VjI0LjYyODlDMTUuNTY3NSAyNC42Mjg5IDE2LjQwMjcgMjQuMjE3MyAxNy4yMzY3IDIzLjU4MTNDMTguMDUwMyAyMi45NjA5IDE4Ljk2MzUgMjIuMDQ1MyAyMC4wOTYzIDIwLjkxMjVMMTguODI0MyAxOS42MzkzWk05LjA1NjI2IDIwLjkxMTNDMTAuMTg5MSAyMi4wNDUzIDExLjEwMjMgMjIuOTU5NyAxMS45MTU5IDIzLjU4MTNDMTIuNzQ5OSAyNC4yMTczIDEzLjU4NTEgMjQuNjI4OSAxNC41NzYzIDI0LjYyODlWMjIuODI4OUMxNC4xMzcxIDIyLjgyODkgMTMuNjgyMyAyMi42NjQ1IDEzLjAwNjcgMjIuMTQ5N0MxMi4zMTE5IDIxLjYxOTMgMTEuNDk4MyAyMC44MDgxIDEwLjMyOTUgMTkuNjM5M0w5LjA1NjI2IDIwLjkxMTNaTTE5LjYzNzkgMTAuMzMwOUMyMC44MDY3IDExLjQ5OTcgMjEuNjE3OSAxMi4zMTMzIDIyLjE0ODMgMTMuMDA4MUMyMi42NjMxIDEzLjY4MzcgMjIuODI3NSAxNC4xMzg1IDIyLjgyNzUgMTQuNTc3N0gyNC42Mjc1QzI0LjYyNzUgMTMuNTg2NSAyNC4yMTU5IDEyLjc1MTMgMjMuNTc5OSAxMS45MTczQzIyLjk1OTUgMTEuMTAzNyAyMi4wNDI3IDEwLjE5MDUgMjAuOTA5OSA5LjA1NzY5TDE5LjYzNzkgMTAuMzMwOVpNMjAuOTA5OSAyMC4wOTc3QzIyLjA0MzkgMTguOTYzNyAyMi45NTgzIDE4LjA1MTcgMjMuNTc5OSAxNy4yMzgxQzI0LjIxNTkgMTYuNDA0MSAyNC42Mjc1IDE1LjU2ODkgMjQuNjI3NSAxNC41Nzc3SDIyLjgyNzVDMjIuODI3NSAxNS4wMTY5IDIyLjY2MzEgMTUuNDcyOSAyMi4xNDgzIDE2LjE0NzNDMjEuNjE3OSAxNi44NDIxIDIwLjgwNjcgMTcuNjU1NyAxOS42Mzc5IDE4LjgyNTdMMjAuOTA5OSAyMC4wOTc3Wk03LjE3NjI1IDYuMzYyODdDOC4zNDYyNSA1LjE5NDA3IDkuMTU5ODUgNC4zODE2NyA5Ljg1NDY1IDMuODUxMjdDMTAuNTI5IDMuMzM2NDcgMTAuOTg1IDMuMTczMjcgMTEuNDI0MiAzLjE3MzI3VjEuMzcyMDdDMTAuNDMzIDEuMzcyMDcgOS41OTc4NSAxLjc4MzY3IDguNzYzODUgMi40MTk2N0M3Ljk0OTA1IDMuMDQxMjcgNy4wMzcwNSAzLjk1NTY3IDUuOTA0MjUgNS4wODg0N0w3LjE3NjI1IDYuMzYyODdaTTE2Ljk0NDIgNS4wOTA4N0MxNS44MTE0IDMuOTU2ODcgMTQuODk4MiAzLjA0MTI3IDE0LjA4NDYgMi40MTk2N0MxMy4yNTA2IDEuNzgzNjcgMTIuNDE1NCAxLjM3MjA3IDExLjQyNDIgMS4zNzIwN1YzLjE3MzI3QzExLjg2MzQgMy4xNzMyNyAxMi4zMTgyIDMuMzM2NDcgMTIuOTkzOCAzLjg1MTI3QzEzLjY4ODYgNC4zODE2NyAxNC41MDIyIDUuMTkyODcgMTUuNjcxIDYuMzYxNjdMMTYuOTQ0MiA1LjA5MDg3Wk01LjA4OTQ1IDUuOTAzMjdDMy45NTY2NSA3LjAzNjA3IDMuMDQyMjUgNy45NDgwNyAyLjQyMDY1IDguNzYyODdDMS43ODQ2NSA5LjU5Njg3IDEuMzczMDUgMTAuNDMyMSAxLjM3MzA1IDExLjQyMzNIMy4xNzMwNUMzLjE3MzA1IDEwLjk4NDEgMy4zMzc0NSAxMC41MjgxIDMuODUyMjUgOS44NTM2N0M0LjM4MjY1IDkuMTU4ODcgNS4xOTM4NSA4LjM0NTI3IDYuMzYyNjUgNy4xNzUyN0w1LjA4OTQ1IDUuOTAzMjdaTTYuMzYyNjUgMTUuNjcxM0M1LjE5Mzg1IDE0LjUwMTMgNC4zODI2NSAxMy42ODc3IDMuODUyMjUgMTIuOTkyOUMzLjMzNzQ1IDEyLjMxODUgMy4xNzMwNSAxMS44NjI1IDMuMTczMDUgMTEuNDIzM0gxLjM3MzA1QzEuMzczMDUgMTIuNDE0NSAxLjc4NDY1IDEzLjI0OTcgMi40MjA2NSAxNC4wODM3QzMuMDQyMjUgMTQuODk3MyAzLjk1NjY1IDE1LjgxMDUgNS4wODk0NSAxNi45NDMzTDYuMzYyNjUgMTUuNjcxM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFEMjkzOVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yMy4yIDYuOTgzMkwyNSA4LjJDMjUgNC41ODIgMjIuNDA1NiAxLjU3OTYgMTkgMU0yLjggMTkuMDE2OEwxIDE3LjhDMSAyMS40MTggMy41OTQ0IDI0LjQyMDQgNyAyNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxRDI5MzlcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRG93bmxvYWQgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRDYW52YXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIiB2aWV3Qm94PVwiMCAwIDI2IDI2XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBzdHJva2U9XCIjMDAwMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMC4yNDAwMDAwMDAwMDAwMDAwNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0NDQ0NDQ1wiIHN0cm9rZS13aWR0aD1cIjAuMzg0XCI+PC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41NTM1IDE2LjUwNjFDMTIuNDExNCAxNi42NjE1IDEyLjIxMDYgMTYuNzUgMTIgMTYuNzVDMTEuNzg5NCAxNi43NSAxMS41ODg2IDE2LjY2MTUgMTEuNDQ2NSAxNi41MDYxTDcuNDQ2NDggMTIuMTMxMUM3LjE2Njk4IDExLjgyNTQgNy4xODgyMiAxMS4zNTEgNy40OTM5MiAxMS4wNzE1QzcuNzk5NjMgMTAuNzkyIDguMjc0MDIgMTAuODEzMiA4LjU1MzUyIDExLjExODlMMTEuMjUgMTQuMDY4MlYzQzExLjI1IDIuNTg1NzkgMTEuNTg1OCAyLjI1IDEyIDIuMjVDMTIuNDE0MiAyLjI1IDEyLjc1IDIuNTg1NzkgMTIuNzUgM1YxNC4wNjgyTDE1LjQ0NjUgMTEuMTE4OUMxNS43MjYgMTAuODEzMiAxNi4yMDA0IDEwLjc5MiAxNi41MDYxIDExLjA3MTVDMTYuODExOCAxMS4zNTEgMTYuODMzIDExLjgyNTQgMTYuNTUzNSAxMi4xMzExTDEyLjU1MzUgMTYuNTA2MVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxRDI5MzlcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMuNzUgMTVDMy43NSAxNC41ODU4IDMuNDE0MjIgMTQuMjUgMyAxNC4yNUMyLjU4NTc5IDE0LjI1IDIuMjUgMTQuNTg1OCAyLjI1IDE1VjE1LjA1NDlDMi4yNDk5OCAxNi40MjI1IDIuMjQ5OTYgMTcuNTI0OCAyLjM2NjUyIDE4LjM5MThDMi40ODc1NCAxOS4yOTE5IDIuNzQ2NDMgMjAuMDQ5NyAzLjM0ODM1IDIwLjY1MTZDMy45NTAyNyAyMS4yNTM2IDQuNzA4MTQgMjEuNTEyNSA1LjYwODI1IDIxLjYzMzVDNi40NzUyMiAyMS43NSA3LjU3NzU0IDIxLjc1IDguOTQ1MTMgMjEuNzVIMTUuMDU0OUMxNi40MjI1IDIxLjc1IDE3LjUyNDggMjEuNzUgMTguMzkxOCAyMS42MzM1QzE5LjI5MTkgMjEuNTEyNSAyMC4wNDk3IDIxLjI1MzYgMjAuNjUxNyAyMC42NTE2QzIxLjI1MzYgMjAuMDQ5NyAyMS41MTI1IDE5LjI5MTkgMjEuNjMzNSAxOC4zOTE4QzIxLjc1IDE3LjUyNDggMjEuNzUgMTYuNDIyNSAyMS43NSAxNS4wNTQ5VjE1QzIxLjc1IDE0LjU4NTggMjEuNDE0MiAxNC4yNSAyMSAxNC4yNUMyMC41ODU4IDE0LjI1IDIwLjI1IDE0LjU4NTggMjAuMjUgMTVDMjAuMjUgMTYuNDM1NCAyMC4yNDg0IDE3LjQzNjUgMjAuMTQ2OSAxOC4xOTE5QzIwLjA0ODIgMTguOTI1NyAxOS44Njc4IDE5LjMxNDIgMTkuNTkxIDE5LjU5MUMxOS4zMTQyIDE5Ljg2NzggMTguOTI1NyAyMC4wNDgyIDE4LjE5MTkgMjAuMTQ2OUMxNy40MzY1IDIwLjI0ODQgMTYuNDM1NCAyMC4yNSAxNSAyMC4yNUg5QzcuNTY0NTkgMjAuMjUgNi41NjM0NyAyMC4yNDg0IDUuODA4MTIgMjAuMTQ2OUM1LjA3NDM1IDIwLjA0ODIgNC42ODU3NyAxOS44Njc4IDQuNDA5MDEgMTkuNTkxQzQuMTMyMjUgMTkuMzE0MiAzLjk1MTggMTguOTI1NyAzLjg1MzE1IDE4LjE5MTlDMy43NTE1OSAxNy40MzY1IDMuNzUgMTYuNDM1NCAzLjc1IDE1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFEMjkzOVwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBQYW5lbCBDb2xsYXBzZSBIYW5kbGVycyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZS1oYW5kbGVyIGxlZnRcIiAoY2xpY2spPVwidG9nZ2xlUGFuZWwoJ2xlZnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhaXNMZWZ0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMjczMDggMTIuNjM2TDQuNjM2NzIgOC45OTk2NEw4LjI3MzA4IDUuMzYzMjhNMTMuMzY0IDEyLjYzNkw5LjcyNzYzIDguOTk5NjRMMTMuMzY0IDUuMzYzMjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc0xlZnRQYW5lbENvbGxhcHNlZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS43MjY5MiA1LjM2Mzk5TDEzLjM2MzMgOS4wMDAzNkw5LjcyNjkyIDEyLjYzNjdNNC42MzYwMSA1LjM2Mzk5TDguMjcyMzcgOS4wMDAzNkw0LjYzNjAxIDEyLjYzNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLWhhbmRsZXIgcmlnaHRcIiAoY2xpY2spPVwidG9nZ2xlUGFuZWwoJ3JpZ2h0JylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjI3MzA4IDEyLjYzNkw0LjYzNjcyIDguOTk5NjRMOC4yNzMwOCA1LjM2MzI4TTEzLjM2NCAxMi42MzZMOS43Mjc2MyA4Ljk5OTY0TDEzLjM2NCA1LjM2MzI4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzUmlnaHRQYW5lbENvbGxhcHNlZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS43MjY5MiA1LjM2Mzk5TDEzLjM2MzMgOS4wMDAzNkw5LjcyNjkyIDEyLjYzNjdNNC42MzYwMSA1LjM2Mzk5TDguMjcyMzcgOS4wMDAzNkw0LjYzNjAxIDEyLjYzNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBFZGl0IEZpeHR1cmUgQm9keSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6ICFlZGl0Rml4dHVyZSB9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZWRpdC1ib2R5XCIgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJteC0zIG15LTUgbmF2IG5hdi1waWxsc1wiIHJvbGU9XCJ0YWJsaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInN1Ym1pdEZpeHR1cmUgPSBmYWxzZTsgZWRpdEZpeHR1cmVTZWN0aW9uID0gJ2Jhc2ljLWRldGFpbHMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdiYXNpYy1kZXRhaWxzJyA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cIm5hdi1saW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWMgZGV0YWlsc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBjdXJzb3ItcG9pbnRlclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJzdWJtaXRGaXh0dXJlID0gZmFsc2U7IGVkaXRGaXh0dXJlU2VjdGlvbiA9ICdwcm9kdWN0cydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ3Byb2R1Y3RzJyA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cIm5hdi1saW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gY3Vyc29yLXBvaW50ZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwic3VibWl0Rml4dHVyZSA9IGZhbHNlOyBlZGl0Rml4dHVyZVNlY3Rpb24gPSAndm1zJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAndm1zJyA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cIm5hdi1saW5rXCIgcm9sZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc3VhbCBNZXJjaGFuZGlzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ2Jhc2ljLWRldGFpbHMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLWluc3RhbmNlLWJhc2ljLWRldGFpbHMgW2ZpeHR1cmVEYXRhXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBbZWRpdE1vZGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzU3VibWl0dGVkXT1cInN1Ym1pdEZpeHR1cmVcIiAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLWluc3RhbmNlLWJhc2ljLWRldGFpbHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ3Byb2R1Y3RzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1pbnN0YW5jZS1wcm9kdWN0cyBbZml4dHVyZURhdGFdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFtlZGl0TW9kZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNTdWJtaXR0ZWRdPVwic3VibWl0Rml4dHVyZVwiIChzdWJtaXRFdmVudCk9XCJvbkZpeHR1cmVTdWJtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItaW5zdGFuY2UtcHJvZHVjdHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ3ZtcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItaW5zdGFuY2Utdm1zIFtmaXh0dXJlRGF0YV09XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCIgW2VkaXRNb2RlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1N1Ym1pdHRlZF09XCJzdWJtaXRGaXh0dXJlXCIgKHN1Ym1pdEV2ZW50KT1cIm9uRml4dHVyZVN1Ym1pdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1pbnN0YW5jZS12bXM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdjb2xsYXBzZWQtY29sJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkLCAnY29sLTMnOiAhaXNSaWdodFBhbmVsQ29sbGFwc2VkIH1cIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInsnbWluLXdpZHRoJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkID8gJzAnIDogIGlzQWxsb2NhdGlvblJ1biA/JzY4MHB4JyA6ICc0NjRweCcgfVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpeHR1cmVQcmV2aWV3Q29sXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPG5nLXRlbXBsYXRlICNmaXh0dXJlUHJldmlld0NvbD5cclxuICAgIDxkaXYgY2xhc3M9XCJzLWNhcmRcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOmVkaXRGaXh0dXJlID8gJzcycHgnIDogJzBweCd9XCI+XHJcbiAgICAgICAgPG9uYm9hcmQtZml4dHVyZSBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWR9XCJcclxuICAgICAgICAgICAgKG9uQ2xvc2UpPVwidG9nZ2xlUGFuZWwoJ3JpZ2h0Jyk7IHNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsOyByZW1vdmVIaWdobGlnaHQoKTtcIlxyXG4gICAgICAgICAgICBbZml4dHVyZURhdGFdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFtpc0FsbG9jYXRpb25SdW5dPVwiaXNBbGxvY2F0aW9uUnVuXCJcclxuICAgICAgICAgICAgW2FsbEZpeHR1cmVzXT1cImFsbEZpeHR1cmVJbnN0YW5jZXNcIj48L29uYm9hcmQtZml4dHVyZT5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNoZWFkZXJTa2VsZXRvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbS0wIGctMCBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyIHctMTAwIHAtNCByb3VuZGVkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIG10LTAgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NrZWxldG9uTG9hZGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyIHJvdW5kZWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhcHBseUxvZ2ljcyBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IG1iLTRcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjIwXCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTIwLjgzMyAyMS42NjY1QzE4LjAzMyAyMS42NjY1IDE3LjExNjQgMjIuNzkxNSAxNi44MTY0IDIzLjUzMzJDMTcuNzA4IDIzLjkxNjUgMTguMzMzIDI0Ljc5OTggMTguMzMzIDI1LjgzMzJDMTguMzMzIDI2LjQ5NjIgMTguMDY5NiAyNy4xMzIxIDE3LjYwMDggMjcuNjAwOUMxNy4xMzE5IDI4LjA2OTggMTYuNDk2MSAyOC4zMzMyIDE1LjgzMyAyOC4zMzMyQzE1LjE3IDI4LjMzMzIgMTQuNTM0MSAyOC4wNjk4IDE0LjA2NTMgMjcuNjAwOUMxMy41OTY0IDI3LjEzMjEgMTMuMzMzIDI2LjQ5NjIgMTMuMzMzIDI1LjgzMzJDMTMuMzMzIDI0Ljc0MTUgMTQuMDI0NyAyMy44MTY1IDE0Ljk5OTcgMjMuNDc0OFYxNi41MjQ4QzE0LjUxMTQgMTYuMzUzNSAxNC4wODg1IDE2LjAzNDQgMTMuNzg5OSAxNS42MTE3QzEzLjQ5MTIgMTUuMTg5MSAxMy4zMzE1IDE0LjY4NCAxMy4zMzMgMTQuMTY2NUMxMy4zMzMgMTMuNTAzNSAxMy41OTY0IDEyLjg2NzYgMTQuMDY1MyAxMi4zOTg3QzE0LjUzNDEgMTEuOTI5OSAxNS4xNyAxMS42NjY1IDE1LjgzMyAxMS42NjY1QzE2LjQ5NjEgMTEuNjY2NSAxNy4xMzE5IDExLjkyOTkgMTcuNjAwOCAxMi4zOTg3QzE4LjA2OTYgMTIuODY3NiAxOC4zMzMgMTMuNTAzNSAxOC4zMzMgMTQuMTY2NUMxOC4zMzMgMTUuMjU4MiAxNy42NDE0IDE2LjE4MzIgMTYuNjY2NCAxNi41MjQ4VjIwLjkzMzJDMTcuMzk5NyAyMC4zOTE1IDE4LjQ2NjQgMTkuOTk5OCAxOS45OTk3IDE5Ljk5OThDMjIuMjI0NyAxOS45OTk4IDIyLjk2NjQgMTguODgzMiAyMy4yMDggMTguMTQxNUMyMi43NTIxIDE3Ljk1MTYgMjIuMzYyNSAxNy42MzExIDIyLjA4ODIgMTcuMjIwNEMyMS44MTM5IDE2LjgwOTcgMjEuNjY3MSAxNi4zMjcxIDIxLjY2NjQgMTUuODMzMkMyMS42NjY0IDE1LjE3MDEgMjEuOTI5NyAxNC41MzQyIDIyLjM5ODYgMTQuMDY1NEMyMi44Njc0IDEzLjU5NjYgMjMuNTAzMyAxMy4zMzMyIDI0LjE2NjQgMTMuMzMzMkMyNC44Mjk0IDEzLjMzMzIgMjUuNDY1MyAxMy41OTY2IDI1LjkzNDEgMTQuMDY1NEMyNi40MDMgMTQuNTM0MiAyNi42NjY0IDE1LjE3MDEgMjYuNjY2NCAxNS44MzMyQzI2LjY2NjQgMTYuOTQ5OCAyNS45MzMgMTcuOTE2NSAyNC45MjQ3IDE4LjIxNjVDMjQuNzA4IDE5LjQwODIgMjMuODk5NyAyMS42NjY1IDIwLjgzMyAyMS42NjY1Wk0xNS44MzMgMjQuOTk5OEMxNS42MTIgMjQuOTk5OCAxNS40IDI1LjA4NzYgMTUuMjQzOCAyNS4yNDM5QzE1LjA4NzUgMjUuNDAwMiAxNC45OTk3IDI1LjYxMjIgMTQuOTk5NyAyNS44MzMyQzE0Ljk5OTcgMjYuMDU0MiAxNS4wODc1IDI2LjI2NjEgMTUuMjQzOCAyNi40MjI0QzE1LjQgMjYuNTc4NyAxNS42MTIgMjYuNjY2NSAxNS44MzMgMjYuNjY2NUMxNi4wNTQgMjYuNjY2NSAxNi4yNjYgMjYuNTc4NyAxNi40MjIzIDI2LjQyMjRDMTYuNTc4NiAyNi4yNjYxIDE2LjY2NjQgMjYuMDU0MiAxNi42NjY0IDI1LjgzMzJDMTYuNjY2NCAyNS42MTIyIDE2LjU3ODYgMjUuNDAwMiAxNi40MjIzIDI1LjI0MzlDMTYuMjY2IDI1LjA4NzYgMTYuMDU0IDI0Ljk5OTggMTUuODMzIDI0Ljk5OThaTTE1LjgzMyAxMy4zMzMyQzE1LjYxMiAxMy4zMzMyIDE1LjQgMTMuNDIxIDE1LjI0MzggMTMuNTc3MkMxNS4wODc1IDEzLjczMzUgMTQuOTk5NyAxMy45NDU1IDE0Ljk5OTcgMTQuMTY2NUMxNC45OTk3IDE0LjM4NzUgMTUuMDg3NSAxNC41OTk1IDE1LjI0MzggMTQuNzU1OEMxNS40IDE0LjkxMiAxNS42MTIgMTQuOTk5OCAxNS44MzMgMTQuOTk5OEMxNi4wNTQgMTQuOTk5OCAxNi4yNjYgMTQuOTEyIDE2LjQyMjMgMTQuNzU1OEMxNi41Nzg2IDE0LjU5OTUgMTYuNjY2NCAxNC4zODc1IDE2LjY2NjQgMTQuMTY2NUMxNi42NjY0IDEzLjk0NTUgMTYuNTc4NiAxMy43MzM1IDE2LjQyMjMgMTMuNTc3MkMxNi4yNjYgMTMuNDIxIDE2LjA1NCAxMy4zMzMyIDE1LjgzMyAxMy4zMzMyWk0yNC4xNjY0IDE0Ljk5OThDMjMuOTQ1MyAxNC45OTk4IDIzLjczMzQgMTUuMDg3NiAyMy41NzcxIDE1LjI0MzlDMjMuNDIwOCAxNS40MDAyIDIzLjMzMyAxNS42MTIyIDIzLjMzMyAxNS44MzMyQzIzLjMzMyAxNi4wNTQyIDIzLjQyMDggMTYuMjY2MSAyMy41NzcxIDE2LjQyMjRDMjMuNzMzNCAxNi41Nzg3IDIzLjk0NTMgMTYuNjY2NSAyNC4xNjY0IDE2LjY2NjVDMjQuMzg3NCAxNi42NjY1IDI0LjU5OTMgMTYuNTc4NyAyNC43NTU2IDE2LjQyMjRDMjQuOTExOSAxNi4yNjYxIDI0Ljk5OTcgMTYuMDU0MiAyNC45OTk3IDE1LjgzMzJDMjQuOTk5NyAxNS42MTIyIDI0LjkxMTkgMTUuNDAwMiAyNC43NTU2IDE1LjI0MzlDMjQuNTk5MyAxNS4wODc2IDI0LjM4NzQgMTQuOTk5OCAyNC4xNjY0IDE0Ljk5OThaXCJcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwOUJGM1wiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJtYi0zXCI+UnVuIEFsbG9jYXRpb24gTG9naWM8L2gyPlxyXG4gICAgICAgICAgICA8cD5UaGlzIHdpbGwgbWFwIGFsbCBmaXh0dXJlcyBhbmQgYXBwbHkgYWxsb2NhdGlvbnMgYmFzZWQgb24gdGhlIGJ1c2luZXNzLWRlZmluZWQgbG9naWMsIHRoZW4gbW92ZSB0aGVtIHRvXHJcbiAgICAgICAgICAgICAgICB0aGUgdmVyaWZpY2F0aW9uIHNlY3Rpb24uIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb250aW51ZT88L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQnV0dG9uTG9hZGluZ1wiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJydW5BbGxvY2F0aW9uKClcIiBbZGlzYWJsZWRdPVwiaXNCdXR0b25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0J1dHRvbkxvYWRpbmdcIj4gUnVuIGFsbG9jYXRpb24gTG9naWM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6IDE0MXB4O1wiICpuZ0lmPVwiaXNCdXR0b25Mb2FkaW5nXCIgY2xhc3M9XCJzcGlubmVyXCIgdmlld0JveD1cIjAgMCA1MCA1MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwYXRoXCIgY3g9XCIyNVwiIGN5PVwiMjVcIiByPVwiMjBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjRcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhcHByb3ZlTGF5b3V0TW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJtYi0zXCI+QXBwcm92ZSAmIFN1Ym1pdDwvaDI+XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgVGhpcyB3aWxsIGNvbXBsZXRlIHRoZSBsYXlvdXQgYW5kIG1ha2UgaXQgcmVhZHkgZm9yIGFsbG9jYXRpb24uIEVuc3VyZSB0aGF0IGFsbCBmaXh0dXJlIGNvdW50cyBhbmRcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudHMgYXJlIGFzIHBlciB0aGUgcGxhbi5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBpZihoYXNJbnZhbGlkSGVhZGVyRml4dHVyZXMpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBnYXAtMiBwLTMgbWItMyByb3VuZGVkXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI0ZGRkFFQjsgYm9yZGVyOiAxcHggc29saWQgI0ZFQzg0QjtcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmbGV4LXNocmluazogMDsgbWFyZ2luLXRvcDogMXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOS45OTk2NSA2LjY2NjY3VjEwTTkuOTk5NjUgMTMuMzMzM0gxMC4wMDhNOC41NzQ2NSAyLjM4MzM0TDEuNTE2MzIgMTQuMTY2N0MxLjM3MDc5IDE0LjQxODcgMS4yOTM3OSAxNC43MDQ0IDEuMjkyOTggMTQuOTk1NEMxLjI5MjE2IDE1LjI4NjUgMS4zNjc1NiAxNS41NzI2IDEuNTExNjcgMTUuODI1NEMxLjY1NTc5IDE2LjA3ODMgMS44NjM1OSAxNi4yODkgMi4xMTQ0MSAxNi40MzY2QzIuMzY1MjMgMTYuNTg0MSAyLjY1MDMyIDE2LjY2MzUgMi45NDEzMiAxNi42NjY3SDE3LjA1OEMxNy4zNDkgMTYuNjYzNSAxNy42MzQxIDE2LjU4NDEgMTcuODg0OSAxNi40MzY2QzE4LjEzNTcgMTYuMjg5IDE4LjM0MzUgMTYuMDc4MyAxOC40ODc2IDE1LjgyNTRDMTguNjMxNyAxNS41NzI2IDE4LjcwNzEgMTUuMjg2NSAxOC43MDYzIDE0Ljk5NTRDMTguNzA1NSAxNC43MDQ0IDE4LjYyODUgMTQuNDE4NyAxOC40ODMgMTQuMTY2N0wxMS40MjQ3IDIuMzgzMzRDMTEuMjc2MSAyLjEzODQzIDExLjA2NjkgMS45MzU5NCAxMC44MTczIDEuNzk1NDFDMTAuNTY3NyAxLjY1NDg4IDEwLjI4NjEgMS41ODEwNSA5Ljk5OTY1IDEuNTgxMDVDOS43MTMyMSAxLjU4MTA1IDkuNDMxNTkgMS42NTQ4OCA5LjE4MTk5IDEuNzk1NDFDOC45MzIzOCAxLjkzNTk0IDguNzIzMjEgMi4xMzg0MyA4LjU3NDY1IDIuMzgzMzRaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Y1OUUwQlwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTNweDsgY29sb3I6ICM5MjQwMEU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e2ludmFsaWRIZWFkZXJGaXh0dXJlQ291bnR9fSBmaXh0dXJle3tpbnZhbGlkSGVhZGVyRml4dHVyZUNvdW50ID09PSAxID8gJycgOiAncyd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2ludmFsaWRIZWFkZXJGaXh0dXJlQ291bnQgPT09IDEgPyAnaGFzJyA6ICdoYXZlJ319IGFuIHVucmVjb2duaXplZCBoZWFkZXIuPC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhlc2UgYXJlIGhpZ2hsaWdodGVkIGluIHJlZCBvbiB0aGUgbGF5b3V0IGFuZCBtdXN0IGJlIGNvcnJlY3RlZCBiZWZvcmUgdGhlIGFsbG9jYXRpb24gcnVsZSBjYW4gcnVuLlxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQnV0dG9uTG9hZGluZ1wiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJhcHByb3ZlTGF5b3V0KClcIiBbZGlzYWJsZWRdPVwiaXNCdXR0b25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0J1dHRvbkxvYWRpbmdcIj5TdWJtaXQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNCdXR0b25Mb2FkaW5nXCIgY2xhc3M9XCJzcGlubmVyXCIgdmlld0JveD1cIjAgMCA1MCA1MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwYXRoXCIgY3g9XCIyNVwiIGN5PVwiMjVcIiByPVwiMjBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjRcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNyZXZlcnRBbGxvY2F0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBtYi00XCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjRkVGM0M3XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0yMCAxMy4zMzMzVjIwTTIwIDI2LjY2NjdIMjAuMDE2N00yOC4zMzMzIDIwQzI4LjMzMzMgMjQuNjAyNCAyNC42MDI0IDI4LjMzMzMgMjAgMjguMzMzM0MxNS4zOTc2IDI4LjMzMzMgMTEuNjY2NyAyNC42MDI0IDExLjY2NjcgMjBDMTEuNjY2NyAxNS4zOTc2IDE1LjM5NzYgMTEuNjY2NyAyMCAxMS42NjY3QzI0LjYwMjQgMTEuNjY2NyAyOC4zMzMzIDE1LjM5NzYgMjguMzMzMyAyMFpcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGNTlFMEJcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwibWItM1wiPlJldmVydCBBbGxvY2F0aW9uPC9oMj5cclxuICAgICAgICAgICAgPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJldmVydCB0aGUgYWxsb2NhdGlvbj8gVGhpcyB3aWxsIHJlc3RvcmUgdGhlIHN0YXRlIGJlZm9yZSBydW5uaW5nIGFsbG9jYXRpb24uXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgZ2FwLTNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAoY2xpY2spPVwibW9kYWwuY2xvc2UoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNCdXR0b25Mb2FkaW5nXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInJldmVydEFsbG9jYXRpb24oKTsgbW9kYWwuY2xvc2UoKVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNCdXR0b25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0J1dHRvbkxvYWRpbmdcIj5SZXZlcnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6IDE0MXB4O1wiICpuZ0lmPVwiaXNCdXR0b25Mb2FkaW5nXCIgY2xhc3M9XCJzcGlubmVyXCIgdmlld0JveD1cIjAgMCA1MCA1MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwYXRoXCIgY3g9XCIyNVwiIGN5PVwiMjVcIiByPVwiMjBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjRcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb21wbGV0ZUFsbG9jYXRpb25Nb2RhbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IG1iLTRcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjIwXCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTIwLjgzMyAyMS42NjY1QzE4LjAzMyAyMS42NjY1IDE3LjExNjQgMjIuNzkxNSAxNi44MTY0IDIzLjUzMzJDMTcuNzA4IDIzLjkxNjUgMTguMzMzIDI0Ljc5OTggMTguMzMzIDI1LjgzMzJDMTguMzMzIDI2LjQ5NjIgMTguMDY5NiAyNy4xMzIxIDE3LjYwMDggMjcuNjAwOUMxNy4xMzE5IDI4LjA2OTggMTYuNDk2MSAyOC4zMzMyIDE1LjgzMyAyOC4zMzMyQzE1LjE3IDI4LjMzMzIgMTQuNTM0MSAyOC4wNjk4IDE0LjA2NTMgMjcuNjAwOUMxMy41OTY0IDI3LjEzMjEgMTMuMzMzIDI2LjQ5NjIgMTMuMzMzIDI1LjgzMzJDMTMuMzMzIDI0Ljc0MTUgMTQuMDI0NyAyMy44MTY1IDE0Ljk5OTcgMjMuNDc0OFYxNi41MjQ4QzE0LjUxMTQgMTYuMzUzNSAxNC4wODg1IDE2LjAzNDQgMTMuNzg5OSAxNS42MTE3QzEzLjQ5MTIgMTUuMTg5MSAxMy4zMzE1IDE0LjY4NCAxMy4zMzMgMTQuMTY2NUMxMy4zMzMgMTMuNTAzNSAxMy41OTY0IDEyLjg2NzYgMTQuMDY1MyAxMi4zOTg3QzE0LjUzNDEgMTEuOTI5OSAxNS4xNyAxMS42NjY1IDE1LjgzMyAxMS42NjY1QzE2LjQ5NjEgMTEuNjY2NSAxNy4xMzE5IDExLjkyOTkgMTcuNjAwOCAxMi4zOTg3QzE4LjA2OTYgMTIuODY3NiAxOC4zMzMgMTMuNTAzNSAxOC4zMzMgMTQuMTY2NUMxOC4zMzMgMTUuMjU4MiAxNy42NDE0IDE2LjE4MzIgMTYuNjY2NCAxNi41MjQ4VjIwLjkzMzJDMTcuMzk5NyAyMC4zOTE1IDE4LjQ2NjQgMTkuOTk5OCAxOS45OTk3IDE5Ljk5OThDMjIuMjI0NyAxOS45OTk4IDIyLjk2NjQgMTguODgzMiAyMy4yMDggMTguMTQxNUMyMi43NTIxIDE3Ljk1MTYgMjIuMzYyNSAxNy42MzExIDIyLjA4ODIgMTcuMjIwNEMyMS44MTM5IDE2LjgwOTcgMjEuNjY3MSAxNi4zMjcxIDIxLjY2NjQgMTUuODMzMkMyMS42NjY0IDE1LjE3MDEgMjEuOTI5NyAxNC41MzQyIDIyLjM5ODYgMTQuMDY1NEMyMi44Njc0IDEzLjU5NjYgMjMuNTAzMyAxMy4zMzMyIDI0LjE2NjQgMTMuMzMzMkMyNC44Mjk0IDEzLjMzMzIgMjUuNDY1MyAxMy41OTY2IDI1LjkzNDEgMTQuMDY1NEMyNi40MDMgMTQuNTM0MiAyNi42NjY0IDE1LjE3MDEgMjYuNjY2NCAxNS44MzMyQzI2LjY2NjQgMTYuOTQ5OCAyNS45MzMgMTcuOTE2NSAyNC45MjQ3IDE4LjIxNjVDMjQuNzA4IDE5LjQwODIgMjMuODk5NyAyMS42NjY1IDIwLjgzMyAyMS42NjY1Wk0xNS44MzMgMjQuOTk5OEMxNS42MTIgMjQuOTk5OCAxNS40IDI1LjA4NzYgMTUuMjQzOCAyNS4yNDM5QzE1LjA4NzUgMjUuNDAwMiAxNC45OTk3IDI1LjYxMjIgMTQuOTk5NyAyNS44MzMyQzE0Ljk5OTcgMjYuMDU0MiAxNS4wODc1IDI2LjI2NjEgMTUuMjQzOCAyNi40MjI0QzE1LjQgMjYuNTc4NyAxNS42MTIgMjYuNjY2NSAxNS44MzMgMjYuNjY2NUMxNi4wNTQgMjYuNjY2NSAxNi4yNjYgMjYuNTc4NyAxNi40MjIzIDI2LjQyMjRDMTYuNTc4NiAyNi4yNjYxIDE2LjY2NjQgMjYuMDU0MiAxNi42NjY0IDI1LjgzMzJDMTYuNjY2NCAyNS42MTIyIDE2LjU3ODYgMjUuNDAwMiAxNi40MjIzIDI1LjI0MzlDMTYuMjY2IDI1LjA4NzYgMTYuMDU0IDI0Ljk5OTggMTUuODMzIDI0Ljk5OThaTTE1LjgzMyAxMy4zMzMyQzE1LjYxMiAxMy4zMzMyIDE1LjQgMTMuNDIxIDE1LjI0MzggMTMuNTc3MkMxNS4wODc1IDEzLjczMzUgMTQuOTk5NyAxMy45NDU1IDE0Ljk5OTcgMTQuMTY2NUMxNC45OTk3IDE0LjM4NzUgMTUuMDg3NSAxNC41OTk1IDE1LjI0MzggMTQuNzU1OEMxNS40IDE0LjkxMiAxNS42MTIgMTQuOTk5OCAxNS44MzMgMTQuOTk5OEMxNi4wNTQgMTQuOTk5OCAxNi4yNjYgMTQuOTEyIDE2LjQyMjMgMTQuNzU1OEMxNi41Nzg2IDE0LjU5OTUgMTYuNjY2NCAxNC4zODc1IDE2LjY2NjQgMTQuMTY2NUMxNi42NjY0IDEzLjk0NTUgMTYuNTc4NiAxMy43MzM1IDE2LjQyMjMgMTMuNTc3MkMxNi4yNjYgMTMuNDIxIDE2LjA1NCAxMy4zMzMyIDE1LjgzMyAxMy4zMzMyWk0yNC4xNjY0IDE0Ljk5OThDMjMuOTQ1MyAxNC45OTk4IDIzLjczMzQgMTUuMDg3NiAyMy41NzcxIDE1LjI0MzlDMjMuNDIwOCAxNS40MDAyIDIzLjMzMyAxNS42MTIyIDIzLjMzMyAxNS44MzMyQzIzLjMzMyAxNi4wNTQyIDIzLjQyMDggMTYuMjY2MSAyMy41NzcxIDE2LjQyMjRDMjMuNzMzNCAxNi41Nzg3IDIzLjk0NTMgMTYuNjY2NSAyNC4xNjY0IDE2LjY2NjVDMjQuMzg3NCAxNi42NjY1IDI0LjU5OTMgMTYuNTc4NyAyNC43NTU2IDE2LjQyMjRDMjQuOTExOSAxNi4yNjYxIDI0Ljk5OTcgMTYuMDU0MiAyNC45OTk3IDE1LjgzMzJDMjQuOTk5NyAxNS42MTIyIDI0LjkxMTkgMTUuNDAwMiAyNC43NTU2IDE1LjI0MzlDMjQuNTk5MyAxNS4wODc2IDI0LjM4NzQgMTQuOTk5OCAyNC4xNjY0IDE0Ljk5OThaXCJcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwOUJGM1wiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1iLTNcIj5TYXZlIGFuZCBjb21wbGV0ZSBhbGxvY2F0aW9uPC9oMj5cclxuICAgICAgICAgICAgPHA+WW91IGFyZSBhYm91dCB0byBjb21wbGV0ZSB0aGUgbWVyY2ggYWxsb2NhdGlvbiBwcm9jZXNzLiBUaGlzIHdpbGwgbWFrZSB0aGUgc3RvcmUgcmVhZHkgZm9yIGZpeHR1cmVcclxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbiBhbmQgbW92ZSBpdCB0byB0aGUgdmVyaWZpY2F0aW9uIHN0YWdlLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcHJvY2VlZD88L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzQnV0dG9uTG9hZGluZ1wiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjb21wbGV0ZUFsbG9jYXRpb24oKTtcIiBbZGlzYWJsZWRdPVwiaXNCdXR0b25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0J1dHRvbkxvYWRpbmdcIj5Db21wbGV0ZSBhbGxvY2F0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cIndpZHRoOiAxMDdweDtcIiAqbmdJZj1cImlzQnV0dG9uTG9hZGluZ1wiIGNsYXNzPVwic3Bpbm5lclwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwicGF0aFwiIGN4PVwiMjVcIiBjeT1cIjI1XCIgcj1cIjIwXCIgZmlsbD1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCI0XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|