@ai-table/grid 0.0.58 → 0.0.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,7 +30,7 @@ export class CellDrawer extends Drawer {
30
30
  }
31
31
  }
32
32
  // 单元格渲染
33
- renderCell(render, ctx) {
33
+ renderCell(render, ctx, columnWidth) {
34
34
  const { field, cellValue } = render;
35
35
  const fieldType = field.type;
36
36
  const fieldMethod = FieldModelMap[fieldType];
@@ -50,7 +50,7 @@ export class CellDrawer extends Drawer {
50
50
  case AITableFieldType.updatedAt:
51
51
  return this.renderCellDate(render, ctx);
52
52
  case AITableFieldType.rate:
53
- return this.renderCellRate(render, ctx);
53
+ return this.renderCellRate(render, ctx, columnWidth);
54
54
  case AITableFieldType.progress:
55
55
  return this.renderCellProgress(render, ctx);
56
56
  case AITableFieldType.member:
@@ -448,11 +448,14 @@ export class CellDrawer extends Drawer {
448
448
  });
449
449
  }
450
450
  }
451
- renderCellRate(render, ctx) {
451
+ renderCellRate(render, ctx, columnWidth) {
452
452
  const { x, y, transformValue } = render;
453
453
  const max = AI_TABLE_RATE_MAX;
454
454
  const size = AI_TABLE_CELL_EMOJI_SIZE;
455
- return [...Array(max).keys()].map((item, index) => {
455
+ const renderWidth = columnWidth - AI_TABLE_CELL_PADDING;
456
+ const starWidth = AI_TABLE_CELL_EMOJI_SIZE + AI_TABLE_CELL_EMOJI_PADDING;
457
+ const maxStar = Math.min(max, Math.floor(renderWidth / starWidth));
458
+ return [...Array(maxStar).keys()].map((item, index) => {
456
459
  const value = index + 1;
457
460
  const checked = value <= (transformValue || 0);
458
461
  const iconX = index * size + AI_TABLE_CELL_PADDING + index * AI_TABLE_CELL_EMOJI_PADDING;
@@ -627,12 +630,10 @@ export class CellDrawer extends Drawer {
627
630
  let currentX = AI_TABLE_CELL_PADDING;
628
631
  let currentY = (AI_TABLE_ROW_BLANK_HEIGHT - itemHeight) / 2;
629
632
  const itemOtherWidth = fileIconSize + AI_TABLE_FIELD_ITEM_MARGIN_RIGHT;
630
- const maxHeight = isActive ? 130 - AI_TABLE_CELL_MULTI_PADDING_TOP : rowHeight - AI_TABLE_CELL_MULTI_PADDING_TOP;
631
633
  const maxTextWidth = isOperating
632
634
  ? columnWidth - 2 * AI_TABLE_CELL_PADDING - itemOtherWidth - AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE - 12
633
635
  : columnWidth - 2 * AI_TABLE_CELL_PADDING - itemOtherWidth;
634
636
  const listCount = transformValue.length;
635
- let isOverflow = false;
636
637
  for (let index = 0; index < listCount; index++) {
637
638
  const attachmentInfo = references?.attachments[transformValue[index]];
638
639
  if (!attachmentInfo)
@@ -643,31 +644,13 @@ export class CellDrawer extends Drawer {
643
644
  let realMaxTextWidth = maxTextWidth < 0 ? 0 : maxTextWidth;
644
645
  if (index === 0 && isOperating) {
645
646
  const operatingMaxWidth = maxTextWidth - (AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE + 4);
646
- // item No space to display, then perform a line feed
647
- if (operatingMaxWidth <= 20) {
648
- currentX = AI_TABLE_CELL_PADDING;
649
- currentY += AI_TABLE_OPTION_ITEM_HEIGHT + AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP;
650
- }
651
- else {
652
- realMaxTextWidth = operatingMaxWidth;
653
- }
647
+ realMaxTextWidth = operatingMaxWidth;
654
648
  }
655
649
  if (columnWidth != null) {
656
650
  // 在非活动状态下,当超出列宽时,不会渲染后续内容
657
651
  if (currentX >= columnWidth - 2 * AI_TABLE_CELL_PADDING) {
658
652
  break;
659
653
  }
660
- // 如果不是非活动状态的最后一行,则换行渲染溢出内容
661
- if (currentX > columnWidth - 2 * AI_TABLE_CELL_PADDING) {
662
- currentX = AI_TABLE_CELL_PADDING;
663
- }
664
- if (currentX + itemWidth > columnWidth - AI_TABLE_CELL_PADDING) {
665
- currentX = AI_TABLE_CELL_PADDING;
666
- currentY += itemHeight;
667
- }
668
- if (currentY >= maxHeight) {
669
- isOverflow = true;
670
- }
671
654
  }
672
655
  const svgString = getFileThumbnailSvgString(addition?.ext);
673
656
  const img = new Image();
@@ -686,4 +669,4 @@ export class CellDrawer extends Drawer {
686
669
  }
687
670
  }
688
671
  export const cellDrawer = new CellDrawer();
689
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9kcmF3ZXJzL2NlbGwtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUNILGtDQUFrQyxFQUNsQyxxQ0FBcUMsRUFDckMsNENBQTRDLEVBQzVDLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLGdDQUFnQyxFQUNoQyxpQ0FBaUMsRUFDakMsOEJBQThCLEVBQzlCLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLCtCQUErQixFQUMvQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQixnQ0FBZ0MsRUFDaEMsOEJBQThCLEVBQzlCLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0Isd0NBQXdDLEVBQ3hDLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFDeEIsa0NBQWtDLEVBQ2xDLFlBQVksRUFDWixpQkFBaUIsRUFDakIsUUFBUSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQWtDLE1BQU0sWUFB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QUcsV0FBVyxHQUFHLHFCQUFxQixFQUFFLENBQUM7b0JBQzdELFFBQVEsR0FBRyxxQkFBcUIsQ0FBQztvQkFDakMsUUFBUSxJQUFJLFVBQVUsQ0FBQztnQkFDM0IsQ0FBQztnQkFDRCxJQUFJLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDeEIsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdEIsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDM0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsR0FBRyxHQUFHLG9DQUFvQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzlFLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDUCxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUc7b0JBQ2IsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRO29CQUNmLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTtvQkFDZixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7b0JBQ1osS0FBSyxFQUFFLHVCQUF1QjtvQkFDOUIsTUFBTSxFQUFFLHVCQUF1QjtpQkFDbEMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfLCB7IGlzTmlsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gICAgQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUsXG4gICAgQUlfVEFCTEVfQ0VMTF9NQVhfUk9XX0NPVU5ULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1AsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01JTl9XSURUSCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QLFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfRklFTERfSVRFTV9NQVJHSU5fUklHSFQsXG4gICAgQUlfVEFCTEVfRklMRV9JQ09OX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFLFxuICAgIEFJX1RBQkxFX01FTUJFUl9BVkFUQVJfU0laRSxcbiAgICBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hULFxuICAgIEFJX1RBQkxFX01JTl9URVhUX1dJRFRILFxuICAgIEFJX1RBQkxFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgIEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hULFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfVEVYVF9XSURUSCxcbiAgICBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hULFxuICAgIEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfVEFHX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfVEVYVF9HQVAsXG4gICAgQ29sb3JzLFxuICAgIERFRkFVTFRfRk9OVF9GQU1JTFksXG4gICAgREVGQVVMVF9GT05UX1NJWkUsXG4gICAgREVGQVVMVF9GT05UX1dFSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fTEVGVCxcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fUklHSFQsXG4gICAgREVGQVVMVF9URVhUX0RFQ09SQVRJT04sXG4gICAgREVGQVVMVF9URVhUX0xJTkVfSEVJR0hULFxuICAgIERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUsXG4gICAgRk9OVF9TSVpFX1NNLFxuICAgIEFJX1RBQkxFX1JBVEVfTUFYLFxuICAgIFN0YXJGaWxsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlLCBBSVRhYmxlRmllbGQsIEFJVGFibGVGaWVsZFR5cGUsIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSwgTWVtYmVyU2V0dGluZ3MsIFJhdGVGaWVsZFZhbHVlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQXZhdGFyU2l6ZSwgQUlUYWJsZUF2YXRhclR5cGUsIEFJVGFibGVSZW5kZXIsIEFJVGFibGVTZWxlY3RGaWVsZCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEZpZWxkTW9kZWxNYXAsIGdldEF2YXRhckJnQ29sb3IsIGdldEF2YXRhclNob3J0TmFtZSwgZ2V0VGV4dFdpZHRoIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRHJhd2VyIH0gZnJvbSAnLi9kcmF3ZXInO1xuaW1wb3J0IHsgaGVscGVycyB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBnZXRGaWxlVGh1bWJuYWlsU3ZnU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZSc7XG5cbi8qKlxuICog5aSE55CG5ZKM5riy5p+T6KGo5qC85Y2V5YWD5qC855qE5YaF5a65XG4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsRHJhd2VyIGV4dGVuZHMgRHJhd2VyIHtcbiAgICAvLyDmoLflvI/liJ3lp4vljJZcbiAgICBwdWJsaWMgaW5pdFN0eWxlKGZpZWxkOiBBSVRhYmxlRmllbGQsIHN0eWxlUHJvcHM6IHsgZm9udFdlaWdodDogYW55IH0pOiB2b2lkIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgdHlwZTogZmllbGRUeXBlIH0gPSBmaWVsZDtcbiAgICAgICAgY29uc3QgeyBmb250V2VpZ2h0ID0gREVGQVVMVF9GT05UX1dFSUdIVCB9ID0gc3R5bGVQcm9wcztcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnRleHQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnJhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3M6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubWVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRCeTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0U3R5bGUoeyBmb250U2l6ZTogREVGQVVMVF9GT05UX1NJWkUsIGZvbnRXZWlnaHQgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5Y2V5YWD5qC85riy5p+TXG4gICAgcHVibGljIHJlbmRlckNlbGwocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCwgY2VsbFZhbHVlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgIGNvbnN0IGZpZWxkTWV0aG9kID0gRmllbGRNb2RlbE1hcFtmaWVsZFR5cGVdO1xuICAgICAgICBpZiAoIWZpZWxkTWV0aG9kLmlzVmFsaWQoY2VsbFZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudGV4dDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5yaWNoVGV4dDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5udW1iZXI6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubGluazpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsVGV4dChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuc2VsZWN0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxTZWxlY3QocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmRhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRBdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsRGF0ZShyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucmF0ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsUmF0ZShyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFByb2dyZXNzKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5tZW1iZXI6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEJ5OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRCeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsTWVtYmVyKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5hdHRhY2htZW50OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxBdHRhY2htZW50KHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxUZXh0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUsIGZpZWxkLCBjb2x1bW5XaWR0aCwgc3R5bGUgfSA9IHJlbmRlcjtcbiAgICAgICAgaWYgKGlzTmlsKHRyYW5zZm9ybVZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgIGxldCByZW5kZXJUZXh0OiBzdHJpbmcgfCBudWxsID0gZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLmxpbmsgPyB0cmFuc2Zvcm1WYWx1ZT8udGV4dCA6IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICBpZiAocmVuZGVyVGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgaXNTaW5nbGVMaW5lID0gIWNvbHVtbldpZHRoO1xuICAgICAgICBjb25zdCBpc1NpbmdsZUxpbmUgPSB0cnVlO1xuICAgICAgICBjb25zdCBpc1RleHRGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS50ZXh0IHx8IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5yaWNoVGV4dDtcbiAgICAgICAgY29uc3QgaXNOdW1iZXJGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5udW1iZXI7XG5cbiAgICAgICAgaWYgKGlzVGV4dEZpZWxkICYmIGlzU2luZ2xlTGluZSkge1xuICAgICAgICAgICAgcmVuZGVyVGV4dCA9IHJlbmRlclRleHQucmVwbGFjZSgvXFxyfFxcbi9nLCAnICcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sb3IgPSBzdHlsZT8uY29sb3IgfHwgdGhpcy5jb2xvcnMuZ3JheTgwMDtcbiAgICAgICAgY29uc3QgdGV4dEFsaWduID0gc3R5bGU/LnRleHRBbGlnbiB8fCBERUZBVUxUX1RFWFRfQUxJR05fTEVGVDtcbiAgICAgICAgY29uc3QgZm9udFdlaWdodCA9IHN0eWxlPy5mb250V2VpZ2h0O1xuICAgICAgICBjb25zdCB0ZXh0TWF4V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHJlbmRlclggPSB0ZXh0QWxpZ24gPT09IERFRkFVTFRfVEVYVF9BTElHTl9SSUdIVCA/IHggKyBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORyA6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHJlbmRlclkgPSB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDI7XG4gICAgICAgIGNvbnN0IHRleHREZWNvcmF0aW9uID0gREVGQVVMVF9URVhUX0RFQ09SQVRJT047XG5cbiAgICAgICAgaWYgKGlzTnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIHJlbmRlclRleHQgPSBTdHJpbmcocmVuZGVyVGV4dCk7XG4gICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZW5kZXJUZXh0LFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiB0ZXh0TWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgbGV0IHB1cmVUZXh0ID0gdGV4dDtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICB4OiByZW5kZXJYLFxuICAgICAgICAgICAgICAgICAgICB5OiByZW5kZXJZLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBwdXJlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cmFwVGV4dCh7XG4gICAgICAgICAgICAgICAgeDogcmVuZGVyWCxcbiAgICAgICAgICAgICAgICB5OiByZW5kZXJZLFxuICAgICAgICAgICAgICAgIHRleHQ6IHJlbmRlclRleHQsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBtYXhSb3c6IEFJX1RBQkxFX0NFTExfTUFYX1JPV19DT1VOVCxcbiAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBERUZBVUxUX1RFWFRfTElORV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUubGluayA/IENvbG9ycy5wcmltYXJ5IDogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAgbmVlZERyYXc6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsU2VsZWN0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IHJlbmRlcjtcbiAgICAgICAgaWYgKChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzPy5pc19tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDZWxsTXVsdGlTZWxlY3QocmVuZGVyLCBjdHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJTaW5nbGVTZWxlY3RDZWxsKHJlbmRlciwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsaWRTZWxlY3RlZFZhbHVlKGZpZWxkOiBBSVRhYmxlRmllbGQsIHRyYW5zZm9ybVZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBmaWVsZE9wdGlvbnNNYXAgPSBoZWxwZXJzLmtleUJ5KChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnMgfHwgW10sICdfaWQnKTtcbiAgICAgICAgcmV0dXJuICh0cmFuc2Zvcm1WYWx1ZSB8fCBbXSkuZmlsdGVyKChvcHRpb25JZDogc3RyaW5nKSA9PiAhIWZpZWxkT3B0aW9uc01hcFtvcHRpb25JZF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbE11bHRpU2VsZWN0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgZmllbGQsIGNvbHVtbldpZHRoIH0gPSByZW5kZXI7XG4gICAgICAgIGxldCB0cmFuc2Zvcm1WYWx1ZSA9IHRoaXMuZ2V0VmFsaWRTZWxlY3RlZFZhbHVlKGZpZWxkLCByZW5kZXIudHJhbnNmb3JtVmFsdWUpO1xuICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnJlbnRYID0geCArIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgbWF4Q29udGFpbmVyV2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG9wdGlvblN0eWxlID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9uX3N0eWxlO1xuICAgICAgICBjb25zdCBmb250U3R5bGUgPSBgJHtERUZBVUxUX0ZPTlRfV0VJR0hUfSAke0FJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRX1weCAke0RFRkFVTFRfRk9OVF9GQU1JTFl9YDtcbiAgICAgICAgY29uc3QgaXNEb3RPclBpZWNlID0gb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3QgfHwgb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTtcblxuICAgICAgICBsZXQgdG90YWxXaWR0aCA9IDA7XG4gICAgICAgIGNvbnN0IGNlbGxJdGVtSW5mb01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbGV0IGRyYXdhYmxlSW5kZXggPSAwO1xuICAgICAgICB0cmFuc2Zvcm1WYWx1ZS5mb3JFYWNoKChvcHRpb25JZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25zPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5faWQgPT09IG9wdGlvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGdldFRleHRXaWR0aChjdHgsIGl0ZW0/LnRleHQgYXMgc3RyaW5nLCBmb250U3R5bGUpO1xuICAgICAgICAgICAgdG90YWxXaWR0aCArPSB0ZXh0V2lkdGggKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEb3RPclBpZWNlKSB7XG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG90YWxXaWR0aCA8IG1heENvbnRhaW5lcldpZHRoIHx8IHRvdGFsV2lkdGggPT09IG1heENvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VsbEl0ZW1JbmZvTWFwLnNldChvcHRpb25JZCwgeyB0ZXh0V2lkdGgsIGl0ZW0sIG9mZnNldDogdG90YWxXaWR0aCB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gQUlfVEFCTEVfTUlOX1RFWFRfV0lEVEggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyO1xuICAgICAgICBjb25zdCBtaW5XaWR0aCA9IGlzRG90T3JQaWVjZSA/IGJhc2VXaWR0aCArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCA6IGJhc2VXaWR0aDtcblxuICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWVbZHJhd2FibGVJbmRleCArIDFdKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9mZnNldDogY3VycmVudE9mZnNldCB9ID0gY2VsbEl0ZW1JbmZvTWFwLmdldCh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4XSk7XG4gICAgICAgICAgICBjb25zdCBjYW5EcmF3ZXJOZXh0ID0gbWF4Q29udGFpbmVyV2lkdGggLSBjdXJyZW50T2Zmc2V0ID4gbWluV2lkdGg7XG4gICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gY2FuRHJhd2VyTmV4dCA/IGRyYXdhYmxlSW5kZXggKyAxIDogZHJhd2FibGVJbmRleDtcbiAgICAgICAgICAgIC8vIOS4iumdoui/h+eoi+aYryAg5rKh5pyJICvmlbDlrZcgIOeahOaDheWGteS4i+acgOWkp+iDveaUvuWHoOS4qu+8m1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gKGRyYXdhYmxlSW5kZXggKyAxKTtcblxuICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyDor7TmmI7mnIkgK+aVsOWtl++8jOmHjeaWsOiuoeeul1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpcmNsZVdpZHRoID0gZ2V0VGV4dFdpZHRoKGN0eCwgYCt7bnVtYmVyfWAsIGZvbnRTdHlsZSkgKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IG1heENvbnRhaW5lcldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgLSBjaXJjbGVXaWR0aDtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzlvZPliY3lt7Lnu4/otoXlh7rkuobvvIznnIvmmK/lkKbog73lrrnkuIvlvZPliY3nmoTvvIzkuI3og73lsLHlh4/ljrsgIDHvvJtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbUhhc092ZXIgPSBjdXJyZW50T2Zmc2V0ID4gbWF4O1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUhhc092ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdE9mZnNldCA9IGRyYXdhYmxlSW5kZXggPT09IDAgPyAwIDogY2VsbEl0ZW1JbmZvTWFwLmdldCh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4IC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gbWF4IC0gbGFzdE9mZnNldCA+IG1pbldpZHRoID8gZHJhd2FibGVJbmRleCA6IGRyYXdhYmxlSW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOi/mOacieWJqeS9meepuumXtCwg55yL5piv5ZCm6IO95aSa5riy5p+T5LiA5LiqXG4gICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBtYXggLSBjdXJyZW50T2Zmc2V0ID4gbWluV2lkdGggPyBkcmF3YWJsZUluZGV4ICsgMSA6IGRyYXdhYmxlSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2lyY2xlVGV4dCA9IGArJHt0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAoZHJhd2FibGVJbmRleCArIDEpfWA7XG4gICAgICAgIGNvbnN0IGNpcmNsZVdpZHRoID1cbiAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIChkcmF3YWJsZUluZGV4ICsgMSkgPiAwID8gZ2V0VGV4dFdpZHRoKGN0eCwgY2lyY2xlVGV4dCwgZm9udFN0eWxlKSArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgOiAwO1xuICAgICAgICAvLyDliankvZnnqbrpl7RcbiAgICAgICAgbGV0IHJlbWFpblNwYWNlID0gbWF4Q29udGFpbmVyV2lkdGggLSBjaXJjbGVXaWR0aCAtIChjaXJjbGVXaWR0aCA+IDAgPyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCA6IDApO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbklkID0gdHJhbnNmb3JtVmFsdWVbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgYmdDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgICAgICAgICAgICAgZmlsbDogQ29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkl0ZW0gPSAob3B0aW9uU3R5bGU6IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSwgc2hhcGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VXaWR0aCA9IGlzRG90T3JQaWVjZVxuICAgICAgICAgICAgICAgICAgICA/IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCArIEFJX1RBQkxFX0NFTExfUEFERElORyAqIDJcbiAgICAgICAgICAgICAgICAgICAgOiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyO1xuICAgICAgICAgICAgICAgIGlmIChyZW1haW5TcGFjZSA8IG1pbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0V2lkdGgsIGl0ZW0gfSA9IGNlbGxJdGVtSW5mb01hcC5nZXQob3B0aW9uSWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlV2lkdGggPSBiYXNlV2lkdGggKyB0ZXh0V2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpblNwYWNlIC09IEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBiZ1dpZHRoID0gcmVtYWluU3BhY2UgPiBjb21wbGV0ZVdpZHRoID8gY29tcGxldGVXaWR0aCA6IHJlbWFpblNwYWNlO1xuICAgICAgICAgICAgICAgIGJnQ29uZmlnLndpZHRoID0gYmdXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaXNEb3RPclBpZWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdChiZ0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGFwZSA9PT0gJ3JlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMikgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBDb2xvcnMucHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09ICdhcmMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyKSAvIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gQ29sb3JzLnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJnV2lkdGggLSBiYXNlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGJnQ29uZmlnLnksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogYmdDb25maWcud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBiZ1dpZHRoIC0gYmFzZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogYmdDb25maWcuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IENvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdChiZ0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmdXaWR0aCAtIGJhc2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gYmdDb25maWcud2lkdGg7XG4gICAgICAgICAgICAgICAgcmVtYWluU3BhY2UgLT0gY3VycmVudFdpZHRoO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRYICs9IGN1cnJlbnRXaWR0aCArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc3dpdGNoIChvcHRpb25TdHlsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdDpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90LCAnYXJjJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlOlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZSwgJ3JlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnOlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGV4dCwgJycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaXJjbGVXaWR0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZykge1xuICAgICAgICAgICAgICAgIHRoaXMudGFnKHtcbiAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY2lyY2xlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaXJjbGVUZXh0LFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjaXJjbGVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IENvbG9ycy5ncmF5MTAwLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVU1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNpcmNsZVRleHQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclNpbmdsZVNlbGVjdENlbGwocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCBmaWVsZCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVZhbHVlID0gdGhpcy5nZXRWYWxpZFNlbGVjdGVkVmFsdWUoZmllbGQsIHJlbmRlci50cmFuc2Zvcm1WYWx1ZSk7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZVswXSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBzaW5nbGUgc2VsZWN0IGZpZWxkIHVuZXhwZWN0ZWQgdmFsdWU6ICR7dHJhbnNmb3JtVmFsdWVbMF19YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnM/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLl9pZCA9PT0gdHJhbnNmb3JtVmFsdWVbMF0pO1xuICAgICAgICBjb25zdCBpdGVtTmFtZSA9IGl0ZW0/LnRleHQgfHwgJyc7XG4gICAgICAgIGNvbnN0IGdldFRleHRFbGxpcHNpcyA9IChtYXhUZXh0V2lkdGg6IG51bWJlciwgZm9udFNpemU6IG51bWJlciA9IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkUpID0+IHtcbiAgICAgICAgICAgIG1heFRleHRXaWR0aCAtPSBpc09wZXJhdGluZyA/IEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFX09GRlNFVCA6IDA7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1OYW1lLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiBtYXhUZXh0V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uU3R5bGUgPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25fc3R5bGU7XG4gICAgICAgICAgICBsZXQgYmFja2dyb3VuZCA9IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IGNvbG9ycy5wcmltYXJ5O1xuICAgICAgICAgICAgY29uc3QgZG90TWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEggLSBBSV9UQUJMRV9URVhUX0dBUDtcbiAgICAgICAgICAgIGNvbnN0IGJvcmRlcldpZHRoID0gMTtcbiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uU3R5bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3Q6XG4gICAgICAgICAgICAgICAgICAgIC8vIOi/memHjOeahCBBSV9UQUJMRV9PRkZTRVQg5YGP56e75LiN56Gu5a6a5piv5Li65ZWl77yI5YyF5ousIHBpZWNlIOeahO+8ie+8jOWPquaYr+S4uuS6huS/neaMgeWSjOe8lui+kee7hOS7tuS4reeahOWvuem9kFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1BJRUNFX1dJRFRIKSAvIDIgKyBBSV9UQUJMRV9ET1RfUkFESVVTIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9QSUVDRV9XSURUSCArIEFJX1RBQkxFX1RFWFRfR0FQICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXMoZG90TWF4VGV4dFdpZHRoKS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2U6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEgpIC8gMiAtIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfUElFQ0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfUElFQ0VfV0lEVEggKyBBSV9UQUJMRV9URVhUX0dBUCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKGRvdE1heFRleHRXaWR0aCkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiAoQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfVEFHX1BBRERJTkcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRleHRXaWR0aCwgdGV4dCB9ID0gZ2V0VGV4dEVsbGlwc2lzKG1heFRleHRXaWR0aCwgQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgodGV4dFdpZHRoICsgMiAqIEFJX1RBQkxFX1RBR19QQURESU5HLCBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUlOX1dJRFRIKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfT1BUSU9OX0lURU1fUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0TWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKHRleHRNYXhUZXh0V2lkdGgpLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy5ncmF5ODAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbERhdGUocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG5cbiAgICAgICAgaWYgKGlzTmlsKHRyYW5zZm9ybVZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dE1heFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCB7IHRleHQgfSA9IHRoaXMudGV4dEVsbGlwc2lzKHsgdGV4dDogdHJhbnNmb3JtVmFsdWUsIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiB0ZXh0TWF4V2lkdGggfSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gc3R5bGU/LmNvbG9yIHx8IGNvbG9ycy5ncmF5ODAwO1xuICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogc3R5bGU/LmZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxSYXRlKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgbWF4ID0gQUlfVEFCTEVfUkFURV9NQVg7XG4gICAgICAgIGNvbnN0IHNpemUgPSBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkU7XG5cbiAgICAgICAgcmV0dXJuIFsuLi5BcnJheShtYXgpLmtleXMoKV0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkID0gdmFsdWUgPD0gKHRyYW5zZm9ybVZhbHVlIHx8IDApO1xuICAgICAgICAgICAgY29uc3QgaWNvblggPSBpbmRleCAqIHNpemUgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORztcbiAgICAgICAgICAgIGNvbnN0IGljb25ZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBzaXplKSAvIDI7XG5cbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGgoe1xuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgaWNvblgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBpY29uWSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMjIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0YXJGaWxsLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBjaGVja2VkID8gdGhpcy5jb2xvcnMud2FyaW5nIDogdGhpcy5jb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLjE0LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEuMTRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsUHJvZ3Jlc3MocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgIGxldCB2YWxpZGF0ZVRyYW5zZm9ybVZhbHVlID0gdHJhbnNmb3JtVmFsdWU7XG4gICAgICAgIGlmIChpc05pbCh2YWxpZGF0ZVRyYW5zZm9ybVZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVUcmFuc2Zvcm1WYWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBBSV9UQUJMRV9QUk9HUkVTU19URVhUX1dJRFRIO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hUO1xuICAgICAgICBjb25zdCB0ZXh0SGVpZ2h0ID0gQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCkgLyAyO1xuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gdGV4dEhlaWdodCkgLyAyO1xuXG4gICAgICAgIC8vIOe7mOWItuiDjOaZr1xuICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgeDogeCArIG9mZnNldFgsXG4gICAgICAgICAgICB5OiB5ICsgb2Zmc2V0WSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgICAgICAgICAgZmlsbDogY29sb3JzLmdyYXkyMDBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g6K6h566X5bm257uY5Yi26L+b5bqmXG4gICAgICAgIGNvbnN0IHByb2dyZXNzV2lkdGggPSAodmFsaWRhdGVUcmFuc2Zvcm1WYWx1ZSAvIDEwMCkgKiB3aWR0aDtcbiAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgIHg6IHggKyBvZmZzZXRYLFxuICAgICAgICAgICAgeTogeSArIG9mZnNldFksXG4gICAgICAgICAgICB3aWR0aDogcHJvZ3Jlc3NXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1JBRElVUyxcbiAgICAgICAgICAgIGZpbGw6IGNvbG9ycy5zdWNjZXNzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCArIHdpZHRoICsgQUlfVEFCTEVfVEVYVF9HQVAsXG4gICAgICAgICAgICB5OiB5ICsgdGV4dE9mZnNldFksXG4gICAgICAgICAgICB0ZXh0OiBgJHt2YWxpZGF0ZVRyYW5zZm9ybVZhbHVlfSVgLFxuICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxNZW1iZXIocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VzLCB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWUsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWU/Lmxlbmd0aCB8fCAhcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZmllbGQuc2V0dGluZ3MgYXMgTWVtYmVyU2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGF2YXRhclNpemUgPSBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkU7XG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX0hFSUdIVDtcbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHNldHRpbmdzPy5pc19tdWx0aXBsZTtcblxuICAgICAgICBsZXQgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gYXZhdGFyU2l6ZSkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGF2YXRhclNpemUgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hUO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpc0FjdGl2ZSA/IDEzMCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1AgOiByb3dIZWlnaHQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QO1xuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBpc09wZXJhdGluZ1xuICAgICAgICAgICAgPyBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSAxMlxuICAgICAgICAgICAgOiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aDtcblxuICAgICAgICBjb25zdCBsaXN0Q291bnQgPSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGg7XG4gICAgICAgIGxldCBpc092ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpc3RDb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgdXNlckluZm8gPSByZWZlcmVuY2VzPy5tZW1iZXJzW3RyYW5zZm9ybVZhbHVlW2luZGV4XV07XG4gICAgICAgICAgICBpZiAoIXVzZXJJbmZvKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgeyB1aWQsIGRpc3BsYXlfbmFtZSwgYXZhdGFyIH0gPSB1c2VySW5mbztcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCArIChpc011bHRpcGxlID8gQUlfVEFCTEVfQ0VMTF9NRU1CRVJfSVRFTV9QQURESU5HIDogMCk7XG5cbiAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgaW5kZXggKiBpdGVtV2lkdGg7XG5cbiAgICAgICAgICAgIGxldCByZWFsTWF4VGV4dFdpZHRoID0gbWF4VGV4dFdpZHRoIDwgMCA/IDAgOiBtYXhUZXh0V2lkdGg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgaXNPcGVyYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpbmdNYXhXaWR0aCA9IG1heFRleHRXaWR0aCAtIChBSV9UQUJMRV9DRUxMX0FERF9JVEVNX0JVVFRPTl9TSVpFICsgNCk7XG4gICAgICAgICAgICAgICAgLy8gaXRlbSBObyBzcGFjZSB0byBkaXNwbGF5LCB0aGVuIHBlcmZvcm0gYSBsaW5lIGZlZWRcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW5nTWF4V2lkdGggPD0gMjApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCArIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NQVJHSU5fVE9QO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxNYXhUZXh0V2lkdGggPSBvcGVyYXRpbmdNYXhXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpc01vcmUgPSBjdXJyZW50WCArIGl0ZW1XaWR0aCA+IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgIGlmIChjb2x1bW5XaWR0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8g5Zyo6Z2e5rS75Yqo54q25oCB5LiL77yM5b2T6LaF5Ye65YiX5a695pe277yM5LiN5Lya5riy5p+T5ZCO57ut5YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID49IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5LiN5piv6Z2e5rS75Yqo54q25oCB55qE5pyA5ZCO5LiA6KGM77yM5YiZ5o2i6KGM5riy5p+T5rqi5Ye65YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggKyBpdGVtV2lkdGggPiBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gaXRlbUhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRZID49IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBpc092ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF2YXRhcih7XG4gICAgICAgICAgICAgICAgICAgIHg6IHggKyBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIGN1cnJlbnRZLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGF2YXRhciEsXG4gICAgICAgICAgICAgICAgICAgIGlkOiB1aWQhLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0QXZhdGFyU2hvcnROYW1lKGRpc3BsYXlfbmFtZSksXG4gICAgICAgICAgICAgICAgICAgIGJnQ29sb3I6IGdldEF2YXRhckJnQ29sb3IoZGlzcGxheV9uYW1lISksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEFJVGFibGVBdmF0YXJUeXBlLm1lbWJlcixcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7lpJrpgInmqKHlvI/kuIvmmL7npLrlkI3np7BcbiAgICAgICAgICAgICAgICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFggPSB4ICsgY3VycmVudFggKyBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hUO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdGV4dFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZGlzcGxheV9uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhUZXh0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHRoaXMuY29sb3JzLmdyYXk4MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzTW9yZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IDI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogdGhpcy5jb2xvcnMuYmxhY2tcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFggKyBGT05UX1NJWkVfU00gLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiB0aGlzLmNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBGT05UX1NJWkVfU00sXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBgKyR7bGlzdENvdW50IC0gaW5kZXggLSAxfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbEF0dGFjaG1lbnQocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VzLCB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWUsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGlmIChpc05pbCh0cmFuc2Zvcm1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVJY29uU2l6ZSA9IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFO1xuICAgICAgICBjb25zdCBpdGVtSGVpZ2h0ID0gQUlfVEFCTEVfRklMRV9JQ09OX0lURU1fSEVJR0hUO1xuICAgICAgICBjb25zdCBpc09wZXJhdGluZyA9IGlzQWN0aXZlO1xuXG4gICAgICAgIGxldCBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBpdGVtSGVpZ2h0KSAvIDI7XG4gICAgICAgIGNvbnN0IGl0ZW1PdGhlcldpZHRoID0gZmlsZUljb25TaXplICsgQUlfVEFCTEVfRklFTERfSVRFTV9NQVJHSU5fUklHSFQ7XG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IGlzQWN0aXZlID8gMTMwIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX1RPUCA6IHJvd0hlaWdodCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1A7XG4gICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IGlzT3BlcmF0aW5nXG4gICAgICAgICAgICA/IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIGl0ZW1PdGhlcldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSAtIDEyXG4gICAgICAgICAgICA6IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIGl0ZW1PdGhlcldpZHRoO1xuXG4gICAgICAgIGNvbnN0IGxpc3RDb3VudCA9IHRyYW5zZm9ybVZhbHVlLmxlbmd0aDtcbiAgICAgICAgbGV0IGlzT3ZlcmZsb3cgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGlzdENvdW50OyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2htZW50SW5mbyA9IHJlZmVyZW5jZXM/LmF0dGFjaG1lbnRzW3RyYW5zZm9ybVZhbHVlW2luZGV4XV07XG4gICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnRJbmZvKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgdGl0bGUsIGFkZGl0aW9uIH0gPSBhdHRhY2htZW50SW5mbztcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFICsgQUlfVEFCTEVfRklFTERfSVRFTV9NQVJHSU5fUklHSFQ7XG4gICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORyArIGluZGV4ICogaXRlbVdpZHRoO1xuICAgICAgICAgICAgbGV0IHJlYWxNYXhUZXh0V2lkdGggPSBtYXhUZXh0V2lkdGggPCAwID8gMCA6IG1heFRleHRXaWR0aDtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBpc09wZXJhdGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGluZ01heFdpZHRoID0gbWF4VGV4dFdpZHRoIC0gKEFJX1RBQkxFX0NFTExfQUREX0lURU1fQlVUVE9OX1NJWkUgKyA0KTtcbiAgICAgICAgICAgICAgICAvLyBpdGVtIE5vIHNwYWNlIHRvIGRpc3BsYXksIHRoZW4gcGVyZm9ybSBhIGxpbmUgZmVlZFxuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpbmdNYXhXaWR0aCA8PSAyMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbE1heFRleHRXaWR0aCA9IG9wZXJhdGluZ01heFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW5XaWR0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8g5Zyo6Z2e5rS75Yqo54q25oCB5LiL77yM5b2T6LaF5Ye65YiX5a695pe277yM5LiN5Lya5riy5p+T5ZCO57ut5YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID49IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5LiN5piv6Z2e5rS75Yqo54q25oCB55qE5pyA5ZCO5LiA6KGM77yM5YiZ5o2i6KGM5riy5p+T5rqi5Ye65YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggKyBpdGVtV2lkdGggPiBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gaXRlbUhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRZID49IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBpc092ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdmdTdHJpbmcgPSBnZXRGaWxlVGh1bWJuYWlsU3ZnU3RyaW5nKGFkZGl0aW9uPy5leHQpO1xuICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICBpbWcuc3JjID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCR7ZW5jb2RlVVJJQ29tcG9uZW50KHN2Z1N0cmluZyl9YDtcbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaW1nLnNyYyxcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgIHVybDogaW1nLnNyYyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBjZWxsRHJhd2VyID0gbmV3IENlbGxEcmF3ZXIoKTtcbiJdfQ==
672
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9kcmF3ZXJzL2NlbGwtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUNILGtDQUFrQyxFQUNsQyxxQ0FBcUMsRUFDckMsNENBQTRDLEVBQzVDLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLGdDQUFnQyxFQUNoQyxpQ0FBaUMsRUFDakMsOEJBQThCLEVBQzlCLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLCtCQUErQixFQUMvQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQixnQ0FBZ0MsRUFDaEMsOEJBQThCLEVBQzlCLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0Isd0NBQXdDLEVBQ3hDLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFDeEIsa0NBQWtDLEVBQ2xDLFlBQVksRUFDWixpQkFBaUIsRUFDakIsUUFBUSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQWtDLE1BQU0sWUFB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Q04sSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDUCxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUc7b0JBQ2IsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRO29CQUNmLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTtvQkFDZixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7b0JBQ1osS0FBSyxFQUFFLHVCQUF1QjtvQkFDOUIsTUFBTSxFQUFFLHVCQUF1QjtpQkFDbEMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfLCB7IGlzTmlsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gICAgQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUsXG4gICAgQUlfVEFCTEVfQ0VMTF9NQVhfUk9XX0NPVU5ULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1AsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01JTl9XSURUSCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QLFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfRklFTERfSVRFTV9NQVJHSU5fUklHSFQsXG4gICAgQUlfVEFCTEVfRklMRV9JQ09OX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFLFxuICAgIEFJX1RBQkxFX01FTUJFUl9BVkFUQVJfU0laRSxcbiAgICBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hULFxuICAgIEFJX1RBQkxFX01JTl9URVhUX1dJRFRILFxuICAgIEFJX1RBQkxFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgIEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hULFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfVEVYVF9XSURUSCxcbiAgICBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hULFxuICAgIEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfVEFHX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfVEVYVF9HQVAsXG4gICAgQ29sb3JzLFxuICAgIERFRkFVTFRfRk9OVF9GQU1JTFksXG4gICAgREVGQVVMVF9GT05UX1NJWkUsXG4gICAgREVGQVVMVF9GT05UX1dFSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fTEVGVCxcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fUklHSFQsXG4gICAgREVGQVVMVF9URVhUX0RFQ09SQVRJT04sXG4gICAgREVGQVVMVF9URVhUX0xJTkVfSEVJR0hULFxuICAgIERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUsXG4gICAgRk9OVF9TSVpFX1NNLFxuICAgIEFJX1RBQkxFX1JBVEVfTUFYLFxuICAgIFN0YXJGaWxsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlLCBBSVRhYmxlRmllbGQsIEFJVGFibGVGaWVsZFR5cGUsIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSwgTWVtYmVyU2V0dGluZ3MsIFJhdGVGaWVsZFZhbHVlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQXZhdGFyU2l6ZSwgQUlUYWJsZUF2YXRhclR5cGUsIEFJVGFibGVSZW5kZXIsIEFJVGFibGVTZWxlY3RGaWVsZCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEZpZWxkTW9kZWxNYXAsIGdldEF2YXRhckJnQ29sb3IsIGdldEF2YXRhclNob3J0TmFtZSwgZ2V0VGV4dFdpZHRoIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRHJhd2VyIH0gZnJvbSAnLi9kcmF3ZXInO1xuaW1wb3J0IHsgaGVscGVycyB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBnZXRGaWxlVGh1bWJuYWlsU3ZnU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZSc7XG5cbi8qKlxuICog5aSE55CG5ZKM5riy5p+T6KGo5qC85Y2V5YWD5qC855qE5YaF5a65XG4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsRHJhd2VyIGV4dGVuZHMgRHJhd2VyIHtcbiAgICAvLyDmoLflvI/liJ3lp4vljJZcbiAgICBwdWJsaWMgaW5pdFN0eWxlKGZpZWxkOiBBSVRhYmxlRmllbGQsIHN0eWxlUHJvcHM6IHsgZm9udFdlaWdodDogYW55IH0pOiB2b2lkIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgdHlwZTogZmllbGRUeXBlIH0gPSBmaWVsZDtcbiAgICAgICAgY29uc3QgeyBmb250V2VpZ2h0ID0gREVGQVVMVF9GT05UX1dFSUdIVCB9ID0gc3R5bGVQcm9wcztcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnRleHQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnJhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3M6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubWVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRCeTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0U3R5bGUoeyBmb250U2l6ZTogREVGQVVMVF9GT05UX1NJWkUsIGZvbnRXZWlnaHQgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5Y2V5YWD5qC85riy5p+TXG4gICAgcHVibGljIHJlbmRlckNlbGwocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IHVuZGVmaW5lZCwgY29sdW1uV2lkdGg6IG51bWJlcikge1xuICAgICAgICBjb25zdCB7IGZpZWxkLCBjZWxsVmFsdWUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcbiAgICAgICAgY29uc3QgZmllbGRNZXRob2QgPSBGaWVsZE1vZGVsTWFwW2ZpZWxkVHlwZV07XG4gICAgICAgIGlmICghZmllbGRNZXRob2QuaXNWYWxpZChjZWxsVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS50ZXh0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnJpY2hUZXh0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm51bWJlcjpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5saW5rOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxUZXh0KHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5zZWxlY3Q6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFNlbGVjdChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxEYXRlKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5yYXRlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxSYXRlKHJlbmRlciwgY3R4LCBjb2x1bW5XaWR0aCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFByb2dyZXNzKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5tZW1iZXI6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEJ5OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRCeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsTWVtYmVyKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5hdHRhY2htZW50OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxBdHRhY2htZW50KHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxUZXh0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUsIGZpZWxkLCBjb2x1bW5XaWR0aCwgc3R5bGUgfSA9IHJlbmRlcjtcbiAgICAgICAgaWYgKGlzTmlsKHRyYW5zZm9ybVZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgIGxldCByZW5kZXJUZXh0OiBzdHJpbmcgfCBudWxsID0gZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLmxpbmsgPyB0cmFuc2Zvcm1WYWx1ZT8udGV4dCA6IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICBpZiAocmVuZGVyVGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgaXNTaW5nbGVMaW5lID0gIWNvbHVtbldpZHRoO1xuICAgICAgICBjb25zdCBpc1NpbmdsZUxpbmUgPSB0cnVlO1xuICAgICAgICBjb25zdCBpc1RleHRGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS50ZXh0IHx8IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5yaWNoVGV4dDtcbiAgICAgICAgY29uc3QgaXNOdW1iZXJGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5udW1iZXI7XG5cbiAgICAgICAgaWYgKGlzVGV4dEZpZWxkICYmIGlzU2luZ2xlTGluZSkge1xuICAgICAgICAgICAgcmVuZGVyVGV4dCA9IHJlbmRlclRleHQucmVwbGFjZSgvXFxyfFxcbi9nLCAnICcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sb3IgPSBzdHlsZT8uY29sb3IgfHwgdGhpcy5jb2xvcnMuZ3JheTgwMDtcbiAgICAgICAgY29uc3QgdGV4dEFsaWduID0gc3R5bGU/LnRleHRBbGlnbiB8fCBERUZBVUxUX1RFWFRfQUxJR05fTEVGVDtcbiAgICAgICAgY29uc3QgZm9udFdlaWdodCA9IHN0eWxlPy5mb250V2VpZ2h0O1xuICAgICAgICBjb25zdCB0ZXh0TWF4V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHJlbmRlclggPSB0ZXh0QWxpZ24gPT09IERFRkFVTFRfVEVYVF9BTElHTl9SSUdIVCA/IHggKyBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORyA6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHJlbmRlclkgPSB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDI7XG4gICAgICAgIGNvbnN0IHRleHREZWNvcmF0aW9uID0gREVGQVVMVF9URVhUX0RFQ09SQVRJT047XG5cbiAgICAgICAgaWYgKGlzTnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIHJlbmRlclRleHQgPSBTdHJpbmcocmVuZGVyVGV4dCk7XG4gICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZW5kZXJUZXh0LFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiB0ZXh0TWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgbGV0IHB1cmVUZXh0ID0gdGV4dDtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICB4OiByZW5kZXJYLFxuICAgICAgICAgICAgICAgICAgICB5OiByZW5kZXJZLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBwdXJlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cmFwVGV4dCh7XG4gICAgICAgICAgICAgICAgeDogcmVuZGVyWCxcbiAgICAgICAgICAgICAgICB5OiByZW5kZXJZLFxuICAgICAgICAgICAgICAgIHRleHQ6IHJlbmRlclRleHQsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBtYXhSb3c6IEFJX1RBQkxFX0NFTExfTUFYX1JPV19DT1VOVCxcbiAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBERUZBVUxUX1RFWFRfTElORV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUubGluayA/IENvbG9ycy5wcmltYXJ5IDogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAgbmVlZERyYXc6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsU2VsZWN0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IHJlbmRlcjtcbiAgICAgICAgaWYgKChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzPy5pc19tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDZWxsTXVsdGlTZWxlY3QocmVuZGVyLCBjdHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJTaW5nbGVTZWxlY3RDZWxsKHJlbmRlciwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsaWRTZWxlY3RlZFZhbHVlKGZpZWxkOiBBSVRhYmxlRmllbGQsIHRyYW5zZm9ybVZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBmaWVsZE9wdGlvbnNNYXAgPSBoZWxwZXJzLmtleUJ5KChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnMgfHwgW10sICdfaWQnKTtcbiAgICAgICAgcmV0dXJuICh0cmFuc2Zvcm1WYWx1ZSB8fCBbXSkuZmlsdGVyKChvcHRpb25JZDogc3RyaW5nKSA9PiAhIWZpZWxkT3B0aW9uc01hcFtvcHRpb25JZF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbE11bHRpU2VsZWN0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgZmllbGQsIGNvbHVtbldpZHRoIH0gPSByZW5kZXI7XG4gICAgICAgIGxldCB0cmFuc2Zvcm1WYWx1ZSA9IHRoaXMuZ2V0VmFsaWRTZWxlY3RlZFZhbHVlKGZpZWxkLCByZW5kZXIudHJhbnNmb3JtVmFsdWUpO1xuICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnJlbnRYID0geCArIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgbWF4Q29udGFpbmVyV2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG9wdGlvblN0eWxlID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9uX3N0eWxlO1xuICAgICAgICBjb25zdCBmb250U3R5bGUgPSBgJHtERUZBVUxUX0ZPTlRfV0VJR0hUfSAke0FJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRX1weCAke0RFRkFVTFRfRk9OVF9GQU1JTFl9YDtcbiAgICAgICAgY29uc3QgaXNEb3RPclBpZWNlID0gb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3QgfHwgb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTtcblxuICAgICAgICBsZXQgdG90YWxXaWR0aCA9IDA7XG4gICAgICAgIGNvbnN0IGNlbGxJdGVtSW5mb01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbGV0IGRyYXdhYmxlSW5kZXggPSAwO1xuICAgICAgICB0cmFuc2Zvcm1WYWx1ZS5mb3JFYWNoKChvcHRpb25JZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25zPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5faWQgPT09IG9wdGlvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGdldFRleHRXaWR0aChjdHgsIGl0ZW0/LnRleHQgYXMgc3RyaW5nLCBmb250U3R5bGUpO1xuICAgICAgICAgICAgdG90YWxXaWR0aCArPSB0ZXh0V2lkdGggKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEb3RPclBpZWNlKSB7XG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG90YWxXaWR0aCA8IG1heENvbnRhaW5lcldpZHRoIHx8IHRvdGFsV2lkdGggPT09IG1heENvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VsbEl0ZW1JbmZvTWFwLnNldChvcHRpb25JZCwgeyB0ZXh0V2lkdGgsIGl0ZW0sIG9mZnNldDogdG90YWxXaWR0aCB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gQUlfVEFCTEVfTUlOX1RFWFRfV0lEVEggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyO1xuICAgICAgICBjb25zdCBtaW5XaWR0aCA9IGlzRG90T3JQaWVjZSA/IGJhc2VXaWR0aCArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCA6IGJhc2VXaWR0aDtcblxuICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWVbZHJhd2FibGVJbmRleCArIDFdKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9mZnNldDogY3VycmVudE9mZnNldCB9ID0gY2VsbEl0ZW1JbmZvTWFwLmdldCh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4XSk7XG4gICAgICAgICAgICBjb25zdCBjYW5EcmF3ZXJOZXh0ID0gbWF4Q29udGFpbmVyV2lkdGggLSBjdXJyZW50T2Zmc2V0ID4gbWluV2lkdGg7XG4gICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gY2FuRHJhd2VyTmV4dCA/IGRyYXdhYmxlSW5kZXggKyAxIDogZHJhd2FibGVJbmRleDtcbiAgICAgICAgICAgIC8vIOS4iumdoui/h+eoi+aYryAg5rKh5pyJICvmlbDlrZcgIOeahOaDheWGteS4i+acgOWkp+iDveaUvuWHoOS4qu+8m1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gKGRyYXdhYmxlSW5kZXggKyAxKTtcblxuICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyDor7TmmI7mnIkgK+aVsOWtl++8jOmHjeaWsOiuoeeul1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpcmNsZVdpZHRoID0gZ2V0VGV4dFdpZHRoKGN0eCwgYCt7bnVtYmVyfWAsIGZvbnRTdHlsZSkgKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IG1heENvbnRhaW5lcldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgLSBjaXJjbGVXaWR0aDtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzlvZPliY3lt7Lnu4/otoXlh7rkuobvvIznnIvmmK/lkKbog73lrrnkuIvlvZPliY3nmoTvvIzkuI3og73lsLHlh4/ljrsgIDHvvJtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbUhhc092ZXIgPSBjdXJyZW50T2Zmc2V0ID4gbWF4O1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUhhc092ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdE9mZnNldCA9IGRyYXdhYmxlSW5kZXggPT09IDAgPyAwIDogY2VsbEl0ZW1JbmZvTWFwLmdldCh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4IC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gbWF4IC0gbGFzdE9mZnNldCA+IG1pbldpZHRoID8gZHJhd2FibGVJbmRleCA6IGRyYXdhYmxlSW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOi/mOacieWJqeS9meepuumXtCwg55yL5piv5ZCm6IO95aSa5riy5p+T5LiA5LiqXG4gICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBtYXggLSBjdXJyZW50T2Zmc2V0ID4gbWluV2lkdGggPyBkcmF3YWJsZUluZGV4ICsgMSA6IGRyYXdhYmxlSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2lyY2xlVGV4dCA9IGArJHt0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAoZHJhd2FibGVJbmRleCArIDEpfWA7XG4gICAgICAgIGNvbnN0IGNpcmNsZVdpZHRoID1cbiAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIChkcmF3YWJsZUluZGV4ICsgMSkgPiAwID8gZ2V0VGV4dFdpZHRoKGN0eCwgY2lyY2xlVGV4dCwgZm9udFN0eWxlKSArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgOiAwO1xuICAgICAgICAvLyDliankvZnnqbrpl7RcbiAgICAgICAgbGV0IHJlbWFpblNwYWNlID0gbWF4Q29udGFpbmVyV2lkdGggLSBjaXJjbGVXaWR0aCAtIChjaXJjbGVXaWR0aCA+IDAgPyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCA6IDApO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbklkID0gdHJhbnNmb3JtVmFsdWVbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgYmdDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgICAgICAgICAgICAgZmlsbDogQ29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkl0ZW0gPSAob3B0aW9uU3R5bGU6IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSwgc2hhcGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VXaWR0aCA9IGlzRG90T3JQaWVjZVxuICAgICAgICAgICAgICAgICAgICA/IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCArIEFJX1RBQkxFX0NFTExfUEFERElORyAqIDJcbiAgICAgICAgICAgICAgICAgICAgOiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyO1xuICAgICAgICAgICAgICAgIGlmIChyZW1haW5TcGFjZSA8IG1pbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0V2lkdGgsIGl0ZW0gfSA9IGNlbGxJdGVtSW5mb01hcC5nZXQob3B0aW9uSWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlV2lkdGggPSBiYXNlV2lkdGggKyB0ZXh0V2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpblNwYWNlIC09IEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBiZ1dpZHRoID0gcmVtYWluU3BhY2UgPiBjb21wbGV0ZVdpZHRoID8gY29tcGxldGVXaWR0aCA6IHJlbWFpblNwYWNlO1xuICAgICAgICAgICAgICAgIGJnQ29uZmlnLndpZHRoID0gYmdXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaXNEb3RPclBpZWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdChiZ0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGFwZSA9PT0gJ3JlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMikgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBDb2xvcnMucHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09ICdhcmMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyKSAvIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gQ29sb3JzLnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJnV2lkdGggLSBiYXNlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGJnQ29uZmlnLnksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogYmdDb25maWcud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBiZ1dpZHRoIC0gYmFzZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogYmdDb25maWcuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IENvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdChiZ0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmdXaWR0aCAtIGJhc2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gYmdDb25maWcud2lkdGg7XG4gICAgICAgICAgICAgICAgcmVtYWluU3BhY2UgLT0gY3VycmVudFdpZHRoO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRYICs9IGN1cnJlbnRXaWR0aCArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc3dpdGNoIChvcHRpb25TdHlsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdDpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90LCAnYXJjJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlOlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZSwgJ3JlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnOlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGV4dCwgJycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaXJjbGVXaWR0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZykge1xuICAgICAgICAgICAgICAgIHRoaXMudGFnKHtcbiAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY2lyY2xlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaXJjbGVUZXh0LFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjaXJjbGVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IENvbG9ycy5ncmF5MTAwLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVU1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNpcmNsZVRleHQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclNpbmdsZVNlbGVjdENlbGwocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCBmaWVsZCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVZhbHVlID0gdGhpcy5nZXRWYWxpZFNlbGVjdGVkVmFsdWUoZmllbGQsIHJlbmRlci50cmFuc2Zvcm1WYWx1ZSk7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZVswXSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBzaW5nbGUgc2VsZWN0IGZpZWxkIHVuZXhwZWN0ZWQgdmFsdWU6ICR7dHJhbnNmb3JtVmFsdWVbMF19YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnM/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLl9pZCA9PT0gdHJhbnNmb3JtVmFsdWVbMF0pO1xuICAgICAgICBjb25zdCBpdGVtTmFtZSA9IGl0ZW0/LnRleHQgfHwgJyc7XG4gICAgICAgIGNvbnN0IGdldFRleHRFbGxpcHNpcyA9IChtYXhUZXh0V2lkdGg6IG51bWJlciwgZm9udFNpemU6IG51bWJlciA9IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkUpID0+IHtcbiAgICAgICAgICAgIG1heFRleHRXaWR0aCAtPSBpc09wZXJhdGluZyA/IEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFX09GRlNFVCA6IDA7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1OYW1lLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiBtYXhUZXh0V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uU3R5bGUgPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25fc3R5bGU7XG4gICAgICAgICAgICBsZXQgYmFja2dyb3VuZCA9IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IGNvbG9ycy5wcmltYXJ5O1xuICAgICAgICAgICAgY29uc3QgZG90TWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEggLSBBSV9UQUJMRV9URVhUX0dBUDtcbiAgICAgICAgICAgIGNvbnN0IGJvcmRlcldpZHRoID0gMTtcbiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uU3R5bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3Q6XG4gICAgICAgICAgICAgICAgICAgIC8vIOi/memHjOeahCBBSV9UQUJMRV9PRkZTRVQg5YGP56e75LiN56Gu5a6a5piv5Li65ZWl77yI5YyF5ousIHBpZWNlIOeahO+8ie+8jOWPquaYr+S4uuS6huS/neaMgeWSjOe8lui+kee7hOS7tuS4reeahOWvuem9kFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1BJRUNFX1dJRFRIKSAvIDIgKyBBSV9UQUJMRV9ET1RfUkFESVVTIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9QSUVDRV9XSURUSCArIEFJX1RBQkxFX1RFWFRfR0FQICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXMoZG90TWF4VGV4dFdpZHRoKS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2U6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEgpIC8gMiAtIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfUElFQ0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfUElFQ0VfV0lEVEggKyBBSV9UQUJMRV9URVhUX0dBUCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKGRvdE1heFRleHRXaWR0aCkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiAoQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfVEFHX1BBRERJTkcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRleHRXaWR0aCwgdGV4dCB9ID0gZ2V0VGV4dEVsbGlwc2lzKG1heFRleHRXaWR0aCwgQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgodGV4dFdpZHRoICsgMiAqIEFJX1RBQkxFX1RBR19QQURESU5HLCBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUlOX1dJRFRIKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfT1BUSU9OX0lURU1fUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0TWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKHRleHRNYXhUZXh0V2lkdGgpLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy5ncmF5ODAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbERhdGUocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG5cbiAgICAgICAgaWYgKGlzTmlsKHRyYW5zZm9ybVZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dE1heFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCB7IHRleHQgfSA9IHRoaXMudGV4dEVsbGlwc2lzKHsgdGV4dDogdHJhbnNmb3JtVmFsdWUsIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiB0ZXh0TWF4V2lkdGggfSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gc3R5bGU/LmNvbG9yIHx8IGNvbG9ycy5ncmF5ODAwO1xuICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogc3R5bGU/LmZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxSYXRlKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQsIGNvbHVtbldpZHRoOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBtYXggPSBBSV9UQUJMRV9SQVRFX01BWDtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IEFJX1RBQkxFX0NFTExfRU1PSklfU0laRTtcblxuICAgICAgICBjb25zdCByZW5kZXJXaWR0aCA9IGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBzdGFyV2lkdGggPSBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUgKyBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG1heFN0YXIgPSBNYXRoLm1pbihtYXgsIE1hdGguZmxvb3IocmVuZGVyV2lkdGggLyBzdGFyV2lkdGgpKTtcblxuICAgICAgICByZXR1cm4gWy4uLkFycmF5KG1heFN0YXIpLmtleXMoKV0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkID0gdmFsdWUgPD0gKHRyYW5zZm9ybVZhbHVlIHx8IDApO1xuICAgICAgICAgICAgY29uc3QgaWNvblggPSBpbmRleCAqIHNpemUgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORztcbiAgICAgICAgICAgIGNvbnN0IGljb25ZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBzaXplKSAvIDI7XG5cbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGgoe1xuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgaWNvblgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBpY29uWSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMjIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0YXJGaWxsLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBjaGVja2VkID8gdGhpcy5jb2xvcnMud2FyaW5nIDogdGhpcy5jb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLjE0LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEuMTRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsUHJvZ3Jlc3MocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgIGxldCB2YWxpZGF0ZVRyYW5zZm9ybVZhbHVlID0gdHJhbnNmb3JtVmFsdWU7XG4gICAgICAgIGlmIChpc05pbCh2YWxpZGF0ZVRyYW5zZm9ybVZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVUcmFuc2Zvcm1WYWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBBSV9UQUJMRV9QUk9HUkVTU19URVhUX1dJRFRIO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hUO1xuICAgICAgICBjb25zdCB0ZXh0SGVpZ2h0ID0gQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCkgLyAyO1xuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gdGV4dEhlaWdodCkgLyAyO1xuXG4gICAgICAgIC8vIOe7mOWItuiDjOaZr1xuICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgeDogeCArIG9mZnNldFgsXG4gICAgICAgICAgICB5OiB5ICsgb2Zmc2V0WSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgICAgICAgICAgZmlsbDogY29sb3JzLmdyYXkyMDBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g6K6h566X5bm257uY5Yi26L+b5bqmXG4gICAgICAgIGNvbnN0IHByb2dyZXNzV2lkdGggPSAodmFsaWRhdGVUcmFuc2Zvcm1WYWx1ZSAvIDEwMCkgKiB3aWR0aDtcbiAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgIHg6IHggKyBvZmZzZXRYLFxuICAgICAgICAgICAgeTogeSArIG9mZnNldFksXG4gICAgICAgICAgICB3aWR0aDogcHJvZ3Jlc3NXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1JBRElVUyxcbiAgICAgICAgICAgIGZpbGw6IGNvbG9ycy5zdWNjZXNzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCArIHdpZHRoICsgQUlfVEFCTEVfVEVYVF9HQVAsXG4gICAgICAgICAgICB5OiB5ICsgdGV4dE9mZnNldFksXG4gICAgICAgICAgICB0ZXh0OiBgJHt2YWxpZGF0ZVRyYW5zZm9ybVZhbHVlfSVgLFxuICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxNZW1iZXIocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VzLCB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWUsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWU/Lmxlbmd0aCB8fCAhcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZmllbGQuc2V0dGluZ3MgYXMgTWVtYmVyU2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGF2YXRhclNpemUgPSBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkU7XG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX0hFSUdIVDtcbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHNldHRpbmdzPy5pc19tdWx0aXBsZTtcblxuICAgICAgICBsZXQgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gYXZhdGFyU2l6ZSkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGF2YXRhclNpemUgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hUO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpc0FjdGl2ZSA/IDEzMCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1AgOiByb3dIZWlnaHQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QO1xuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBpc09wZXJhdGluZ1xuICAgICAgICAgICAgPyBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSAxMlxuICAgICAgICAgICAgOiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aDtcblxuICAgICAgICBjb25zdCBsaXN0Q291bnQgPSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGg7XG4gICAgICAgIGxldCBpc092ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpc3RDb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgdXNlckluZm8gPSByZWZlcmVuY2VzPy5tZW1iZXJzW3RyYW5zZm9ybVZhbHVlW2luZGV4XV07XG4gICAgICAgICAgICBpZiAoIXVzZXJJbmZvKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgeyB1aWQsIGRpc3BsYXlfbmFtZSwgYXZhdGFyIH0gPSB1c2VySW5mbztcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCArIChpc011bHRpcGxlID8gQUlfVEFCTEVfQ0VMTF9NRU1CRVJfSVRFTV9QQURESU5HIDogMCk7XG5cbiAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgaW5kZXggKiBpdGVtV2lkdGg7XG5cbiAgICAgICAgICAgIGxldCByZWFsTWF4VGV4dFdpZHRoID0gbWF4VGV4dFdpZHRoIDwgMCA/IDAgOiBtYXhUZXh0V2lkdGg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgaXNPcGVyYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpbmdNYXhXaWR0aCA9IG1heFRleHRXaWR0aCAtIChBSV9UQUJMRV9DRUxMX0FERF9JVEVNX0JVVFRPTl9TSVpFICsgNCk7XG4gICAgICAgICAgICAgICAgLy8gaXRlbSBObyBzcGFjZSB0byBkaXNwbGF5LCB0aGVuIHBlcmZvcm0gYSBsaW5lIGZlZWRcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW5nTWF4V2lkdGggPD0gMjApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCArIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NQVJHSU5fVE9QO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxNYXhUZXh0V2lkdGggPSBvcGVyYXRpbmdNYXhXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpc01vcmUgPSBjdXJyZW50WCArIGl0ZW1XaWR0aCA+IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgIGlmIChjb2x1bW5XaWR0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8g5Zyo6Z2e5rS75Yqo54q25oCB5LiL77yM5b2T6LaF5Ye65YiX5a695pe277yM5LiN5Lya5riy5p+T5ZCO57ut5YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID49IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5LiN5piv6Z2e5rS75Yqo54q25oCB55qE5pyA5ZCO5LiA6KGM77yM5YiZ5o2i6KGM5riy5p+T5rqi5Ye65YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggKyBpdGVtV2lkdGggPiBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gaXRlbUhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRZID49IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBpc092ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF2YXRhcih7XG4gICAgICAgICAgICAgICAgICAgIHg6IHggKyBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIGN1cnJlbnRZLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGF2YXRhciEsXG4gICAgICAgICAgICAgICAgICAgIGlkOiB1aWQhLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0QXZhdGFyU2hvcnROYW1lKGRpc3BsYXlfbmFtZSksXG4gICAgICAgICAgICAgICAgICAgIGJnQ29sb3I6IGdldEF2YXRhckJnQ29sb3IoZGlzcGxheV9uYW1lISksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEFJVGFibGVBdmF0YXJUeXBlLm1lbWJlcixcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7lpJrpgInmqKHlvI/kuIvmmL7npLrlkI3np7BcbiAgICAgICAgICAgICAgICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFggPSB4ICsgY3VycmVudFggKyBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hUO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdGV4dFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZGlzcGxheV9uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhUZXh0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHRoaXMuY29sb3JzLmdyYXk4MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzTW9yZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IDI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogdGhpcy5jb2xvcnMuYmxhY2tcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFggKyBGT05UX1NJWkVfU00gLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiB0aGlzLmNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBGT05UX1NJWkVfU00sXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBgKyR7bGlzdENvdW50IC0gaW5kZXggLSAxfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbEF0dGFjaG1lbnQocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VzLCB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWUsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGlmIChpc05pbCh0cmFuc2Zvcm1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVJY29uU2l6ZSA9IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFO1xuICAgICAgICBjb25zdCBpdGVtSGVpZ2h0ID0gQUlfVEFCTEVfRklMRV9JQ09OX0lURU1fSEVJR0hUO1xuICAgICAgICBjb25zdCBpc09wZXJhdGluZyA9IGlzQWN0aXZlO1xuXG4gICAgICAgIGxldCBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBpdGVtSGVpZ2h0KSAvIDI7XG4gICAgICAgIGNvbnN0IGl0ZW1PdGhlcldpZHRoID0gZmlsZUljb25TaXplICsgQUlfVEFCTEVfRklFTERfSVRFTV9NQVJHSU5fUklHSFQ7XG4gICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IGlzT3BlcmF0aW5nXG4gICAgICAgICAgICA/IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIGl0ZW1PdGhlcldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSAtIDEyXG4gICAgICAgICAgICA6IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIGl0ZW1PdGhlcldpZHRoO1xuXG4gICAgICAgIGNvbnN0IGxpc3RDb3VudCA9IHRyYW5zZm9ybVZhbHVlLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpc3RDb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudEluZm8gPSByZWZlcmVuY2VzPy5hdHRhY2htZW50c1t0cmFuc2Zvcm1WYWx1ZVtpbmRleF1dO1xuICAgICAgICAgICAgaWYgKCFhdHRhY2htZW50SW5mbykgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCB7IHRpdGxlLCBhZGRpdGlvbiB9ID0gYXR0YWNobWVudEluZm87XG4gICAgICAgICAgICBjb25zdCBpdGVtV2lkdGggPSBBSV9UQUJMRV9GSUxFX0lDT05fU0laRSArIEFJX1RBQkxFX0ZJRUxEX0lURU1fTUFSR0lOX1JJR0hUO1xuICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIGl0ZW1XaWR0aDtcbiAgICAgICAgICAgIGxldCByZWFsTWF4VGV4dFdpZHRoID0gbWF4VGV4dFdpZHRoIDwgMCA/IDAgOiBtYXhUZXh0V2lkdGg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgaXNPcGVyYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpbmdNYXhXaWR0aCA9IG1heFRleHRXaWR0aCAtIChBSV9UQUJMRV9DRUxMX0FERF9JVEVNX0JVVFRPTl9TSVpFICsgNCk7XG4gICAgICAgICAgICAgICAgcmVhbE1heFRleHRXaWR0aCA9IG9wZXJhdGluZ01heFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbldpZHRoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7mtLvliqjnirbmgIHkuIvvvIzlvZPotoXlh7rliJflrr3ml7bvvIzkuI3kvJrmuLLmn5PlkI7nu63lhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPj0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN2Z1N0cmluZyA9IGdldEZpbGVUaHVtYm5haWxTdmdTdHJpbmcoYWRkaXRpb24/LmV4dCk7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIGltZy5zcmMgPSBgZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnU3RyaW5nKX1gO1xuICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpbWcuc3JjLFxuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBjdXJyZW50WSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBpbWcuc3JjLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlfVEFCTEVfRklMRV9JQ09OX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfRklMRV9JQ09OX1NJWkVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNlbGxEcmF3ZXIgPSBuZXcgQ2VsbERyYXdlcigpO1xuIl19
@@ -1,5 +1,5 @@
1
+ import { isNumber } from 'lodash';
1
2
  import { AI_TABLE_ROW_HEAD_WIDTH } from '../constants';
2
- import { getFieldOptionByField } from '../core';
3
3
  export const getVisibleRangeInfo = (coordinate, scrollState) => {
4
4
  const { scrollTop, scrollLeft } = scrollState;
5
5
  const { rowCount, columnCount, frozenColumnCount } = coordinate;
@@ -31,8 +31,12 @@ export const getVisibleRangeInfo = (coordinate, scrollState) => {
31
31
  };
32
32
  };
33
33
  export const scrollMax = (aiTable, coordinate, visibleColumns) => {
34
- const scrollMaxWidth = visibleColumns.reduce((pre, cur) => pre + getFieldOptionByField(aiTable, cur)?.width, AI_TABLE_ROW_HEAD_WIDTH);
34
+ const visibleColumnIndexMap = aiTable.context.visibleColumnsIndexMap();
35
+ const scrollMaxWidth = visibleColumns.reduce((pre, cur) => {
36
+ const index = visibleColumnIndexMap.get(cur._id);
37
+ return pre + (isNumber(index) ? coordinate.getColumnWidth(index) : 0);
38
+ }, AI_TABLE_ROW_HEAD_WIDTH);
35
39
  const scrollMaxHeight = coordinate.getRowOffset(coordinate.rowCount - 1) + 32;
36
40
  return { scrollMaxWidth, scrollMaxHeight };
37
41
  };
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzaWJsZS1yYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3V0aWxzL3Zpc2libGUtcmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBeUQscUJBQXFCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHdkcsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxVQUFzQixFQUFFLFdBQStCLEVBQUUsRUFBRTtJQUMzRixNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQztJQUM5QyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUVoRSxlQUFlO0lBQ2YsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7UUFDOUIsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXBFLE9BQU87WUFDSCxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUMxQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNuRSxDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUYsZUFBZTtJQUNmLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5RCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXhFLE9BQU87WUFDSCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLENBQUMsRUFBRSxVQUFVLENBQUM7WUFDN0QsZUFBZSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN6RixDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUYsTUFBTSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0lBQy9ELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3ZFLE9BQU87UUFDSCxhQUFhO1FBQ2IsWUFBWTtRQUNaLGdCQUFnQjtRQUNoQixlQUFlO0tBQ2xCLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFnQixFQUFFLFVBQXNCLEVBQUUsY0FBOEIsRUFBRSxFQUFFO0lBQ2xHLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQ3hDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFJLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQXdCLEVBQUUsS0FBSyxFQUN0Rix1QkFBdUIsQ0FDMUIsQ0FBQztJQUNGLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsQ0FBQztBQUMvQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlLCBBSVRhYmxlRmllbGQsIEFJVGFibGVGaWVsZE9wdGlvbiwgQ29vcmRpbmF0ZSwgZ2V0RmllbGRPcHRpb25CeUZpZWxkIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlU2Nyb2xsU3RhdGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmxlUmFuZ2VJbmZvID0gKGNvb3JkaW5hdGU6IENvb3JkaW5hdGUsIHNjcm9sbFN0YXRlOiBBSVRhYmxlU2Nyb2xsU3RhdGUpID0+IHtcbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCB9ID0gc2Nyb2xsU3RhdGU7XG4gICAgY29uc3QgeyByb3dDb3VudCwgY29sdW1uQ291bnQsIGZyb3plbkNvbHVtbkNvdW50IH0gPSBjb29yZGluYXRlO1xuXG4gICAgLy8g6I635Y+W6KaB5riy5p+T55qE5Z6C55u05Y+v6KeB5Yy65Z+fXG4gICAgY29uc3QgZ2V0VmVydGljYWxSYW5nZUluZm8gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBjb29yZGluYXRlLmdldFJvd1N0YXJ0SW5kZXgoc2Nyb2xsVG9wKTtcbiAgICAgICAgY29uc3Qgc3RvcEluZGV4ID0gY29vcmRpbmF0ZS5nZXRSb3dTdG9wSW5kZXgoc3RhcnRJbmRleCwgc2Nyb2xsVG9wKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm93U3RhcnRJbmRleDogTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIDEpLFxuICAgICAgICAgICAgcm93U3RvcEluZGV4OiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIDEpKVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvLyDojrflj5bopoHmuLLmn5PnmoTmsLTlubPlj6/op4HljLrln59cbiAgICBjb25zdCBnZXRIb3Jpem9udGFsUmFuZ2VJbmZvID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5TdGFydEluZGV4KHNjcm9sbExlZnQpO1xuICAgICAgICBjb25zdCBzdG9wSW5kZXggPSBjb29yZGluYXRlLmdldENvbHVtblN0b3BJbmRleChzdGFydEluZGV4LCBzY3JvbGxMZWZ0KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uU3RhcnRJbmRleDogTWF0aC5tYXgoZnJvemVuQ29sdW1uQ291bnQgLSAxLCBzdGFydEluZGV4KSxcbiAgICAgICAgICAgIGNvbHVtblN0b3BJbmRleDogTWF0aC5tYXgoZnJvemVuQ29sdW1uQ291bnQgLSAxLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIHN0b3BJbmRleCkpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHsgcm93U3RhcnRJbmRleCwgcm93U3RvcEluZGV4IH0gPSBnZXRWZXJ0aWNhbFJhbmdlSW5mbygpO1xuICAgIGNvbnN0IHsgY29sdW1uU3RhcnRJbmRleCwgY29sdW1uU3RvcEluZGV4IH0gPSBnZXRIb3Jpem9udGFsUmFuZ2VJbmZvKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcm93U3RhcnRJbmRleCxcbiAgICAgICAgcm93U3RvcEluZGV4LFxuICAgICAgICBjb2x1bW5TdGFydEluZGV4LFxuICAgICAgICBjb2x1bW5TdG9wSW5kZXhcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNjcm9sbE1heCA9IChhaVRhYmxlOiBBSVRhYmxlLCBjb29yZGluYXRlOiBDb29yZGluYXRlLCB2aXNpYmxlQ29sdW1uczogQUlUYWJsZUZpZWxkW10pID0+IHtcbiAgICBjb25zdCBzY3JvbGxNYXhXaWR0aCA9IHZpc2libGVDb2x1bW5zLnJlZHVjZShcbiAgICAgICAgKHByZSwgY3VyKSA9PiBwcmUgKyAoZ2V0RmllbGRPcHRpb25CeUZpZWxkKGFpVGFibGUsIGN1cikgYXMgQUlUYWJsZUZpZWxkT3B0aW9uKT8ud2lkdGgsXG4gICAgICAgIEFJX1RBQkxFX1JPV19IRUFEX1dJRFRIXG4gICAgKTtcbiAgICBjb25zdCBzY3JvbGxNYXhIZWlnaHQgPSBjb29yZGluYXRlLmdldFJvd09mZnNldChjb29yZGluYXRlLnJvd0NvdW50IC0gMSkgKyAzMjtcbiAgICByZXR1cm4geyBzY3JvbGxNYXhXaWR0aCwgc2Nyb2xsTWF4SGVpZ2h0IH07XG59O1xuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzaWJsZS1yYW5nZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3V0aWxzL3Zpc2libGUtcmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJdkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxVQUFzQixFQUFFLFdBQStCLEVBQUUsRUFBRTtJQUMzRixNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQztJQUM5QyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUVoRSxlQUFlO0lBQ2YsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7UUFDOUIsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXBFLE9BQU87WUFDSCxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUMxQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNuRSxDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUYsZUFBZTtJQUNmLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5RCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXhFLE9BQU87WUFDSCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLENBQUMsRUFBRSxVQUFVLENBQUM7WUFDN0QsZUFBZSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN6RixDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUYsTUFBTSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0lBQy9ELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3ZFLE9BQU87UUFDSCxhQUFhO1FBQ2IsWUFBWTtRQUNaLGdCQUFnQjtRQUNoQixlQUFlO0tBQ2xCLENBQUM7QUFDTixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFnQixFQUFFLFVBQXNCLEVBQUUsY0FBOEIsRUFBRSxFQUFFO0lBQ2xHLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLE9BQVEsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3hFLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDdEQsTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxPQUFPLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFDNUIsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxDQUFDO0FBQy9DLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEFJX1RBQkxFX1JPV19IRUFEX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFJVGFibGUsIEFJVGFibGVGaWVsZCwgQUlUYWJsZUZpZWxkT3B0aW9uLCBDb29yZGluYXRlLCBnZXRGaWVsZE9wdGlvbkJ5RmllbGQgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVTY3JvbGxTdGF0ZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGdldFZpc2libGVSYW5nZUluZm8gPSAoY29vcmRpbmF0ZTogQ29vcmRpbmF0ZSwgc2Nyb2xsU3RhdGU6IEFJVGFibGVTY3JvbGxTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0IH0gPSBzY3JvbGxTdGF0ZTtcbiAgICBjb25zdCB7IHJvd0NvdW50LCBjb2x1bW5Db3VudCwgZnJvemVuQ29sdW1uQ291bnQgfSA9IGNvb3JkaW5hdGU7XG5cbiAgICAvLyDojrflj5bopoHmuLLmn5PnmoTlnoLnm7Tlj6/op4HljLrln59cbiAgICBjb25zdCBnZXRWZXJ0aWNhbFJhbmdlSW5mbyA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGNvb3JkaW5hdGUuZ2V0Um93U3RhcnRJbmRleChzY3JvbGxUb3ApO1xuICAgICAgICBjb25zdCBzdG9wSW5kZXggPSBjb29yZGluYXRlLmdldFJvd1N0b3BJbmRleChzdGFydEluZGV4LCBzY3JvbGxUb3ApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3dTdGFydEluZGV4OiBNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gMSksXG4gICAgICAgICAgICByb3dTdG9wSW5kZXg6IE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RvcEluZGV4ICsgMSkpXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIC8vIOiOt+WPluimgea4suafk+eahOawtOW5s+WPr+ingeWMuuWfn1xuICAgIGNvbnN0IGdldEhvcml6b250YWxSYW5nZUluZm8gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBjb29yZGluYXRlLmdldENvbHVtblN0YXJ0SW5kZXgoc2Nyb2xsTGVmdCk7XG4gICAgICAgIGNvbnN0IHN0b3BJbmRleCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uU3RvcEluZGV4KHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2x1bW5TdGFydEluZGV4OiBNYXRoLm1heChmcm96ZW5Db2x1bW5Db3VudCAtIDEsIHN0YXJ0SW5kZXgpLFxuICAgICAgICAgICAgY29sdW1uU3RvcEluZGV4OiBNYXRoLm1heChmcm96ZW5Db2x1bW5Db3VudCAtIDEsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RvcEluZGV4KSlcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgeyByb3dTdGFydEluZGV4LCByb3dTdG9wSW5kZXggfSA9IGdldFZlcnRpY2FsUmFuZ2VJbmZvKCk7XG4gICAgY29uc3QgeyBjb2x1bW5TdGFydEluZGV4LCBjb2x1bW5TdG9wSW5kZXggfSA9IGdldEhvcml6b250YWxSYW5nZUluZm8oKTtcbiAgICByZXR1cm4ge1xuICAgICAgICByb3dTdGFydEluZGV4LFxuICAgICAgICByb3dTdG9wSW5kZXgsXG4gICAgICAgIGNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgIGNvbHVtblN0b3BJbmRleFxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2Nyb2xsTWF4ID0gKGFpVGFibGU6IEFJVGFibGUsIGNvb3JkaW5hdGU6IENvb3JkaW5hdGUsIHZpc2libGVDb2x1bW5zOiBBSVRhYmxlRmllbGRbXSkgPT4ge1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5JbmRleE1hcCA9IGFpVGFibGUuY29udGV4dCEudmlzaWJsZUNvbHVtbnNJbmRleE1hcCgpO1xuICAgIGNvbnN0IHNjcm9sbE1heFdpZHRoID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKChwcmUsIGN1cikgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHZpc2libGVDb2x1bW5JbmRleE1hcC5nZXQoY3VyLl9pZCk7XG4gICAgICAgIHJldHVybiBwcmUgKyAoaXNOdW1iZXIoaW5kZXgpID8gY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChpbmRleCkgOiAwKTtcbiAgICB9LCBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCk7XG4gICAgY29uc3Qgc2Nyb2xsTWF4SGVpZ2h0ID0gY29vcmRpbmF0ZS5nZXRSb3dPZmZzZXQoY29vcmRpbmF0ZS5yb3dDb3VudCAtIDEpICsgMzI7XG4gICAgcmV0dXJuIHsgc2Nyb2xsTWF4V2lkdGgsIHNjcm9sbE1heEhlaWdodCB9O1xufTtcbiJdfQ==