@ai-table/grid 0.0.30 → 0.0.32
Sign up to get free protection for your applications and to get access to all the features.
- package/components/{field-property-editor/field-property-editor.component.d.ts → field-setting/field-setting.component.d.ts} +4 -4
- package/components/field-setting/field-setting.component.d.ts.map +1 -0
- package/components/{field-property-editor/field-property-editor.component.scss → field-setting/field-setting.component.scss} +1 -1
- package/components/index.d.ts +1 -1
- package/components/index.d.ts.map +1 -1
- package/core/context.d.ts +4 -2
- package/core/context.d.ts.map +1 -1
- package/core/coordinate.d.ts +3 -3
- package/core/coordinate.d.ts.map +1 -1
- package/core/types/ai-table.d.ts +2 -2
- package/core/types/ai-table.d.ts.map +1 -1
- package/core/utils/common.d.ts.map +1 -1
- package/esm2022/components/field-setting/field-setting.component.mjs +102 -0
- package/esm2022/components/index.mjs +2 -2
- package/esm2022/core/context.mjs +5 -3
- package/esm2022/core/coordinate.mjs +9 -9
- package/esm2022/core/types/ai-table.mjs +10 -3
- package/esm2022/core/utils/common.mjs +2 -3
- package/esm2022/dom-grid.component.mjs +3 -3
- package/esm2022/grid-base.component.mjs +2 -3
- package/esm2022/grid.component.mjs +10 -7
- package/esm2022/renderer/creations/create-active-cell-border.mjs +2 -2
- package/esm2022/renderer/drawers/cell-drawer.mjs +7 -8
- package/esm2022/renderer/drawers/drawer.mjs +5 -3
- package/esm2022/services/event.service.mjs +6 -3
- package/esm2022/services/field.service.mjs +4 -4
- package/esm2022/types/grid.mjs +1 -1
- package/esm2022/utils/cell.mjs +5 -5
- package/fesm2022/ai-table-grid.mjs +64 -54
- package/fesm2022/ai-table-grid.mjs.map +1 -1
- package/grid-base.component.d.ts.map +1 -1
- package/grid.component.d.ts +2 -1
- package/grid.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/renderer/drawers/cell-drawer.d.ts.map +1 -1
- package/renderer/drawers/drawer.d.ts.map +1 -1
- package/services/event.service.d.ts.map +1 -1
- package/styles/styles.scss +1 -0
- package/types/grid.d.ts +6 -4
- package/types/grid.d.ts.map +1 -1
- package/utils/cell.d.ts +1 -1
- package/utils/cell.d.ts.map +1 -1
- package/components/field-property-editor/field-property-editor.component.d.ts.map +0 -1
- package/esm2022/components/field-property-editor/field-property-editor.component.mjs +0 -106
@@ -199,9 +199,11 @@ export class Drawer {
|
|
199
199
|
const { x, y, text, maxWidth, lineHeight, maxRow = DEFAULT_WRAP_TEXT_MAX_ROW, fontSize = DEFAULT_FONT_SIZE, fillStyle = this.colors.gray800, textAlign = DEFAULT_TEXT_ALIGN_LEFT, verticalAlign = DEFAULT_TEXT_VERTICAL_ALIGN_TOP, fontWeight = DEFAULT_FONT_WEIGHT, textDecoration = DEFAULT_TEXT_DECORATION, fieldType, needDraw = false } = options;
|
200
200
|
let offsetX = 0;
|
201
201
|
let offsetY = 0;
|
202
|
+
const fontStyle = `${fontWeight} ${fontSize}px ${DEFAULT_FONT_FAMILY}`;
|
202
203
|
const baselineOffset = verticalAlign === DEFAULT_TEXT_VERTICAL_ALIGN_TOP ? fontSize / 2 : 0;
|
203
|
-
const
|
204
|
+
const fontStyleKey = `${fontWeight}-${fontSize}px`;
|
204
205
|
const isUnderline = textDecoration === 'underline';
|
206
|
+
this.ctx.font = fontStyle;
|
205
207
|
const textRenderer = (textDataList) => {
|
206
208
|
textDataList.forEach((data) => {
|
207
209
|
const { offsetX, offsetY, text, width, linkUrl } = data;
|
@@ -219,7 +221,7 @@ export class Drawer {
|
|
219
221
|
if (fillStyle)
|
220
222
|
this.setStyle({ fillStyle });
|
221
223
|
this.ctx.textAlign = textAlign;
|
222
|
-
const cacheKey = `${
|
224
|
+
const cacheKey = `${fontStyleKey}-${maxRow}-${maxWidth || 0}-${fieldType}-${text}`;
|
223
225
|
const cacheTextData = textDataCache.get(cacheKey);
|
224
226
|
if (cacheTextData) {
|
225
227
|
if (this.needDraw && needDraw) {
|
@@ -933,4 +935,4 @@ export class Drawer {
|
|
933
935
|
}
|
934
936
|
}
|
935
937
|
export const drawer = new Drawer();
|
936
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvZHJhd2Vycy9kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxnQkFBZ0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0gsZUFBZSxFQUNmLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsa0NBQWtDLEVBQ2xDLCtCQUErQixFQUMvQix5QkFBeUIsRUFDekIsWUFBWSxFQUNaLGVBQWUsRUFDbEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBVXBCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkYsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUV2RDs7R0FFRztBQUNILE1BQU0sT0FBTyxNQUFNO0lBQW5CO1FBQ0ksUUFBRyxHQUE2QixXQUFXLEVBQUUsQ0FBQyxPQUFRLENBQUM7UUFDdkQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixXQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBbWpDakMsQ0FBQztJQWpqQ1UsT0FBTyxDQUFDLEdBQTZCO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLFdBQVcsRUFB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QUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxHQUFHLENB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QUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuSSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNaLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1gsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUVoQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDdkUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBRXZFLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBVztZQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFXLEVBQUUsQ0FBVztZQUM3QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFXLEVBQUUsQ0FBVztZQUM3QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUxQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGFBQWEsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0sscUJBQXFCLENBQ3pCLEdBQVcsRUFDWCxHQUFXLEVBQ1gsR0FBVyxFQUNYLEdBQVcsRUFDWCxHQUFXLEVBQ1gsR0FBVyxFQUNYLEdBQVcsRUFDWCxHQUFXLEVBQ1gsR0FBVztRQUVYLFNBQVMsR0FBRyxDQUFDLENBQVM7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBRUQsU0FBUyxHQUFHLENBQUMsQ0FBUztZQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxTQUFTLEdBQUcsQ0FBQyxDQUFTO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsU0FBUyxHQUFHLENBQUMsQ0FBUztZQUNsQixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUUsT0FBTztZQUNILENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7U0FDUCxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSyx5QkFBeUIsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFBRSxHQUFXLEVBQUUsR0FBVyxFQUFFLEdBQVcsRUFBRSxHQUFXO1FBQ3ZILFNBQVMsR0FBRyxDQUFDLENBQVM7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxTQUFTLEdBQUcsQ0FBQyxDQUFTO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQsU0FBUyxHQUFHLENBQUMsQ0FBUztZQUNsQixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzRCxPQUFPO1lBQ0gsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztTQUNQLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssdUJBQXVCLENBQUMsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQ3RHLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLEVBQUUsR0FBRztZQUNQLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDdkIsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztTQUMxQixDQUFDO1FBQ0YsT0FBTztZQUNILENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUN2QyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDMUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssVUFBVSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsR0FBVyxFQUFFLE1BQWdCO1FBQ2xFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDVixLQUFLLEdBQUc7Z0JBQ0osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFELEtBQUssR0FBRztnQkFDSixHQUFHLEdBQUcsR0FBRyxDQUFDO2dCQUNWLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0csS0FBSyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUMvQixFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNHLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDWixDQUFDO2dCQUNELE9BQU8sR0FBRyxDQUFDO1lBQ2YsS0FBSyxHQUFHO2dCQUNKLEdBQUcsR0FBRyxHQUFHLENBQUM7Z0JBQ1YsRUFBRSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekYsS0FBSyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUMvQixFQUFFLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6RixHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ1osQ0FBQztnQkFDRCxPQUFPLEdBQUcsQ0FBQztZQUNmLEtBQUssR0FBRztnQkFDSixHQUFHLEdBQUcsR0FBRyxDQUFDO2dCQUNWLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUMvQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDOUIsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO2dCQUNELEVBQUUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDeEYsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ2IsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQzt3QkFDdEMsRUFBRSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNwRixHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2xELEVBQUUsR0FBRyxFQUFFLENBQUM7b0JBQ1osQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQzt3QkFDdEMsRUFBRSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNwRixHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2xELEVBQUUsR0FBRyxFQUFFLENBQUM7b0JBQ1osQ0FBQztnQkFDTCxDQUFDO2dCQUNELEVBQUUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEYsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxPQUFPLEdBQUcsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGFBQWEsQ0FBQyxJQUFZO1FBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNSLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztRQUNkLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWhILEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsTUFBTSxFQUFFLEdBQVEsRUFBRSxDQUFDO1FBQ25CLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFWixNQUFNLEVBQUUsR0FBRyxxREFBcUQsQ0FBQztRQUNqRSxJQUFJLEtBQTZCLENBQUM7UUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVuQixNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLENBQUM7WUFFRCxNQUFNLENBQUMsR0FBUSxFQUFFLENBQUM7WUFFbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2IsU0FBUztnQkFDYixDQUFDO2dCQUNELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNuQixDQUFDO3FCQUFNLENBQUM7b0JBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDZCxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDZCxNQUFNO2dCQUNWLENBQUM7Z0JBRUQsSUFBSSxHQUFHLEdBQWtCLElBQUksQ0FBQztnQkFDOUIsSUFBSSxNQUFNLEdBQVEsRUFBRSxDQUFDO2dCQUNyQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7Z0JBQ25CLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDbkIsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztnQkFDNUIsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBRWhDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ1IsS0FBSyxHQUFHO3dCQUNKLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2pCLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2pCLEdBQUcsR0FBRyxHQUFHLENBQUM7d0JBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3RCLE1BQU07b0JBQ1YsS0FBSyxHQUFHO3dCQUNKLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2hCLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QixNQUFNO29CQUNWLEtBQUssR0FBRzt3QkFDSixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ3JCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDckIsR0FBRyxJQUFJLEVBQUUsQ0FBQzt3QkFDVixHQUFHLElBQUksRUFBRSxDQUFDO3dCQUNWLEdBQUcsR0FBRyxHQUFHLENBQUM7d0JBQ1YsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7NEJBQ3JELEtBQUssSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO2dDQUM1QyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7b0NBQzFCLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQ0FDN0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO29DQUM3QixNQUFNO2dDQUNWLENBQUM7NEJBQ0wsQ0FBQzt3QkFDTCxDQUFDO3dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QixDQUFDLEdBQUcsR0FBRyxDQUFDO3dCQUNSLE1BQU07b0JBQ1YsS0FBSyxHQUFHO3dCQUNKLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2hCLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2hCLEdBQUcsR0FBRyxHQUFHLENBQUM7d0JBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3RCLENBQUMsR0FBRyxHQUFHLENBQUM7d0JBQ1IsTUFBTTtvQkFFVixLQUFLLEdBQUc7d0JBQ0osR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDakIsR0FBRyxHQUFHLEdBQUcsQ0FBQzt3QkFDVixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDdEIsTUFBTTtvQkFDVixLQUFLLEdBQUc7d0JBQ0osR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDaEIsR0FBRyxHQUFHLEdBQUcsQ0FBQzt3QkFDVixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDdEIsTUFBTTtvQkFDVixLQUFLLEdBQUc7d0JBQ0osR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDakIsR0FBRyxHQUFHLEdBQUcsQ0FBQzt3QkFDVixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDdEIsTUFBTTtvQkFDVixLQUFLLEdBQUc7d0JBQ0osR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDaEIsR0FBRyxHQUFHLEdBQUcsQ0FBQzt3QkFDVixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDdEIsTUFBTTtvQkFDVixLQUFLLEdBQUc7d0JBQ0osTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDeEQsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDaEIsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3RCLE1BQU07b0JBQ1YsS0FBSyxHQUFHO3dCQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUNoRixHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNqQixHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNqQixHQUFHLEdBQUcsR0FBRyxDQUFDO3dCQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QixNQUFNO29CQUNWLEtBQUssR0FBRzt3QkFDSixNQUFNLEdBQUcsR0FBRyxDQUFDO3dCQUNiLE1BQU0sR0FBRyxHQUFHLENBQUM7d0JBQ2IsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7NEJBQzFCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN6QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0MsQ0FBQzt3QkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUNsRCxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNoQixHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNoQixHQUFHLEdBQUcsR0FBRyxDQUFDO3dCQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QixNQUFNO29CQUNWLEtBQUssR0FBRzt3QkFDSixNQUFNLEdBQUcsR0FBRyxDQUFDO3dCQUNiLE1BQU0sR0FBRyxHQUFHLENBQUM7d0JBQ2IsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUM1QixJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7NEJBQzFCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN6QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDN0MsQ0FBQzt3QkFDRCxNQUFNLENBQUMsSUFBSSxD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QU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEdyYXBoZW1lU3BsaXR0ZXIgZnJvbSAnZ3JhcGhlbWUtc3BsaXR0ZXInO1xuaW1wb3J0IHtcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSxcbiAgICBBSV9UQUJMRV9UQUdfUEFERElORyxcbiAgICBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgIERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIERFRkFVTFRfRk9OVF9XRUlHSFQsXG4gICAgREVGQVVMVF9URVhUX0FMSUdOX0NFTlRFUixcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fTEVGVCxcbiAgICBERUZBVUxUX1RFWFRfREVDT1JBVElPTixcbiAgICBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFLFxuICAgIERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9UT1AsXG4gICAgREVGQVVMVF9XUkFQX1RFWFRfTUFYX1JPVyxcbiAgICBGT05UX1NJWkVfU00sXG4gICAgV2ViT3V0bGluZWRQYXRoXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQge1xuICAgIEFJVGFibGVBcmMsXG4gICAgQUlUYWJsZUF2YXRhclNpemUsXG4gICAgQUlUYWJsZUF2YXRhclR5cGUsXG4gICAgQUlUYWJsZUN0eFN0eWxlLFxuICAgIEFJVGFibGVJbWFnZSxcbiAgICBBSVRhYmxlTGFiZWwsXG4gICAgQUlUYWJsZUxpbmUsXG4gICAgQUlUYWJsZVJlY3QsXG4gICAgQUlUYWJsZVRleHQsXG4gICAgQUlUYWJsZVRleHRFbGxpcHNpcyxcbiAgICBBSVRhYmxlV3JhcFRleHQsXG4gICAgQUlUYWJsZVdyYXBUZXh0RGF0YVxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRUZXh0V2lkdGgsIGltYWdlQ2FjaGUsIHRleHREYXRhQ2FjaGUsIFRleHRNZWFzdXJlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG4vLyDnlKjkuo7mraPnoa7lnLDliIblibLlrZfnrKbkuLLvvIzljIXmi6zooajmg4XnrKblj7dcbmV4cG9ydCBjb25zdCBncmFwaGVtZVNwbGl0dGVyID0gbmV3IEdyYXBoZW1lU3BsaXR0ZXIoKTtcblxuLyoqXG4gKiDnlKjkuo7lnKggQ2FudmFzIOS4iui/m+ihjOeahOWQhOenjee7mOWbvuaTjeS9nO+8jOWMheWQq+S6huaWh+acrOe7mOWItuOAgeefqeW9oue7mOWItuOAgei3r+W+hOe7mOWItuS7peWPiuS4gOS6m+WHoOS9leiuoeeul+etieWKn+iDvVxuICovXG5leHBvcnQgY2xhc3MgRHJhd2VyIHtcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCA9IFRleHRNZWFzdXJlKCkuY29udGV4dCE7XG4gICAgbmVlZERyYXcgPSBmYWxzZTtcbiAgICBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuXG4gICAgcHVibGljIGluaXRDdHgoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpIHtcbiAgICAgICAgdGhpcy5uZWVkRHJhdyA9IEJvb2xlYW4oY3R4KTtcbiAgICAgICAgdGhpcy5jdHggPSBjdHggfHwgVGV4dE1lYXN1cmUoKS5jb250ZXh0ITtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRleHRCYXNlbGluZSDmjIflrprkuLogbWlkZGxl77yM5YW85a655rWP6KeI5Zmo5beu5byCXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmN0eC50ZXh0QmFzZWxpbmUgPSBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFO1xuICAgIH1cblxuICAgIC8vIOiuvue9ruagt+W8j1xuICAgIHB1YmxpYyBzZXRTdHlsZShvcHRpb25zOiBBSVRhYmxlQ3R4U3R5bGUpIHtcbiAgICAgICAgY29uc3QgeyBmb250U2l6ZSwgZm9udFdlaWdodCwgZmlsbFN0eWxlLCBzdHJva2VTdHlsZSB9ID0gb3B0aW9ucztcblxuICAgICAgICBpZiAoZm9udFNpemUgfHwgZm9udFdlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5jdHguZm9udCA9IGAke2ZvbnRXZWlnaHQgfHwgREVGQVVMVF9GT05UX1dFSUdIVH0gJHtmb250U2l6ZSB8fCBERUZBVUxUX0ZPTlRfU0laRX1weCAke0RFRkFVTFRfRk9OVF9GQU1JTFl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsbFN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBmaWxsU3R5bGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cm9rZVN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZVN0eWxlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5paH5pys55yB55WlXG4gICAgcHVibGljIHRleHRFbGxpcHNpcyhvcHRpb25zOiBBSVRhYmxlVGV4dEVsbGlwc2lzKSB7XG4gICAgICAgIGNvbnN0IHsgdGV4dCwgbWF4V2lkdGgsIGZvbnRTaXplID0gREVGQVVMVF9GT05UX1NJWkUsIGZvbnRXZWlnaHQgPSBERUZBVUxUX0ZPTlRfV0VJR0hUIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGlmICh0ZXh0ID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRleHQ6ICcnLFxuICAgICAgICAgICAgICAgIHRleHRXaWR0aDogMCxcbiAgICAgICAgICAgICAgICBpc0VsbGlwc2lzOiBmYWxzZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZm9udFN0eWxlID0gYCR7Zm9udFdlaWdodH0gJHtmb250U2l6ZX1weCAke0RFRkFVTFRfRk9OVF9GQU1JTFl9YDtcblxuICAgICAgICBpZiAoIW1heFdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgdGV4dFdpZHRoOiBnZXRUZXh0V2lkdGgodGhpcy5jdHgsIHRleHQsIGZvbnRTdHlsZSksXG4gICAgICAgICAgICAgICAgaXNFbGxpcHNpczogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGxpcHNpcyA9ICfigKYnO1xuICAgICAgICBjb25zdCB0ZXh0U2l6ZSA9IHRleHQubGVuZ3RoO1xuICAgICAgICAvLyDpooTlhYjnoa7lrprkvKDlhaXmlofmnKznmoTpmIjlgLzlrr3luqZcbiAgICAgICAgbGV0IGd1ZXNzU2l6ZSA9IE1hdGguY2VpbChtYXhXaWR0aCAvIGZvbnRTaXplKTtcbiAgICAgICAgbGV0IGd1ZXNzVGV4dCA9IHRleHQuc3Vic3RyKDAsIGd1ZXNzU2l6ZSk7XG4gICAgICAgIGxldCBndWVzc1dpZHRoID0gZ2V0VGV4dFdpZHRoKHRoaXMuY3R4LCBndWVzc1RleHQsIGZvbnRTdHlsZSk7XG5cbiAgICAgICAgd2hpbGUgKGd1ZXNzV2lkdGggPD0gbWF4V2lkdGgpIHtcbiAgICAgICAgICAgIGlmICh0ZXh0U2l6ZSA8PSBndWVzc1NpemUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0V2lkdGg6IGd1ZXNzV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGlzRWxsaXBzaXM6IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGd1ZXNzU2l6ZSsrO1xuICAgICAgICAgICAgZ3Vlc3NUZXh0ID0gdGV4dC5zdWJzdHIoMCwgZ3Vlc3NTaXplKTtcbiAgICAgICAgICAgIGd1ZXNzV2lkdGggPSBnZXRUZXh0V2lkdGgodGhpcy5jdHgsIGd1ZXNzVGV4dCwgZm9udFN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsbGlwc2lzV2lkdGggPSBnZXRUZXh0V2lkdGgodGhpcy5jdHgsIGVsbGlwc2lzLCBmb250U3R5bGUpO1xuICAgICAgICB3aGlsZSAoZ3Vlc3NTaXplID49IDAgJiYgZ3Vlc3NXaWR0aCArIGVsbGlwc2lzV2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgICAgICAgZ3Vlc3NTaXplLS07XG4gICAgICAgICAgICBndWVzc1RleHQgPSB0ZXh0LnN1YnN0cigwLCBndWVzc1NpemUpO1xuICAgICAgICAgICAgZ3Vlc3NXaWR0aCA9IGdldFRleHRXaWR0aCh0aGlzLmN0eCwgZ3Vlc3NUZXh0LCBmb250U3R5bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IGAke2d1ZXNzVGV4dCB8fCB0ZXh0WzBdfSR7ZWxsaXBzaXN9YCxcbiAgICAgICAgICAgIHRleHRXaWR0aDogbWF4V2lkdGgsXG4gICAgICAgICAgICBpc0VsbGlwc2lzOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8g57uY5Yi257q/5q61XG4gICAgcHVibGljIGxpbmUob3B0aW9uczogQUlUYWJsZUxpbmUpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCBwb2ludHMsIHN0cm9rZSwgY2xvc2VkID0gZmFsc2UgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHBvaW50cy5sZW5ndGg7XG5cbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgaWYgKHN0cm9rZSkgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJva2U7XG4gICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICAgIHRoaXMuY3R4LnRyYW5zbGF0ZSh4LCB5KTtcbiAgICAgICAgdGhpcy5jdHgubW92ZVRvKHBvaW50c1swXSwgcG9pbnRzWzFdKTtcblxuICAgICAgICBmb3IgKGxldCBuID0gMjsgbiA8IGxlbmd0aDsgbiArPSAyKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8ocG9pbnRzW25dLCBwb2ludHNbbiArIDFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgLy8g57uY5Yi25ZyGXG4gICAgcHVibGljIGFyYyhvcHRpb25zOiBBSVRhYmxlQXJjKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgc3Ryb2tlLCBmaWxsLCByYWRpdXMgfSA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBpZiAoZmlsbCkgdGhpcy5zZXRTdHlsZSh7IGZpbGxTdHlsZTogZmlsbCB9KTtcbiAgICAgICAgaWYgKHN0cm9rZSkgdGhpcy5zZXRTdHlsZSh7IHN0cm9rZVN0eWxlOiBzdHJva2UgfSk7XG4gICAgICAgIHRoaXMuY3R4LmFyYyh4LCB5LCByYWRpdXMsIDAsIDIgKiBNYXRoLlBJLCBmYWxzZSk7XG4gICAgICAgIGlmIChmaWxsKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cm9rZSkge1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDnu5jliLbnn6nlvaJcbiAgICBwdWJsaWMgcmVjdChvcHRpb25zOiBBSVRhYmxlUmVjdCkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cywgZmlsbCwgc3Ryb2tlIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBpZiAoZmlsbCkgdGhpcy5zZXRTdHlsZSh7IGZpbGxTdHlsZTogZmlsbCB9KTtcbiAgICAgICAgaWYgKHN0cm9rZSkgdGhpcy5zZXRTdHlsZSh7IHN0cm9rZVN0eWxlOiBzdHJva2UgfSk7XG5cbiAgICAgICAgaWYgKCFyYWRpdXMpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LnJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgdG9wTGVmdCA9IDA7XG4gICAgICAgICAgICBsZXQgdG9wUmlnaHQgPSAwO1xuICAgICAgICAgICAgbGV0IGJvdHRvbUxlZnQgPSAwO1xuICAgICAgICAgICAgbGV0IGJvdHRvbVJpZ2h0ID0gMDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiByYWRpdXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgdG9wTGVmdCA9IHRvcFJpZ2h0ID0gYm90dG9tTGVmdCA9IGJvdHRvbVJpZ2h0ID0gTWF0aC5taW4ocmFkaXVzLCB3aWR0aCAvIDIsIGhlaWdodCAvIDIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0b3BMZWZ0ID0gTWF0aC5taW4ocmFkaXVzWzBdIHx8IDAsIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgdG9wUmlnaHQgPSBNYXRoLm1pbihyYWRpdXNbMV0gfHwgMCwgd2lkdGggLyAyLCBoZWlnaHQgLyAyKTtcbiAgICAgICAgICAgICAgICBib3R0b21SaWdodCA9IE1hdGgubWluKHJhZGl1c1syXSB8fCAwLCB3aWR0aCAvIDIsIGhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgIGJvdHRvbUxlZnQgPSBNYXRoLm1pbihyYWRpdXNbM10gfHwgMCwgd2lkdGggLyAyLCBoZWlnaHQgLyAyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHggKyB0b3BMZWZ0LCB5KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGggLSB0b3BSaWdodCwgeSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5hcmMoeCArIHdpZHRoIC0gdG9wUmlnaHQsIHkgKyB0b3BSaWdodCwgdG9wUmlnaHQsIChNYXRoLlBJICogMykgLyAyLCAwLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gYm90dG9tUmlnaHQpO1xuICAgICAgICAgICAgdGhpcy5jdHguYXJjKHggKyB3aWR0aCAtIGJvdHRvbVJpZ2h0LCB5ICsgaGVpZ2h0IC0gYm90dG9tUmlnaHQsIGJvdHRvbVJpZ2h0LCAwLCBNYXRoLlBJIC8gMiwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyBib3R0b21MZWZ0LCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmFyYyh4ICsgYm90dG9tTGVmdCwgeSArIGhlaWdodCAtIGJvdHRvbUxlZnQsIGJvdHRvbUxlZnQsIE1hdGguUEkgLyAyLCBNYXRoLlBJLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSArIHRvcExlZnQpO1xuICAgICAgICAgICAgdGhpcy5jdHguYXJjKHggKyB0b3BMZWZ0LCB5ICsgdG9wTGVmdCwgdG9wTGVmdCwgTWF0aC5QSSwgKE1hdGguUEkgKiAzKSAvIDIsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuXG4gICAgICAgIGlmIChmaWxsKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cm9rZSkge1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY3VzdG9tUmVjdChvcHRpb25zOiBBSVRhYmxlUmVjdCkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQsIGZpbGwsIHN0cm9rZXMgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChmaWxsKSB0aGlzLnNldFN0eWxlKHsgZmlsbFN0eWxlOiBmaWxsIH0pO1xuICAgICAgICB0aGlzLmN0eC5maWxsUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgaWYgKHN0cm9rZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBzdHJva2VzO1xuICAgICAgICAgICAgLy8g5LiK6L655qGGXG4gICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoeyBzdHJva2VTdHlsZTogdG9wID8/IHRoaXMuY29sb3JzLnRyYW5zcGFyZW50IH0pO1xuICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgIC8vIOWPs+i+ueahhlxuICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0eWxlKHsgc3Ryb2tlU3R5bGU6IHJpZ2h0ID8/IHRoaXMuY29sb3JzLnRyYW5zcGFyZW50IH0pO1xuICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHggKyB3aWR0aCwgeSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgLy8g5LiL6L655qGGXG4gICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoeyBzdHJva2VTdHlsZTogYm90dG9tID8/IHRoaXMuY29sb3JzLnRyYW5zcGFyZW50IH0pO1xuICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHgsIHkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgIC8vIOW3pui+ueahhlxuICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0eWxlKHsgc3Ryb2tlU3R5bGU6IGxlZnQgPz8gdGhpcy5jb2xvcnMudHJhbnNwYXJlbnQgfSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCwgeSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOaNouihjOaWh+acrOe7mOWItlxuICAgIHB1YmxpYyB3cmFwVGV4dChvcHRpb25zOiBBSVRhYmxlV3JhcFRleHQpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHksXG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgbWF4V2lkdGgsXG4gICAgICAgICAgICBsaW5lSGVpZ2h0LFxuICAgICAgICAgICAgbWF4Um93ID0gREVGQVVMVF9XUkFQX1RFWFRfTUFYX1JPVyxcbiAgICAgICAgICAgIGZvbnRTaXplID0gREVGQVVMVF9GT05UX1NJWkUsXG4gICAgICAgICAgICBmaWxsU3R5bGUgPSB0aGlzLmNvbG9ycy5ncmF5ODAwLFxuICAgICAgICAgICAgdGV4dEFsaWduID0gREVGQVVMVF9URVhUX0FMSUdOX0xFRlQsXG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduID0gREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX1RPUCxcbiAgICAgICAgICAgIGZvbnRXZWlnaHQgPSBERUZBVUxUX0ZPTlRfV0VJR0hULFxuICAgICAgICAgICAgdGV4dERlY29yYXRpb24gPSBERUZBVUxUX1RFWFRfREVDT1JBVElPTixcbiAgICAgICAgICAgIGZpZWxkVHlwZSxcbiAgICAgICAgICAgIG5lZWREcmF3ID0gZmFsc2VcbiAgICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGxldCBvZmZzZXRYID0gMDtcbiAgICAgICAgbGV0IG9mZnNldFkgPSAwO1xuICAgICAgICBjb25zdCBiYXNlbGluZU9mZnNldCA9IHZlcnRpY2FsQWxpZ24gPT09IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9UT1AgPyBmb250U2l6ZSAvIDIgOiAwO1xuICAgICAgICBjb25zdCBmb250U3R5bGUgPSBgJHtmb250V2VpZ2h0fS0ke2ZvbnRTaXplfXB4YDtcbiAgICAgICAgY29uc3QgaXNVbmRlcmxpbmUgPSB0ZXh0RGVjb3JhdGlvbiA9PT0gJ3VuZGVybGluZSc7XG4gICAgICAgIGNvbnN0IHRleHRSZW5kZXJlciA9ICh0ZXh0RGF0YUxpc3Q6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICB0ZXh0RGF0YUxpc3QuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgb2Zmc2V0WCwgb2Zmc2V0WSwgdGV4dCwgd2lkdGgsIGxpbmtVcmwgfSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHguZmlsbFRleHQodGV4dCwgeCArIG9mZnNldFgsIHkgKyBvZmZzZXRZICsgYmFzZWxpbmVPZmZzZXQpO1xuICAgICAgICAgICAgICAgIGlmIChsaW5rVXJsIHx8IGlzVW5kZXJsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGluZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyBvZmZzZXRZICsgQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBbMCwgZm9udFNpemUsIHdpZHRoLCBmb250U2l6ZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IGZpbGxTdHlsZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZmlsbFN0eWxlKSB0aGlzLnNldFN0eWxlKHsgZmlsbFN0eWxlIH0pO1xuICAgICAgICB0aGlzLmN0eC50ZXh0QWxpZ24gPSB0ZXh0QWxpZ247XG5cbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBgJHtmb250U3R5bGV9LSR7bWF4Um93fS0ke21heFdpZHRoIHx8IDB9LSR7ZmllbGRUeXBlfS0ke3RleHR9YDtcbiAgICAgICAgY29uc3QgY2FjaGVUZXh0RGF0YSA9IHRleHREYXRhQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICAgICAgaWYgKGNhY2hlVGV4dERhdGEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZWREcmF3ICYmIG5lZWREcmF3KSB7XG4gICAgICAgICAgICAgICAgdGV4dFJlbmRlcmVyKGNhY2hlVGV4dERhdGEuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVUZXh0RGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdERhdGE6IEFJVGFibGVXcmFwVGV4dERhdGEgPSBbXTtcbiAgICAgICAgLy8g5YeG56Gu5YiH5YiG5YyF5ZCr6KGo5oOF56ym5Y+355qE5a2X56ym5LiyXG4gICAgICAgIGNvbnN0IGFyclRleHQgPSBncmFwaGVtZVNwbGl0dGVyLnNwbGl0R3JhcGhlbWVzKHRleHQpO1xuICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gYXJyVGV4dC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGVsbGlwc2lzV2lkdGggPSB0aGlzLmN0eC5tZWFzdXJlVGV4dCgn4oCmJykud2lkdGg7XG4gICAgICAgIGxldCBzaG93VGV4dCA9ICcnOyAvLyDmr4/kuKrniYfmrrXmmL7npLrnmoTmlofmnKxcbiAgICAgICAgbGV0IHNob3dUZXh0V2lkdGggPSAwOyAvLyDmr4/mrrXnmoTlrr3luqZcbiAgICAgICAgbGV0IHNob3dMaW5lV2lkdGggPSAwOyAvLyDlvZPliY3mr4/ooYzmmL7npLrmloflrZfnmoTlrr3luqZcbiAgICAgICAgbGV0IHJvd0NvdW50ID0gMDtcblxuICAgICAgICBjb25zdCBpc0VsbGlwc2lzID0gdGhpcy50ZXh0RWxsaXBzaXMoeyB0ZXh0LCBtYXhXaWR0aDogbWF4V2lkdGggfSkuaXNFbGxpcHNpcztcblxuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHRleHRMZW5ndGg7IG4rKykge1xuICAgICAgICAgICAgY29uc3QgY3VyVGV4dCA9IGFyclRleHRbbl07XG4gICAgICAgICAgICBjb25zdCBpc0xpbmVCcmVhayA9IFsnXFxuJywgJ1xcciddLmluY2x1ZGVzKGN1clRleHQpO1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlVGV4dCA9IGlzTGluZUJyZWFrID8gJycgOiBjdXJUZXh0O1xuICAgICAgICAgICAgY29uc3QgY29tcG9zZVRleHQgPSBzaG93VGV4dCArIHNpbmdsZVRleHQ7XG4gICAgICAgICAgICBjb25zdCBpc0xpbWl0Um93ID0gbWF4Um93ID8gcm93Q291bnQgPj0gbWF4Um93IC0gMSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgc2luZ2xlVGV4dFdpZHRoID0gaXNMaW5lQnJlYWsgPyAwIDogdGhpcy5jdHgubWVhc3VyZVRleHQoc2luZ2xlVGV4dCkud2lkdGg7XG4gICAgICAgICAgICBzaG93TGluZVdpZHRoICs9IHNpbmdsZVRleHRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZXaWR0aCA9IGlzTGltaXRSb3cgPyBzaG93TGluZVdpZHRoICsgKGlzRWxsaXBzaXMgPyBlbGxpcHNpc1dpZHRoIDogMCkgOiBzaG93TGluZVdpZHRoO1xuICAgICAgICAgICAgY29uc3QgaXNMaW5lRW5kID0gZGlmZldpZHRoID4gbWF4V2lkdGg7XG5cbiAgICAgICAgICAgIC8vIOmBh+WIsOaNouihjOespuaIluihjOWwvlxuICAgICAgICAgICAgaWYgKChpc0xpbmVFbmQgfHwgaXNMaW5lQnJlYWspICYmIHJvd0NvdW50IDwgbWF4Um93KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0TGV0dGVyID0gbiA9PT0gYXJyVGV4dC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHJlc3VsdERhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFksXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBNYXRoLmNlaWwoc2hvd1RleHRXaWR0aCksXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGlzTGltaXRSb3cgPyAoaXNMYXN0TGV0dGVyID8gY29tcG9zZVRleHQgOiBgJHtzaG93VGV4dH3igKZgKSA6IHNob3dUZXh0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2hvd1RleHQgPSBzaW5nbGVUZXh0O1xuICAgICAgICAgICAgICAgIG9mZnNldFggPSAwO1xuICAgICAgICAgICAgICAgIHNob3dUZXh0V2lkdGggPSBzaW5nbGVUZXh0V2lkdGg7XG4gICAgICAgICAgICAgICAgc2hvd0xpbmVXaWR0aCA9IHNpbmdsZVRleHRXaWR0aDtcblxuICAgICAgICAgICAgICAgIGlmIChpc0xpbWl0Um93KSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3dUZXh0ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByb3dDb3VudCsrO1xuICAgICAgICAgICAgICAgIG9mZnNldFkgKz0gbGluZUhlaWdodDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2hvd1RleHQgPSBjb21wb3NlVGV4dDtcbiAgICAgICAgICAgIHNob3dUZXh0V2lkdGggKz0gc2luZ2xlVGV4dFdpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3dUZXh0KSB7XG4gICAgICAgICAgICByZXN1bHREYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgIG9mZnNldFgsXG4gICAgICAgICAgICAgICAgb2Zmc2V0WSxcbiAgICAgICAgICAgICAgICB3aWR0aDogTWF0aC5jZWlsKHNob3dUZXh0V2lkdGgpLFxuICAgICAgICAgICAgICAgIHRleHQ6IHNob3dUZXh0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5lZWREcmF3ICYmIG5lZWREcmF3KSB7XG4gICAgICAgICAgICB0ZXh0UmVuZGVyZXIocmVzdWx0RGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6IHJvd0NvdW50IDwgbWF4Um93ID8gb2Zmc2V0WSArIGxpbmVIZWlnaHQgOiBvZmZzZXRZLFxuICAgICAgICAgICAgZGF0YTogcmVzdWx0RGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHRleHREYXRhQ2FjaGUuc2V0KGNhY2hlS2V5LCByZXMpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIOe7mOWItuWNleihjOaWh+acrFxuICAgIHB1YmxpYyB0ZXh0KG9wdGlvbnM6IEFJVGFibGVUZXh0KSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIGZvbnRTaXplID0gREVGQVVMVF9GT05UX1NJWkUsXG4gICAgICAgICAgICBmaWxsU3R5bGUgPSB0aGlzLmNvbG9ycy5ncmF5ODAwLFxuICAgICAgICAgICAgdGV4dEFsaWduID0gREVGQVVMVF9URVhUX0FMSUdOX0xFRlQsXG4gICAgICAgICAgICB2ZXJ0aWNhbEFsaWduID0gREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX1RPUCxcbiAgICAgICAgICAgIGZvbnRXZWlnaHQgPSBERUZBVUxUX0ZPTlRfV0VJR0hULFxuICAgICAgICAgICAgdGV4dERlY29yYXRpb24gPSBERUZBVUxUX1RFWFRfREVDT1JBVElPTlxuICAgICAgICB9ID0gb3B0aW9ucztcblxuICAgICAgICBjb25zdCBmb250U3R5bGUgPSBgJHtmb250V2VpZ2h0fSAke2ZvbnRTaXplfXB4ICR7REVGQVVMVF9GT05UX0ZBTUlMWX1gO1xuXG4gICAgICAgIGlmICh0ZXh0RGVjb3JhdGlvbiA9PT0gJ3VuZGVybGluZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGdldFRleHRXaWR0aCh0aGlzLmN0eCwgdGV4dCwgZm9udFN0eWxlKTtcbiAgICAgICAgICAgIHRoaXMubGluZSh7XG4gICAgICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgIHBvaW50czogWzAsIGZvbnRTaXplLCB0ZXh0V2lkdGgsIGZvbnRTaXplXSxcbiAgICAgICAgICAgICAgICBzdHJva2U6IGZpbGxTdHlsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYXNlbGluZU9mZnNldCA9IHZlcnRpY2FsQWxpZ24gPT09IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9UT1AgPyBmb250U2l6ZSAvIDIgOiAwO1xuICAgICAgICBpZiAoZmlsbFN0eWxlKSB0aGlzLnNldFN0eWxlKHsgZmlsbFN0eWxlIH0pO1xuICAgICAgICB0aGlzLmN0eC50ZXh0QWxpZ24gPSB0ZXh0QWxpZ247XG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSBmb250U3R5bGU7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxUZXh0KHRleHQsIHgsIHkgKyBiYXNlbGluZU9mZnNldCk7XG4gICAgfVxuXG4gICAgLy8g57uY5Yi25qCH562+XG4gICAgcHVibGljIHRhZyhvcHRpb25zOiBBSVRhYmxlTGFiZWwpOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgeSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHJhZGl1cyxcbiAgICAgICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgICAgICBjb2xvciA9IHRoaXMuY29sb3JzLmdyYXk4MDAsXG4gICAgICAgICAgICBmb250U2l6ZSA9IEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgICAgICAgICBmb250V2VpZ2h0ID0gREVGQVVMVF9GT05UX1dFSUdIVCxcbiAgICAgICAgICAgIHN0cm9rZVxuICAgICAgICB9ID0gb3B0aW9ucztcblxuICAgICAgICAvLyDog4zmma9cbiAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICByYWRpdXMsXG4gICAgICAgICAgICBmaWxsOiBiYWNrZ3JvdW5kLFxuICAgICAgICAgICAgc3Ryb2tlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfVEFHX1BBRERJTkcsXG4gICAgICAgICAgICB5OiB5ICsgKGhlaWdodCAtIGZvbnRTaXplKSAvIDIsXG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcixcbiAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgZm9udFdlaWdodFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1hZ2Uob3B0aW9uczogQUlUYWJsZUltYWdlLCBjcm9zc09yaWdpbj86IGJvb2xlYW4sIGFsbG93RGVmYXVsdD86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB1cmwsIHdpZHRoLCBoZWlnaHQsIG9wYWNpdHkgPSAxLCBjbGlwRnVuYyB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbWFnZSA9IGltYWdlQ2FjaGUuZ2V0SW1hZ2UodXJsKTtcbiAgICAgICAgLy8gTm90IGxvYWRlZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgaWYgKGltYWdlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKGFsbG93RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGF0aCh7XG4gICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAyLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBXZWJPdXRsaW5lZFBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDE2LFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBjb2xvcnMuZ3JheTYwMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFVubG9hZGVkXG4gICAgICAgIGlmIChpbWFnZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gaW1hZ2VDYWNoZS5sb2FkSW1hZ2UodXJsLCB1cmwsIHsgY3Jvc3NPcmlnaW4gfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNPcmlnaW4gPSBvcGFjaXR5ID09PSAxO1xuXG4gICAgICAgIGlmICghY2xpcEZ1bmMgJiYgaXNPcmlnaW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjbGlwRnVuYyAmJiAhaXNPcmlnaW4pIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4Lmdsb2JhbEFscGhhID0gb3BhY2l0eTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpcEZ1bmMpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgY2xpcEZ1bmModGhpcy5jdHgpO1xuICAgICAgICAgICAgdGhpcy5jdHguY2xpcCgpO1xuICAgICAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSBvcGFjaXR5O1xuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhdmF0YXIob3B0aW9uczoge1xuICAgICAgICB4OiBudW1iZXI7XG4gICAgICAgIHk6IG51bWJlcjtcbiAgICAgICAgdXJsOiBzdHJpbmc7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIHR5cGU/OiBBSVRhYmxlQXZhdGFyVHlwZTtcbiAgICAgICAgc2l6ZT86IEFJVGFibGVBdmF0YXJTaXplO1xuICAgICAgICBvcGFjaXR5PzogbnVtYmVyO1xuICAgICAgICBiZ0NvbG9yPzogc3RyaW5nO1xuICAgIH0pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgeCA9IDAsXG4gICAgICAgICAgICB5ID0gMCxcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICBiZ0NvbG9yID0gdGhpcy5jb2xvcnMud2hpdGUsXG4gICAgICAgICAgICBzaXplID0gQUlUYWJsZUF2YXRhclNpemUuc2l6ZTM2LFxuICAgICAgICAgICAgdHlwZSA9IEFJVGFibGVBdmF0YXJUeXBlLm1lbWJlcixcbiAgICAgICAgICAgIG9wYWNpdHkgPSAxXG4gICAgICAgIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGlmICh0aXRsZSA9PSBudWxsIHx8IGlkID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgICAgICBjb25zdCBhdmF0YXJTcmMgPSB1cmwgfHwgJyc7XG4gICAgICAgIGNvbnN0IGF2YXRhck5hbWUgPSB0aXRsZTtcbiAgICAgICAgY29uc3QgYXZhdGFyQmcgPSBhdmF0YXJTcmMgPyBjb2xvcnMud2hpdGUgOiBiZ0NvbG9yO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlQXZhdGFyVHlwZS5tZW1iZXI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSBzaXplIC8gMjtcbiAgICAgICAgICAgICAgICBpZiAoIWF2YXRhclNyYykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBhdmF0YXJCZztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmFyYyh4ICsgcmFkaXVzLCB5ICsgcmFkaXVzLCByYWRpdXMsIDAsIE1hdGguUEkgKiAyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBhdmF0YXJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiBERUZBVUxUX1RFWFRfQUxJR05fQ0VOVEVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBGT05UX1NJWkVfU00sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy53aGl0ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhdmF0YXJTcmMsXG4gICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgICAgIHVybDogYXZhdGFyU3JjLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplLFxuICAgICAgICAgICAgICAgICAgICBjbGlwRnVuYzogKGN0eCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGF2YXRhckJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmFyYyh4ICsgcmFkaXVzLCB5ICsgcmFkaXVzLCByYWRpdXMsIDAsIE1hdGguUEkgKiAyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlrnms5XlsIbmpK3lnIblvKfnmoTnq6/ngrnlj4LmlbDljJblvaLlvI/ovazmjaLkuLrkuK3lv4Plj4LmlbDljJblvaLlvI9cbiAgICAgKiDmjqXlj5flvKfnur/nmoTnq6/ngrnlj4LmlbDvvIzlubborqHnrpflh7rlvKfnur/nmoTkuK3lv4PngrnlnZDmoIfjgIHotbflp4vop5LluqbjgIHnu4jmraLop5LluqbnrYnlj4LmlbBcbiAgICAgKiDov5Tlm57lgLzvvJrkuIDkuKrljIXlkKvkuK3lv4PngrnlnZDmoIfjgIHljYrlvoTjgIHml4vovazop5LluqbjgIHotbflp4vop5Lluqbku6Xlj4rop5Lluqblt67nmoTlr7nosaHvvIzov5nkupvlj4LmlbDlj6/ku6Xnm7TmjqXnlKjkuo7nu5jliLbmpK3lnIblvKdcbiAgICAgKiBAcmV0dXJucyBbY3gsIGN5LCByeCwgcnksIHRoZXRhLCBkVGhldGEsIHBzaSwgZnNdXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb252ZXJ0RW5kcG9pbnRUb0NlbnRlclBhcmFtZXRlcml6YXRpb24oXG4gICAgICAgIHgxOiBudW1iZXIsXG4gICAgICAgIHkxOiBudW1iZXIsXG4gICAgICAgIHgyOiBudW1iZXIsXG4gICAgICAgIHkyOiBudW1iZXIsXG4gICAgICAgIGZhOiBhbnksXG4gICAgICAgIGZzOiBudW1iZXIsXG4gICAgICAgIHJ4OiBudW1iZXIsXG4gICAgICAgIHJ5OiBudW1iZXIsXG4gICAgICAgIHBzaURlZzogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHBzaSA9IHBzaURlZyAqIChNYXRoLlBJIC8gMTgwLjApO1xuICAgICAgICBjb25zdCB4cCA9IChNYXRoLmNvcyhwc2kpICogKHgxIC0geDIpKSAvIDIuMCArIChNYXRoLnNpbihwc2kpICogKHkxIC0geTIpKSAvIDIuMDtcbiAgICAgICAgY29uc3QgeXAgPSAoLTEgKiBNYXRoLnNpbihwc2kpICogKHgxIC0geDIpKSAvIDIuMCArIChNYXRoLmNvcyhwc2kpICogKHkxIC0geTIpKSAvIDIuMDtcblxuICAgICAgICBjb25zdCBsYW1iZGEgPSAoeHAgKiB4cCkgLyAocnggKiByeCkgKyAoeXAgKiB5cCkgLyAocnkgKiByeSk7XG5cbiAgICAgICAgaWYgKGxhbWJkYSA+IDEpIHtcbiAgICAgICAgICAgIHJ4ICo9IE1hdGguc3FydChsYW1iZGEpO1xuICAgICAgICAgICAgcnkgKj0gTWF0aC5zcXJ0KGxhbWJkYSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZiA9IE1hdGguc3FydCgocnggKiByeCAqIChyeSAqIHJ5KSAtIHJ4ICogcnggKiAoeXAgKiB5cCkgLSByeSAqIHJ5ICogKHhwICogeHApKSAvIChyeCAqIHJ4ICogKHlwICogeXApICsgcnkgKiByeSAqICh4cCAqIHhwKSkpO1xuXG4gICAgICAgIGlmIChmYSA9PT0gZnMpIHtcbiAgICAgICAgICAgIGYgKj0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKGYpKSB7XG4gICAgICAgICAgICBmID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN4cCA9IChmICogcnggKiB5cCkgLyByeTtcbiAgICAgICAgY29uc3QgY3lwID0gKGYgKiAtcnkgKiB4cCkgLyByeDtcblxuICAgICAgICBjb25zdCBjeCA9ICh4MSArIHgyKSAvIDIuMCArIE1hdGguY29zKHBzaSkgKiBjeHAgLSBNYXRoLnNpbihwc2kpICogY3lwO1xuICAgICAgICBjb25zdCBjeSA9ICh5MSArIHkyKSAvIDIuMCArIE1hdGguc2luKHBzaSkgKiBjeHAgKyBNYXRoLmNvcyhwc2kpICogY3lwO1xuXG4gICAgICAgIGNvbnN0IHZNYWcgPSBmdW5jdGlvbiAodjogbnVtYmVyW10pIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQodlswXSAqIHZbMF0gKyB2WzFdICogdlsxXSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHZSYXRpbyA9IGZ1bmN0aW9uICh1OiBudW1iZXJbXSwgdjogbnVtYmVyW10pIHtcbiAgICAgICAgICAgIHJldHVybiAodVswXSAqIHZbMF0gKyB1WzFdICogdlsxXSkgLyAodk1hZyh1KSAqIHZNYWcodikpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB2QW5nbGUgPSBmdW5jdGlvbiAodTogbnVtYmVyW10sIHY6IG51bWJlcltdKSB7XG4gICAgICAgICAgICByZXR1cm4gKHVbMF0gKiB2WzFdIDwgdVsxXSAqIHZbMF0gPyAtMSA6IDEpICogTWF0aC5hY29zKHZSYXRpbyh1LCB2KSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRoZXRhID0gdkFuZ2xlKFsxLCAwXSwgWyh4cCAtIGN4cCkgLyByeCwgKHlwIC0gY3lwKSAvIHJ5XSk7XG4gICAgICAgIGNvbnN0IHUgPSBbKHhwIC0gY3hwKSAvIHJ4LCAoeXAgLSBjeXApIC8gcnldO1xuICAgICAgICBjb25zdCB2ID0gWygtMSAqIHhwIC0gY3hwKSAvIHJ4LCAoLTEgKiB5cCAtIGN5cCkgLyByeV07XG4gICAgICAgIGxldCBkVGhldGEgPSB2QW5nbGUodSwgdik7XG5cbiAgICAgICAgaWYgKHZSYXRpbyh1LCB2KSA8PSAtMSkge1xuICAgICAgICAgICAgZFRoZXRhID0gTWF0aC5QSTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodlJhdGlvKHUsIHYpID49IDEpIHtcbiAgICAgICAgICAgIGRUaGV0YSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZzID09PSAwICYmIGRUaGV0YSA+IDApIHtcbiAgICAgICAgICAgIGRUaGV0YSA9IGRUaGV0YSAtIDIgKiBNYXRoLlBJO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcyA9PT0gMSAmJiBkVGhldGEgPCAwKSB7XG4gICAgICAgICAgICBkVGhldGEgPSBkVGhldGEgKyAyICogTWF0aC5QSTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2N4LCBjeSwgcngsIHJ5LCB0aGV0YSwgZFRoZXRhLCBwc2ksIGZzXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorqHnrpfkuKTkuKrngrkgKHgxLCB5MSkg5ZKMICh4MiwgeTIpIOS5i+mXtOeahOebtOe6v+i3neemu1xuICAgICAqIEByZXR1cm5zIOS4pOS4queCuSAoeDEsIHkxKSDlkowgKHgyLCB5Mikg5LmL6Ze055qE55u057q/6Led56a777yM5Y2V5L2N5LiO6L6T5YWl55qE5Z2Q5qCH5YC855u45ZCMXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRMaW5lTGVuZ3RoKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCgoeDIgLSB4MSkgKiAoeDIgLSB4MSkgKyAoeTIgLSB5MSkgKiAoeTIgLSB5MSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuoeeul+S4ieasoei0neWhnuWwlOabsue6v+S4iue7meWumuWPguaVsCB0IOWvueW6lOeahOeCueeahOWdkOaghy5cbiAgICAgKiDlj6/ku6XlnKjmjIflrprnmoQgdCDlj4LmlbDkuIvorqHnrpflh7rmm7Lnur/kuIrnsr7noa7nmoTkuIDkuKrngrnvvIzov5nkuKrngrnlj6/ku6XnlKjkuo7nu5jliLblubPmu5Hmm7Lnur/nmoTkuIDpg6jliIZcbiAgICAgKiBAcGFyYW0gcGN0IC0gMCDliLAgMSDkuYvpl7TnmoTlj4LmlbDvvIznlKjkuo7mjIflrprmm7Lnur/kuIrnmoTngrnnmoTkvY3nva5cbiAgICAgKiBAcGFyYW0gUDF4IC0g5puy57q/55qE6LW354K5IHgg5Z2Q5qCHXG4gICAgICogQHBhcmFtIFAxeSAtIOabsue6v+eahOi1t+eCuSB5IOWdkOagh1xuICAgICAqIEBwYXJhbSBQMnggLSDmm7Lnur/nmoTnrKzkuIDkuKrmjqfliLbngrkgeCDlnZDmoIdcbiAgICAgKiBAcGFyYW0gUDJ5IC0g5puy57q/55qE56ys5LiA5Liq5o6n5Yi254K5IHkg5Z2Q5qCHXG4gICAgICogQHBhcmFtIFAzeCAtIOabsue6v+eahOesrOS6jOS4quaOp+WItueCuSB4IOWdkOagh1xuICAgICAqIEBwYXJhbSBQM3kgLSDmm7Lnur/nmoTnrKzkuozkuKrmjqfliLbngrkgeSDlnZDmoIdcbiAgICAgKiBAcGFyYW0gUDR4IC0g5puy57q/55qE57uI54K5IHgg5Z2Q5qCHXG4gICAgICogQHBhcmFtIFA0eSAtIOabsue6v+eahOe7iOeCuSB5IOWdkOagh1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQb2ludE9uQ3ViaWNCZXppZXIoXG4gICAgICAgIHBjdDogbnVtYmVyLFxuICAgICAgICBQMXg6IG51bWJlcixcbiAgICAgICAgUDF5OiBudW1iZXIsXG4gICAgICAgIFAyeDogbnVtYmVyLFxuICAgICAgICBQMnk6IG51bWJlcixcbiAgICAgICAgUDN4OiBudW1iZXIsXG4gICAgICAgIFAzeTogbnVtYmVyLFxuICAgICAgICBQNHg6IG51bWJlcixcbiAgICAgICAgUDR5OiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgZnVuY3Rpb24gQ0IxKHQ6IG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIHQgKiB0ICogdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIENCMih0OiBudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAzICogdCAqIHQgKiAoMSAtIHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gQ0IzKHQ6IG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIDMgKiB0ICogKDEgLSB0KSAqICgxIC0gdCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBDQjQodDogbnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKDEgLSB0KSAqICgxIC0gdCkgKiAoMSAtIHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeCA9IFA0eCAqIENCMShwY3QpICsgUDN4ICogQ0IyKHBjdCkgKyBQMnggKiBDQjMocGN0KSArIFAxeCAqIENCNChwY3QpO1xuICAgICAgICBjb25zdCB5ID0gUDR5ICogQ0IxKHBjdCkgKyBQM3kgKiBDQjIocGN0KSArIFAyeSAqIENCMyhwY3QpICsgUDF5ICogQ0I0KHBjdCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgICB5OiB5XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6h566X5LqM5qyh6LSd5aGe5bCU5puy57q/5LiK57uZ5a6a5Y+C5pWwIHQg5a+55bqU55qE54K555qE5Z2Q5qCHXG4gICAgICogQHBhcmFtIHBjdCAtIDAg5YiwIDEg5LmL6Ze055qE5Y+C5pWw77yM55So5LqO5oyH5a6a5puy57q/5LiK55qE54K555qE5L2N572uXG4gICAgICogQHBhcmFtIFAxeCAtIOabsue6v+eahOi1t+eCuSB4IOWdkOagh1xuICAgICAqIEBwYXJhbSBQMXkgLSDmm7Lnur/nmoTotbfngrkgeSDlnZDmoIdcbiAgICAgKiBAcGFyYW0gUDJ4IC0g5puy57q/55qE5o6n5Yi254K5IHgg5Z2Q5qCHXG4gICAgICogQHBhcmFtIFAyeSAtIOabsue6v+eahOaOp+WItueCuSB5IOWdkOagh1xuICAgICAqIEBwYXJhbSBQM3ggLSDmm7Lnur/nmoTnu4jngrkgeCDlnZDmoIdcbiAgICAgKiBAcGFyYW0gUDN5IC0g5puy57q/55qE57uI54K5IHkg5Z2Q5qCHXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBvaW50T25RdWFkcmF0aWNCZXppZXIocGN0OiBudW1iZXIsIFAxeDogbnVtYmVyLCBQMXk6IG51bWJlciwgUDJ4OiBudW1iZXIsIFAyeTogbnVtYmVyLCBQM3g6IG51bWJlciwgUDN5OiBudW1iZXIpIHtcbiAgICAgICAgZnVuY3Rpb24gUUIxKHQ6IG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIHQgKiB0O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gUUIyKHQ6IG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIDIgKiB0ICogKDEgLSB0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFFCMyh0OiBudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoMSAtIHQpICogKDEgLSB0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHggPSBQM3ggKiBRQjEocGN0KSArIFAyeCAqIFFCMihwY3QpICsgUDF4ICogUUIzKHBjdCk7XG4gICAgICAgIGNvbnN0IHkgPSBQM3kgKiBRQjEocGN0KSArIFAyeSAqIFFCMihwY3QpICsgUDF5ICogUUIzKHBjdCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgICB5OiB5XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6h566X5qSt5ZyG5byn5LiK57uZ5a6a6KeS5bqmIM64IOWvueW6lOeahOeCueeahOWdkOagh1xuICAgICAqIEBwYXJhbSBjeCAtIOakreWchueahOS4reW/g+eCuSB4IOWdkOagh1xuICAgICAqIEBwYXJhbSBjeSAtIOakreWchueahOS4reW/g+eCuSB5IOWdkOagh1xuICAgICAqIEBwYXJhbSByeCAtIOakreWchueahCB4IOi9tOWNiuW+hFxuICAgICAqIEBwYXJhbSByeSAtIOakreWchueahCB5IOi9tOWNiuW+hFxuICAgICAqIEBwYXJhbSB0aGV0YSAtIOakreWchuW8p+eahOi1t+Wni+inkuW6plxuICAgICAqIEBwYXJhbSBwc2kgLSDmpK3lnIblvKfnmoTml4vovazop5LluqZcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMoY3g6IG51bWJlciwgY3k6IG51bWJlciwgcng6IG51bWJlciwgcnk6IG51bWJlciwgdGhldGE6IG51bWJlciwgcHNpOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY29zUHNpID0gTWF0aC5jb3MocHNpKTtcbiAgICAgICAgY29uc3Qgc2luUHNpID0gTWF0aC5zaW4ocHNpKTtcbiAgICAgICAgY29uc3QgcHQgPSB7XG4gICAgICAgICAgICB4OiByeCAqIE1hdGguY29zKHRoZXRhKSxcbiAgICAgICAgICAgIHk6IHJ5ICogTWF0aC5zaW4odGhldGEpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBjeCArIChwdC54ICogY29zUHNpIC0gcHQueSAqIHNpblBzaSksXG4gICAgICAgICAgICB5OiBjeSArIChwdC54ICogc2luUHNpICsgcHQueSAqIGNvc1BzaSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorqHnrpfln7rkuo7kuI3lkIzot6/lvoTlkb3ku6TnmoTplb/luqZcbiAgICAgKiBAcGFyYW0geCAtIOi1t+eCuSB4IOWdkOagh1xuICAgICAqIEBwYXJhbSB5IC0g6LW354K5IHkg5Z2Q5qCHXG4gICAgICogQHBhcmFtIGNtZCAtIOi3r+W+hOWRveS7pFxuICAgICAqIEBwYXJhbSBwb2ludHMgLSDkuI7ot6/lvoTlkb3ku6Tnm7jlhbPnmoTngrnnmoTlnZDmoIfmiJbmjqfliLblj4LmlbBcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgY2FsY0xlbmd0aCh4OiBudW1iZXIsIHk6IG51bWJlciwgY21kOiBzdHJpbmcsIHBvaW50czogbnVtYmVyW10pIHtcbiAgICAgICAgbGV0IGxlbiwgcDEsIHAyLCB0O1xuXG4gICAgICAgIHN3aXRjaCAoY21kKSB7XG4gICAgICAgICAgICBjYXNlICdMJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lTGVuZ3RoKHgsIHksIHBvaW50c1swXSwgcG9pbnRzWzFdKTtcbiAgICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgICAgIGxlbiA9IDAuMDtcbiAgICAgICAgICAgICAgICBwMSA9IHRoaXMuZ2V0UG9pbnRPbkN1YmljQmV6aWVyKDAsIHgsIHksIHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwgcG9pbnRzWzRdLCBwb2ludHNbNV0pO1xuICAgICAgICAgICAgICAgIGZvciAodCA9IDAuMDE7IHQgPD0gMTsgdCArPSAwLjAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHAyID0gdGhpcy5nZXRQb2ludE9uQ3ViaWNCZXppZXIodCwgeCwgeSwgcG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCBwb2ludHNbNF0sIHBvaW50c1s1XSk7XG4gICAgICAgICAgICAgICAgICAgIGxlbiArPSB0aGlzLmdldExpbmVMZW5ndGgocDEueCwgcDEueSwgcDIueCwgcDIueSk7XG4gICAgICAgICAgICAgICAgICAgIHAxID0gcDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBsZW47XG4gICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBsZW4gPSAwLjA7XG4gICAgICAgICAgICAgICAgcDEgPSB0aGlzLmdldFBvaW50T25RdWFkcmF0aWNCZXppZXIoMCwgeCwgeSwgcG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdKTtcbiAgICAgICAgICAgICAgICBmb3IgKHQgPSAwLjAxOyB0IDw9IDE7IHQgKz0gMC4wMSkge1xuICAgICAgICAgICAgICAgICAgICBwMiA9IHRoaXMuZ2V0UG9pbnRPblF1YWRyYXRpY0Jlemllcih0LCB4LCB5LCBwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10pO1xuICAgICAgICAgICAgICAgICAgICBsZW4gKz0gdGhpcy5nZXRMaW5lTGVuZ3RoKHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgICAgICAgICAgICAgICAgICBwMSA9IHAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbGVuO1xuICAgICAgICAgICAgY2FzZSAnQSc6XG4gICAgICAgICAgICAgICAgbGVuID0gMC4wO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gcG9pbnRzWzRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRUaGV0YSA9IHBvaW50c1s1XTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSBwb2ludHNbNF0gKyBkVGhldGE7XG4gICAgICAgICAgICAgICAgbGV0IGluYyA9IE1hdGguUEkgLyAxODAuMDtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoc3RhcnQgLSBlbmQpIDwgaW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGluYyA9IE1hdGguYWJzKHN0YXJ0IC0gZW5kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcDEgPSB0aGlzLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwgc3RhcnQsIDApO1xuICAgICAgICAgICAgICAgIGlmIChkVGhldGEgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodCA9IHN0YXJ0IC0gaW5jOyB0ID4gZW5kOyB0IC09IGluYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSB0aGlzLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwgdCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZW4gKz0gdGhpcy5nZXRMaW5lTGVuZ3RoKHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcDEgPSBwMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodCA9IHN0YXJ0ICsgaW5jOyB0IDwgZW5kOyB0ICs9IGluYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSB0aGlzLmdldFBvaW50T25FbGxpcHRpY2FsQXJjKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwgdCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZW4gKz0gdGhpcy5nZXRMaW5lTGVuZ3RoKHAxLngsIHAxLnksIHAyLngsIHAyLnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcDEgPSBwMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwMiA9IHRoaXMuZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCBlbmQsIDApO1xuICAgICAgICAgICAgICAgIGxlbiArPSB0aGlzLmdldExpbmVMZW5ndGgocDEueCwgcDEueSwgcDIueCwgcDIueSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDop6PmnpAgU1ZHIOi3r+W+hOaVsOaNruWtl+espuS4su+8jOWwhuWFtui9rOaNouS4uuS4gOS4quWMheWQq+i3r+W+hOWRveS7pOWSjOWdkOagh+eCueeahOaVsOe7hOWvueixoVxuICAgICAqIEBwYXJhbSBkYXRhIC0gU1ZHIOi3r+W+hOaVsOaNruWtl+espuS4slxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZVBhdGhEYXRhKGRhdGE6IHN0cmluZykge1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjcyA9IGRhdGE7XG4gICAgICAgIGNvbnN0IGNjID0gWydtJywgJ00nLCAnbCcsICdMJywgJ3YnLCAnVicsICdoJywgJ0gnLCAneicsICdaJywgJ2MnLCAnQycsICdxJywgJ1EnLCAndCcsICdUJywgJ3MnLCAnUycsICdhJywgJ0EnXTtcblxuICAgICAgICBjcyA9IGNzLnJlcGxhY2UobmV3IFJlZ0V4cCgnICcsICdnJyksICcsJyk7XG4gICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgY2MubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIGNzID0gY3MucmVwbGFjZShuZXcgUmVnRXhwKGNjW25dLCAnZycpLCAnfCcgKyBjY1tuXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJyID0gY3Muc3BsaXQoJ3wnKTtcbiAgICAgICAgY29uc3QgY2E6IGFueSA9IFtdO1xuICAgICAgICBjb25zdCBjb29yZHM6IGFueSA9IFtdO1xuICAgICAgICBsZXQgY3B4ID0gMDtcbiAgICAgICAgbGV0IGNweSA9IDA7XG5cbiAgICAgICAgY29uc3QgcmUgPSAvKFstK10/KChcXGQrXFwuXFxkKyl8KChcXGQrKXwoXFwuXFxkKykpKSg/OmVbLStdP1xcZCspPykvZ2k7XG4gICAgICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICAgICAgZm9yIChsZXQgbiA9IDE7IG4gPCBhcnIubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIGxldCBzdHIgPSBhcnJbbl07XG4gICAgICAgICAgICBsZXQgYyA9IHN0ci5jaGFyQXQoMCk7XG4gICAgICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMSk7XG5cbiAgICAgICAgICAgIGNvb3Jkcy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlLmV4ZWMoc3RyKSkpIHtcbiAgICAgICAgICAgICAgICBjb29yZHMucHVzaChtYXRjaFswXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHA6IGFueSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMCwgamxlbiA9IGNvb3Jkcy5sZW5ndGg7IGogPCBqbGVuOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY29vcmRzW2pdID09PSAnMDAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHAucHVzaCgwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmxvYXQoY29vcmRzW2pdKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5wdXNoKHBhcnNlZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC5wdXNoKDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKHAubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihwWzBdKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgY21kOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnRzOiBhbnkgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFggPSBjcHg7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRZID0gY3B5O1xuICAgICAgICAgICAgICAgIGxldCBwcmV2Q21kLCBjdGxQdHgsIGN0bFB0eTtcbiAgICAgICAgICAgICAgICBsZXQgcngsIHJ5LCBwc2ksIGZhLCBmcywgeDEsIHkxO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2wnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY3B4ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweSArPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnTCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkeCA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGR5ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B4ICs9IGR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ICs9IGR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gJ00nO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhLmxlbmd0aCA+IDIgJiYgY2FbY2EubGVuZ3RoIC0gMV0uY29tbWFuZCA9PT0gJ3onKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaWR4ID0gY2EubGVuZ3RoIC0gMjsgaWR4ID49IDA7IGlkeC0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYVtpZHhdLmNvbW1hbmQgPT09ICdNJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B4ID0gY2FbaWR4XS5wb2ludHNbMF0gKyBkeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9IGNhW2lkeF0ucG9pbnRzWzFdICsgZHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGNweCwgY3B5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnTSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gJ0wnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggKz0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gJ0wnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goY3B4LCBjcHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY3B4ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gJ0wnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goY3B4LCBjcHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdMJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGNweCwgY3B5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdWJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdMJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGNweCwgY3B5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHAuc2hpZnQoKSwgcC5zaGlmdCgpLCBwLnNoaWZ0KCksIHAuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHggKyBwLnNoaWZ0KCksIGNweSArIHAuc2hpZnQoKSwgY3B4ICsgcC5zaGlmdCgpLCBjcHkgKyBwLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B4ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweSArPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnQyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHggPSBjcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHkgPSBjcHk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q21kID0gY2FbY2EubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkNtZC5jb21tYW5kID09PSAnQycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHggPSBjcHggKyAoY3B4IC0gcHJldkNtZC5wb2ludHNbMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bFB0eSA9IGNweSArIChjcHkgLSBwcmV2Q21kLnBvaW50c1szXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjdGxQdHgsIGN0bFB0eSwgcC5zaGlmdCgpLCBwLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B4ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gJ0MnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goY3B4LCBjcHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY3RsUHR4ID0gY3B4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY3RsUHR5ID0gY3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNtZCA9IGNhW2NhLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZDbWQuY29tbWFuZCA9PT0gJ0MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RsUHR4ID0gY3B4ICsgKGNweCAtIHByZXZDbWQucG9pbnRzWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHkgPSBjcHkgKyAoY3B5IC0gcHJldkNtZC5wb2ludHNbM10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goY3RsUHR4LCBjdGxQdHksIGNweCArIHAuc2hpZnQoKSwgY3B5ICsgcC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweCArPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgKz0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gJ0MnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goY3B4LCBjcHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2gocC5zaGlmdCgpLCBwLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B4ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goY3B4LCBjcHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3EnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goY3B4ICsgcC5zaGlmdCgpLCBjcHkgKyBwLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B4ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweSArPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnUSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHggPSBjcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHkgPSBjcHk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q21kID0gY2FbY2EubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkNtZC5jb21tYW5kID09PSAnUScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHggPSBjcHggKyAoY3B4IC0gcHJldkNtZC5wb2ludHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bFB0eSA9IGNweSArIChjcHkgLSBwcmV2Q21kLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnUSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjdGxQdHgsIGN0bFB0eSwgY3B4LCBjcHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY3RsUHR4ID0gY3B4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY3RsUHR5ID0gY3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNtZCA9IGNhW2NhLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZDbWQuY29tbWFuZCA9PT0gJ1EnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RsUHR4ID0gY3B4ICsgKGNweCAtIHByZXZDbWQucG9pbnRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHkgPSBjcHkgKyAoY3B5IC0gcHJldkNtZC5wb2ludHNbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY3B4ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweSArPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnUSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjdGxQdHgsIGN0bFB0eSwgY3B4LCBjcHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcnggPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByeSA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBzaSA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZnMgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB4MSA9IGNweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxID0gY3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B4ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gJ0EnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gdGhpcy5jb252ZXJ0RW5kcG9pbnRUb0NlbnRlclBhcmFtZXRlcml6YXRpb24oeDEsIHkxLCBjcHgsIGNweSwgZmEsIGZzLCByeCwgcnksIHBzaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgICAgICAgICAgICAgICByeCA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ5ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHNpID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmEgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcyA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHgxID0gY3B4O1xuICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSBjcHk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggKz0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdBJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHRoaXMuY29udmVydEVuZHBvaW50VG9DZW50ZXJQYXJhbWV0ZXJpemF0aW9uKHgxLCB5MSwgY3B4LCBjcHksIGZhLCBmcywgcngsIHJ5LCBwc2kpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2EucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IGNtZCB8fCBjLFxuICAgICAgICAgICAgICAgICAgICBwb2ludHM6IHBvaW50cyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHN0YXJ0WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHN0YXJ0WVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoTGVuZ3RoOiB0aGlzLmNhbGNMZW5ndGgoc3RhcnRYLCBzdGFydFksIGNtZCB8fCBjLCBwb2ludHMpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjID09PSAneicgfHwgYyA9PT0gJ1onKSB7XG4gICAgICAgICAgICAgICAgY2EucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICd6JyxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aExlbmd0aDogMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruS8oOWFpeeahOi3r+W+hOaVsOaNriBkYXRhIOWcqOeUu+W4g+S4iue7mOWItui3r+W+hFxuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICovXG4gICAgcHVibGljIHBhdGgob3B0aW9uczogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgZGF0YTogc3RyaW5nOyBzaXplPzogbnVtYmVyOyBzY2FsZVg/OiBudW1iZXI7IHNjYWxlWT86IG51bWJlcjsgZmlsbDogc3RyaW5nIH0pIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCBzY2FsZVggPSAxLCBzY2FsZVkgPSAxLCBkYXRhLCBmaWxsIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBkYXRhQXJyYXkgPSB0aGlzLnBhcnNlUGF0aERhdGEoZGF0YSk7XG5cbiAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gZmlsbDtcbiAgICAgICAgdGhpcy5jdHgudHJhbnNsYXRlKHgsIHkpO1xuICAgICAgICB0aGlzLmN0eC5zY2FsZShzY2FsZVgsIHNjYWxlWSk7XG4gICAgICAgIGxldCBpc0Nsb3NlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGRhdGFBcnJheS5sZW5ndGg7IG4rKykge1xuICAgICAgICAgICAgY29uc3QgYyA9IGRhdGFBcnJheVtuXS5jb21tYW5kO1xuICAgICAgICAgICAgY29uc3QgcCA9IGRhdGFBcnJheVtuXS5wb2ludHM7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdMJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHBbMF0sIHBbMV0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHBbMF0sIHBbMV0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguYmV6aWVyQ3VydmVUbyhwWzBdLCBwWzFdLCBwWzJdLCBwWzNdLCBwWzRdLCBwWzVdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnF1YWRyYXRpY0N1cnZlVG8ocFswXSwgcFsxXSwgcFsyXSwgcFszXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjeCA9IHBbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN5ID0gcFsxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcnggPSBwWzJdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByeSA9IHBbM107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoZXRhID0gcFs0XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZFRoZXRhID0gcFs1XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHNpID0gcFs2XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnMgPSBwWzddO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByID0gcnggPiByeSA/IHJ4IDogcnk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlWCA9IHJ4ID4gcnkgPyAxIDogcnggLyByeTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVZID0gcnggPiByeSA/IHJ5IC8gcnggOiAxO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zbGF0ZShjeCwgY3kpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5yb3RhdGUocHNpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2NhbGUoc2NhbGVYLCBzY2FsZVkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5hcmMoMCwgMCwgciwgdGhldGEsIHRoZXRhICsgZFRoZXRhLCAoMSAtIGZzKSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zY2FsZSgxIC8gc2NhbGVYLCAxIC8gc2NhbGVZKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucm90YXRlKC1wc2kpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUoLWN4LCAtY3kpO1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3onOlxuICAgICAgICAgICAgICAgICAgICBpc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNDbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBkcmF3ZXIgPSBuZXcgRHJhd2VyKCk7XG4iXX0=
|
938
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvZHJhd2Vycy9kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxnQkFBZ0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0gsZUFBZSxFQUNmLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsa0NBQWtDLEVBQ2xDLCtCQUErQixFQUMvQix5QkFBeUIsRUFDekIsWUFBWSxFQUNaLGVBQWUsRUFDbEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBVXBCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkYsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUV2RDs7R0FFRztBQUNILE1BQU0sT0FBTyxNQUFNO0lBQW5CO1FBQ0ksUUFBRyxHQUE2QixXQUFXLEVBQUUsQ0FBQyxPQUFRLENBQUM7UUFDdkQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixXQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBb2pDakMsQ0FBQztJQWxqQ1UsT0FBTyxDQUFDLEdBQTZCO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLFdBQVcsRUFB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QUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxHQUFHLENB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RyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUU3RCxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNiLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hCLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkksSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDWixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNYLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMvQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFaEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3ZFLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUV2RSxNQUFNLElBQUksR0FBRyxVQUFVLENBQVc7WUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBVyxFQUFFLENBQVc7WUFDN0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBVyxFQUFFLENBQVc7WUFDN0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFF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R0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUVyQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBUSxDQUFDLENBQUM7b0JBQzlELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUU3QixNQUFNO2dCQUNWLEtBQUssR0FBRztvQkFDSixRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNyQixNQUFNO1lBQ2QsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0o7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHcmFwaGVtZVNwbGl0dGVyIGZyb20gJ2dyYXBoZW1lLXNwbGl0dGVyJztcbmltcG9ydCB7XG4gICAgQUlfVEFCTEVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfVEFHX1BBRERJTkcsXG4gICAgREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgICBERUZBVUxUX0ZPTlRfU0laRSxcbiAgICBERUZBVUxUX0ZPTlRfV0VJR0hULFxuICAgIERFRkFVTFRfVEVYVF9BTElHTl9DRU5URVIsXG4gICAgREVGQVVMVF9URVhUX0FMSUdOX0xFRlQsXG4gICAgREVGQVVMVF9URVhUX0RFQ09SQVRJT04sXG4gICAgREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRSxcbiAgICBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fVE9QLFxuICAgIERFRkFVTFRfV1JBUF9URVhUX01BWF9ST1csXG4gICAgRk9OVF9TSVpFX1NNLFxuICAgIFdlYk91dGxpbmVkUGF0aFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUlUYWJsZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBSVRhYmxlQXJjLFxuICAgIEFJVGFibGVBdmF0YXJTaXplLFxuICAgIEFJVGFibGVBdmF0YXJUeXBlLFxuICAgIEFJVGFibGVDdHhTdHlsZSxcbiAgICBBSVRhYmxlSW1hZ2UsXG4gICAgQUlUYWJsZUxhYmVsLFxuICAgIEFJVGFibGVMaW5lLFxuICAgIEFJVGFibGVSZWN0LFxuICAgIEFJVGFibGVUZXh0LFxuICAgIEFJVGFibGVUZXh0RWxsaXBzaXMsXG4gICAgQUlUYWJsZVdyYXBUZXh0LFxuICAgIEFJVGFibGVXcmFwVGV4dERhdGFcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0VGV4dFdpZHRoLCBpbWFnZUNhY2hlLCB0ZXh0RGF0YUNhY2hlLCBUZXh0TWVhc3VyZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuLy8g55So5LqO5q2j56Gu5Zyw5YiG5Ymy5a2X56ym5Liy77yM5YyF5ous6KGo5oOF56ym5Y+3XG5leHBvcnQgY29uc3QgZ3JhcGhlbWVTcGxpdHRlciA9IG5ldyBHcmFwaGVtZVNwbGl0dGVyKCk7XG5cbi8qKlxuICog55So5LqO5ZyoIENhbnZhcyDkuIrov5vooYznmoTlkITnp43nu5jlm77mk43kvZzvvIzljIXlkKvkuobmlofmnKznu5jliLbjgIHnn6nlvaLnu5jliLbjgIHot6/lvoTnu5jliLbku6Xlj4rkuIDkupvlh6DkvZXorqHnrpfnrYnlip/og71cbiAqL1xuZXhwb3J0IGNsYXNzIERyYXdlciB7XG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgPSBUZXh0TWVhc3VyZSgpLmNvbnRleHQhO1xuICAgIG5lZWREcmF3ID0gZmFsc2U7XG4gICAgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcblxuICAgIHB1YmxpYyBpbml0Q3R4KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKSB7XG4gICAgICAgIHRoaXMubmVlZERyYXcgPSBCb29sZWFuKGN0eCk7XG4gICAgICAgIHRoaXMuY3R4ID0gY3R4IHx8IFRleHRNZWFzdXJlKCkuY29udGV4dCE7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0ZXh0QmFzZWxpbmUg5oyH5a6a5Li6IG1pZGRsZe+8jOWFvOWuuea1j+iniOWZqOW3ruW8glxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jdHgudGV4dEJhc2VsaW5lID0gREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRTtcbiAgICB9XG5cbiAgICAvLyDorr7nva7moLflvI9cbiAgICBwdWJsaWMgc2V0U3R5bGUob3B0aW9uczogQUlUYWJsZUN0eFN0eWxlKSB7XG4gICAgICAgIGNvbnN0IHsgZm9udFNpemUsIGZvbnRXZWlnaHQsIGZpbGxTdHlsZSwgc3Ryb2tlU3R5bGUgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgaWYgKGZvbnRTaXplIHx8IGZvbnRXZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LmZvbnQgPSBgJHtmb250V2VpZ2h0IHx8IERFRkFVTFRfRk9OVF9XRUlHSFR9ICR7Zm9udFNpemUgfHwgREVGQVVMVF9GT05UX1NJWkV9cHggJHtERUZBVUxUX0ZPTlRfRkFNSUxZfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGxTdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gZmlsbFN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJva2VTdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBzdHJva2VTdHlsZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOaWh+acrOecgeeVpVxuICAgIHB1YmxpYyB0ZXh0RWxsaXBzaXMob3B0aW9uczogQUlUYWJsZVRleHRFbGxpcHNpcykge1xuICAgICAgICBjb25zdCB7IHRleHQsIG1heFdpZHRoLCBmb250U2l6ZSA9IERFRkFVTFRfRk9OVF9TSVpFLCBmb250V2VpZ2h0ID0gREVGQVVMVF9GT05UX1dFSUdIVCB9ID0gb3B0aW9ucztcblxuICAgICAgICBpZiAodGV4dCA9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICB0ZXh0V2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgaXNFbGxpcHNpczogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IGAke2ZvbnRXZWlnaHR9ICR7Zm9udFNpemV9cHggJHtERUZBVUxUX0ZPTlRfRkFNSUxZfWA7XG5cbiAgICAgICAgaWYgKCFtYXhXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIHRleHRXaWR0aDogZ2V0VGV4dFdpZHRoKHRoaXMuY3R4LCB0ZXh0LCBmb250U3R5bGUpLFxuICAgICAgICAgICAgICAgIGlzRWxsaXBzaXM6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxsaXBzaXMgPSAn4oCmJztcbiAgICAgICAgY29uc3QgdGV4dFNpemUgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgLy8g6aKE5YWI56Gu5a6a5Lyg5YWl5paH5pys55qE6ZiI5YC85a695bqmXG4gICAgICAgIGxldCBndWVzc1NpemUgPSBNYXRoLmNlaWwobWF4V2lkdGggLyBmb250U2l6ZSk7XG4gICAgICAgIGxldCBndWVzc1RleHQgPSB0ZXh0LnN1YnN0cigwLCBndWVzc1NpemUpO1xuICAgICAgICBsZXQgZ3Vlc3NXaWR0aCA9IGdldFRleHRXaWR0aCh0aGlzLmN0eCwgZ3Vlc3NUZXh0LCBmb250U3R5bGUpO1xuXG4gICAgICAgIHdoaWxlIChndWVzc1dpZHRoIDw9IG1heFdpZHRoKSB7XG4gICAgICAgICAgICBpZiAodGV4dFNpemUgPD0gZ3Vlc3NTaXplKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dFdpZHRoOiBndWVzc1dpZHRoLFxuICAgICAgICAgICAgICAgICAgICBpc0VsbGlwc2lzOiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBndWVzc1NpemUrKztcbiAgICAgICAgICAgIGd1ZXNzVGV4dCA9IHRleHQuc3Vic3RyKDAsIGd1ZXNzU2l6ZSk7XG4gICAgICAgICAgICBndWVzc1dpZHRoID0gZ2V0VGV4dFdpZHRoKHRoaXMuY3R4LCBndWVzc1RleHQsIGZvbnRTdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGxpcHNpc1dpZHRoID0gZ2V0VGV4dFdpZHRoKHRoaXMuY3R4LCBlbGxpcHNpcywgZm9udFN0eWxlKTtcbiAgICAgICAgd2hpbGUgKGd1ZXNzU2l6ZSA+PSAwICYmIGd1ZXNzV2lkdGggKyBlbGxpcHNpc1dpZHRoID4gbWF4V2lkdGgpIHtcbiAgICAgICAgICAgIGd1ZXNzU2l6ZS0tO1xuICAgICAgICAgICAgZ3Vlc3NUZXh0ID0gdGV4dC5zdWJzdHIoMCwgZ3Vlc3NTaXplKTtcbiAgICAgICAgICAgIGd1ZXNzV2lkdGggPSBnZXRUZXh0V2lkdGgodGhpcy5jdHgsIGd1ZXNzVGV4dCwgZm9udFN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiBgJHtndWVzc1RleHQgfHwgdGV4dFswXX0ke2VsbGlwc2lzfWAsXG4gICAgICAgICAgICB0ZXh0V2lkdGg6IG1heFdpZHRoLFxuICAgICAgICAgICAgaXNFbGxpcHNpczogdHJ1ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIOe7mOWItue6v+autVxuICAgIHB1YmxpYyBsaW5lKG9wdGlvbnM6IEFJVGFibGVMaW5lKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgcG9pbnRzLCBzdHJva2UsIGNsb3NlZCA9IGZhbHNlIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBwb2ludHMubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGlmIChzdHJva2UpIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlO1xuICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSAxO1xuICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICAgIHRoaXMuY3R4Lm1vdmVUbyhwb2ludHNbMF0sIHBvaW50c1sxXSk7XG5cbiAgICAgICAgZm9yIChsZXQgbiA9IDI7IG4gPCBsZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHBvaW50c1tuXSwgcG9pbnRzW24gKyAxXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIC8vIOe7mOWItuWchlxuICAgIHB1YmxpYyBhcmMob3B0aW9uczogQUlUYWJsZUFyYykge1xuICAgICAgICBjb25zdCB7IHgsIHksIHN0cm9rZSwgZmlsbCwgcmFkaXVzIH0gPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgaWYgKGZpbGwpIHRoaXMuc2V0U3R5bGUoeyBmaWxsU3R5bGU6IGZpbGwgfSk7XG4gICAgICAgIGlmIChzdHJva2UpIHRoaXMuc2V0U3R5bGUoeyBzdHJva2VTdHlsZTogc3Ryb2tlIH0pO1xuICAgICAgICB0aGlzLmN0eC5hcmMoeCwgeSwgcmFkaXVzLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xuICAgICAgICBpZiAoZmlsbCkge1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJva2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g57uY5Yi255+p5b2iXG4gICAgcHVibGljIHJlY3Qob3B0aW9uczogQUlUYWJsZVJlY3QpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByYWRpdXMsIGZpbGwsIHN0cm9rZSB9ID0gb3B0aW9ucztcblxuICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgaWYgKGZpbGwpIHRoaXMuc2V0U3R5bGUoeyBmaWxsU3R5bGU6IGZpbGwgfSk7XG4gICAgICAgIGlmIChzdHJva2UpIHRoaXMuc2V0U3R5bGUoeyBzdHJva2VTdHlsZTogc3Ryb2tlIH0pO1xuXG4gICAgICAgIGlmICghcmFkaXVzKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5yZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHRvcExlZnQgPSAwO1xuICAgICAgICAgICAgbGV0IHRvcFJpZ2h0ID0gMDtcbiAgICAgICAgICAgIGxldCBib3R0b21MZWZ0ID0gMDtcbiAgICAgICAgICAgIGxldCBib3R0b21SaWdodCA9IDA7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmFkaXVzID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHRvcExlZnQgPSB0b3BSaWdodCA9IGJvdHRvbUxlZnQgPSBib3R0b21SaWdodCA9IE1hdGgubWluKHJhZGl1cywgd2lkdGggLyAyLCBoZWlnaHQgLyAyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9wTGVmdCA9IE1hdGgubWluKHJhZGl1c1swXSB8fCAwLCB3aWR0aCAvIDIsIGhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgIHRvcFJpZ2h0ID0gTWF0aC5taW4ocmFkaXVzWzFdIHx8IDAsIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgYm90dG9tUmlnaHQgPSBNYXRoLm1pbihyYWRpdXNbMl0gfHwgMCwgd2lkdGggLyAyLCBoZWlnaHQgLyAyKTtcbiAgICAgICAgICAgICAgICBib3R0b21MZWZ0ID0gTWF0aC5taW4ocmFkaXVzWzNdIHx8IDAsIHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4ICsgdG9wTGVmdCwgeSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeCArIHdpZHRoIC0gdG9wUmlnaHQsIHkpO1xuICAgICAgICAgICAgdGhpcy5jdHguYXJjKHggKyB3aWR0aCAtIHRvcFJpZ2h0LCB5ICsgdG9wUmlnaHQsIHRvcFJpZ2h0LCAoTWF0aC5QSSAqIDMpIC8gMiwgMCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCAtIGJvdHRvbVJpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmFyYyh4ICsgd2lkdGggLSBib3R0b21SaWdodCwgeSArIGhlaWdodCAtIGJvdHRvbVJpZ2h0LCBib3R0b21SaWdodCwgMCwgTWF0aC5QSSAvIDIsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgYm90dG9tTGVmdCwgeSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5hcmMoeCArIGJvdHRvbUxlZnQsIHkgKyBoZWlnaHQgLSBib3R0b21MZWZ0LCBib3R0b21MZWZ0LCBNYXRoLlBJIC8gMiwgTWF0aC5QSSwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkgKyB0b3BMZWZ0KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmFyYyh4ICsgdG9wTGVmdCwgeSArIHRvcExlZnQsIHRvcExlZnQsIE1hdGguUEksIChNYXRoLlBJICogMykgLyAyLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcblxuICAgICAgICBpZiAoZmlsbCkge1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJva2UpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbVJlY3Qob3B0aW9uczogQUlUYWJsZVJlY3QpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmaWxsLCBzdHJva2VzIH0gPSBvcHRpb25zO1xuICAgICAgICBpZiAoZmlsbCkgdGhpcy5zZXRTdHlsZSh7IGZpbGxTdHlsZTogZmlsbCB9KTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGlmIChzdHJva2VzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gc3Ryb2tlcztcbiAgICAgICAgICAgIC8vIOS4iui+ueahhlxuICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0eWxlKHsgc3Ryb2tlU3R5bGU6IHRvcCA/PyB0aGlzLmNvbG9ycy50cmFuc3BhcmVudCB9KTtcbiAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkpO1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAvLyDlj7PovrnmoYZcbiAgICAgICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZSh7IHN0cm9rZVN0eWxlOiByaWdodCA/PyB0aGlzLmNvbG9ycy50cmFuc3BhcmVudCB9KTtcbiAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4ICsgd2lkdGgsIHkpO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgIC8vIOS4i+i+ueahhlxuICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0eWxlKHsgc3Ryb2tlU3R5bGU6IGJvdHRvbSA/PyB0aGlzLmNvbG9ycy50cmFuc3BhcmVudCB9KTtcbiAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5ICsgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgICAgICAvLyDlt6bovrnmoYZcbiAgICAgICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZSh7IHN0cm9rZVN0eWxlOiBsZWZ0ID8/IHRoaXMuY29sb3JzLnRyYW5zcGFyZW50IH0pO1xuICAgICAgICAgICAgdGhpcy5jdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDmjaLooYzmlofmnKznu5jliLZcbiAgICBwdWJsaWMgd3JhcFRleHQob3B0aW9uczogQUlUYWJsZVdyYXBUZXh0KSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIG1heFdpZHRoLFxuICAgICAgICAgICAgbGluZUhlaWdodCxcbiAgICAgICAgICAgIG1heFJvdyA9IERFRkFVTFRfV1JBUF9URVhUX01BWF9ST1csXG4gICAgICAgICAgICBmb250U2l6ZSA9IERFRkFVTFRfRk9OVF9TSVpFLFxuICAgICAgICAgICAgZmlsbFN0eWxlID0gdGhpcy5jb2xvcnMuZ3JheTgwMCxcbiAgICAgICAgICAgIHRleHRBbGlnbiA9IERFRkFVTFRfVEVYVF9BTElHTl9MRUZULFxuICAgICAgICAgICAgdmVydGljYWxBbGlnbiA9IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9UT1AsXG4gICAgICAgICAgICBmb250V2VpZ2h0ID0gREVGQVVMVF9GT05UX1dFSUdIVCxcbiAgICAgICAgICAgIHRleHREZWNvcmF0aW9uID0gREVGQVVMVF9URVhUX0RFQ09SQVRJT04sXG4gICAgICAgICAgICBmaWVsZFR5cGUsXG4gICAgICAgICAgICBuZWVkRHJhdyA9IGZhbHNlXG4gICAgICAgIH0gPSBvcHRpb25zO1xuICAgICAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgICAgIGxldCBvZmZzZXRZID0gMDtcbiAgICAgICAgY29uc3QgZm9udFN0eWxlID0gYCR7Zm9udFdlaWdodH0gJHtmb250U2l6ZX1weCAke0RFRkFVTFRfRk9OVF9GQU1JTFl9YDtcbiAgICAgICAgY29uc3QgYmFzZWxpbmVPZmZzZXQgPSB2ZXJ0aWNhbEFsaWduID09PSBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fVE9QID8gZm9udFNpemUgLyAyIDogMDtcbiAgICAgICAgY29uc3QgZm9udFN0eWxlS2V5ID0gYCR7Zm9udFdlaWdodH0tJHtmb250U2l6ZX1weGA7XG4gICAgICAgIGNvbnN0IGlzVW5kZXJsaW5lID0gdGV4dERlY29yYXRpb24gPT09ICd1bmRlcmxpbmUnO1xuICAgICAgICB0aGlzLmN0eC5mb250ID0gZm9udFN0eWxlO1xuICAgICAgICBjb25zdCB0ZXh0UmVuZGVyZXIgPSAodGV4dERhdGFMaXN0OiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgdGV4dERhdGFMaXN0LmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG9mZnNldFgsIG9mZnNldFksIHRleHQsIHdpZHRoLCBsaW5rVXJsIH0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxUZXh0KHRleHQsIHggKyBvZmZzZXRYLCB5ICsgb2Zmc2V0WSArIGJhc2VsaW5lT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBpZiAobGlua1VybCB8fCBpc1VuZGVybGluZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIG9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgb2Zmc2V0WSArIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50czogWzAsIGZvbnRTaXplLCB3aWR0aCwgZm9udFNpemVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBmaWxsU3R5bGVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGZpbGxTdHlsZSkgdGhpcy5zZXRTdHlsZSh7IGZpbGxTdHlsZSB9KTtcbiAgICAgICAgdGhpcy5jdHgudGV4dEFsaWduID0gdGV4dEFsaWduO1xuICAgICAgICBjb25zdCBjYWNoZUtleSA9IGAke2ZvbnRTdHlsZUtleX0tJHttYXhSb3d9LSR7bWF4V2lkdGggfHwgMH0tJHtmaWVsZFR5cGV9LSR7dGV4dH1gO1xuICAgICAgICBjb25zdCBjYWNoZVRleHREYXRhID0gdGV4dERhdGFDYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICBpZiAoY2FjaGVUZXh0RGF0YSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubmVlZERyYXcgJiYgbmVlZERyYXcpIHtcbiAgICAgICAgICAgICAgICB0ZXh0UmVuZGVyZXIoY2FjaGVUZXh0RGF0YS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjYWNoZVRleHREYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0RGF0YTogQUlUYWJsZVdyYXBUZXh0RGF0YSA9IFtdO1xuICAgICAgICAvLyDlh4bnoa7liIfliIbljIXlkKvooajmg4XnrKblj7fnmoTlrZfnrKbkuLJcbiAgICAgICAgY29uc3QgYXJyVGV4dCA9IGdyYXBoZW1lU3BsaXR0ZXIuc3BsaXRHcmFwaGVtZXModGV4dCk7XG4gICAgICAgIGNvbnN0IHRleHRMZW5ndGggPSBhcnJUZXh0Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgZWxsaXBzaXNXaWR0aCA9IHRoaXMuY3R4Lm1lYXN1cmVUZXh0KCfigKYnKS53aWR0aDtcbiAgICAgICAgbGV0IHNob3dUZXh0ID0gJyc7IC8vIOavj+S4queJh+auteaYvuekuueahOaWh+acrFxuICAgICAgICBsZXQgc2hvd1RleHRXaWR0aCA9IDA7IC8vIOavj+auteeahOWuveW6plxuICAgICAgICBsZXQgc2hvd0xpbmVXaWR0aCA9IDA7IC8vIOW9k+WJjeavj+ihjOaYvuekuuaWh+Wtl+eahOWuveW6plxuICAgICAgICBsZXQgcm93Q291bnQgPSAwO1xuXG4gICAgICAgIGNvbnN0IGlzRWxsaXBzaXMgPSB0aGlzLnRleHRFbGxpcHNpcyh7IHRleHQsIG1heFdpZHRoOiBtYXhXaWR0aCB9KS5pc0VsbGlwc2lzO1xuXG4gICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgdGV4dExlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJUZXh0ID0gYXJyVGV4dFtuXTtcbiAgICAgICAgICAgIGNvbnN0IGlzTGluZUJyZWFrID0gWydcXG4nLCAnXFxyJ10uaW5jbHVkZXMoY3VyVGV4dCk7XG4gICAgICAgICAgICBjb25zdCBzaW5nbGVUZXh0ID0gaXNMaW5lQnJlYWsgPyAnJyA6IGN1clRleHQ7XG4gICAgICAgICAgICBjb25zdCBjb21wb3NlVGV4dCA9IHNob3dUZXh0ICsgc2luZ2xlVGV4dDtcbiAgICAgICAgICAgIGNvbnN0IGlzTGltaXRSb3cgPSBtYXhSb3cgPyByb3dDb3VudCA+PSBtYXhSb3cgLSAxIDogZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBzaW5nbGVUZXh0V2lkdGggPSBpc0xpbmVCcmVhayA/IDAgOiB0aGlzLmN0eC5tZWFzdXJlVGV4dChzaW5nbGVUZXh0KS53aWR0aDtcbiAgICAgICAgICAgIHNob3dMaW5lV2lkdGggKz0gc2luZ2xlVGV4dFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgZGlmZldpZHRoID0gaXNMaW1pdFJvdyA/IHNob3dMaW5lV2lkdGggKyAoaXNFbGxpcHNpcyA/IGVsbGlwc2lzV2lkdGggOiAwKSA6IHNob3dMaW5lV2lkdGg7XG4gICAgICAgICAgICBjb25zdCBpc0xpbmVFbmQgPSBkaWZmV2lkdGggPiBtYXhXaWR0aDtcblxuICAgICAgICAgICAgLy8g6YGH5Yiw5o2i6KGM56ym5oiW6KGM5bC+XG4gICAgICAgICAgICBpZiAoKGlzTGluZUVuZCB8fCBpc0xpbmVCcmVhaykgJiYgcm93Q291bnQgPCBtYXhSb3cpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xhc3RMZXR0ZXIgPSBuID09PSBhcnJUZXh0Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgcmVzdWx0RGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IE1hdGguY2VpbChzaG93VGV4dFdpZHRoKSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogaXNMaW1pdFJvdyA/IChpc0xhc3RMZXR0ZXIgPyBjb21wb3NlVGV4dCA6IGAke3Nob3dUZXh0feKApmApIDogc2hvd1RleHRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzaG93VGV4dCA9IHNpbmdsZVRleHQ7XG4gICAgICAgICAgICAgICAgb2Zmc2V0WCA9IDA7XG4gICAgICAgICAgICAgICAgc2hvd1RleHRXaWR0aCA9IHNpbmdsZVRleHRXaWR0aDtcbiAgICAgICAgICAgICAgICBzaG93TGluZVdpZHRoID0gc2luZ2xlVGV4dFdpZHRoO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTGltaXRSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvd1RleHQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJvd0NvdW50Kys7XG4gICAgICAgICAgICAgICAgb2Zmc2V0WSArPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzaG93VGV4dCA9IGNvbXBvc2VUZXh0O1xuICAgICAgICAgICAgc2hvd1RleHRXaWR0aCArPSBzaW5nbGVUZXh0V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvd1RleHQpIHtcbiAgICAgICAgICAgIHJlc3VsdERhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgb2Zmc2V0WCxcbiAgICAgICAgICAgICAgICBvZmZzZXRZLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBNYXRoLmNlaWwoc2hvd1RleHRXaWR0aCksXG4gICAgICAgICAgICAgICAgdGV4dDogc2hvd1RleHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmVlZERyYXcgJiYgbmVlZERyYXcpIHtcbiAgICAgICAgICAgIHRleHRSZW5kZXJlcihyZXN1bHREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIGhlaWdodDogcm93Q291bnQgPCBtYXhSb3cgPyBvZmZzZXRZICsgbGluZUhlaWdodCA6IG9mZnNldFksXG4gICAgICAgICAgICBkYXRhOiByZXN1bHREYXRhXG4gICAgICAgIH07XG5cbiAgICAgICAgdGV4dERhdGFDYWNoZS5zZXQoY2FjaGVLZXksIHJlcyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8g57uY5Yi25Y2V6KGM5paH5pysXG4gICAgcHVibGljIHRleHQob3B0aW9uczogQUlUYWJsZVRleHQpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHksXG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgZm9udFNpemUgPSBERUZBVUxUX0ZPTlRfU0laRSxcbiAgICAgICAgICAgIGZpbGxTdHlsZSA9IHRoaXMuY29sb3JzLmdyYXk4MDAsXG4gICAgICAgICAgICB0ZXh0QWxpZ24gPSBERUZBVUxUX1RFWFRfQUxJR05fTEVGVCxcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ24gPSBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fVE9QLFxuICAgICAgICAgICAgZm9udFdlaWdodCA9IERFRkFVTFRfRk9OVF9XRUlHSFQsXG4gICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbiA9IERFRkFVTFRfVEVYVF9ERUNPUkFUSU9OXG4gICAgICAgIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IGAke2ZvbnRXZWlnaHR9ICR7Zm9udFNpemV9cHggJHtERUZBVUxUX0ZPTlRfRkFNSUxZfWA7XG5cbiAgICAgICAgaWYgKHRleHREZWNvcmF0aW9uID09PSAndW5kZXJsaW5lJykge1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gZ2V0VGV4dFdpZHRoKHRoaXMuY3R4LCB0ZXh0LCBmb250U3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5saW5lKHtcbiAgICAgICAgICAgICAgICB4OiB4LFxuICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICAgICAgcG9pbnRzOiBbMCwgZm9udFNpemUsIHRleHRXaWR0aCwgZm9udFNpemVdLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogZmlsbFN0eWxlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJhc2VsaW5lT2Zmc2V0ID0gdmVydGljYWxBbGlnbiA9PT0gREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX1RPUCA/IGZvbnRTaXplIC8gMiA6IDA7XG4gICAgICAgIGlmIChmaWxsU3R5bGUpIHRoaXMuc2V0U3R5bGUoeyBmaWxsU3R5bGUgfSk7XG4gICAgICAgIHRoaXMuY3R4LnRleHRBbGlnbiA9IHRleHRBbGlnbjtcbiAgICAgICAgdGhpcy5jdHguZm9udCA9IGZvbnRTdHlsZTtcbiAgICAgICAgdGhpcy5jdHguZmlsbFRleHQodGV4dCwgeCwgeSArIGJhc2VsaW5lT2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvLyDnu5jliLbmoIfnrb5cbiAgICBwdWJsaWMgdGFnKG9wdGlvbnM6IEFJVGFibGVMYWJlbCk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgcmFkaXVzLFxuICAgICAgICAgICAgYmFja2dyb3VuZCxcbiAgICAgICAgICAgIGNvbG9yID0gdGhpcy5jb2xvcnMuZ3JheTgwMCxcbiAgICAgICAgICAgIGZvbnRTaXplID0gQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSxcbiAgICAgICAgICAgIGZvbnRXZWlnaHQgPSBERUZBVUxUX0ZPTlRfV0VJR0hULFxuICAgICAgICAgICAgc3Ryb2tlXG4gICAgICAgIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIC8vIOiDjOaZr1xuICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHJhZGl1cyxcbiAgICAgICAgICAgIGZpbGw6IGJhY2tncm91bmQsXG4gICAgICAgICAgICBzdHJva2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9UQUdfUEFERElORyxcbiAgICAgICAgICAgIHk6IHkgKyAoaGVpZ2h0IC0gZm9udFNpemUpIC8gMixcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9yLFxuICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICBmb250V2VpZ2h0XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBpbWFnZShvcHRpb25zOiBBSVRhYmxlSW1hZ2UsIGNyb3NzT3JpZ2luPzogYm9vbGVhbiwgYWxsb3dEZWZhdWx0PzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCB7IHgsIHksIHVybCwgd2lkdGgsIGhlaWdodCwgb3BhY2l0eSA9IDEsIGNsaXBGdW5jIH0gPSBvcHRpb25zO1xuICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGltYWdlID0gaW1hZ2VDYWNoZS5nZXRJbWFnZSh1cmwpO1xuICAgICAgICAvLyBOb3QgbG9hZGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICBpZiAoaW1hZ2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBpZiAoYWxsb3dEZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXRoKHtcbiAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIDIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IFdlYk91dGxpbmVkUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMTYsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IGNvbG9ycy5ncmF5NjAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gVW5sb2FkZWRcbiAgICAgICAgaWYgKGltYWdlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBpbWFnZUNhY2hlLmxvYWRJbWFnZSh1cmwsIHVybCwgeyBjcm9zc09yaWdpbiB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc09yaWdpbiA9IG9wYWNpdHkgPT09IDE7XG5cbiAgICAgICAgaWYgKCFjbGlwRnVuYyAmJiBpc09yaWdpbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3R4LmRyYXdJbWFnZShpbWFnZSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsaXBGdW5jICYmICFpc09yaWdpbikge1xuICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSBvcGFjaXR5O1xuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbGlwRnVuYykge1xuICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgdGhpcy5jdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBjbGlwRnVuYyh0aGlzLmN0eCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5jbGlwKCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5nbG9iYWxBbHBoYSA9IG9wYWNpdHk7XG4gICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoaW1hZ2UsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGF2YXRhcihvcHRpb25zOiB7XG4gICAgICAgIHg6IG51bWJlcjtcbiAgICAgICAgeTogbnVtYmVyO1xuICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgdHlwZT86IEFJVGFibGVBdmF0YXJUeXBlO1xuICAgICAgICBzaXplPzogQUlUYWJsZUF2YXRhclNpemU7XG4gICAgICAgIG9wYWNpdHk/OiBudW1iZXI7XG4gICAgICAgIGJnQ29sb3I/OiBzdHJpbmc7XG4gICAgfSkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICB4ID0gMCxcbiAgICAgICAgICAgIHkgPSAwLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICAgIGJnQ29sb3IgPSB0aGlzLmNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIHNpemUgPSBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMzYsXG4gICAgICAgICAgICB0eXBlID0gQUlUYWJsZUF2YXRhclR5cGUubWVtYmVyLFxuICAgICAgICAgICAgb3BhY2l0eSA9IDFcbiAgICAgICAgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgaWYgKHRpdGxlID09IG51bGwgfHwgaWQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgIGNvbnN0IGF2YXRhclNyYyA9IHVybCB8fCAnJztcbiAgICAgICAgY29uc3QgYXZhdGFyTmFtZSA9IHRpdGxlO1xuICAgICAgICBjb25zdCBhdmF0YXJCZyA9IGF2YXRhclNyYyA/IGNvbG9ycy53aGl0ZSA6IGJnQ29sb3I7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVBdmF0YXJUeXBlLm1lbWJlcjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhZGl1cyA9IHNpemUgLyAyO1xuICAgICAgICAgICAgICAgIGlmICghYXZhdGFyU3JjKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGF2YXRhckJnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguYXJjKHggKyByYWRpdXMsIHkgKyByYWRpdXMsIHJhZGl1cywgMCwgTWF0aC5QSSAqIDIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGF2YXRhck5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IERFRkFVTFRfVEVYVF9BTElHTl9DRU5URVIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEZPTlRfU0laRV9TTSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLndoaXRlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZSh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGF2YXRhclNyYyxcbiAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBhdmF0YXJTcmMsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemUsXG4gICAgICAgICAgICAgICAgICAgIGNsaXBGdW5jOiAoY3R4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gYXZhdGFyQmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguYXJjKHggKyByYWRpdXMsIHkgKyByYWRpdXMsIHJhZGl1cywgMCwgTWF0aC5QSSAqIDIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaWueazleWwhuakreWchuW8p+eahOerr+eCueWPguaVsOWMluW9ouW8j+i9rOaNouS4uuS4reW/g+WPguaVsOWMluW9ouW8j1xuICAgICAqIOaOpeWPl+W8p+e6v+eahOerr+eCueWPguaVsO+8jOW5tuiuoeeul+WHuuW8p+e6v+eahOS4reW/g+eCueWdkOagh+OAgei1t+Wni+inkuW6puOAgee7iOatouinkuW6puetieWPguaVsFxuICAgICAqIOi/lOWbnuWAvO+8muS4gOS4quWMheWQq+S4reW/g+eCueWdkOagh+OAgeWNiuW+hOOAgeaXi+i9rOinkuW6puOAgei1t+Wni+inkuW6puS7peWPiuinkuW6puW3rueahOWvueixoe+8jOi/meS6m+WPguaVsOWPr+S7peebtOaOpeeUqOS6jue7mOWItuakreWchuW8p1xuICAgICAqIEByZXR1cm5zIFtjeCwgY3ksIHJ4LCByeSwgdGhldGEsIGRUaGV0YSwgcHNpLCBmc11cbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbnZlcnRFbmRwb2ludFRvQ2VudGVyUGFyYW1ldGVyaXphdGlvbihcbiAgICAgICAgeDE6IG51bWJlcixcbiAgICAgICAgeTE6IG51bWJlcixcbiAgICAgICAgeDI6IG51bWJlcixcbiAgICAgICAgeTI6IG51bWJlcixcbiAgICAgICAgZmE6IGFueSxcbiAgICAgICAgZnM6IG51bWJlcixcbiAgICAgICAgcng6IG51bWJlcixcbiAgICAgICAgcnk6IG51bWJlcixcbiAgICAgICAgcHNpRGVnOiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgY29uc3QgcHNpID0gcHNpRGVnICogKE1hdGguUEkgLyAxODAuMCk7XG4gICAgICAgIGNvbnN0IHhwID0gKE1hdGguY29zKHBzaSkgKiAoeDEgLSB4MikpIC8gMi4wICsgKE1hdGguc2luKHBzaSkgKiAoeTEgLSB5MikpIC8gMi4wO1xuICAgICAgICBjb25zdCB5cCA9ICgtMSAqIE1hdGguc2luKHBzaSkgKiAoeDEgLSB4MikpIC8gMi4wICsgKE1hdGguY29zKHBzaSkgKiAoeTEgLSB5MikpIC8gMi4wO1xuXG4gICAgICAgIGNvbnN0IGxhbWJkYSA9ICh4cCAqIHhwKSAvIChyeCAqIHJ4KSArICh5cCAqIHlwKSAvIChyeSAqIHJ5KTtcblxuICAgICAgICBpZiAobGFtYmRhID4gMSkge1xuICAgICAgICAgICAgcnggKj0gTWF0aC5zcXJ0KGxhbWJkYSk7XG4gICAgICAgICAgICByeSAqPSBNYXRoLnNxcnQobGFtYmRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmID0gTWF0aC5zcXJ0KChyeCAqIHJ4ICogKHJ5ICogcnkpIC0gcnggKiByeCAqICh5cCAqIHlwKSAtIHJ5ICogcnkgKiAoeHAgKiB4cCkpIC8gKHJ4ICogcnggKiAoeXAgKiB5cCkgKyByeSAqIHJ5ICogKHhwICogeHApKSk7XG5cbiAgICAgICAgaWYgKGZhID09PSBmcykge1xuICAgICAgICAgICAgZiAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4oZikpIHtcbiAgICAgICAgICAgIGYgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3hwID0gKGYgKiByeCAqIHlwKSAvIHJ5O1xuICAgICAgICBjb25zdCBjeXAgPSAoZiAqIC1yeSAqIHhwKSAvIHJ4O1xuXG4gICAgICAgIGNvbnN0IGN4ID0gKHgxICsgeDIpIC8gMi4wICsgTWF0aC5jb3MocHNpKSAqIGN4cCAtIE1hdGguc2luKHBzaSkgKiBjeXA7XG4gICAgICAgIGNvbnN0IGN5ID0gKHkxICsgeTIpIC8gMi4wICsgTWF0aC5zaW4ocHNpKSAqIGN4cCArIE1hdGguY29zKHBzaSkgKiBjeXA7XG5cbiAgICAgICAgY29uc3Qgdk1hZyA9IGZ1bmN0aW9uICh2OiBudW1iZXJbXSkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydCh2WzBdICogdlswXSArIHZbMV0gKiB2WzFdKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdlJhdGlvID0gZnVuY3Rpb24gKHU6IG51bWJlcltdLCB2OiBudW1iZXJbXSkge1xuICAgICAgICAgICAgcmV0dXJuICh1WzBdICogdlswXSArIHVbMV0gKiB2WzFdKSAvICh2TWFnKHUpICogdk1hZyh2KSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHZBbmdsZSA9IGZ1bmN0aW9uICh1OiBudW1iZXJbXSwgdjogbnVtYmVyW10pIHtcbiAgICAgICAgICAgIHJldHVybiAodVswXSAqIHZbMV0gPCB1WzFdICogdlswXSA/IC0xIDogMSkgKiBNYXRoLmFjb3ModlJhdGlvKHUsIHYpKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdGhldGEgPSB2QW5nbGUoWzEsIDBdLCBbKHhwIC0gY3hwKSAvIHJ4LCAoeXAgLSBjeXApIC8gcnldKTtcbiAgICAgICAgY29uc3QgdSA9IFsoeHAgLSBjeHApIC8gcngsICh5cCAtIGN5cCkgLyByeV07XG4gICAgICAgIGNvbnN0IHYgPSBbKC0xICogeHAgLSBjeHApIC8gcngsICgtMSAqIHlwIC0gY3lwKSAvIHJ5XTtcbiAgICAgICAgbGV0IGRUaGV0YSA9IHZBbmdsZSh1LCB2KTtcblxuICAgICAgICBpZiAodlJhdGlvKHUsIHYpIDw9IC0xKSB7XG4gICAgICAgICAgICBkVGhldGEgPSBNYXRoLlBJO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2UmF0aW8odSwgdikgPj0gMSkge1xuICAgICAgICAgICAgZFRoZXRhID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnMgPT09IDAgJiYgZFRoZXRhID4gMCkge1xuICAgICAgICAgICAgZFRoZXRhID0gZFRoZXRhIC0gMiAqIE1hdGguUEk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZzID09PSAxICYmIGRUaGV0YSA8IDApIHtcbiAgICAgICAgICAgIGRUaGV0YSA9IGRUaGV0YSArIDIgKiBNYXRoLlBJO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbY3gsIGN5LCByeCwgcnksIHRoZXRhLCBkVGhldGEsIHBzaSwgZnNdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuoeeul+S4pOS4queCuSAoeDEsIHkxKSDlkowgKHgyLCB5Mikg5LmL6Ze055qE55u057q/6Led56a7XG4gICAgICogQHJldHVybnMg5Lik5Liq54K5ICh4MSwgeTEpIOWSjCAoeDIsIHkyKSDkuYvpl7TnmoTnm7Tnur/ot53nprvvvIzljZXkvY3kuI7ovpPlhaXnmoTlnZDmoIflgLznm7jlkIxcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExpbmVMZW5ndGgoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KCh4MiAtIHgxKSAqICh4MiAtIHgxKSArICh5MiAtIHkxKSAqICh5MiAtIHkxKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6h566X5LiJ5qyh6LSd5aGe5bCU5puy57q/5LiK57uZ5a6a5Y+C5pWwIHQg5a+55bqU55qE54K555qE5Z2Q5qCHLlxuICAgICAqIOWPr+S7peWcqOaMh+WumueahCB0IOWPguaVsOS4i+iuoeeul+WHuuabsue6v+S4iueyvuehrueahOS4gOS4queCue+8jOi/meS4queCueWPr+S7peeUqOS6jue7mOWItuW5s+a7keabsue6v+eahOS4gOmDqOWIhlxuICAgICAqIEBwYXJhbSBwY3QgLSAwIOWIsCAxIOS5i+mXtOeahOWPguaVsO+8jOeUqOS6juaMh+Wumuabsue6v+S4iueahOeCueeahOS9jee9rlxuICAgICAqIEBwYXJhbSBQMXggLSDmm7Lnur/nmoTotbfngrkgeCDlnZDmoIdcbiAgICAgKiBAcGFyYW0gUDF5IC0g5puy57q/55qE6LW354K5IHkg5Z2Q5qCHXG4gICAgICogQHBhcmFtIFAyeCAtIOabsue6v+eahOesrOS4gOS4quaOp+WItueCuSB4IOWdkOagh1xuICAgICAqIEBwYXJhbSBQMnkgLSDmm7Lnur/nmoTnrKzkuIDkuKrmjqfliLbngrkgeSDlnZDmoIdcbiAgICAgKiBAcGFyYW0gUDN4IC0g5puy57q/55qE56ys5LqM5Liq5o6n5Yi254K5IHgg5Z2Q5qCHXG4gICAgICogQHBhcmFtIFAzeSAtIOabsue6v+eahOesrOS6jOS4quaOp+WItueCuSB5IOWdkOagh1xuICAgICAqIEBwYXJhbSBQNHggLSDmm7Lnur/nmoTnu4jngrkgeCDlnZDmoIdcbiAgICAgKiBAcGFyYW0gUDR5IC0g5puy57q/55qE57uI54K5IHkg5Z2Q5qCHXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBvaW50T25DdWJpY0JlemllcihcbiAgICAgICAgcGN0OiBudW1iZXIsXG4gICAgICAgIFAxeDogbnVtYmVyLFxuICAgICAgICBQMXk6IG51bWJlcixcbiAgICAgICAgUDJ4OiBudW1iZXIsXG4gICAgICAgIFAyeTogbnVtYmVyLFxuICAgICAgICBQM3g6IG51bWJlcixcbiAgICAgICAgUDN5OiBudW1iZXIsXG4gICAgICAgIFA0eDogbnVtYmVyLFxuICAgICAgICBQNHk6IG51bWJlclxuICAgICkge1xuICAgICAgICBmdW5jdGlvbiBDQjEodDogbnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdCAqIHQgKiB0O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gQ0IyKHQ6IG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIDMgKiB0ICogdCAqICgxIC0gdCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBDQjModDogbnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gMyAqIHQgKiAoMSAtIHQpICogKDEgLSB0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIENCNCh0OiBudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoMSAtIHQpICogKDEgLSB0KSAqICgxIC0gdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB4ID0gUDR4ICogQ0IxKHBjdCkgKyBQM3ggKiBDQjIocGN0KSArIFAyeCAqIENCMyhwY3QpICsgUDF4ICogQ0I0KHBjdCk7XG4gICAgICAgIGNvbnN0IHkgPSBQNHkgKiBDQjEocGN0KSArIFAzeSAqIENCMihwY3QpICsgUDJ5ICogQ0IzKHBjdCkgKyBQMXkgKiBDQjQocGN0KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgIHk6IHlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorqHnrpfkuozmrKHotJ3loZ7lsJTmm7Lnur/kuIrnu5nlrprlj4LmlbAgdCDlr7nlupTnmoTngrnnmoTlnZDmoIdcbiAgICAgKiBAcGFyYW0gcGN0IC0gMCDliLAgMSDkuYvpl7TnmoTlj4LmlbDvvIznlKjkuo7mjIflrprmm7Lnur/kuIrnmoTngrnnmoTkvY3nva5cbiAgICAgKiBAcGFyYW0gUDF4IC0g5puy57q/55qE6LW354K5IHgg5Z2Q5qCHXG4gICAgICogQHBhcmFtIFAxeSAtIOabsue6v+eahOi1t+eCuSB5IOWdkOagh1xuICAgICAqIEBwYXJhbSBQMnggLSDmm7Lnur/nmoTmjqfliLbngrkgeCDlnZDmoIdcbiAgICAgKiBAcGFyYW0gUDJ5IC0g5puy57q/55qE5o6n5Yi254K5IHkg5Z2Q5qCHXG4gICAgICogQHBhcmFtIFAzeCAtIOabsue6v+eahOe7iOeCuSB4IOWdkOagh1xuICAgICAqIEBwYXJhbSBQM3kgLSDmm7Lnur/nmoTnu4jngrkgeSDlnZDmoIdcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0UG9pbnRPblF1YWRyYXRpY0JlemllcihwY3Q6IG51bWJlciwgUDF4OiBudW1iZXIsIFAxeTogbnVtYmVyLCBQMng6IG51bWJlciwgUDJ5OiBudW1iZXIsIFAzeDogbnVtYmVyLCBQM3k6IG51bWJlcikge1xuICAgICAgICBmdW5jdGlvbiBRQjEodDogbnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdCAqIHQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBRQjIodDogbnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gMiAqIHQgKiAoMSAtIHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gUUIzKHQ6IG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuICgxIC0gdCkgKiAoMSAtIHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeCA9IFAzeCAqIFFCMShwY3QpICsgUDJ4ICogUUIyKHBjdCkgKyBQMXggKiBRQjMocGN0KTtcbiAgICAgICAgY29uc3QgeSA9IFAzeSAqIFFCMShwY3QpICsgUDJ5ICogUUIyKHBjdCkgKyBQMXkgKiBRQjMocGN0KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgIHk6IHlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorqHnrpfmpK3lnIblvKfkuIrnu5nlrprop5LluqYgzrgg5a+55bqU55qE54K555qE5Z2Q5qCHXG4gICAgICogQHBhcmFtIGN4IC0g5qSt5ZyG55qE5Lit5b+D54K5IHgg5Z2Q5qCHXG4gICAgICogQHBhcmFtIGN5IC0g5qSt5ZyG55qE5Lit5b+D54K5IHkg5Z2Q5qCHXG4gICAgICogQHBhcmFtIHJ4IC0g5qSt5ZyG55qEIHgg6L205Y2K5b6EXG4gICAgICogQHBhcmFtIHJ5IC0g5qSt5ZyG55qEIHkg6L205Y2K5b6EXG4gICAgICogQHBhcmFtIHRoZXRhIC0g5qSt5ZyG5byn55qE6LW35aeL6KeS5bqmXG4gICAgICogQHBhcmFtIHBzaSAtIOakreWchuW8p+eahOaXi+i9rOinkuW6plxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRQb2ludE9uRWxsaXB0aWNhbEFyYyhjeDogbnVtYmVyLCBjeTogbnVtYmVyLCByeDogbnVtYmVyLCByeTogbnVtYmVyLCB0aGV0YTogbnVtYmVyLCBwc2k6IG51bWJlcikge1xuICAgICAgICBjb25zdCBjb3NQc2kgPSBNYXRoLmNvcyhwc2kpO1xuICAgICAgICBjb25zdCBzaW5Qc2kgPSBNYXRoLnNpbihwc2kpO1xuICAgICAgICBjb25zdCBwdCA9IHtcbiAgICAgICAgICAgIHg6IHJ4ICogTWF0aC5jb3ModGhldGEpLFxuICAgICAgICAgICAgeTogcnkgKiBNYXRoLnNpbih0aGV0YSlcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IGN4ICsgKHB0LnggKiBjb3NQc2kgLSBwdC55ICogc2luUHNpKSxcbiAgICAgICAgICAgIHk6IGN5ICsgKHB0LnggKiBzaW5Qc2kgKyBwdC55ICogY29zUHNpKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuoeeul+WfuuS6juS4jeWQjOi3r+W+hOWRveS7pOeahOmVv+W6plxuICAgICAqIEBwYXJhbSB4IC0g6LW354K5IHgg5Z2Q5qCHXG4gICAgICogQHBhcmFtIHkgLSDotbfngrkgeSDlnZDmoIdcbiAgICAgKiBAcGFyYW0gY21kIC0g6Lev5b6E5ZG95LukXG4gICAgICogQHBhcmFtIHBvaW50cyAtIOS4jui3r+W+hOWRveS7pOebuOWFs+eahOeCueeahOWdkOagh+aIluaOp+WItuWPguaVsFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYWxjTGVuZ3RoKHg6IG51bWJlciwgeTogbnVtYmVyLCBjbWQ6IHN0cmluZywgcG9pbnRzOiBudW1iZXJbXSkge1xuICAgICAgICBsZXQgbGVuLCBwMSwgcDIsIHQ7XG5cbiAgICAgICAgc3dpdGNoIChjbWQpIHtcbiAgICAgICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExpbmVMZW5ndGgoeCwgeSwgcG9pbnRzWzBdLCBwb2ludHNbMV0pO1xuICAgICAgICAgICAgY2FzZSAnQyc6XG4gICAgICAgICAgICAgICAgbGVuID0gMC4wO1xuICAgICAgICAgICAgICAgIHAxID0gdGhpcy5nZXRQb2ludE9uQ3ViaWNCZXppZXIoMCwgeCwgeSwgcG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCBwb2ludHNbNF0sIHBvaW50c1s1XSk7XG4gICAgICAgICAgICAgICAgZm9yICh0ID0gMC4wMTsgdCA8PSAxOyB0ICs9IDAuMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcDIgPSB0aGlzLmdldFBvaW50T25DdWJpY0Jlemllcih0LCB4LCB5LCBwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10sIHBvaW50c1s0XSwgcG9pbnRzWzVdKTtcbiAgICAgICAgICAgICAgICAgICAgbGVuICs9IHRoaXMuZ2V0TGluZUxlbmd0aChwMS54LCBwMS55LCBwMi54LCBwMi55KTtcbiAgICAgICAgICAgICAgICAgICAgcDEgPSBwMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlbjtcbiAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGxlbiA9IDAuMDtcbiAgICAgICAgICAgICAgICBwMSA9IHRoaXMuZ2V0UG9pbnRPblF1YWRyYXRpY0JlemllcigwLCB4LCB5LCBwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10pO1xuICAgICAgICAgICAgICAgIGZvciAodCA9IDAuMDE7IHQgPD0gMTsgdCArPSAwLjAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHAyID0gdGhpcy5nZXRQb2ludE9uUXVhZHJhdGljQmV6aWVyKHQsIHgsIHksIHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSk7XG4gICAgICAgICAgICAgICAgICAgIGxlbiArPSB0aGlzLmdldExpbmVMZW5ndGgocDEueCwgcDEueSwgcDIueCwgcDIueSk7XG4gICAgICAgICAgICAgICAgICAgIHAxID0gcDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBsZW47XG4gICAgICAgICAgICBjYXNlICdBJzpcbiAgICAgICAgICAgICAgICBsZW4gPSAwLjA7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBwb2ludHNbNF07XG4gICAgICAgICAgICAgICAgY29uc3QgZFRoZXRhID0gcG9pbnRzWzVdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IHBvaW50c1s0XSArIGRUaGV0YTtcbiAgICAgICAgICAgICAgICBsZXQgaW5jID0gTWF0aC5QSSAvIDE4MC4wO1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhzdGFydCAtIGVuZCkgPCBpbmMpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jID0gTWF0aC5hYnMoc3RhcnQgLSBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwMSA9IHRoaXMuZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCBzdGFydCwgMCk7XG4gICAgICAgICAgICAgICAgaWYgKGRUaGV0YSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gc3RhcnQgLSBpbmM7IHQgPiBlbmQ7IHQgLT0gaW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9IHRoaXMuZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCB0LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlbiArPSB0aGlzLmdldExpbmVMZW5ndGgocDEueCwgcDEueSwgcDIueCwgcDIueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwMSA9IHAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gc3RhcnQgKyBpbmM7IHQgPCBlbmQ7IHQgKz0gaW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9IHRoaXMuZ2V0UG9pbnRPbkVsbGlwdGljYWxBcmMocG9pbnRzWzBdLCBwb2ludHNbMV0sIHBvaW50c1syXSwgcG9pbnRzWzNdLCB0LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlbiArPSB0aGlzLmdldExpbmVMZW5ndGgocDEueCwgcDEueSwgcDIueCwgcDIueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwMSA9IHAyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHAyID0gdGhpcy5nZXRQb2ludE9uRWxsaXB0aWNhbEFyYyhwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10sIGVuZCwgMCk7XG4gICAgICAgICAgICAgICAgbGVuICs9IHRoaXMuZ2V0TGluZUxlbmd0aChwMS54LCBwMS55LCBwMi54LCBwMi55KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOino+aekCBTVkcg6Lev5b6E5pWw5o2u5a2X56ym5Liy77yM5bCG5YW26L2s5o2i5Li65LiA5Liq5YyF5ZCr6Lev5b6E5ZG95Luk5ZKM5Z2Q5qCH54K555qE5pWw57uE5a+56LGhXG4gICAgICogQHBhcmFtIGRhdGEgLSBTVkcg6Lev5b6E5pWw5o2u5a2X56ym5LiyXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlUGF0aERhdGEoZGF0YTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNzID0gZGF0YTtcbiAgICAgICAgY29uc3QgY2MgPSBbJ20nLCAnTScsICdsJywgJ0wnLCAndicsICdWJywgJ2gnLCAnSCcsICd6JywgJ1onLCAnYycsICdDJywgJ3EnLCAnUScsICd0JywgJ1QnLCAncycsICdTJywgJ2EnLCAnQSddO1xuXG4gICAgICAgIGNzID0gY3MucmVwbGFjZShuZXcgUmVnRXhwKCcgJywgJ2cnKSwgJywnKTtcbiAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBjYy5sZW5ndGg7IG4rKykge1xuICAgICAgICAgICAgY3MgPSBjcy5yZXBsYWNlKG5ldyBSZWdFeHAoY2Nbbl0sICdnJyksICd8JyArIGNjW25dKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcnIgPSBjcy5zcGxpdCgnfCcpO1xuICAgICAgICBjb25zdCBjYTogYW55ID0gW107XG4gICAgICAgIGNvbnN0IGNvb3JkczogYW55ID0gW107XG4gICAgICAgIGxldCBjcHggPSAwO1xuICAgICAgICBsZXQgY3B5ID0gMDtcblxuICAgICAgICBjb25zdCByZSA9IC8oWy0rXT8oKFxcZCtcXC5cXGQrKXwoKFxcZCspfChcXC5cXGQrKSkpKD86ZVstK10/XFxkKyk/KS9naTtcbiAgICAgICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuICAgICAgICBmb3IgKGxldCBuID0gMTsgbiA8IGFyci5sZW5ndGg7IG4rKykge1xuICAgICAgICAgICAgbGV0IHN0ciA9IGFycltuXTtcbiAgICAgICAgICAgIGxldCBjID0gc3RyLmNoYXJBdCgwKTtcbiAgICAgICAgICAgIHN0ciA9IHN0ci5zbGljZSgxKTtcblxuICAgICAgICAgICAgY29vcmRzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmUuZXhlYyhzdHIpKSkge1xuICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKG1hdGNoWzBdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcDogYW55ID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqbGVuID0gY29vcmRzLmxlbmd0aDsgaiA8IGpsZW47IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChjb29yZHNbal0gPT09ICcwMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5wdXNoKDAsIDApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VGbG9hdChjb29yZHNbal0pO1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4ocGFyc2VkKSkge1xuICAgICAgICAgICAgICAgICAgICBwLnB1c2gocGFyc2VkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwLnB1c2goMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3aGlsZSAocC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBjbWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgICAgIGxldCBwb2ludHM6IGFueSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0WCA9IGNweDtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFkgPSBjcHk7XG4gICAgICAgICAgICAgICAgbGV0IHByZXZDbWQsIGN0bFB0eCwgY3RsUHR5O1xuICAgICAgICAgICAgICAgIGxldCByeCwgcnksIHBzaSwgZmEsIGZzLCB4MSwgeTE7XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggKz0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdMJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGNweCwgY3B5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdMJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweCA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGNweCwgY3B5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGR4ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHkgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggKz0gZHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgKz0gZHk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnTSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2EubGVuZ3RoID4gMiAmJiBjYVtjYS5sZW5ndGggLSAxXS5jb21tYW5kID09PSAneicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpZHggPSBjYS5sZW5ndGggLSAyOyBpZHggPj0gMDsgaWR4LS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhW2lkeF0uY29tbWFuZCA9PT0gJ00nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHggPSBjYVtpZHhdLnBvaW50c1swXSArIGR4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B5ID0gY2FbaWR4XS5wb2ludHNbMV0gKyBkeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goY3B4LCBjcHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICdsJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweCA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdNJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGNweCwgY3B5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnTCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweCArPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnTCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnSCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnTCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgKz0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gJ0wnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goY3B4LCBjcHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gJ0wnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goY3B4LCBjcHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2gocC5zaGlmdCgpLCBwLnNoaWZ0KCksIHAuc2hpZnQoKSwgcC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweCA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGNweCwgY3B5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdjJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGNweCArIHAuc2hpZnQoKSwgY3B5ICsgcC5zaGlmdCgpLCBjcHggKyBwLnNoaWZ0KCksIGNweSArIHAuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggKz0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdDJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGNweCwgY3B5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0bFB0eCA9IGNweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0bFB0eSA9IGNweTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDbWQgPSBjYVtjYS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Q21kLmNvbW1hbmQgPT09ICdDJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bFB0eCA9IGNweCArIChjcHggLSBwcmV2Q21kLnBvaW50c1syXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RsUHR5ID0gY3B5ICsgKGNweSAtIHByZXZDbWQucG9pbnRzWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGN0bFB0eCwgY3RsUHR5LCBwLnNoaWZ0KCksIHAuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnQyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHggPSBjcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHkgPSBjcHk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q21kID0gY2FbY2EubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkNtZC5jb21tYW5kID09PSAnQycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHggPSBjcHggKyAoY3B4IC0gcHJldkNtZC5wb2ludHNbMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bFB0eSA9IGNweSArIChjcHkgLSBwcmV2Q21kLnBvaW50c1szXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjdGxQdHgsIGN0bFB0eSwgY3B4ICsgcC5zaGlmdCgpLCBjcHkgKyBwLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B4ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweSArPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnQyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChwLnNoaWZ0KCksIHAuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaChjcHggKyBwLnNoaWZ0KCksIGNweSArIHAuc2hpZnQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggKz0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdRJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGNweCwgY3B5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0bFB0eCA9IGNweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0bFB0eSA9IGNweTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZDbWQgPSBjYVtjYS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Q21kLmNvbW1hbmQgPT09ICdRJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bFB0eCA9IGNweCArIChjcHggLSBwcmV2Q21kLnBvaW50c1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RsUHR5ID0gY3B5ICsgKGNweSAtIHByZXZDbWQucG9pbnRzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNweCA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdRJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGN0bFB0eCwgY3RsUHR5LCBjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHggPSBjcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHkgPSBjcHk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2Q21kID0gY2FbY2EubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldkNtZC5jb21tYW5kID09PSAnUScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGxQdHggPSBjcHggKyAoY3B4IC0gcHJldkNtZC5wb2ludHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bFB0eSA9IGNweSArIChjcHkgLSBwcmV2Q21kLnBvaW50c1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggKz0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3B5ICs9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9ICdRJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKGN0bFB0eCwgY3RsUHR5LCBjcHgsIGNweSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQSc6XG4gICAgICAgICAgICAgICAgICAgICAgICByeCA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ5ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHNpID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmEgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcyA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHgxID0gY3B4O1xuICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSBjcHk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHggPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSAnQSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSB0aGlzLmNvbnZlcnRFbmRwb2ludFRvQ2VudGVyUGFyYW1ldGVyaXphdGlvbih4MSwgeTEsIGNweCwgY3B5LCBmYSwgZnMsIHJ4LCByeSwgcHNpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ4ID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcnkgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwc2kgPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYSA9IHAuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzID0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgeDEgPSBjcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB5MSA9IGNweTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNweCArPSBwLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcHkgKz0gcC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gJ0EnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gdGhpcy5jb252ZXJ0RW5kcG9pbnRUb0NlbnRlclBhcmFtZXRlcml6YXRpb24oeDEsIHkxLCBjcHgsIGNweSwgZmEsIGZzLCByeCwgcnksIHBzaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogY21kIHx8IGMsXG4gICAgICAgICAgICAgICAgICAgIHBvaW50czogcG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogc3RhcnRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogc3RhcnRZXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhdGhMZW5ndGg6IHRoaXMuY2FsY0xlbmd0aChzdGFydFgsIHN0YXJ0WSwgY21kIHx8IGMsIHBvaW50cylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMgPT09ICd6JyB8fCBjID09PSAnWicpIHtcbiAgICAgICAgICAgICAgICBjYS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogJ3onLFxuICAgICAgICAgICAgICAgICAgICBwb2ludHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBwYXRoTGVuZ3RoOiAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2E7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5Lyg5YWl55qE6Lev5b6E5pWw5o2uIGRhdGEg5Zyo55S75biD5LiK57uY5Yi26Lev5b6EXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgcGF0aChvcHRpb25zOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBkYXRhOiBzdHJpbmc7IHNpemU/OiBudW1iZXI7IHNjYWxlWD86IG51bWJlcjsgc2NhbGVZPzogbnVtYmVyOyBmaWxsOiBzdHJpbmcgfSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHNjYWxlWCA9IDEsIHNjYWxlWSA9IDEsIGRhdGEsIGZpbGwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRhdGFBcnJheSA9IHRoaXMucGFyc2VQYXRoRGF0YShkYXRhKTtcblxuICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBmaWxsO1xuICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICAgIHRoaXMuY3R4LnNjYWxlKHNjYWxlWCwgc2NhbGVZKTtcbiAgICAgICAgbGV0IGlzQ2xvc2VkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgZGF0YUFycmF5Lmxlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gZGF0YUFycmF5W25dLmNvbW1hbmQ7XG4gICAgICAgICAgICBjb25zdCBwID0gZGF0YUFycmF5W25dLnBvaW50cztcbiAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8ocFswXSwgcFsxXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8ocFswXSwgcFsxXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5iZXppZXJDdXJ2ZVRvKHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucXVhZHJhdGljQ3VydmVUbyhwWzBdLCBwWzFdLCBwWzJdLCBwWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnQSc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN4ID0gcFswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3kgPSBwWzFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByeCA9IHBbMl07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJ5ID0gcFszXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhldGEgPSBwWzRdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkVGhldGEgPSBwWzVdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwc2kgPSBwWzZdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcyA9IHBbN107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSByeCA+IHJ5ID8gcnggOiByeTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVYID0gcnggPiByeSA/IDEgOiByeCAvIHJ5O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY2FsZVkgPSByeCA+IHJ5ID8gcnkgLyByeCA6IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgudHJhbnNsYXRlKGN4LCBjeSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnJvdGF0ZShwc2kpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zY2FsZShzY2FsZVgsIHNjYWxlWSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmFyYygwLCAwLCByLCB0aGV0YSwgdGhldGEgKyBkVGhldGEsICgxIC0gZnMpIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNjYWxlKDEgLyBzY2FsZVgsIDEgLyBzY2FsZVkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5yb3RhdGUoLXBzaSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zbGF0ZSgtY3gsIC1jeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneic6XG4gICAgICAgICAgICAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0Nsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRyYXdlciA9IG5ldyBEcmF3ZXIoKTtcbiJdfQ==
|