@ilamy/calendar 0.2.1 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -884,7 +884,19 @@ import { useImperativeHandle, useState } from "react";
884
884
  import { useDraggable } from "@dnd-kit/core";
885
885
  import { AnimatePresence, motion } from "motion/react";
886
886
  import { memo } from "react";
887
- import { jsx as jsx14 } from "react/jsx-runtime";
887
+ import { jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
888
+ var getBorderRadiusClass = (isTruncatedStart, isTruncatedEnd) => {
889
+ if (isTruncatedStart && isTruncatedEnd) {
890
+ return "rounded-none";
891
+ }
892
+ if (isTruncatedStart) {
893
+ return "rounded-r-md rounded-l-none";
894
+ }
895
+ if (isTruncatedEnd) {
896
+ return "rounded-l-md rounded-r-none";
897
+ }
898
+ return "rounded-md";
899
+ };
888
900
  function DraggableEventUnmemoized({
889
901
  elementId,
890
902
  event,
@@ -901,14 +913,27 @@ function DraggableEventUnmemoized({
901
913
  },
902
914
  disabled: disableDrag || disableDragAndDrop
903
915
  });
904
- const DefaultEventContent = () => /* @__PURE__ */ jsx14("div", {
905
- className: cn(event.backgroundColor || "bg-blue-500", event.color || "text-white", "h-full w-full px-1 border-[1.5px] border-card rounded-md text-left overflow-clip"),
906
- style: { backgroundColor: event.backgroundColor, color: event.color },
907
- children: /* @__PURE__ */ jsx14("p", {
908
- className: "text-[10px] font-semibold sm:text-xs mt-0.5",
909
- children: event.title
910
- })
911
- });
916
+ const DefaultEventContent = () => {
917
+ const enhancedEvent = event;
918
+ const isTruncatedStart = enhancedEvent.isTruncatedStart;
919
+ const isTruncatedEnd = enhancedEvent.isTruncatedEnd;
920
+ return /* @__PURE__ */ jsxs6("div", {
921
+ className: cn(event.backgroundColor || "bg-blue-500", event.color || "text-white", "h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative", getBorderRadiusClass(isTruncatedStart, isTruncatedEnd)),
922
+ style: { backgroundColor: event.backgroundColor, color: event.color },
923
+ children: [
924
+ isTruncatedStart && /* @__PURE__ */ jsx14("div", {
925
+ className: "absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"
926
+ }),
927
+ /* @__PURE__ */ jsx14("p", {
928
+ className: cn("text-[10px] font-semibold sm:text-xs mt-0.5", isTruncatedStart && "pl-1", isTruncatedEnd && "pr-1"),
929
+ children: event.title
930
+ }),
931
+ isTruncatedEnd && /* @__PURE__ */ jsx14("div", {
932
+ className: "absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"
933
+ })
934
+ ]
935
+ });
936
+ };
912
937
  return /* @__PURE__ */ jsx14(AnimatePresence, {
913
938
  mode: "wait",
914
939
  children: /* @__PURE__ */ jsx14(motion.div, {
@@ -936,7 +961,7 @@ var DraggableEvent = memo(DraggableEventUnmemoized, (prevProps, nextProps) => {
936
961
  });
937
962
 
938
963
  // src/features/month-view/components/all-events-dialog.tsx
939
- import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
964
+ import { jsx as jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
940
965
  var AllEventDialog = ({ ref }) => {
941
966
  const [dialogOpen, setDialogOpen] = useState(false);
942
967
  const [selectedDayEvents, setSelectedDayEvents] = useState(null);
@@ -954,7 +979,7 @@ var AllEventDialog = ({ ref }) => {
954
979
  return /* @__PURE__ */ jsx15(Dialog, {
955
980
  open: dialogOpen,
956
981
  onOpenChange: setDialogOpen,
957
- children: /* @__PURE__ */ jsxs6(DialogContent, {
982
+ children: /* @__PURE__ */ jsxs7(DialogContent, {
958
983
  className: "max-h-[80vh] max-w-md overflow-y-auto",
959
984
  children: [
960
985
  /* @__PURE__ */ jsx15(DialogHeader, {
@@ -1032,7 +1057,7 @@ function DroppableCell({
1032
1057
  }
1033
1058
 
1034
1059
  // src/features/month-view/components/day-cell.tsx
1035
- import { jsx as jsx17, jsxs as jsxs7, Fragment } from "react/jsx-runtime";
1060
+ import { jsx as jsx17, jsxs as jsxs8, Fragment } from "react/jsx-runtime";
1036
1061
  var DayCell = ({
1037
1062
  index,
1038
1063
  day,
@@ -1044,7 +1069,8 @@ var DayCell = ({
1044
1069
  getEventsForDateRange,
1045
1070
  currentDate,
1046
1071
  firstDayOfWeek,
1047
- dayMaxEvents = 0
1072
+ dayMaxEvents = 0,
1073
+ t
1048
1074
  } = useCalendarContext();
1049
1075
  const todayEvents = getEventsForDateRange(day.startOf("day"), day.endOf("day"));
1050
1076
  const firstDayOfMonth = currentDate.startOf("month");
@@ -1064,7 +1090,7 @@ var DayCell = ({
1064
1090
  const isLastColumn = index === 6;
1065
1091
  const hiddenEventsCount = todayEvents.length - dayMaxEvents;
1066
1092
  const hasHiddenEvents = hiddenEventsCount > 0;
1067
- return /* @__PURE__ */ jsxs7(Fragment, {
1093
+ return /* @__PURE__ */ jsxs8(Fragment, {
1068
1094
  children: [
1069
1095
  /* @__PURE__ */ jsx17(DroppableCell, {
1070
1096
  id: `day-cell-${day.format("YYYY-MM-DD")}`,
@@ -1072,7 +1098,7 @@ var DayCell = ({
1072
1098
  "data-testid": `day-cell-${day.format("YYYY-MM-DD")}`,
1073
1099
  date: day,
1074
1100
  className: cn("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px]", !isCurrentMonth && "bg-secondary text-muted-foreground", isLastColumn && "border-r-0", className),
1075
- children: /* @__PURE__ */ jsxs7("div", {
1101
+ children: /* @__PURE__ */ jsxs8("div", {
1076
1102
  className: "flex flex-col gap-1",
1077
1103
  children: [
1078
1104
  /* @__PURE__ */ jsx17("div", {
@@ -1083,7 +1109,7 @@ var DayCell = ({
1083
1109
  className: "h-[20px] w-full",
1084
1110
  "data-testid": event?.title
1085
1111
  }, `empty-${rowIndex}`)),
1086
- hasHiddenEvents && /* @__PURE__ */ jsxs7("div", {
1112
+ hasHiddenEvents && /* @__PURE__ */ jsxs8("div", {
1087
1113
  className: "text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",
1088
1114
  onClick: (e) => {
1089
1115
  e.stopPropagation();
@@ -1101,7 +1127,8 @@ var DayCell = ({
1101
1127
  children: [
1102
1128
  "+",
1103
1129
  hiddenEventsCount,
1104
- " more"
1130
+ " ",
1131
+ t("more")
1105
1132
  ]
1106
1133
  })
1107
1134
  ]
@@ -1117,7 +1144,7 @@ var DayCell = ({
1117
1144
  // src/features/month-view/components/month-header/month-header.tsx
1118
1145
  import { AnimatePresence as AnimatePresence2, motion as motion2 } from "motion/react";
1119
1146
  import { useMemo } from "react";
1120
- import { jsx as jsx18, jsxs as jsxs8 } from "react/jsx-runtime";
1147
+ import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1121
1148
  var MonthHeader = ({ className }) => {
1122
1149
  const {
1123
1150
  firstDayOfWeek,
@@ -1141,11 +1168,11 @@ var MonthHeader = ({ className }) => {
1141
1168
  return { days, shortDays };
1142
1169
  }, [firstDayOfWeek, currentLocale]);
1143
1170
  return /* @__PURE__ */ jsx18("div", {
1144
- className: cn("grid grid-cols-7 border-b", stickyViewHeader && "sticky top-0 z-100", viewHeaderClassName, className),
1171
+ className: cn("grid grid-cols-7 border-b", stickyViewHeader && "sticky top-0 z-20", viewHeaderClassName, className),
1145
1172
  "data-testid": "month-header",
1146
1173
  children: weekDays.days.map((weekDay, index) => /* @__PURE__ */ jsx18(AnimatePresence2, {
1147
1174
  mode: "wait",
1148
- children: /* @__PURE__ */ jsxs8(motion2.div, {
1175
+ children: /* @__PURE__ */ jsxs9(motion2.div, {
1149
1176
  initial: { opacity: 0, y: -10 },
1150
1177
  animate: { opacity: 1, y: 0 },
1151
1178
  exit: { opacity: 0, y: -10 },
@@ -1216,6 +1243,8 @@ var useProcessedWeekEvents = ({
1216
1243
  const eventEnd = dayjs_config_default.min(event.end.startOf("day"), weekEnd);
1217
1244
  const startCol = Math.max(0, eventStart.diff(weekStart, "day"));
1218
1245
  const endCol = Math.min(6, eventEnd.diff(weekStart, "day"));
1246
+ const isTruncatedStart = event.start.startOf("day").isBefore(weekStart);
1247
+ const isTruncatedEnd = event.end.startOf("day").isAfter(weekEnd);
1219
1248
  let placedSuccessfully = false;
1220
1249
  let assignedRow = -1;
1221
1250
  for (let row = 0;row < dayMaxEvents; row++) {
@@ -1242,7 +1271,9 @@ var useProcessedWeekEvents = ({
1242
1271
  top: DAY_NUMBER_HEIGHT + GAP_BETWEEN_ELEMENTS + assignedRow * (EVENT_BAR_HEIGHT + GAP_BETWEEN_ELEMENTS),
1243
1272
  height: EVENT_BAR_HEIGHT,
1244
1273
  position: assignedRow,
1245
- ...event
1274
+ ...event,
1275
+ isTruncatedStart,
1276
+ isTruncatedEnd
1246
1277
  });
1247
1278
  placedSuccessfully = true;
1248
1279
  }
@@ -1273,7 +1304,9 @@ var useProcessedWeekEvents = ({
1273
1304
  top: DAY_NUMBER_HEIGHT + GAP_BETWEEN_ELEMENTS + truncatedAssignedRow * (EVENT_BAR_HEIGHT + GAP_BETWEEN_ELEMENTS),
1274
1305
  height: EVENT_BAR_HEIGHT,
1275
1306
  position: truncatedAssignedRow,
1276
- ...event
1307
+ ...event,
1308
+ isTruncatedStart: true,
1309
+ isTruncatedEnd
1277
1310
  });
1278
1311
  placedSuccessfully = true;
1279
1312
  break;
@@ -1284,6 +1317,8 @@ var useProcessedWeekEvents = ({
1284
1317
  for (const event of sortedSingleDay) {
1285
1318
  const eventStart = dayjs_config_default.max(event.start.startOf("day"), weekStart);
1286
1319
  const col = Math.max(0, eventStart.diff(weekStart, "day"));
1320
+ const isTruncatedStart = false;
1321
+ const isTruncatedEnd = false;
1287
1322
  let assignedRow = -1;
1288
1323
  for (let row = 0;row < dayMaxEvents; row++) {
1289
1324
  if (!grid[row][col].taken) {
@@ -1299,7 +1334,9 @@ var useProcessedWeekEvents = ({
1299
1334
  top: DAY_NUMBER_HEIGHT + GAP_BETWEEN_ELEMENTS + assignedRow * (EVENT_BAR_HEIGHT + GAP_BETWEEN_ELEMENTS),
1300
1335
  height: EVENT_BAR_HEIGHT,
1301
1336
  position: assignedRow,
1302
- ...event
1337
+ ...event,
1338
+ isTruncatedStart,
1339
+ isTruncatedEnd
1303
1340
  });
1304
1341
  }
1305
1342
  }
@@ -1312,7 +1349,7 @@ var WeekEventsLayer = ({ days }) => {
1312
1349
  const weekStart = days[0];
1313
1350
  const processedWeekEvents = useProcessedWeekEvents({ days });
1314
1351
  return /* @__PURE__ */ jsx19("div", {
1315
- className: "relative w-full h-full pointer-events-none z-20 overflow-clip",
1352
+ className: "relative w-full h-full pointer-events-none z-10 overflow-clip",
1316
1353
  children: processedWeekEvents.map((event) => {
1317
1354
  return /* @__PURE__ */ jsx19("div", {
1318
1355
  className: "absolute z-10 pointer-events-auto overflow-clip",
@@ -1334,7 +1371,7 @@ var WeekEventsLayer = ({ days }) => {
1334
1371
  };
1335
1372
 
1336
1373
  // src/features/month-view/components/view/month-view.tsx
1337
- import { jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
1374
+ import { jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
1338
1375
  var MonthView = ({ dayMaxEvents = 3 }) => {
1339
1376
  const allEventsDialogRef = React5.useRef(null);
1340
1377
  const { currentDate, firstDayOfWeek } = useCalendarContext();
@@ -1355,7 +1392,7 @@ var MonthView = ({ dayMaxEvents = 3 }) => {
1355
1392
  }
1356
1393
  return days;
1357
1394
  }, [adjustedFirstDayOfCalendar]);
1358
- return /* @__PURE__ */ jsxs9("div", {
1395
+ return /* @__PURE__ */ jsxs10("div", {
1359
1396
  className: "flex h-full flex-col",
1360
1397
  "data-testid": "month-view",
1361
1398
  children: [
@@ -1376,7 +1413,7 @@ var MonthView = ({ dayMaxEvents = 3 }) => {
1376
1413
  className: "relative grid h-full grid-cols-7 grid-rows-6 overflow-auto flex-1",
1377
1414
  "data-testid": "month-calendar-grid",
1378
1415
  children: calendarDays.map((days, index) => {
1379
- return /* @__PURE__ */ jsxs9("div", {
1416
+ return /* @__PURE__ */ jsxs10("div", {
1380
1417
  className: "relative col-span-7 grid grid-cols-7",
1381
1418
  "data-testid": `week-row-${index}`,
1382
1419
  children: [
@@ -1412,7 +1449,7 @@ import weekOfYear2 from "dayjs/plugin/weekOfYear";
1412
1449
 
1413
1450
  // src/features/week-view/week-all-day-row.tsx
1414
1451
  import { useMemo as useMemo3 } from "react";
1415
- import { jsx as jsx21, jsxs as jsxs10 } from "react/jsx-runtime";
1452
+ import { jsx as jsx21, jsxs as jsxs11 } from "react/jsx-runtime";
1416
1453
  var WeekAllDayRow = () => {
1417
1454
  const { currentDate, getEventsForDateRange, firstDayOfWeek } = useCalendarContext();
1418
1455
  const startOfWeek = currentDate.startOf("week").day(firstDayOfWeek);
@@ -1478,7 +1515,7 @@ var WeekAllDayRow = () => {
1478
1515
  allDayRowsCount: Math.max(1, rows.length)
1479
1516
  };
1480
1517
  }, [allDayEvents, adjustedStartOfWeek, endOfWeek]);
1481
- return /* @__PURE__ */ jsxs10("div", {
1518
+ return /* @__PURE__ */ jsxs11("div", {
1482
1519
  className: "grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1 relative",
1483
1520
  "data-testid": "week-all-day-row",
1484
1521
  children: [
@@ -1518,7 +1555,7 @@ var WeekAllDayRow = () => {
1518
1555
 
1519
1556
  // src/features/week-view/week-header.tsx
1520
1557
  import { AnimatePresence as AnimatePresence4, motion as motion4 } from "motion/react";
1521
- import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
1558
+ import { jsx as jsx22, jsxs as jsxs12 } from "react/jsx-runtime";
1522
1559
  var WeekHeader = ({ className }) => {
1523
1560
  const {
1524
1561
  currentDate,
@@ -1535,13 +1572,13 @@ var WeekHeader = ({ className }) => {
1535
1572
  for (let i = 0;i < 7; i++) {
1536
1573
  weekDays.push(adjustedStartOfWeek.add(i, "day"));
1537
1574
  }
1538
- return /* @__PURE__ */ jsxs11("div", {
1539
- className: cn("grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1", stickyViewHeader && "sticky top-0 z-100", viewHeaderClassName, className),
1575
+ return /* @__PURE__ */ jsxs12("div", {
1576
+ className: cn("grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1", stickyViewHeader && "sticky top-0 z-20", viewHeaderClassName, className),
1540
1577
  "data-testid": "week-header",
1541
1578
  children: [
1542
1579
  /* @__PURE__ */ jsx22("div", {
1543
1580
  className: "col-span-1 w-14 shrink-0 items-center justify-center border-x border-b p-2",
1544
- children: /* @__PURE__ */ jsxs11("div", {
1581
+ children: /* @__PURE__ */ jsxs12("div", {
1545
1582
  className: "flex flex-col items-center justify-center",
1546
1583
  children: [
1547
1584
  /* @__PURE__ */ jsx22("span", {
@@ -1559,7 +1596,7 @@ var WeekHeader = ({ className }) => {
1559
1596
  const isToday = day.isSame(dayjs_config_default(), "day");
1560
1597
  return /* @__PURE__ */ jsx22(AnimatePresence4, {
1561
1598
  mode: "wait",
1562
- children: /* @__PURE__ */ jsxs11(motion4.div, {
1599
+ children: /* @__PURE__ */ jsxs12(motion4.div, {
1563
1600
  initial: { opacity: 0, y: -10 },
1564
1601
  animate: { opacity: 1, y: 0 },
1565
1602
  exit: { opacity: 0, y: -10 },
@@ -1698,7 +1735,7 @@ var DayEventsLayer = ({
1698
1735
  const todayEvents = useProcessedDayEvents({ day });
1699
1736
  return /* @__PURE__ */ jsx23("div", {
1700
1737
  "data-testid": dataTestId,
1701
- className: "pointer-events-none absolute inset-0 z-30",
1738
+ className: "pointer-events-none absolute inset-0 z-10",
1702
1739
  children: todayEvents.map((event, index) => {
1703
1740
  const veryVeryUniqueKey = `event-${event.id}-${index}-${day.format("YYYY-MM-DD")}`;
1704
1741
  const isShortEvent = event.end.diff(event.start, "minute") <= 15;
@@ -1723,10 +1760,10 @@ var DayEventsLayer = ({
1723
1760
  };
1724
1761
 
1725
1762
  // src/features/week-view/week-day-col.tsx
1726
- import { jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
1763
+ import { jsx as jsx24, jsxs as jsxs13 } from "react/jsx-runtime";
1727
1764
  var hours = Array.from({ length: 24 }, (_, i) => i).map((hour) => dayjs_config_default().hour(hour).minute(0));
1728
1765
  var WeekDayCol = ({ day }) => {
1729
- return /* @__PURE__ */ jsxs12("div", {
1766
+ return /* @__PURE__ */ jsxs13("div", {
1730
1767
  "data-testid": `week-day-col-${day.format("YYYY-MM-DD")}`,
1731
1768
  className: "col-span-1 relative grid grid-rows-24 border-r",
1732
1769
  children: [
@@ -1739,7 +1776,7 @@ var WeekDayCol = ({ day }) => {
1739
1776
  date: day,
1740
1777
  hour,
1741
1778
  "data-testid": `week-time-cell-${cellDate}-${time.format("HH")}`,
1742
- className: cn("hover:bg-accent relative z-20 h-[60px] cursor-pointer border-b")
1779
+ className: cn("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b")
1743
1780
  }, `${cellDate}-${time.format("HH")}`);
1744
1781
  }),
1745
1782
  /* @__PURE__ */ jsx24(DayEventsLayer, {
@@ -1751,7 +1788,7 @@ var WeekDayCol = ({ day }) => {
1751
1788
  };
1752
1789
 
1753
1790
  // src/features/week-view/week-time-grid.tsx
1754
- import { jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
1791
+ import { jsx as jsx25, jsxs as jsxs14 } from "react/jsx-runtime";
1755
1792
  var hours2 = Array.from({ length: 24 }, (_, i) => i).map((hour) => dayjs_config_default().hour(hour).minute(0));
1756
1793
  var WeekTimeGrid = () => {
1757
1794
  const { currentDate, firstDayOfWeek, currentLocale } = useCalendarContext();
@@ -1763,7 +1800,7 @@ var WeekTimeGrid = () => {
1763
1800
  }
1764
1801
  const todayIndex = weekDays.findIndex((day) => day.isSame(dayjs_config_default(), "day"));
1765
1802
  const isCurrentWeek = todayIndex !== -1;
1766
- return /* @__PURE__ */ jsxs13("div", {
1803
+ return /* @__PURE__ */ jsxs14("div", {
1767
1804
  "data-testid": "week-time-grid",
1768
1805
  className: "relative h-full grid grid-cols-[auto_repeat(7,1fr)] grid-rows-[repeat(24,minmax(60px, 1fr))]",
1769
1806
  children: [
@@ -1806,17 +1843,17 @@ var WeekTimeGrid = () => {
1806
1843
  };
1807
1844
 
1808
1845
  // src/features/week-view/view/week-view.tsx
1809
- import { jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
1846
+ import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
1810
1847
  dayjs_config_default.extend(weekOfYear2);
1811
1848
  var WeekView = () => {
1812
- return /* @__PURE__ */ jsxs14("div", {
1849
+ return /* @__PURE__ */ jsxs15("div", {
1813
1850
  className: "flex flex-col h-full",
1814
1851
  "data-testid": "week-view",
1815
1852
  children: [
1816
1853
  /* @__PURE__ */ jsx26(WeekHeader, {
1817
1854
  className: "h-[5rem]"
1818
1855
  }),
1819
- /* @__PURE__ */ jsxs14(ScrollArea, {
1856
+ /* @__PURE__ */ jsxs15(ScrollArea, {
1820
1857
  className: "flex overflow-auto h-[calc(100%-5rem)]",
1821
1858
  "data-testid": "week-scroll-area",
1822
1859
  children: [
@@ -1834,7 +1871,7 @@ import { Fragment as Fragment2 } from "react";
1834
1871
 
1835
1872
  // src/features/day-view/components/day-all-day-row.tsx
1836
1873
  import { useMemo as useMemo5 } from "react";
1837
- import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
1874
+ import { jsx as jsx27, jsxs as jsxs16 } from "react/jsx-runtime";
1838
1875
  var DayAllDayRow = () => {
1839
1876
  const { currentDate, getEventsForDateRange } = useCalendarContext();
1840
1877
  const dayEvents = getEventsForDateRange(currentDate.startOf("day"), currentDate.endOf("day"));
@@ -1874,7 +1911,7 @@ var DayAllDayRow = () => {
1874
1911
  allDayRowsCount: Math.max(1, rows.length)
1875
1912
  };
1876
1913
  }, [allDayEvents]);
1877
- return /* @__PURE__ */ jsxs15("div", {
1914
+ return /* @__PURE__ */ jsxs16("div", {
1878
1915
  "data-testid": "day-all-day-row",
1879
1916
  className: "grid grid-cols-8 border-b border-x",
1880
1917
  children: [
@@ -1911,16 +1948,16 @@ var DayAllDayRow = () => {
1911
1948
 
1912
1949
  // src/features/day-view/components/day-header.tsx
1913
1950
  import { AnimatePresence as AnimatePresence5, motion as motion5 } from "motion/react";
1914
- import { jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
1951
+ import { jsx as jsx28, jsxs as jsxs17 } from "react/jsx-runtime";
1915
1952
  var DayHeader = ({ className }) => {
1916
1953
  const { currentDate, stickyViewHeader, viewHeaderClassName } = useCalendarContext();
1917
1954
  const isToday = currentDate.isSame(dayjs_config_default(), "day");
1918
1955
  return /* @__PURE__ */ jsx28("div", {
1919
1956
  "data-testid": "day-header",
1920
- className: cn("flex items-center justify-center border-b p-2 border-x", stickyViewHeader && "sticky top-0 z-100", viewHeaderClassName, className),
1957
+ className: cn("flex items-center justify-center border-b p-2 border-x", stickyViewHeader && "sticky top-0 z-20", viewHeaderClassName, className),
1921
1958
  children: /* @__PURE__ */ jsx28(AnimatePresence5, {
1922
1959
  mode: "wait",
1923
- children: /* @__PURE__ */ jsxs16(motion5.div, {
1960
+ children: /* @__PURE__ */ jsxs17(motion5.div, {
1924
1961
  initial: { opacity: 0, y: -10 },
1925
1962
  animate: { opacity: 1, y: 0 },
1926
1963
  exit: { opacity: 0, y: -10 },
@@ -1968,7 +2005,7 @@ var DayTimeCol = ({ className }) => {
1968
2005
  };
1969
2006
 
1970
2007
  // src/features/day-view/components/view/day-view.tsx
1971
- import { jsx as jsx30, jsxs as jsxs17 } from "react/jsx-runtime";
2008
+ import { jsx as jsx30, jsxs as jsxs18 } from "react/jsx-runtime";
1972
2009
  var timeSegments = [0, 15, 30, 45];
1973
2010
  var hours4 = Array.from({ length: 24 }, (_, i) => i).map((hour) => {
1974
2011
  return dayjs_config_default().hour(hour).minute(0);
@@ -1977,19 +2014,19 @@ var DayView = () => {
1977
2014
  const { currentDate } = useCalendarContext();
1978
2015
  const isToday = currentDate.isSame(dayjs_config_default(), "day");
1979
2016
  const cellDate = currentDate.format("YYYY-MM-DD");
1980
- return /* @__PURE__ */ jsxs17("div", {
2017
+ return /* @__PURE__ */ jsxs18("div", {
1981
2018
  "data-testid": "day-view",
1982
2019
  className: "flex h-full flex-col",
1983
2020
  children: [
1984
2021
  /* @__PURE__ */ jsx30(DayHeader, {
1985
2022
  className: "h-[3rem]"
1986
2023
  }),
1987
- /* @__PURE__ */ jsxs17(ScrollArea, {
2024
+ /* @__PURE__ */ jsxs18(ScrollArea, {
1988
2025
  "data-testid": "day-scroll-area",
1989
2026
  className: "relative overflow-y-auto h-[calc(100%-3rem)]",
1990
2027
  children: [
1991
2028
  /* @__PURE__ */ jsx30(DayAllDayRow, {}),
1992
- /* @__PURE__ */ jsxs17("div", {
2029
+ /* @__PURE__ */ jsxs18("div", {
1993
2030
  "data-testid": "day-time-grid",
1994
2031
  className: "grid grid-cols-8 divide-x border-x",
1995
2032
  style: { height: `${hours4.length * 60}px` },
@@ -1997,7 +2034,7 @@ var DayView = () => {
1997
2034
  /* @__PURE__ */ jsx30(DayTimeCol, {
1998
2035
  className: "col-span-2 h-full md:col-span-1"
1999
2036
  }),
2000
- /* @__PURE__ */ jsxs17("div", {
2037
+ /* @__PURE__ */ jsxs18("div", {
2001
2038
  "data-testid": "day-events-column",
2002
2039
  className: "relative col-span-6 h-full md:col-span-7",
2003
2040
  children: [
@@ -2014,10 +2051,10 @@ var DayView = () => {
2014
2051
  }),
2015
2052
  /* @__PURE__ */ jsx30("div", {
2016
2053
  "data-testid": "day-interactive-layer",
2017
- className: "pointer-events-auto absolute inset-0 z-20",
2054
+ className: "pointer-events-auto absolute inset-0 z-10",
2018
2055
  children: hours4.map((time) => {
2019
2056
  const hour = time.hour();
2020
- return /* @__PURE__ */ jsxs17(Fragment2, {
2057
+ return /* @__PURE__ */ jsxs18(Fragment2, {
2021
2058
  children: [
2022
2059
  /* @__PURE__ */ jsx30(DroppableCell, {
2023
2060
  id: `time-cell-${cellDate}-${time.format("HH")}-00`,
@@ -2103,9 +2140,10 @@ var generateRecurringEvents = ({
2103
2140
  };
2104
2141
  const rule = new RRule(ruleOptions);
2105
2142
  const overrides = currentEvents.filter((e) => e.recurrenceId && e.uid === event.uid);
2106
- const startDateTime = startDate.toDate();
2143
+ const eventDuration = event.end.diff(event.start);
2144
+ const expandedStartDateTime = startDate.subtract(eventDuration, "millisecond").toDate();
2107
2145
  const endDateTime = endDate.toDate();
2108
- const occurrences = rule.between(startDateTime, endDateTime, true);
2146
+ const occurrences = rule.between(expandedStartDateTime, endDateTime, true);
2109
2147
  const recurringEvents = occurrences.map((occurrence, index) => {
2110
2148
  const occurrenceDate = dayjs_config_default(occurrence);
2111
2149
  const existingOverride = overrides.find((e) => safeDate(e.recurrenceId).isSame(occurrenceDate));
@@ -2127,12 +2165,15 @@ var generateRecurringEvents = ({
2127
2165
  return recurringEvent;
2128
2166
  }).filter((recurringEvent) => {
2129
2167
  const hasExdates = event.exdates && event.exdates.length > 0;
2130
- if (!hasExdates) {
2131
- return true;
2168
+ if (hasExdates) {
2169
+ const eventStartISO = recurringEvent.start.toISOString();
2170
+ const isExcluded = event.exdates.includes(eventStartISO);
2171
+ if (isExcluded) {
2172
+ return false;
2173
+ }
2132
2174
  }
2133
- const eventStartISO = recurringEvent.start.toISOString();
2134
- const isExcluded = event.exdates.includes(eventStartISO);
2135
- return !isExcluded;
2175
+ const eventSpansRange = recurringEvent.start.isSameOrBefore(endDate) && recurringEvent.end.isSameOrAfter(startDate);
2176
+ return eventSpansRange;
2136
2177
  });
2137
2178
  return recurringEvents;
2138
2179
  } catch (error) {
@@ -2269,38 +2310,39 @@ var deleteRecurringEvent = ({
2269
2310
  };
2270
2311
 
2271
2312
  // src/features/recurrence/components/recurrence-editor/recurrence-editor.tsx
2272
- import { useState as useState2, useEffect as useEffect2 } from "react";
2313
+ import { useState as useState2, useEffect as useEffect2, useMemo as useMemo6 } from "react";
2273
2314
  import { RRule as RRule2 } from "rrule";
2274
- import { jsx as jsx31, jsxs as jsxs18 } from "react/jsx-runtime";
2275
- function getRRuleDescription(rruleOptions) {
2315
+ import { jsx as jsx31, jsxs as jsxs19 } from "react/jsx-runtime";
2316
+ function getRRuleDescription(rruleOptions, t) {
2276
2317
  if (!rruleOptions) {
2277
- return "Custom recurrence";
2318
+ return t("customRecurrence");
2278
2319
  }
2279
2320
  try {
2280
2321
  const rule = new RRule2(rruleOptions);
2281
2322
  const naturalText = rule.toText();
2282
2323
  if (!naturalText || naturalText.includes("RRule error") || naturalText.includes("Unable to fully convert") || naturalText.toLowerCase().includes("error")) {
2283
- return "Custom recurrence";
2324
+ return t("customRecurrence");
2284
2325
  }
2285
2326
  return naturalText.charAt(0).toUpperCase() + naturalText.slice(1);
2286
2327
  } catch {
2287
- return "Custom recurrence";
2328
+ return t("customRecurrence");
2288
2329
  }
2289
2330
  }
2290
- var WEEK_DAYS = [
2291
- { value: RRule2.SU, label: "Sunday", short: "Sun" },
2292
- { value: RRule2.MO, label: "Monday", short: "Mon" },
2293
- { value: RRule2.TU, label: "Tuesday", short: "Tue" },
2294
- { value: RRule2.WE, label: "Wednesday", short: "Wed" },
2295
- { value: RRule2.TH, label: "Thursday", short: "Thu" },
2296
- { value: RRule2.FR, label: "Friday", short: "Fri" },
2297
- { value: RRule2.SA, label: "Saturday", short: "Sat" }
2298
- ];
2299
2331
  var RecurrenceEditor = ({
2300
2332
  value,
2301
2333
  onChange
2302
2334
  }) => {
2335
+ const { t } = useCalendarContext();
2303
2336
  const [showRecurrence, setShowRecurrence] = useState2(!!value);
2337
+ const WEEK_DAYS = useMemo6(() => [
2338
+ { value: RRule2.SU, label: t("sunday"), short: t("sun") },
2339
+ { value: RRule2.MO, label: t("monday"), short: t("mon") },
2340
+ { value: RRule2.TU, label: t("tuesday"), short: t("tue") },
2341
+ { value: RRule2.WE, label: t("wednesday"), short: t("wed") },
2342
+ { value: RRule2.TH, label: t("thursday"), short: t("thu") },
2343
+ { value: RRule2.FR, label: t("friday"), short: t("fri") },
2344
+ { value: RRule2.SA, label: t("saturday"), short: t("sat") }
2345
+ ], [t]);
2304
2346
  const getFrequencyString = (freq) => {
2305
2347
  const freqMap = {
2306
2348
  [RRule2.DAILY]: "DAILY",
@@ -2413,13 +2455,13 @@ var RecurrenceEditor = ({
2413
2455
  }
2414
2456
  return "never";
2415
2457
  };
2416
- return /* @__PURE__ */ jsxs18(Card, {
2458
+ return /* @__PURE__ */ jsxs19(Card, {
2417
2459
  "data-testid": "recurrence-editor",
2418
2460
  children: [
2419
- /* @__PURE__ */ jsxs18(CardHeader, {
2461
+ /* @__PURE__ */ jsxs19(CardHeader, {
2420
2462
  className: "pb-3",
2421
2463
  children: [
2422
- /* @__PURE__ */ jsxs18("div", {
2464
+ /* @__PURE__ */ jsxs19("div", {
2423
2465
  className: "flex items-center space-x-2",
2424
2466
  children: [
2425
2467
  /* @__PURE__ */ jsx31(Checkbox, {
@@ -2430,32 +2472,32 @@ var RecurrenceEditor = ({
2430
2472
  }),
2431
2473
  /* @__PURE__ */ jsx31(CardTitle, {
2432
2474
  className: "text-sm",
2433
- children: "Repeat"
2475
+ children: t("repeat")
2434
2476
  })
2435
2477
  ]
2436
2478
  }),
2437
2479
  showRecurrence && value && /* @__PURE__ */ jsx31("p", {
2438
2480
  className: "text-xs text-muted-foreground",
2439
- children: getRRuleDescription(value)
2481
+ children: getRRuleDescription(value, t)
2440
2482
  })
2441
2483
  ]
2442
2484
  }),
2443
2485
  showRecurrence && /* @__PURE__ */ jsx31(CardContent, {
2444
2486
  className: "pt-0",
2445
- children: /* @__PURE__ */ jsxs18("div", {
2487
+ children: /* @__PURE__ */ jsxs19("div", {
2446
2488
  className: "space-y-4",
2447
2489
  children: [
2448
- /* @__PURE__ */ jsxs18("div", {
2490
+ /* @__PURE__ */ jsxs19("div", {
2449
2491
  className: "grid grid-cols-2 gap-4",
2450
2492
  children: [
2451
- /* @__PURE__ */ jsxs18("div", {
2493
+ /* @__PURE__ */ jsxs19("div", {
2452
2494
  children: [
2453
2495
  /* @__PURE__ */ jsx31(Label, {
2454
2496
  htmlFor: "frequency",
2455
2497
  className: "text-xs",
2456
- children: "Repeats"
2498
+ children: t("repeats")
2457
2499
  }),
2458
- /* @__PURE__ */ jsxs18(Select, {
2500
+ /* @__PURE__ */ jsxs19(Select, {
2459
2501
  value: getFrequencyString(rruleOptions?.freq ?? RRule2.DAILY),
2460
2502
  onValueChange: handleFrequencyChange,
2461
2503
  children: [
@@ -2465,23 +2507,23 @@ var RecurrenceEditor = ({
2465
2507
  "data-testid": "frequency-select",
2466
2508
  children: /* @__PURE__ */ jsx31(SelectValue, {})
2467
2509
  }),
2468
- /* @__PURE__ */ jsxs18(SelectContent, {
2510
+ /* @__PURE__ */ jsxs19(SelectContent, {
2469
2511
  children: [
2470
2512
  /* @__PURE__ */ jsx31(SelectItem, {
2471
2513
  value: "DAILY",
2472
- children: "Daily"
2514
+ children: t("daily")
2473
2515
  }),
2474
2516
  /* @__PURE__ */ jsx31(SelectItem, {
2475
2517
  value: "WEEKLY",
2476
- children: "Weekly"
2518
+ children: t("weekly")
2477
2519
  }),
2478
2520
  /* @__PURE__ */ jsx31(SelectItem, {
2479
2521
  value: "MONTHLY",
2480
- children: "Monthly"
2522
+ children: t("monthly")
2481
2523
  }),
2482
2524
  /* @__PURE__ */ jsx31(SelectItem, {
2483
2525
  value: "YEARLY",
2484
- children: "Yearly"
2526
+ children: t("yearly")
2485
2527
  })
2486
2528
  ]
2487
2529
  })
@@ -2489,12 +2531,12 @@ var RecurrenceEditor = ({
2489
2531
  })
2490
2532
  ]
2491
2533
  }),
2492
- /* @__PURE__ */ jsxs18("div", {
2534
+ /* @__PURE__ */ jsxs19("div", {
2493
2535
  children: [
2494
2536
  /* @__PURE__ */ jsx31(Label, {
2495
2537
  htmlFor: "interval",
2496
2538
  className: "text-xs",
2497
- children: "Every"
2539
+ children: t("every")
2498
2540
  }),
2499
2541
  /* @__PURE__ */ jsx31(Input, {
2500
2542
  id: "interval",
@@ -2508,18 +2550,18 @@ var RecurrenceEditor = ({
2508
2550
  })
2509
2551
  ]
2510
2552
  }),
2511
- rruleOptions?.freq === RRule2.WEEKLY && /* @__PURE__ */ jsxs18("div", {
2553
+ rruleOptions?.freq === RRule2.WEEKLY && /* @__PURE__ */ jsxs19("div", {
2512
2554
  children: [
2513
2555
  /* @__PURE__ */ jsx31(Label, {
2514
2556
  className: "text-xs",
2515
- children: "Repeat on"
2557
+ children: t("repeatOn")
2516
2558
  }),
2517
2559
  /* @__PURE__ */ jsx31("div", {
2518
2560
  className: "flex flex-wrap gap-1 mt-1",
2519
2561
  children: WEEK_DAYS.map((day, index) => {
2520
2562
  const byweekdayArray = Array.isArray(rruleOptions?.byweekday) ? rruleOptions.byweekday : rruleOptions?.byweekday ? [rruleOptions.byweekday] : [];
2521
2563
  const isSelected = byweekdayArray.includes(day.value);
2522
- return /* @__PURE__ */ jsxs18("div", {
2564
+ return /* @__PURE__ */ jsxs19("div", {
2523
2565
  className: "flex items-center space-x-1",
2524
2566
  children: [
2525
2567
  /* @__PURE__ */ jsx31(Checkbox, {
@@ -2538,16 +2580,16 @@ var RecurrenceEditor = ({
2538
2580
  })
2539
2581
  ]
2540
2582
  }),
2541
- /* @__PURE__ */ jsxs18("div", {
2583
+ /* @__PURE__ */ jsxs19("div", {
2542
2584
  children: [
2543
2585
  /* @__PURE__ */ jsx31(Label, {
2544
2586
  className: "text-xs",
2545
- children: "Ends"
2587
+ children: t("ends")
2546
2588
  }),
2547
- /* @__PURE__ */ jsxs18("div", {
2589
+ /* @__PURE__ */ jsxs19("div", {
2548
2590
  className: "space-y-2 mt-1",
2549
2591
  children: [
2550
- /* @__PURE__ */ jsxs18("div", {
2592
+ /* @__PURE__ */ jsxs19("div", {
2551
2593
  className: "flex items-center space-x-2",
2552
2594
  children: [
2553
2595
  /* @__PURE__ */ jsx31(Checkbox, {
@@ -2558,11 +2600,11 @@ var RecurrenceEditor = ({
2558
2600
  /* @__PURE__ */ jsx31(Label, {
2559
2601
  htmlFor: "never",
2560
2602
  className: "text-xs",
2561
- children: "Never"
2603
+ children: t("never")
2562
2604
  })
2563
2605
  ]
2564
2606
  }),
2565
- /* @__PURE__ */ jsxs18("div", {
2607
+ /* @__PURE__ */ jsxs19("div", {
2566
2608
  className: "flex items-center space-x-2",
2567
2609
  children: [
2568
2610
  /* @__PURE__ */ jsx31(Checkbox, {
@@ -2573,7 +2615,7 @@ var RecurrenceEditor = ({
2573
2615
  /* @__PURE__ */ jsx31(Label, {
2574
2616
  htmlFor: "after",
2575
2617
  className: "text-xs",
2576
- children: "After"
2618
+ children: t("after")
2577
2619
  }),
2578
2620
  getEndType() === "count" && /* @__PURE__ */ jsx31(Input, {
2579
2621
  type: "number",
@@ -2585,11 +2627,11 @@ var RecurrenceEditor = ({
2585
2627
  }),
2586
2628
  /* @__PURE__ */ jsx31("span", {
2587
2629
  className: "text-xs",
2588
- children: "occurrences"
2630
+ children: t("occurrences")
2589
2631
  })
2590
2632
  ]
2591
2633
  }),
2592
- /* @__PURE__ */ jsxs18("div", {
2634
+ /* @__PURE__ */ jsxs19("div", {
2593
2635
  className: "flex items-center space-x-2",
2594
2636
  children: [
2595
2637
  /* @__PURE__ */ jsx31(Checkbox, {
@@ -2600,7 +2642,7 @@ var RecurrenceEditor = ({
2600
2642
  /* @__PURE__ */ jsx31(Label, {
2601
2643
  htmlFor: "on",
2602
2644
  className: "text-xs",
2603
- children: "On"
2645
+ children: t("on")
2604
2646
  }),
2605
2647
  getEndType() === "until" && /* @__PURE__ */ jsx31(DatePicker, {
2606
2648
  date: rruleOptions?.until,
@@ -2621,7 +2663,7 @@ var RecurrenceEditor = ({
2621
2663
  };
2622
2664
 
2623
2665
  // src/features/recurrence/components/recurrence-edit-dialog/recurrence-edit-dialog.tsx
2624
- import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
2666
+ import { jsx as jsx32, jsxs as jsxs20 } from "react/jsx-runtime";
2625
2667
  function RecurrenceEditDialog({
2626
2668
  isOpen,
2627
2669
  onClose,
@@ -2629,59 +2671,51 @@ function RecurrenceEditDialog({
2629
2671
  operationType,
2630
2672
  eventTitle
2631
2673
  }) {
2674
+ const { t } = useCalendarContext();
2632
2675
  const handleScopeSelect = (scope) => {
2633
2676
  onConfirm(scope);
2634
2677
  onClose();
2635
2678
  };
2636
- const actionText = operationType === "edit" ? "change" : "delete";
2637
- const actionVerb = operationType === "edit" ? "Edit" : "Delete";
2679
+ const isEdit = operationType === "edit";
2638
2680
  return /* @__PURE__ */ jsx32(Dialog, {
2639
2681
  open: isOpen,
2640
2682
  onOpenChange: onClose,
2641
- children: /* @__PURE__ */ jsxs19(DialogContent, {
2683
+ children: /* @__PURE__ */ jsxs20(DialogContent, {
2642
2684
  className: "max-w-md",
2643
2685
  children: [
2644
- /* @__PURE__ */ jsxs19(DialogHeader, {
2686
+ /* @__PURE__ */ jsxs20(DialogHeader, {
2645
2687
  children: [
2646
- /* @__PURE__ */ jsxs19(DialogTitle, {
2647
- children: [
2648
- actionVerb,
2649
- " recurring event"
2650
- ]
2688
+ /* @__PURE__ */ jsx32(DialogTitle, {
2689
+ children: isEdit ? t("editRecurringEvent") : t("deleteRecurringEvent")
2651
2690
  }),
2652
- /* @__PURE__ */ jsxs19(DialogDescription, {
2691
+ /* @__PURE__ */ jsxs20(DialogDescription, {
2653
2692
  children: [
2654
2693
  '"',
2655
2694
  eventTitle,
2656
- '" is a recurring event. How would you like to',
2695
+ '"',
2657
2696
  " ",
2658
- actionText,
2659
- " it?"
2697
+ isEdit ? t("editRecurringEventQuestion") : t("deleteRecurringEventQuestion")
2660
2698
  ]
2661
2699
  })
2662
2700
  ]
2663
2701
  }),
2664
- /* @__PURE__ */ jsxs19("div", {
2702
+ /* @__PURE__ */ jsxs20("div", {
2665
2703
  className: "space-y-3",
2666
2704
  children: [
2667
2705
  /* @__PURE__ */ jsx32(Button, {
2668
2706
  variant: "outline",
2669
2707
  className: "w-full justify-start h-auto p-4",
2670
2708
  onClick: () => handleScopeSelect("this"),
2671
- children: /* @__PURE__ */ jsxs19("div", {
2709
+ children: /* @__PURE__ */ jsxs20("div", {
2672
2710
  className: "text-left",
2673
2711
  children: [
2674
2712
  /* @__PURE__ */ jsx32("div", {
2675
2713
  className: "font-medium",
2676
- children: "This event"
2714
+ children: t("thisEvent")
2677
2715
  }),
2678
- /* @__PURE__ */ jsxs19("div", {
2716
+ /* @__PURE__ */ jsx32("div", {
2679
2717
  className: "text-sm text-muted-foreground",
2680
- children: [
2681
- "Only ",
2682
- actionText,
2683
- " this specific occurrence"
2684
- ]
2718
+ children: isEdit ? t("onlyChangeThis") : t("onlyDeleteThis")
2685
2719
  })
2686
2720
  ]
2687
2721
  })
@@ -2690,19 +2724,16 @@ function RecurrenceEditDialog({
2690
2724
  variant: "outline",
2691
2725
  className: "w-full justify-start h-auto p-4",
2692
2726
  onClick: () => handleScopeSelect("following"),
2693
- children: /* @__PURE__ */ jsxs19("div", {
2727
+ children: /* @__PURE__ */ jsxs20("div", {
2694
2728
  className: "text-left",
2695
2729
  children: [
2696
2730
  /* @__PURE__ */ jsx32("div", {
2697
2731
  className: "font-medium",
2698
- children: "This and following events"
2732
+ children: t("thisAndFollowingEvents")
2699
2733
  }),
2700
- /* @__PURE__ */ jsxs19("div", {
2734
+ /* @__PURE__ */ jsx32("div", {
2701
2735
  className: "text-sm text-muted-foreground",
2702
- children: [
2703
- actionVerb,
2704
- " this and all future occurrences"
2705
- ]
2736
+ children: isEdit ? t("changeThisAndFuture") : t("deleteThisAndFuture")
2706
2737
  })
2707
2738
  ]
2708
2739
  })
@@ -2711,19 +2742,16 @@ function RecurrenceEditDialog({
2711
2742
  variant: "outline",
2712
2743
  className: "w-full justify-start h-auto p-4",
2713
2744
  onClick: () => handleScopeSelect("all"),
2714
- children: /* @__PURE__ */ jsxs19("div", {
2745
+ children: /* @__PURE__ */ jsxs20("div", {
2715
2746
  className: "text-left",
2716
2747
  children: [
2717
2748
  /* @__PURE__ */ jsx32("div", {
2718
2749
  className: "font-medium",
2719
- children: "All events"
2750
+ children: t("allEvents")
2720
2751
  }),
2721
- /* @__PURE__ */ jsxs19("div", {
2752
+ /* @__PURE__ */ jsx32("div", {
2722
2753
  className: "text-sm text-muted-foreground",
2723
- children: [
2724
- actionVerb,
2725
- " the entire recurring series"
2726
- ]
2754
+ children: isEdit ? t("changeEntireSeries") : t("deleteEntireSeries")
2727
2755
  })
2728
2756
  ]
2729
2757
  })
@@ -2734,7 +2762,7 @@ function RecurrenceEditDialog({
2734
2762
  children: /* @__PURE__ */ jsx32(Button, {
2735
2763
  variant: "outline",
2736
2764
  onClick: onClose,
2737
- children: "Cancel"
2765
+ children: t("cancel")
2738
2766
  })
2739
2767
  })
2740
2768
  ]
@@ -2801,7 +2829,7 @@ function useRecurringEventActions(onComplete) {
2801
2829
  }
2802
2830
 
2803
2831
  // src/components/event-form/event-form.tsx
2804
- import { jsx as jsx33, jsxs as jsxs20, Fragment as Fragment3 } from "react/jsx-runtime";
2832
+ import { jsx as jsx33, jsxs as jsxs21, Fragment as Fragment3 } from "react/jsx-runtime";
2805
2833
  var colorOptions = [
2806
2834
  { value: "bg-blue-100 text-blue-800", label: "Blue" },
2807
2835
  { value: "bg-green-100 text-green-800", label: "Green" },
@@ -2833,7 +2861,7 @@ var EventForm = ({
2833
2861
  closeDialog,
2834
2862
  handleConfirm
2835
2863
  } = useRecurringEventActions(onClose);
2836
- const { findParentRecurringEvent } = useCalendarContext();
2864
+ const { findParentRecurringEvent, t } = useCalendarContext();
2837
2865
  const start = selectedEvent?.start;
2838
2866
  const end = selectedEvent?.end;
2839
2867
  const parentEvent = selectedEvent ? findParentRecurringEvent(selectedEvent) : null;
@@ -2953,70 +2981,70 @@ var EventForm = ({
2953
2981
  setEndDate(startDate);
2954
2982
  }
2955
2983
  }, [startDate, endDate]);
2956
- return /* @__PURE__ */ jsxs20(Fragment3, {
2984
+ return /* @__PURE__ */ jsxs21(Fragment3, {
2957
2985
  children: [
2958
2986
  /* @__PURE__ */ jsx33(Dialog, {
2959
2987
  open: true,
2960
2988
  onOpenChange: onClose,
2961
2989
  children: /* @__PURE__ */ jsx33(DialogContent, {
2962
2990
  className: "w-[90vw] max-w-[500px] p-4 sm:p-6",
2963
- children: /* @__PURE__ */ jsxs20("form", {
2991
+ children: /* @__PURE__ */ jsxs21("form", {
2964
2992
  onSubmit: handleSubmit,
2965
2993
  children: [
2966
- /* @__PURE__ */ jsxs20(DialogHeader, {
2994
+ /* @__PURE__ */ jsxs21(DialogHeader, {
2967
2995
  className: "mb-2 sm:mb-4",
2968
2996
  children: [
2969
2997
  /* @__PURE__ */ jsx33(DialogTitle, {
2970
2998
  className: "text-base sm:text-lg",
2971
- children: selectedEvent?.id ? "Edit Event" : "Create Event"
2999
+ children: selectedEvent?.id ? t("editEvent") : t("createEvent")
2972
3000
  }),
2973
3001
  /* @__PURE__ */ jsx33(DialogDescription, {
2974
3002
  className: "text-xs sm:text-sm",
2975
- children: selectedEvent?.id ? "Edit your event details" : "Add a new event to your calendar"
3003
+ children: selectedEvent?.id ? t("editEventDetails") : t("addNewEvent")
2976
3004
  })
2977
3005
  ]
2978
3006
  }),
2979
- /* @__PURE__ */ jsxs20("div", {
3007
+ /* @__PURE__ */ jsxs21("div", {
2980
3008
  className: "grid gap-3 py-2 sm:gap-4 sm:py-4",
2981
3009
  children: [
2982
- /* @__PURE__ */ jsxs20("div", {
3010
+ /* @__PURE__ */ jsxs21("div", {
2983
3011
  className: "grid gap-2",
2984
3012
  children: [
2985
3013
  /* @__PURE__ */ jsx33(Label, {
2986
3014
  htmlFor: "title",
2987
3015
  className: "text-xs sm:text-sm",
2988
- children: "Title"
3016
+ children: t("title")
2989
3017
  }),
2990
3018
  /* @__PURE__ */ jsx33(Input, {
2991
3019
  id: "title",
2992
3020
  name: "title",
2993
3021
  value: formValues.title,
2994
3022
  onChange: handleInputChange,
2995
- placeholder: "Event title",
3023
+ placeholder: t("eventTitlePlaceholder"),
2996
3024
  required: true,
2997
3025
  className: "h-8 text-sm sm:h-9"
2998
3026
  })
2999
3027
  ]
3000
3028
  }),
3001
- /* @__PURE__ */ jsxs20("div", {
3029
+ /* @__PURE__ */ jsxs21("div", {
3002
3030
  className: "grid gap-1 sm:gap-2",
3003
3031
  children: [
3004
3032
  /* @__PURE__ */ jsx33(Label, {
3005
3033
  htmlFor: "description",
3006
3034
  className: "text-xs sm:text-sm",
3007
- children: "Description"
3035
+ children: t("description")
3008
3036
  }),
3009
3037
  /* @__PURE__ */ jsx33(Input, {
3010
3038
  id: "description",
3011
3039
  name: "description",
3012
3040
  value: formValues.description,
3013
3041
  onChange: handleInputChange,
3014
- placeholder: "Event description (optional)",
3042
+ placeholder: t("eventDescriptionPlaceholder"),
3015
3043
  className: "h-8 text-sm sm:h-9"
3016
3044
  })
3017
3045
  ]
3018
3046
  }),
3019
- /* @__PURE__ */ jsxs20("div", {
3047
+ /* @__PURE__ */ jsxs21("div", {
3020
3048
  className: "flex items-center space-x-2",
3021
3049
  children: [
3022
3050
  /* @__PURE__ */ jsx33(Checkbox, {
@@ -3027,18 +3055,18 @@ var EventForm = ({
3027
3055
  /* @__PURE__ */ jsx33(Label, {
3028
3056
  htmlFor: "allDay",
3029
3057
  className: "text-xs sm:text-sm",
3030
- children: "All day"
3058
+ children: t("allDay")
3031
3059
  })
3032
3060
  ]
3033
3061
  }),
3034
- /* @__PURE__ */ jsxs20("div", {
3062
+ /* @__PURE__ */ jsxs21("div", {
3035
3063
  className: "grid grid-cols-2 gap-2 sm:gap-4",
3036
3064
  children: [
3037
- /* @__PURE__ */ jsxs20("div", {
3065
+ /* @__PURE__ */ jsxs21("div", {
3038
3066
  children: [
3039
3067
  /* @__PURE__ */ jsx33(Label, {
3040
3068
  className: "text-xs sm:text-sm",
3041
- children: "Start Date"
3069
+ children: t("startDate")
3042
3070
  }),
3043
3071
  /* @__PURE__ */ jsx33(DatePicker, {
3044
3072
  date: startDate,
@@ -3048,11 +3076,11 @@ var EventForm = ({
3048
3076
  })
3049
3077
  ]
3050
3078
  }),
3051
- /* @__PURE__ */ jsxs20("div", {
3079
+ /* @__PURE__ */ jsxs21("div", {
3052
3080
  children: [
3053
3081
  /* @__PURE__ */ jsx33(Label, {
3054
3082
  className: "text-xs sm:text-sm",
3055
- children: "End Date"
3083
+ children: t("endDate")
3056
3084
  }),
3057
3085
  /* @__PURE__ */ jsx33(DatePicker, {
3058
3086
  date: endDate,
@@ -3064,15 +3092,15 @@ var EventForm = ({
3064
3092
  })
3065
3093
  ]
3066
3094
  }),
3067
- !isAllDay && /* @__PURE__ */ jsxs20("div", {
3095
+ !isAllDay && /* @__PURE__ */ jsxs21("div", {
3068
3096
  className: "grid grid-cols-2 gap-2 sm:gap-4",
3069
3097
  children: [
3070
- /* @__PURE__ */ jsxs20("div", {
3098
+ /* @__PURE__ */ jsxs21("div", {
3071
3099
  children: [
3072
3100
  /* @__PURE__ */ jsx33(Label, {
3073
3101
  htmlFor: "start-time",
3074
3102
  className: "text-xs sm:text-sm",
3075
- children: "Start Time"
3103
+ children: t("startTime")
3076
3104
  }),
3077
3105
  /* @__PURE__ */ jsx33(Input, {
3078
3106
  id: "start-time",
@@ -3083,12 +3111,12 @@ var EventForm = ({
3083
3111
  })
3084
3112
  ]
3085
3113
  }),
3086
- /* @__PURE__ */ jsxs20("div", {
3114
+ /* @__PURE__ */ jsxs21("div", {
3087
3115
  children: [
3088
3116
  /* @__PURE__ */ jsx33(Label, {
3089
3117
  htmlFor: "end-time",
3090
3118
  className: "text-xs sm:text-sm",
3091
- children: "End Time"
3119
+ children: t("endTime")
3092
3120
  }),
3093
3121
  /* @__PURE__ */ jsx33(Input, {
3094
3122
  id: "end-time",
@@ -3101,17 +3129,17 @@ var EventForm = ({
3101
3129
  })
3102
3130
  ]
3103
3131
  }),
3104
- /* @__PURE__ */ jsxs20("div", {
3132
+ /* @__PURE__ */ jsxs21("div", {
3105
3133
  className: "grid gap-1 sm:gap-2",
3106
3134
  children: [
3107
3135
  /* @__PURE__ */ jsx33(Label, {
3108
3136
  className: "text-xs sm:text-sm",
3109
- children: "Color"
3137
+ children: t("color")
3110
3138
  }),
3111
3139
  /* @__PURE__ */ jsx33("div", {
3112
3140
  className: "flex flex-wrap gap-2",
3113
3141
  children: /* @__PURE__ */ jsx33(TooltipProvider, {
3114
- children: colorOptions.map((color) => /* @__PURE__ */ jsxs20(Tooltip, {
3142
+ children: colorOptions.map((color) => /* @__PURE__ */ jsxs21(Tooltip, {
3115
3143
  children: [
3116
3144
  /* @__PURE__ */ jsx33(TooltipTrigger, {
3117
3145
  asChild: true,
@@ -3135,20 +3163,20 @@ var EventForm = ({
3135
3163
  })
3136
3164
  ]
3137
3165
  }),
3138
- /* @__PURE__ */ jsxs20("div", {
3166
+ /* @__PURE__ */ jsxs21("div", {
3139
3167
  className: "grid gap-1 sm:gap-2",
3140
3168
  children: [
3141
3169
  /* @__PURE__ */ jsx33(Label, {
3142
3170
  htmlFor: "location",
3143
3171
  className: "text-xs sm:text-sm",
3144
- children: "Location"
3172
+ children: t("location")
3145
3173
  }),
3146
3174
  /* @__PURE__ */ jsx33(Input, {
3147
3175
  id: "location",
3148
3176
  name: "location",
3149
3177
  value: formValues.location,
3150
3178
  onChange: handleInputChange,
3151
- placeholder: "Event location (optional)",
3179
+ placeholder: t("eventLocationPlaceholder"),
3152
3180
  className: "h-8 text-sm sm:h-9"
3153
3181
  })
3154
3182
  ]
@@ -3159,7 +3187,7 @@ var EventForm = ({
3159
3187
  })
3160
3188
  ]
3161
3189
  }),
3162
- /* @__PURE__ */ jsxs20(DialogFooter, {
3190
+ /* @__PURE__ */ jsxs21(DialogFooter, {
3163
3191
  className: "mt-2 flex flex-col-reverse gap-2 sm:mt-4 sm:flex-row sm:gap-0",
3164
3192
  children: [
3165
3193
  selectedEvent?.id && /* @__PURE__ */ jsx33(Button, {
@@ -3168,9 +3196,9 @@ var EventForm = ({
3168
3196
  onClick: handleDelete,
3169
3197
  className: "w-full sm:mr-auto sm:w-auto",
3170
3198
  size: "sm",
3171
- children: "Delete"
3199
+ children: t("delete")
3172
3200
  }),
3173
- /* @__PURE__ */ jsxs20("div", {
3201
+ /* @__PURE__ */ jsxs21("div", {
3174
3202
  className: "flex w-full gap-2 sm:w-auto",
3175
3203
  children: [
3176
3204
  /* @__PURE__ */ jsx33(Button, {
@@ -3179,13 +3207,13 @@ var EventForm = ({
3179
3207
  onClick: onClose,
3180
3208
  className: "flex-1 sm:flex-none",
3181
3209
  size: "sm",
3182
- children: "Cancel"
3210
+ children: t("cancel")
3183
3211
  }),
3184
3212
  /* @__PURE__ */ jsx33(Button, {
3185
3213
  type: "submit",
3186
3214
  className: "flex-1 sm:flex-none",
3187
3215
  size: "sm",
3188
- children: selectedEvent?.id ? "Update" : "Create"
3216
+ children: selectedEvent?.id ? t("update") : t("create")
3189
3217
  })
3190
3218
  ]
3191
3219
  })
@@ -3354,29 +3382,29 @@ import { useCallback as useCallback2, useState as useState6 } from "react";
3354
3382
  // src/components/header/title-content.tsx
3355
3383
  import { AnimatePresence as AnimatePresence6, motion as motion6 } from "motion/react";
3356
3384
  import { ChevronDown } from "lucide-react";
3357
- import { useState as useState5 } from "react";
3358
- import { jsx as jsx34, jsxs as jsxs21, Fragment as Fragment4 } from "react/jsx-runtime";
3359
- var months = [
3360
- "January",
3361
- "February",
3362
- "March",
3363
- "April",
3364
- "May",
3365
- "June",
3366
- "July",
3367
- "August",
3368
- "September",
3369
- "October",
3370
- "November",
3371
- "December"
3372
- ];
3385
+ import { useMemo as useMemo7, useState as useState5 } from "react";
3386
+ import { jsx as jsx34, jsxs as jsxs22, Fragment as Fragment4 } from "react/jsx-runtime";
3373
3387
  var animationVariants = {
3374
3388
  initial: { opacity: 0, y: 10 },
3375
3389
  animate: { opacity: 1, y: 0 },
3376
3390
  exit: { opacity: 0, y: -10 }
3377
3391
  };
3378
3392
  var TitleContent = () => {
3379
- const { currentDate, view, setCurrentDate } = useCalendarContext();
3393
+ const { currentDate, view, setCurrentDate, t } = useCalendarContext();
3394
+ const months = useMemo7(() => [
3395
+ t("january"),
3396
+ t("february"),
3397
+ t("march"),
3398
+ t("april"),
3399
+ t("may"),
3400
+ t("june"),
3401
+ t("july"),
3402
+ t("august"),
3403
+ t("september"),
3404
+ t("october"),
3405
+ t("november"),
3406
+ t("december")
3407
+ ], [t]);
3380
3408
  const [monthPopoverOpen, setMonthPopoverOpen] = useState5(false);
3381
3409
  const [yearPopoverOpen, setYearPopoverOpen] = useState5(false);
3382
3410
  const [weekPopoverOpen, setWeekPopoverOpen] = useState5(false);
@@ -3393,15 +3421,15 @@ var TitleContent = () => {
3393
3421
  setCurrentDate(newDate);
3394
3422
  setYearPopoverOpen(false);
3395
3423
  };
3396
- return /* @__PURE__ */ jsxs21(Fragment4, {
3424
+ return /* @__PURE__ */ jsxs22(Fragment4, {
3397
3425
  children: [
3398
- view !== "year" && /* @__PURE__ */ jsxs21(Popover, {
3426
+ view !== "year" && /* @__PURE__ */ jsxs22(Popover, {
3399
3427
  open: monthPopoverOpen,
3400
3428
  onOpenChange: setMonthPopoverOpen,
3401
3429
  children: [
3402
3430
  /* @__PURE__ */ jsx34(PopoverTrigger, {
3403
3431
  asChild: true,
3404
- children: /* @__PURE__ */ jsxs21(Button, {
3432
+ children: /* @__PURE__ */ jsxs22(Button, {
3405
3433
  variant: "ghost",
3406
3434
  className: "flex items-center gap-1 px-1! font-semibold",
3407
3435
  children: [
@@ -3436,13 +3464,13 @@ var TitleContent = () => {
3436
3464
  })
3437
3465
  ]
3438
3466
  }),
3439
- /* @__PURE__ */ jsxs21(Popover, {
3467
+ /* @__PURE__ */ jsxs22(Popover, {
3440
3468
  open: yearPopoverOpen,
3441
3469
  onOpenChange: setYearPopoverOpen,
3442
3470
  children: [
3443
3471
  /* @__PURE__ */ jsx34(PopoverTrigger, {
3444
3472
  asChild: true,
3445
- children: /* @__PURE__ */ jsxs21(Button, {
3473
+ children: /* @__PURE__ */ jsxs22(Button, {
3446
3474
  variant: "ghost",
3447
3475
  className: "flex items-center gap-1 px-1! font-semibold",
3448
3476
  children: [
@@ -3477,13 +3505,13 @@ var TitleContent = () => {
3477
3505
  })
3478
3506
  ]
3479
3507
  }),
3480
- view === "week" && /* @__PURE__ */ jsxs21(Popover, {
3508
+ view === "week" && /* @__PURE__ */ jsxs22(Popover, {
3481
3509
  open: weekPopoverOpen,
3482
3510
  onOpenChange: setWeekPopoverOpen,
3483
3511
  children: [
3484
3512
  /* @__PURE__ */ jsx34(PopoverTrigger, {
3485
3513
  asChild: true,
3486
- children: /* @__PURE__ */ jsxs21(Button, {
3514
+ children: /* @__PURE__ */ jsxs22(Button, {
3487
3515
  variant: "ghost",
3488
3516
  className: "flex items-center gap-1 px-1! font-semibold",
3489
3517
  children: [
@@ -3520,7 +3548,7 @@ var TitleContent = () => {
3520
3548
  setCurrentDate(startOfWeek);
3521
3549
  setWeekPopoverOpen(false);
3522
3550
  },
3523
- children: /* @__PURE__ */ jsxs21("div", {
3551
+ children: /* @__PURE__ */ jsxs22("div", {
3524
3552
  className: "flex w-full items-center justify-between",
3525
3553
  children: [
3526
3554
  /* @__PURE__ */ jsx34("span", {
@@ -3538,13 +3566,13 @@ var TitleContent = () => {
3538
3566
  })
3539
3567
  ]
3540
3568
  }),
3541
- view === "day" && /* @__PURE__ */ jsxs21(Popover, {
3569
+ view === "day" && /* @__PURE__ */ jsxs22(Popover, {
3542
3570
  open: dayPopoverOpen,
3543
3571
  onOpenChange: setDayPopoverOpen,
3544
3572
  children: [
3545
3573
  /* @__PURE__ */ jsx34(PopoverTrigger, {
3546
3574
  asChild: true,
3547
- children: /* @__PURE__ */ jsxs21(Button, {
3575
+ children: /* @__PURE__ */ jsxs22(Button, {
3548
3576
  variant: "ghost",
3549
3577
  className: "flex items-center gap-1 px-1! font-semibold",
3550
3578
  children: [
@@ -3583,7 +3611,7 @@ var TitleContent = () => {
3583
3611
  setCurrentDate(dayDate);
3584
3612
  setDayPopoverOpen(false);
3585
3613
  },
3586
- children: /* @__PURE__ */ jsxs21("div", {
3614
+ children: /* @__PURE__ */ jsxs22("div", {
3587
3615
  className: "flex w-full items-center justify-between",
3588
3616
  children: [
3589
3617
  /* @__PURE__ */ jsx34("span", {
@@ -3591,7 +3619,7 @@ var TitleContent = () => {
3591
3619
  }),
3592
3620
  isToday && /* @__PURE__ */ jsx34("span", {
3593
3621
  className: "bg-primary text-primary-foreground rounded-sm px-1! text-xs",
3594
- children: "Today"
3622
+ children: t("today")
3595
3623
  })
3596
3624
  ]
3597
3625
  })
@@ -3609,7 +3637,7 @@ var title_content_default = TitleContent;
3609
3637
 
3610
3638
  // src/components/header/view-controls.tsx
3611
3639
  import { ChevronLeft, ChevronRight } from "lucide-react";
3612
- import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
3640
+ import { jsx as jsx35, jsxs as jsxs23 } from "react/jsx-runtime";
3613
3641
  var ViewControls = ({
3614
3642
  currentView,
3615
3643
  onChange,
@@ -3620,14 +3648,15 @@ var ViewControls = ({
3620
3648
  onNext,
3621
3649
  onPrevious
3622
3650
  }) => {
3651
+ const { t } = useCalendarContext();
3623
3652
  const isGrid = variant === "grid";
3624
3653
  const getButtonClassName = (viewType) => {
3625
- return cn(isGrid ? "w-full" : "", viewType === "year" ? isGrid ? "w-full" : "hidden md:inline-flex" : "", currentView === viewType && "bg-primary/80");
3654
+ return cn(isGrid ? "w-full" : "", currentView === viewType && "bg-primary/80");
3626
3655
  };
3627
3656
  const getBtnVariant = (viewType) => {
3628
3657
  return currentView === viewType ? "default" : "outline";
3629
3658
  };
3630
- return /* @__PURE__ */ jsxs22("div", {
3659
+ return /* @__PURE__ */ jsxs23("div", {
3631
3660
  className: cn(isGrid ? "grid grid-cols-2 gap-2" : "flex gap-1", className),
3632
3661
  children: [
3633
3662
  /* @__PURE__ */ jsx35(Button, {
@@ -3651,41 +3680,41 @@ var ViewControls = ({
3651
3680
  variant: getBtnVariant("day"),
3652
3681
  size,
3653
3682
  className: getButtonClassName("day"),
3654
- children: "Day"
3683
+ children: t("day")
3655
3684
  }),
3656
3685
  /* @__PURE__ */ jsx35(Button, {
3657
3686
  onClick: () => onChange("week"),
3658
3687
  variant: getBtnVariant("week"),
3659
3688
  size,
3660
3689
  className: getButtonClassName("week"),
3661
- children: "Week"
3690
+ children: t("week")
3662
3691
  }),
3663
3692
  /* @__PURE__ */ jsx35(Button, {
3664
3693
  onClick: () => onChange("month"),
3665
3694
  variant: getBtnVariant("month"),
3666
3695
  size,
3667
3696
  className: getButtonClassName("month"),
3668
- children: "Month"
3697
+ children: t("month")
3669
3698
  }),
3670
3699
  /* @__PURE__ */ jsx35(Button, {
3671
3700
  onClick: () => onChange("year"),
3672
3701
  variant: getBtnVariant("year"),
3673
3702
  size,
3674
3703
  className: getButtonClassName("year"),
3675
- children: "Year"
3704
+ children: t("year")
3676
3705
  }),
3677
3706
  /* @__PURE__ */ jsx35(Button, {
3678
3707
  onClick: onToday,
3679
3708
  variant: "outline",
3680
3709
  size,
3681
- children: "Today"
3710
+ children: t("today")
3682
3711
  })
3683
3712
  ]
3684
3713
  });
3685
3714
  };
3686
3715
  var view_controls_default = ViewControls;
3687
3716
  // src/components/header/base-header.tsx
3688
- import { jsx as jsx36, jsxs as jsxs23, Fragment as Fragment5 } from "react/jsx-runtime";
3717
+ import { jsx as jsx36, jsxs as jsxs24, Fragment as Fragment5 } from "react/jsx-runtime";
3689
3718
  var Header = ({ className = "" }) => {
3690
3719
  const {
3691
3720
  view,
@@ -3695,7 +3724,9 @@ var Header = ({ className = "" }) => {
3695
3724
  today,
3696
3725
  openEventForm,
3697
3726
  headerComponent,
3698
- rawEvents
3727
+ headerClassName,
3728
+ rawEvents,
3729
+ t
3699
3730
  } = useCalendarContext();
3700
3731
  const [mobilePopoverOpen, setMobilePopoverOpen] = useState6(false);
3701
3732
  const handleViewChange = (newView, closePopover = false) => {
@@ -3725,7 +3756,7 @@ var Header = ({ className = "" }) => {
3725
3756
  };
3726
3757
  const NewEventButton = useCallback2(() => /* @__PURE__ */ jsx36("div", {
3727
3758
  className: "flex items-center gap-2",
3728
- children: /* @__PURE__ */ jsxs23(Button, {
3759
+ children: /* @__PURE__ */ jsxs24(Button, {
3729
3760
  onClick: () => openEventForm(),
3730
3761
  variant: "default",
3731
3762
  size: "sm",
@@ -3735,134 +3766,138 @@ var Header = ({ className = "" }) => {
3735
3766
  className: "h-4 w-4"
3736
3767
  }),
3737
3768
  /* @__PURE__ */ jsx36("span", {
3738
- className: "hidden lg:inline",
3739
- children: "New"
3769
+ className: "hidden @4xl:inline",
3770
+ children: t("new")
3740
3771
  })
3741
3772
  ]
3742
3773
  })
3743
- }), [openEventForm]);
3774
+ }), [openEventForm, t]);
3744
3775
  if (headerComponent) {
3745
3776
  return headerComponent;
3746
3777
  }
3747
3778
  return /* @__PURE__ */ jsx36(Fragment5, {
3748
- children: /* @__PURE__ */ jsxs23("div", {
3749
- className: cn("@container flex justify-center lg:justify-between flex-wrap items-center gap-2 border-b", className),
3779
+ children: /* @__PURE__ */ jsx36("div", {
3780
+ className: "@container/base-header w-full",
3750
3781
  "data-testid": "calendar-header",
3751
- children: [
3752
- /* @__PURE__ */ jsxs23("div", {
3753
- className: "flex flex-wrap items-center justify-center gap-1 2xl:col-span-5 2xl:justify-start",
3754
- children: [
3755
- /* @__PURE__ */ jsx36(CalendarIcon2, {
3756
- className: "h-5 w-5"
3757
- }),
3758
- /* @__PURE__ */ jsx36(title_content_default, {})
3759
- ]
3760
- }),
3761
- /* @__PURE__ */ jsxs23("div", {
3762
- className: "flex flex-wrap justify-center gap-1 2xl:col-span-7 2xl:justify-end",
3763
- children: [
3764
- /* @__PURE__ */ jsxs23("div", {
3765
- className: "hidden items-center justify-start lg:justify-center 2xl:justify-end gap-1 sm:flex w-full overflow-x-auto",
3766
- children: [
3767
- /* @__PURE__ */ jsx36(view_controls_default, {
3768
- currentView: view,
3769
- onChange: setView,
3770
- onToday: today,
3771
- onNext: nextPeriod,
3772
- onPrevious: prevPeriod,
3773
- variant: "default",
3774
- className: "justify-end"
3775
- }),
3776
- /* @__PURE__ */ jsx36(NewEventButton, {}),
3777
- /* @__PURE__ */ jsxs23(Button, {
3778
- onClick: handleExport,
3779
- variant: "outline",
3780
- size: "sm",
3781
- className: "flex items-center gap-1",
3782
- children: [
3783
- /* @__PURE__ */ jsx36(Download, {
3784
- className: "h-4 w-4"
3785
- }),
3786
- /* @__PURE__ */ jsx36("span", {
3787
- className: "hidden lg:inline",
3788
- children: "Export"
3789
- })
3790
- ]
3791
- })
3792
- ]
3793
- }),
3794
- /* @__PURE__ */ jsxs23("div", {
3795
- className: "flex items-center justify-end gap-1 sm:hidden",
3796
- children: [
3797
- /* @__PURE__ */ jsx36(NewEventButton, {}),
3798
- /* @__PURE__ */ jsxs23(Popover, {
3799
- open: mobilePopoverOpen,
3800
- onOpenChange: setMobilePopoverOpen,
3801
- children: [
3802
- /* @__PURE__ */ jsx36(PopoverTrigger, {
3803
- asChild: true,
3804
- children: /* @__PURE__ */ jsx36(Button, {
3805
- variant: "outline",
3806
- size: "sm",
3807
- children: /* @__PURE__ */ jsx36(Menu, {
3808
- className: "h-4 w-4"
3809
- })
3782
+ children: /* @__PURE__ */ jsxs24("div", {
3783
+ className: cn("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2 border-b", className, headerClassName),
3784
+ children: [
3785
+ /* @__PURE__ */ jsxs24("div", {
3786
+ className: "flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",
3787
+ children: [
3788
+ /* @__PURE__ */ jsx36(CalendarIcon2, {
3789
+ className: "h-5 w-5"
3790
+ }),
3791
+ /* @__PURE__ */ jsx36(title_content_default, {})
3792
+ ]
3793
+ }),
3794
+ /* @__PURE__ */ jsxs24("div", {
3795
+ className: "flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",
3796
+ children: [
3797
+ /* @__PURE__ */ jsxs24("div", {
3798
+ className: "hidden @md/base-header:flex items-center justify-start gap-1",
3799
+ children: [
3800
+ /* @__PURE__ */ jsx36(view_controls_default, {
3801
+ currentView: view,
3802
+ onChange: setView,
3803
+ onToday: today,
3804
+ onNext: nextPeriod,
3805
+ onPrevious: prevPeriod,
3806
+ variant: "default",
3807
+ className: "justify-end"
3808
+ }),
3809
+ /* @__PURE__ */ jsx36(NewEventButton, {}),
3810
+ /* @__PURE__ */ jsxs24(Button, {
3811
+ onClick: handleExport,
3812
+ variant: "outline",
3813
+ size: "sm",
3814
+ className: "flex items-center gap-1",
3815
+ children: [
3816
+ /* @__PURE__ */ jsx36(Download, {
3817
+ className: "h-4 w-4"
3818
+ }),
3819
+ /* @__PURE__ */ jsx36("span", {
3820
+ className: "hidden @4xl/base-header:inline",
3821
+ children: t("export")
3810
3822
  })
3811
- }),
3812
- /* @__PURE__ */ jsx36(PopoverContent, {
3813
- align: "end",
3814
- className: "w-[240px] p-2",
3815
- children: /* @__PURE__ */ jsxs23("div", {
3816
- className: "space-y-2",
3817
- children: [
3818
- /* @__PURE__ */ jsx36("h3", {
3819
- className: "mb-1 text-sm font-medium",
3820
- children: "View & Navigation"
3821
- }),
3822
- /* @__PURE__ */ jsx36(view_controls_default, {
3823
- currentView: view,
3824
- onChange: (newView) => handleViewChange(newView, true),
3825
- onToday: handleNavigation.today,
3826
- onNext: handleNavigation.next,
3827
- onPrevious: handleNavigation.previous,
3828
- variant: "grid"
3829
- }),
3830
- /* @__PURE__ */ jsx36("div", {
3831
- className: "pt-2 border-t",
3832
- children: /* @__PURE__ */ jsxs23(Button, {
3833
- onClick: handleExport,
3834
- variant: "outline",
3835
- size: "sm",
3836
- className: "w-full flex items-center gap-2",
3837
- children: [
3838
- /* @__PURE__ */ jsx36(Download, {
3839
- className: "h-4 w-4"
3840
- }),
3841
- "Export Calendar (.ics)"
3842
- ]
3843
- })
3823
+ ]
3824
+ })
3825
+ ]
3826
+ }),
3827
+ /* @__PURE__ */ jsxs24("div", {
3828
+ className: "flex items-center justify-end gap-1 @md/base-header:hidden",
3829
+ children: [
3830
+ /* @__PURE__ */ jsx36(NewEventButton, {}),
3831
+ /* @__PURE__ */ jsxs24(Popover, {
3832
+ open: mobilePopoverOpen,
3833
+ onOpenChange: setMobilePopoverOpen,
3834
+ children: [
3835
+ /* @__PURE__ */ jsx36(PopoverTrigger, {
3836
+ asChild: true,
3837
+ children: /* @__PURE__ */ jsx36(Button, {
3838
+ variant: "outline",
3839
+ size: "sm",
3840
+ children: /* @__PURE__ */ jsx36(Menu, {
3841
+ className: "h-4 w-4"
3844
3842
  })
3845
- ]
3843
+ })
3844
+ }),
3845
+ /* @__PURE__ */ jsx36(PopoverContent, {
3846
+ align: "end",
3847
+ className: "w-[240px] p-2",
3848
+ children: /* @__PURE__ */ jsxs24("div", {
3849
+ className: "space-y-2",
3850
+ children: [
3851
+ /* @__PURE__ */ jsx36("h3", {
3852
+ className: "mb-1 text-sm font-medium",
3853
+ children: "View & Navigation"
3854
+ }),
3855
+ /* @__PURE__ */ jsx36(view_controls_default, {
3856
+ currentView: view,
3857
+ onChange: (newView) => handleViewChange(newView, true),
3858
+ onToday: handleNavigation.today,
3859
+ onNext: handleNavigation.next,
3860
+ onPrevious: handleNavigation.previous,
3861
+ variant: "grid"
3862
+ }),
3863
+ /* @__PURE__ */ jsx36("div", {
3864
+ className: "pt-2 border-t",
3865
+ children: /* @__PURE__ */ jsxs24(Button, {
3866
+ onClick: handleExport,
3867
+ variant: "outline",
3868
+ size: "sm",
3869
+ className: "w-full flex items-center gap-2",
3870
+ children: [
3871
+ /* @__PURE__ */ jsx36(Download, {
3872
+ className: "h-4 w-4"
3873
+ }),
3874
+ t("export"),
3875
+ " Calendar (.ics)"
3876
+ ]
3877
+ })
3878
+ })
3879
+ ]
3880
+ })
3846
3881
  })
3847
- })
3848
- ]
3849
- })
3850
- ]
3851
- })
3852
- ]
3853
- })
3854
- ]
3882
+ ]
3883
+ })
3884
+ ]
3885
+ })
3886
+ ]
3887
+ })
3888
+ ]
3889
+ })
3855
3890
  })
3856
3891
  });
3857
3892
  };
3858
3893
  var base_header_default = Header;
3859
3894
  // src/features/year-view/view/year-view.tsx
3860
3895
  import { AnimatePresence as AnimatePresence7, motion as motion7 } from "motion/react";
3861
- import { jsx as jsx37, jsxs as jsxs24 } from "react/jsx-runtime";
3896
+ import { jsx as jsx37, jsxs as jsxs25 } from "react/jsx-runtime";
3862
3897
  var YearView = () => {
3863
- const { currentDate, selectDate, events, setView, getEventsForDateRange } = useCalendarContext();
3898
+ const { currentDate, selectDate, events, setView, getEventsForDateRange, t } = useCalendarContext();
3864
3899
  const year = currentDate.year();
3865
- const months2 = Array.from({ length: 12 }, (_, i) => {
3900
+ const months = Array.from({ length: 12 }, (_, i) => {
3866
3901
  const monthDate = dayjs_config_default().year(year).month(i).startOf("month");
3867
3902
  return {
3868
3903
  date: monthDate,
@@ -3871,7 +3906,7 @@ var YearView = () => {
3871
3906
  firstDayOfMonth: monthDate.startOf("month").day()
3872
3907
  };
3873
3908
  });
3874
- const monthsWithEventCount = months2.map((month) => {
3909
+ const monthsWithEventCount = months.map((month) => {
3875
3910
  const eventsInMonth = events.filter((event) => event.start.year() === year && event.start.month() === month.date.month());
3876
3911
  return {
3877
3912
  ...month,
@@ -3906,7 +3941,7 @@ var YearView = () => {
3906
3941
  events: dayEvents
3907
3942
  };
3908
3943
  });
3909
- return /* @__PURE__ */ jsxs24("div", {
3944
+ return /* @__PURE__ */ jsxs25("div", {
3910
3945
  "data-testid": `year-mini-calendar-${month.date.format("MM")}`,
3911
3946
  className: "grid grid-cols-7 gap-[1px] text-[0.6rem]",
3912
3947
  children: [
@@ -3914,7 +3949,7 @@ var YearView = () => {
3914
3949
  className: "text-muted-foreground h-3 text-center",
3915
3950
  children: dayName
3916
3951
  }, `header-${i}`)),
3917
- daysArray.map((dayInfo, i) => /* @__PURE__ */ jsxs24("div", {
3952
+ daysArray.map((dayInfo, i) => /* @__PURE__ */ jsxs25("div", {
3918
3953
  "data-testid": `year-day-${month.date.format("YYYY-MM")}-${dayInfo.day.format("YYYY-MM-DD")}`,
3919
3954
  onClick: (e) => handleDayClick(dayInfo.day, e),
3920
3955
  className: cn("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center", "hover:bg-accent rounded-sm transition-colors duration-200", !dayInfo.isCurrentMonth && "text-muted-foreground opacity-50", dayInfo.isToday && "bg-primary text-primary-foreground rounded-full", dayInfo.isCurrentDate && !dayInfo.isToday && "bg-muted rounded-full font-bold", dayInfo.hasEvents && !dayInfo.isToday && !dayInfo.isCurrentDate && "font-medium"),
@@ -3924,7 +3959,7 @@ var YearView = () => {
3924
3959
  className: "text-center leading-none",
3925
3960
  children: dayInfo.day.date()
3926
3961
  }),
3927
- dayInfo.hasEvents && /* @__PURE__ */ jsxs24("div", {
3962
+ dayInfo.hasEvents && /* @__PURE__ */ jsxs25("div", {
3928
3963
  className: cn("absolute bottom-0 flex w-full justify-center space-x-[1px]", dayInfo.isToday ? "bottom-[1px]" : ""),
3929
3964
  children: [
3930
3965
  dayInfo.eventCount > 0 && /* @__PURE__ */ jsx37("span", {
@@ -3949,14 +3984,14 @@ var YearView = () => {
3949
3984
  children: /* @__PURE__ */ jsx37("div", {
3950
3985
  "data-testid": "year-grid",
3951
3986
  className: "grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3",
3952
- children: monthsWithEventCount.map((month, index) => /* @__PURE__ */ jsxs24("div", {
3987
+ children: monthsWithEventCount.map((month, index) => /* @__PURE__ */ jsxs25("div", {
3953
3988
  "data-testid": `year-month-${month.date.format("MM")}`,
3954
3989
  onClick: () => handleMonthClick(month.date),
3955
3990
  className: "hover:border-primary flex cursor-pointer flex-col rounded-lg border p-3 transition-all duration-200 hover:scale-[1.01] hover:shadow-md",
3956
3991
  children: [
3957
3992
  /* @__PURE__ */ jsx37(AnimatePresence7, {
3958
3993
  mode: "wait",
3959
- children: /* @__PURE__ */ jsxs24(motion7.div, {
3994
+ children: /* @__PURE__ */ jsxs25(motion7.div, {
3960
3995
  initial: { opacity: 0, y: -10 },
3961
3996
  animate: { opacity: 1, y: 0 },
3962
3997
  exit: { opacity: 0, y: -10 },
@@ -3972,13 +4007,13 @@ var YearView = () => {
3972
4007
  className: "text-lg font-medium",
3973
4008
  children: month.name
3974
4009
  }),
3975
- month.eventCount > 0 && /* @__PURE__ */ jsxs24("span", {
4010
+ month.eventCount > 0 && /* @__PURE__ */ jsxs25("span", {
3976
4011
  "data-testid": `year-month-event-count-${month.date.format("MM")}`,
3977
4012
  className: "bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs",
3978
4013
  children: [
3979
4014
  month.eventCount,
3980
4015
  " ",
3981
- month.eventCount === 1 ? "event" : "events"
4016
+ month.eventCount === 1 ? t("event") : t("events")
3982
4017
  ]
3983
4018
  })
3984
4019
  ]
@@ -4007,7 +4042,7 @@ import {
4007
4042
  } from "@dnd-kit/core";
4008
4043
  import React9, { useState as useState7 } from "react";
4009
4044
  import { snapCenterToCursor } from "@dnd-kit/modifiers";
4010
- import { jsx as jsx38, jsxs as jsxs25, Fragment as Fragment6 } from "react/jsx-runtime";
4045
+ import { jsx as jsx38, jsxs as jsxs26, Fragment as Fragment6 } from "react/jsx-runtime";
4011
4046
  function CalendarDndContext({ children }) {
4012
4047
  const { updateEvent, updateRecurringEvent: updateRecurringEvent2, view, disableDragAndDrop } = useCalendarContext();
4013
4048
  const [activeEvent, setActiveEvent] = React9.useState(null);
@@ -4134,9 +4169,9 @@ function CalendarDndContext({ children }) {
4134
4169
  if (disableDragAndDrop) {
4135
4170
  return children;
4136
4171
  }
4137
- return /* @__PURE__ */ jsxs25(Fragment6, {
4172
+ return /* @__PURE__ */ jsxs26(Fragment6, {
4138
4173
  children: [
4139
- /* @__PURE__ */ jsxs25(DndContext, {
4174
+ /* @__PURE__ */ jsxs26(DndContext, {
4140
4175
  sensors,
4141
4176
  onDragStart: handleDragStart,
4142
4177
  onDragEnd: handleDragEnd,
@@ -4165,16 +4200,116 @@ function CalendarDndContext({ children }) {
4165
4200
  }
4166
4201
 
4167
4202
  // src/contexts/calendar-context/provider.tsx
4168
- import { useCallback as useCallback3, useEffect as useEffect4, useMemo as useMemo6, useState as useState8 } from "react";
4203
+ import { useCallback as useCallback3, useEffect as useEffect4, useMemo as useMemo8, useState as useState8 } from "react";
4204
+
4205
+ // src/lib/translations/default.ts
4206
+ var defaultTranslations = {
4207
+ today: "Today",
4208
+ create: "Create",
4209
+ new: "New",
4210
+ update: "Update",
4211
+ delete: "Delete",
4212
+ cancel: "Cancel",
4213
+ export: "Export",
4214
+ event: "Event",
4215
+ events: "Events",
4216
+ newEvent: "New Event",
4217
+ title: "Title",
4218
+ description: "Description",
4219
+ location: "Location",
4220
+ allDay: "All day",
4221
+ startDate: "Start Date",
4222
+ endDate: "End Date",
4223
+ startTime: "Start Time",
4224
+ endTime: "End Time",
4225
+ color: "Color",
4226
+ createEvent: "Create Event",
4227
+ editEvent: "Edit Event",
4228
+ addNewEvent: "Add a new event to your calendar",
4229
+ editEventDetails: "Edit your event details",
4230
+ eventTitlePlaceholder: "Event title",
4231
+ eventDescriptionPlaceholder: "Event description (optional)",
4232
+ eventLocationPlaceholder: "Event location (optional)",
4233
+ repeat: "Repeat",
4234
+ repeats: "Repeats",
4235
+ customRecurrence: "Custom recurrence",
4236
+ daily: "Daily",
4237
+ weekly: "Weekly",
4238
+ monthly: "Monthly",
4239
+ yearly: "Yearly",
4240
+ interval: "Interval",
4241
+ repeatOn: "Repeat on",
4242
+ never: "Never",
4243
+ count: "Count",
4244
+ every: "Every",
4245
+ ends: "Ends",
4246
+ after: "After",
4247
+ occurrences: "occurrences",
4248
+ on: "On",
4249
+ editRecurringEvent: "Edit recurring event",
4250
+ deleteRecurringEvent: "Delete recurring event",
4251
+ editRecurringEventQuestion: "is a recurring event. How would you like to edit it?",
4252
+ deleteRecurringEventQuestion: "is a recurring event. How would you like to delete it?",
4253
+ thisEvent: "This event",
4254
+ thisEventDescription: "Only change this specific occurrence",
4255
+ thisAndFollowingEvents: "This and following events",
4256
+ thisAndFollowingEventsDescription: "Edit this and all future occurrences",
4257
+ allEvents: "All events",
4258
+ allEventsDescription: "Edit the entire recurring series",
4259
+ onlyChangeThis: "Only change this specific occurrence",
4260
+ changeThisAndFuture: "Change this and all future occurrences",
4261
+ changeEntireSeries: "Change the entire recurring series",
4262
+ onlyDeleteThis: "Only delete this specific occurrence",
4263
+ deleteThisAndFuture: "Delete this and all future occurrences",
4264
+ deleteEntireSeries: "Delete the entire recurring series",
4265
+ month: "Month",
4266
+ week: "Week",
4267
+ day: "Day",
4268
+ year: "Year",
4269
+ more: "more",
4270
+ sunday: "Sunday",
4271
+ monday: "Monday",
4272
+ tuesday: "Tuesday",
4273
+ wednesday: "Wednesday",
4274
+ thursday: "Thursday",
4275
+ friday: "Friday",
4276
+ saturday: "Saturday",
4277
+ sun: "Sun",
4278
+ mon: "Mon",
4279
+ tue: "Tue",
4280
+ wed: "Wed",
4281
+ thu: "Thu",
4282
+ fri: "Fri",
4283
+ sat: "Sat",
4284
+ january: "January",
4285
+ february: "February",
4286
+ march: "March",
4287
+ april: "April",
4288
+ may: "May",
4289
+ june: "June",
4290
+ july: "July",
4291
+ august: "August",
4292
+ september: "September",
4293
+ october: "October",
4294
+ november: "November",
4295
+ december: "December"
4296
+ };
4297
+
4298
+ // src/contexts/calendar-context/provider.tsx
4169
4299
  import { jsx as jsx39 } from "react/jsx-runtime";
4170
4300
  var CalendarProvider = ({
4171
4301
  children,
4172
4302
  events = [],
4173
4303
  firstDayOfWeek = 0,
4304
+ initialView = "month",
4174
4305
  renderEvent,
4175
4306
  onEventClick,
4176
4307
  onCellClick,
4177
4308
  onViewChange,
4309
+ onEventAdd,
4310
+ onEventUpdate,
4311
+ onEventDelete,
4312
+ onDateChange,
4178
4313
  locale,
4179
4314
  timezone: timezone2,
4180
4315
  disableCellClick,
@@ -4183,16 +4318,28 @@ var CalendarProvider = ({
4183
4318
  dayMaxEvents,
4184
4319
  stickyViewHeader = true,
4185
4320
  viewHeaderClassName = "",
4186
- headerComponent
4321
+ headerComponent,
4322
+ headerClassName,
4323
+ translations,
4324
+ translator
4187
4325
  }) => {
4188
4326
  const [currentDate, setCurrentDate] = useState8(dayjs_config_default());
4189
- const [view, setView] = useState8("month");
4327
+ const [view, setView] = useState8(initialView);
4190
4328
  const [currentEvents, setCurrentEvents] = useState8(events);
4191
4329
  const [isEventFormOpen, setIsEventFormOpen] = useState8(false);
4192
4330
  const [selectedEvent, setSelectedEvent] = useState8(null);
4193
4331
  const [selectedDate, setSelectedDate] = useState8(null);
4194
4332
  const [currentLocale, setCurrentLocale] = useState8(locale || "en");
4195
4333
  const [currentTimezone, setCurrentTimezone] = useState8(timezone2 || "");
4334
+ const t = useMemo8(() => {
4335
+ if (translator) {
4336
+ return translator;
4337
+ }
4338
+ if (translations) {
4339
+ return (key) => translations[key] || key;
4340
+ }
4341
+ return (key) => defaultTranslations[key] || key;
4342
+ }, [translations, translator]);
4196
4343
  const getEventsForDateRange = useCallback3((startDate, endDate) => {
4197
4344
  const allEvents = [];
4198
4345
  for (const event of currentEvents) {
@@ -4244,7 +4391,7 @@ var CalendarProvider = ({
4244
4391
  };
4245
4392
  }
4246
4393
  }, [currentDate, view, firstDayOfWeek]);
4247
- const processedEvents = useMemo6(() => {
4394
+ const processedEvents = useMemo8(() => {
4248
4395
  const { start, end } = getCurrentViewRange();
4249
4396
  return getEventsForDateRange(start, end);
4250
4397
  }, [getEventsForDateRange, getCurrentViewRange]);
@@ -4267,49 +4414,97 @@ var CalendarProvider = ({
4267
4414
  }, [timezone2]);
4268
4415
  const selectDate = useCallback3((date) => {
4269
4416
  setCurrentDate(date);
4270
- }, []);
4417
+ onDateChange?.(date);
4418
+ }, [onDateChange]);
4271
4419
  const nextPeriod = useCallback3(() => {
4272
4420
  switch (view) {
4273
4421
  case "month":
4274
- setCurrentDate((currentDate2) => currentDate2.add(1, "month"));
4422
+ setCurrentDate((currentDate2) => {
4423
+ const newDate = currentDate2.add(1, "month");
4424
+ onDateChange?.(newDate);
4425
+ return newDate;
4426
+ });
4275
4427
  break;
4276
4428
  case "week":
4277
- setCurrentDate((currentDate2) => currentDate2.add(1, "week"));
4429
+ setCurrentDate((currentDate2) => {
4430
+ const newDate = currentDate2.add(1, "week");
4431
+ onDateChange?.(newDate);
4432
+ return newDate;
4433
+ });
4278
4434
  break;
4279
4435
  case "day":
4280
- setCurrentDate((currentDate2) => currentDate2.add(1, "day"));
4436
+ setCurrentDate((currentDate2) => {
4437
+ const newDate = currentDate2.add(1, "day");
4438
+ onDateChange?.(newDate);
4439
+ return newDate;
4440
+ });
4281
4441
  break;
4282
4442
  case "year":
4283
- setCurrentDate((currentDate2) => currentDate2.add(1, "year"));
4443
+ setCurrentDate((currentDate2) => {
4444
+ const newDate = currentDate2.add(1, "year");
4445
+ onDateChange?.(newDate);
4446
+ return newDate;
4447
+ });
4284
4448
  break;
4285
4449
  }
4286
- }, [view]);
4450
+ }, [view, onDateChange]);
4287
4451
  const prevPeriod = useCallback3(() => {
4288
4452
  switch (view) {
4289
4453
  case "month":
4290
- setCurrentDate((currentDate2) => currentDate2.subtract(1, "month"));
4454
+ setCurrentDate((currentDate2) => {
4455
+ const newDate = currentDate2.subtract(1, "month");
4456
+ onDateChange?.(newDate);
4457
+ return newDate;
4458
+ });
4291
4459
  break;
4292
4460
  case "week":
4293
- setCurrentDate((currentDate2) => currentDate2.subtract(1, "week"));
4461
+ setCurrentDate((currentDate2) => {
4462
+ const newDate = currentDate2.subtract(1, "week");
4463
+ onDateChange?.(newDate);
4464
+ return newDate;
4465
+ });
4294
4466
  break;
4295
4467
  case "day":
4296
- setCurrentDate((currentDate2) => currentDate2.subtract(1, "day"));
4468
+ setCurrentDate((currentDate2) => {
4469
+ const newDate = currentDate2.subtract(1, "day");
4470
+ onDateChange?.(newDate);
4471
+ return newDate;
4472
+ });
4297
4473
  break;
4298
4474
  case "year":
4299
- setCurrentDate((currentDate2) => currentDate2.subtract(1, "year"));
4475
+ setCurrentDate((currentDate2) => {
4476
+ const newDate = currentDate2.subtract(1, "year");
4477
+ onDateChange?.(newDate);
4478
+ return newDate;
4479
+ });
4300
4480
  break;
4301
4481
  }
4302
- }, [view]);
4482
+ }, [view, onDateChange]);
4303
4483
  const today = useCallback3(() => {
4304
- setCurrentDate(dayjs_config_default());
4305
- }, []);
4484
+ const newDate = dayjs_config_default();
4485
+ setCurrentDate(newDate);
4486
+ onDateChange?.(newDate);
4487
+ }, [onDateChange]);
4306
4488
  const addEvent = useCallback3((event) => {
4307
4489
  setCurrentEvents((prevEvents) => [...prevEvents, event]);
4308
- }, []);
4490
+ onEventAdd?.(event);
4491
+ }, [onEventAdd]);
4309
4492
  const updateEvent = useCallback3((eventId, updatedEvent) => {
4310
- setCurrentEvents((prevEvents) => prevEvents.map((event) => event.id === eventId ? { ...event, ...updatedEvent } : event));
4311
- }, []);
4493
+ setCurrentEvents((prevEvents) => {
4494
+ const updated = prevEvents.map((event) => {
4495
+ if (event.id === eventId) {
4496
+ const newEvent = { ...event, ...updatedEvent };
4497
+ onEventUpdate?.(newEvent);
4498
+ return newEvent;
4499
+ }
4500
+ return event;
4501
+ });
4502
+ return updated;
4503
+ });
4504
+ }, [onEventUpdate]);
4312
4505
  const updateRecurringEvent2 = useCallback3((event, updates, options) => {
4506
+ const updatedEvent = { ...event, ...updates };
4507
+ onEventUpdate?.(updatedEvent);
4313
4508
  const updatedEvents = updateRecurringEvent({
4314
4509
  targetEvent: event,
4315
4510
  updates,
@@ -4317,18 +4512,25 @@ var CalendarProvider = ({
4317
4512
  scope: options.scope
4318
4513
  });
4319
4514
  setCurrentEvents(updatedEvents);
4320
- }, [currentEvents]);
4515
+ }, [currentEvents, onEventUpdate]);
4321
4516
  const deleteRecurringEvent2 = useCallback3((event, options) => {
4517
+ onEventDelete?.(event);
4322
4518
  const updatedEvents = deleteRecurringEvent({
4323
4519
  targetEvent: event,
4324
4520
  currentEvents,
4325
4521
  scope: options.scope
4326
4522
  });
4327
4523
  setCurrentEvents(updatedEvents);
4328
- }, [currentEvents]);
4524
+ }, [currentEvents, onEventDelete]);
4329
4525
  const deleteEvent = useCallback3((eventId) => {
4330
- setCurrentEvents((prevEvents) => prevEvents.filter((event) => event.id !== eventId));
4331
- }, []);
4526
+ setCurrentEvents((prevEvents) => {
4527
+ const eventToDelete = prevEvents.find((event) => event.id === eventId);
4528
+ if (eventToDelete) {
4529
+ onEventDelete?.(eventToDelete);
4530
+ }
4531
+ return prevEvents.filter((event) => event.id !== eventId);
4532
+ });
4533
+ }, [onEventDelete]);
4332
4534
  const editEvent = useCallback3((event) => {
4333
4535
  setSelectedEvent(event);
4334
4536
  setIsEventFormOpen(true);
@@ -4361,7 +4563,7 @@ var CalendarProvider = ({
4361
4563
  } else {
4362
4564
  setSelectedDate(startDate);
4363
4565
  setSelectedEvent({
4364
- title: `New Event`,
4566
+ title: t("newEvent"),
4365
4567
  start: startDate,
4366
4568
  end: endDate,
4367
4569
  description: "",
@@ -4369,20 +4571,20 @@ var CalendarProvider = ({
4369
4571
  });
4370
4572
  setIsEventFormOpen(true);
4371
4573
  }
4372
- }, [onCellClick, disableCellClick]);
4574
+ }, [onCellClick, disableCellClick, t]);
4373
4575
  const handleOpenEventForm = useCallback3((date) => {
4374
4576
  if (date) {
4375
4577
  setSelectedDate(date);
4376
4578
  }
4377
4579
  setSelectedEvent({
4378
- title: `New Event`,
4580
+ title: t("newEvent"),
4379
4581
  start: date ?? currentDate,
4380
4582
  end: date ?? currentDate.add(1, "hour"),
4381
4583
  description: "",
4382
4584
  allDay: false
4383
4585
  });
4384
4586
  setIsEventFormOpen(true);
4385
- }, [currentDate]);
4587
+ }, [currentDate, t]);
4386
4588
  const findParentRecurringEvent = useCallback3((event) => {
4387
4589
  const targetUID = event.uid;
4388
4590
  const parentEvent = currentEvents.find((e) => {
@@ -4391,7 +4593,7 @@ var CalendarProvider = ({
4391
4593
  });
4392
4594
  return parentEvent || null;
4393
4595
  }, [currentEvents]);
4394
- const contextValue = useMemo6(() => ({
4596
+ const contextValue = useMemo8(() => ({
4395
4597
  currentDate,
4396
4598
  view,
4397
4599
  events: processedEvents,
@@ -4427,7 +4629,9 @@ var CalendarProvider = ({
4427
4629
  dayMaxEvents,
4428
4630
  stickyViewHeader,
4429
4631
  viewHeaderClassName,
4430
- headerComponent
4632
+ headerComponent,
4633
+ headerClassName,
4634
+ t
4431
4635
  }), [
4432
4636
  currentDate,
4433
4637
  view,
@@ -4463,7 +4667,9 @@ var CalendarProvider = ({
4463
4667
  dayMaxEvents,
4464
4668
  stickyViewHeader,
4465
4669
  viewHeaderClassName,
4466
- headerComponent
4670
+ headerComponent,
4671
+ headerClassName,
4672
+ t
4467
4673
  ]);
4468
4674
  return /* @__PURE__ */ jsx39(CalendarContext.Provider, {
4469
4675
  value: contextValue,
@@ -4472,7 +4678,7 @@ var CalendarProvider = ({
4472
4678
  };
4473
4679
 
4474
4680
  // src/components/ilamy-calendar/ilamy-calendar.tsx
4475
- import { jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
4681
+ import { jsx as jsx40, jsxs as jsxs27 } from "react/jsx-runtime";
4476
4682
  var CalendarContent = () => {
4477
4683
  const {
4478
4684
  view,
@@ -4499,7 +4705,7 @@ var CalendarContent = () => {
4499
4705
  const handleOnDelete = (event) => {
4500
4706
  deleteEvent(event.id);
4501
4707
  };
4502
- return /* @__PURE__ */ jsxs26("div", {
4708
+ return /* @__PURE__ */ jsxs27("div", {
4503
4709
  className: "flex flex-col w-full h-full",
4504
4710
  children: [
4505
4711
  /* @__PURE__ */ jsx40(base_header_default, {
@@ -4533,11 +4739,18 @@ var DEFAULT_DAY_MAX_EVENTS = 4;
4533
4739
  var IlamyCalendar = ({
4534
4740
  events,
4535
4741
  firstDayOfWeek = "sunday",
4742
+ initialView = "month",
4536
4743
  renderEvent,
4537
4744
  onEventClick,
4538
4745
  onCellClick,
4539
4746
  onViewChange,
4747
+ onEventAdd,
4748
+ onEventUpdate,
4749
+ onEventDelete,
4750
+ onDateChange,
4540
4751
  locale,
4752
+ translations,
4753
+ translator,
4541
4754
  timezone: timezone2,
4542
4755
  disableCellClick,
4543
4756
  disableEventClick,
@@ -4545,16 +4758,24 @@ var IlamyCalendar = ({
4545
4758
  dayMaxEvents = DEFAULT_DAY_MAX_EVENTS,
4546
4759
  stickyViewHeader = true,
4547
4760
  viewHeaderClassName = "",
4548
- headerComponent
4761
+ headerComponent,
4762
+ headerClassName
4549
4763
  }) => {
4550
4764
  return /* @__PURE__ */ jsx40(CalendarProvider, {
4551
4765
  events: normalizePublicFacingCalendarEvent(events),
4552
4766
  firstDayOfWeek: WEEK_DAYS_NUMBER_MAP[firstDayOfWeek],
4767
+ initialView,
4553
4768
  renderEvent,
4554
4769
  onEventClick,
4555
4770
  onCellClick,
4556
4771
  onViewChange,
4772
+ onEventAdd,
4773
+ onEventUpdate,
4774
+ onEventDelete,
4775
+ onDateChange,
4557
4776
  locale,
4777
+ translations,
4778
+ translator,
4558
4779
  timezone: timezone2,
4559
4780
  disableCellClick,
4560
4781
  disableEventClick,
@@ -4563,6 +4784,7 @@ var IlamyCalendar = ({
4563
4784
  stickyViewHeader,
4564
4785
  viewHeaderClassName,
4565
4786
  headerComponent,
4787
+ headerClassName,
4566
4788
  children: /* @__PURE__ */ jsx40(CalendarContent, {})
4567
4789
  });
4568
4790
  };
@@ -4573,9 +4795,10 @@ export {
4573
4795
  useIlamyCalendarContext,
4574
4796
  isRecurringEvent,
4575
4797
  generateRecurringEvents,
4798
+ defaultTranslations,
4576
4799
  RRule4 as RRule,
4577
4800
  IlamyCalendar
4578
4801
  };
4579
4802
 
4580
- //# debugId=7721FF42EA85BA6064756E2164756E21
4581
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy92aWV3L21vbnRoLXZpZXcudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCIsICIuLi9zcmMvbGliL3V0aWxzLnRzIiwgIi4uL3NyYy9saWIvZGF5anMtY29uZmlnLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2NhbGVuZGFyLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9jaGVja2JveC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvY2FyZC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvc2VsZWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90YWJzLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90b29sdGlwLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy9kYXktY2VsbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL21vbnRoLWhlYWRlci9tb250aC1oZWFkZXIudHN4IiwgIi4uL3NyYy9saWIvY29uc3RhbnRzLnRzIiwgIi4uL3NyYy9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgIi4uL3NyYy9mZWF0dXJlcy9tb250aC12aWV3L2NvbXBvbmVudHMvd2Vlay1ldmVudHMtbGF5ZXIvd2Vlay1ldmVudHMtbGF5ZXIudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvdmlldy93ZWVrLXZpZXcudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvd2Vlay1hbGwtZGF5LXJvdy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLWhlYWRlci50c3giLCAiLi4vc3JjL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktZXZlbnRzLWxheWVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvd2Vlay12aWV3L3dlZWstZGF5LWNvbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLXRpbWUtZ3JpZC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvdmlldy9kYXktdmlldy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWFsbC1kYXktcm93LnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktaGVhZGVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktdGltZS1jb2wudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAiLi4vc3JjL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXIvaW5kZXgudHMiLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICIuLi9zcmMvbGliL2V4cG9ydC1pY2FsLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci9iYXNlLWhlYWRlci50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMveWVhci12aWV3L3ZpZXcveWVhci12aWV3LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci9pbGFteS1jYWxlbmRhci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICIuLi9zcmMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBBbGxFdmVudERpYWxvZyB9IGZyb20gJy4uL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgRGF5Q2VsbCB9IGZyb20gJy4uL2RheS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBNb250aFZpZXdQcm9wcywgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IE1vbnRoSGVhZGVyIH0gZnJvbSAnLi4vbW9udGgtaGVhZGVyL21vbnRoLWhlYWRlcidcbmltcG9ydCB7IFdlZWtFdmVudHNMYXllciB9IGZyb20gJy4uL3dlZWstZXZlbnRzLWxheWVyL3dlZWstZXZlbnRzLWxheWVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aSdcblxuZXhwb3J0IGNvbnN0IE1vbnRoVmlldzogUmVhY3QuRkM8TW9udGhWaWV3UHJvcHM+ID0gKHsgZGF5TWF4RXZlbnRzID0gMyB9KSA9PiB7XG4gIGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG4gICAgb3BlbjogKCkgPT4gdm9pZFxuICAgIGNsb3NlOiAoKSA9PiB2b2lkXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG4gIH0+KG51bGwpXG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuICAvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcbiAgLy8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcbiAgd2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgIGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG4gIH1cblxuICAvLyBBbHdheXMgZ2VuZXJhdGUgNiB3ZWVrcyAoNDIgZGF5cykgcmVnYXJkbGVzcyBvZiB0aGUgbW9udGggbGVuZ3RoXG4gIC8vIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSA2IHJvd3Mgb2YgZGF5c1xuICBjb25zdCBjYWxlbmRhckRheXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyA2IHdlZWtzIMOXIDcgZGF5cyA9IDQyIGRheXNcbiAgICBjb25zdCBkYXlzOiBkYXlqcy5EYXlqc1tdW10gPSBbW11dXG4gICAgbGV0IGRheSA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmNsb25lKCkgLy8gQ2xvbmUgdG8gYXZvaWQgbXV0YXRpb25cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQyOyBpKyspIHtcbiAgICAgIGlmIChkYXlzW2RheXMubGVuZ3RoIC0gMV0ubGVuZ3RoID09PSA3KSB7XG4gICAgICAgIGRheXMucHVzaChbXSkgLy8gU3RhcnQgYSBuZXcgd2Vla1xuICAgICAgfVxuICAgICAgZGF5c1tkYXlzLmxlbmd0aCAtIDFdLnB1c2goZGF5KVxuICAgICAgZGF5ID0gZGF5LmFkZCgxLCAnZGF5JykgLy8gTW92ZSB0byB0aGUgbmV4dCBkYXlcbiAgICB9XG4gICAgcmV0dXJuIGRheXNcbiAgfSwgW2FkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIiBkYXRhLXRlc3RpZD1cIm1vbnRoLXZpZXdcIj5cbiAgICAgIHsvKiBXZWVrIGRheXMgaGVhZGVyICovfVxuICAgICAgPE1vbnRoSGVhZGVyIGNsYXNzTmFtZT1cImgtWzNyZW1dXCIgLz5cblxuICAgICAgey8qIENhbGVuZGFyIGdyaWQgLSBhZGRlZCBmaXhlZCBoZWlnaHQgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBjbGFzc05hbWU9XCJvdmVyZmxvdy1hdXRvIGgtW2NhbGMoMTAwJS0zcmVtKV1cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbnRoLXNjcm9sbC1hcmVhXCJcbiAgICAgICAgdmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2wgKjptaW4taC1mdWxsJyB9fVxuICAgICAgPlxuICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgIGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSB9fVxuICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgZ3JpZCBoLWZ1bGwgZ3JpZC1jb2xzLTcgZ3JpZC1yb3dzLTYgb3ZlcmZsb3ctYXV0byBmbGV4LTFcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb250aC1jYWxlbmRhci1ncmlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogRGF5IGNlbGxzICovfVxuICAgICAgICAgICAge2NhbGVuZGFyRGF5cy5tYXAoKGRheXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtgd2Vlay0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBjb2wtc3Bhbi03IGdyaWQgZ3JpZC1jb2xzLTdcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXJvdy0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPERheUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtkYXlJbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRheT17ZGF5fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlci1yIGJvcmRlci1iIGZpcnN0OmJvcmRlci1sXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8V2Vla0V2ZW50c0xheWVyIGRheXM9e2RheXN9IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cblxuICAgICAgey8qIERpYWxvZyBmb3Igc2hvd2luZyBhbGwgZXZlbnRzICovfVxuICAgICAgPEFsbEV2ZW50RGlhbG9nIHJlZj17YWxsRXZlbnRzRGlhbG9nUmVmfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHNldFZpZXc6ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHRvZGF5OiAoKSA9PiB2b2lkXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuICBvcGVuRXZlbnRGb3JtOiAoZGF0ZT86IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG4gIGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuICAgIHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG4gICAgZW5kRGF0ZTogZGF5anMuRGF5anNcbiAgKSA9PiBDYWxlbmRhckV2ZW50W11cbiAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s6IChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBjdXJyZW50TG9jYWxlPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI6IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZTogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+ID1cbiAgY3JlYXRlQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckNvbnRleHQgPSAoKTogQ2FsZW5kYXJDb250ZXh0VHlwZSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KENhbGVuZGFyQ29udGV4dClcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlQ2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJylcbiAgfVxuICByZXR1cm4gY29udGV4dFxufVxuXG4vKipcbiAqIFNpbXBsaWZpZWQgY2FsZW5kYXIgY29udGV4dCB0eXBlIGZvciBleHRlcm5hbCB1c2VcbiAqIENvbnRhaW5zIG9ubHkgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBjYWxlbmRhciBvcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuICByZWFkb25seSBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgcmVhZG9ubHkgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJlYWRvbmx5IGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICByZWFkb25seSBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICByZWFkb25seSBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICByZWFkb25seSBmaXJzdERheU9mV2VlazogbnVtYmVyXG4gIHJlYWRvbmx5IHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHNldFZpZXc6ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgcmVhZG9ubHkgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICByZWFkb25seSBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHRvZGF5OiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgcmVhZG9ubHkgdXBkYXRlRXZlbnQ6IChcbiAgICBldmVudElkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgKSA9PiB2b2lkXG4gIHJlYWRvbmx5IGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIHJlYWRvbmx5IG9wZW5FdmVudEZvcm06IChkYXRlPzogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0ID0gKCk6IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3VzZUlsYW15Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJ1xuICAgIClcbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuICAgIHZpZXc6IGNvbnRleHQudmlldyxcbiAgICBldmVudHM6IGNvbnRleHQuZXZlbnRzLFxuICAgIGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG4gICAgc2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuICAgIHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG4gICAgZmlyc3REYXlPZldlZWs6IGNvbnRleHQuZmlyc3REYXlPZldlZWssXG4gICAgc2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG4gICAgc2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuICAgIHNldFZpZXc6IGNvbnRleHQuc2V0VmlldyxcbiAgICBuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG4gICAgcHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuICAgIHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuICAgIGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuICAgIHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuICAgIGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuICAgIG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcbiAgICBjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcbiAgfSBhcyBjb25zdFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNsb3QgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2xvdCdcbmltcG9ydCB0eXBlIHsgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuaW1wb3J0IHsgY3ZhIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBidXR0b25WYXJpYW50cyA9IGN2YShcbiAgXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00IHNocmluay0wIFsmX3N2Z106c2hyaW5rLTAgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZVwiLFxuICB7XG4gICAgdmFyaWFudHM6IHtcbiAgICAgIHZhcmlhbnQ6IHtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBzaGFkb3cteHMgaG92ZXI6YmctcHJpbWFyeS85MCcsXG4gICAgICAgIGRlc3RydWN0aXZlOlxuICAgICAgICAgICdiZy1kZXN0cnVjdGl2ZSB0ZXh0LXdoaXRlIHNoYWRvdy14cyBob3ZlcjpiZy1kZXN0cnVjdGl2ZS85MCBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvNDAgZGFyazpiZy1kZXN0cnVjdGl2ZS82MCcsXG4gICAgICAgIG91dGxpbmU6XG4gICAgICAgICAgJ2JvcmRlciBiZy1iYWNrZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6aG92ZXI6YmctaW5wdXQvNTAnLFxuICAgICAgICBzZWNvbmRhcnk6XG4gICAgICAgICAgJ2JnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1zZWNvbmRhcnkvODAnLFxuICAgICAgICBnaG9zdDpcbiAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1hY2NlbnQvNTAnLFxuICAgICAgICBsaW5rOiAndGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUnLFxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgZGVmYXVsdDogJ2gtOSBweC00IHB5LTIgaGFzLVs+c3ZnXTpweC0zJyxcbiAgICAgICAgc206ICdoLTggcm91bmRlZC1tZCBnYXAtMS41IHB4LTMgaGFzLVs+c3ZnXTpweC0yLjUnLFxuICAgICAgICBsZzogJ2gtMTAgcm91bmRlZC1tZCBweC02IGhhcy1bPnN2Z106cHgtNCcsXG4gICAgICAgIGljb246ICdzaXplLTknLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmF1bHRWYXJpYW50czoge1xuICAgICAgdmFyaWFudDogJ2RlZmF1bHQnLFxuICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIH0sXG4gIH1cbilcblxuZnVuY3Rpb24gQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICB2YXJpYW50LFxuICBzaXplLFxuICBhc0NoaWxkID0gZmFsc2UsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczwnYnV0dG9uJz4gJlxuICBWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiAmIHtcbiAgICBhc0NoaWxkPzogYm9vbGVhblxuICB9KSB7XG4gIGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6ICdidXR0b24nXG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcFxuICAgICAgZGF0YS1zbG90PVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgQnV0dG9uLCBidXR0b25WYXJpYW50cyB9XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgQ2xhc3NWYWx1ZSB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXG5pbXBvcnQgdHlwZSB7IElsYW15Q2FsZW5kYXJQcm9wRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuICByZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU1vY2tFdmVudHMoeyBjb3VudCA9IDUgfSA9IHt9KSB7XG4gIGNvbnN0IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgZXZlbnRzLnB1c2goe1xuICAgICAgaWQ6IGkudG9TdHJpbmcoKSxcbiAgICAgIHRpdGxlOiBgTW9jayBFdmVudCAke2kgKyAxfWAsXG4gICAgICBzdGFydDogZGF5anMoKS5zdGFydE9mKCd3ZWVrJykuYWRkKGksICdkYXknKS5zdGFydE9mKCdkYXknKSxcbiAgICAgIGVuZDogZGF5anMoKS5zdGFydE9mKCd3ZWVrJykuYWRkKGksICdkYXknKS5lbmRPZignZGF5JyksXG4gICAgICBjb2xvcjogJ2JnLWdyYXktMTAwIHRleHQtZ3JheS04MDAnLFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGV2ZW50c1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoZGF0ZTogZGF5anMuRGF5anMgfCBEYXRlIHwgc3RyaW5nKTogZGF5anMuRGF5anMge1xuICBpZiAoZGF5anMuaXNEYXlqcyhkYXRlKSkge1xuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICBjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcbiAgcmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IGRheWpzKClcbn1cblxuZXhwb3J0IGNvbnN0IG9taXRLZXlzID0gPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcbiAgb2JqOiBULFxuICBrZXlzOiBLW11cbik6IE9taXQ8VCwgSz4gPT4ge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBkZWxldGUgcmVzdWx0W2tleV1cbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQdWJsaWNGYWNpbmdDYWxlbmRhckV2ZW50KFxuICBldmVudHM6IElsYW15Q2FsZW5kYXJQcm9wRXZlbnRbXVxuKTogQ2FsZW5kYXJFdmVudFtdIHtcbiAgaWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgIC8vIEV2ZW50cyBhcmUgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtYXQgd2l0aCBSUlVMRSBzdHJpbmdzXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgc3RhcnQ6IGRheWpzLmlzRGF5anMoZXZlbnQuc3RhcnQpID8gZXZlbnQuc3RhcnQgOiBkYXlqcyhldmVudC5zdGFydCksXG4gICAgICBlbmQ6IGRheWpzLmlzRGF5anMoZXZlbnQuZW5kKSA/IGV2ZW50LmVuZCA6IGRheWpzKGV2ZW50LmVuZCksXG4gICAgfSBhcyBDYWxlbmRhckV2ZW50XG4gIH0pXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB3ZWVrZGF5IGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrZGF5LmpzJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXIuanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgbWluTWF4IGZyb20gJ2RheWpzL3BsdWdpbi9taW5NYXguanMnXG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lLmpzJ1xuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjLmpzJ1xuaW1wb3J0IGxvY2FsZURhdGEgZnJvbSAnZGF5anMvcGx1Z2luL2xvY2FsZURhdGEuanMnXG5cbi8vIEV4dGVuZCBkYXlqcyB3aXRoIHBsdWdpbnNcbmRheWpzLmV4dGVuZCh3ZWVrZGF5KVxuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSlcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pXG5kYXlqcy5leHRlbmQobWluTWF4KVxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKVxuZGF5anMuZXh0ZW5kKHV0YylcbmRheWpzLmV4dGVuZChsb2NhbGVEYXRhKVxuXG4vLyBJbXBvcnQgYWxsIGRheWpzIGxvY2FsZXMgYWxwaGFiZXRpY2FsbHlcbi8vIGxvY2FsZS5qc29uIGZpbGU6IFt7XCJrZXlcIjpcImFmXCIsXCJuYW1lXCI6XCJBZnJpa2FhbnNcIn0se1wia2V5XCI6XCJhbVwiLFwibmFtZVwiOlwiQW1oYXJpY1wifSx7XCJrZXlcIjpcImFyLWR6XCIsXCJuYW1lXCI6XCJBcmFiaWMgKEFsZ2VyaWEpXCJ9LHtcImtleVwiOlwiYXItaXFcIixcIm5hbWVcIjpcIiBBcmFiaWMgKElyYXEpXCJ9LHtcImtleVwiOlwiYXIta3dcIixcIm5hbWVcIjpcIkFyYWJpYyAoS3V3YWl0KVwifSx7XCJrZXlcIjpcImFyLWx5XCIsXCJuYW1lXCI6XCJBcmFiaWMgKEx5YmlhKVwifSx7XCJrZXlcIjpcImFyLW1hXCIsXCJuYW1lXCI6XCJBcmFiaWMgKE1vcm9jY28pXCJ9LHtcImtleVwiOlwiYXItc2FcIixcIm5hbWVcIjpcIkFyYWJpYyAoU2F1ZGkgQXJhYmlhKVwifSx7XCJrZXlcIjpcImFyLXRuXCIsXCJuYW1lXCI6XCIgQXJhYmljIChUdW5pc2lhKVwifSx7XCJrZXlcIjpcImFyXCIsXCJuYW1lXCI6XCJBcmFiaWNcIn0se1wia2V5XCI6XCJhelwiLFwibmFtZVwiOlwiQXplcmJhaWphbmlcIn0se1wia2V5XCI6XCJiZVwiLFwibmFtZVwiOlwiQmVsYXJ1c2lhblwifSx7XCJrZXlcIjpcImJnXCIsXCJuYW1lXCI6XCJCdWxnYXJpYW5cIn0se1wia2V5XCI6XCJiaVwiLFwibmFtZVwiOlwiQmlzbGFtYVwifSx7XCJrZXlcIjpcImJtXCIsXCJuYW1lXCI6XCJCYW1iYXJhXCJ9LHtcImtleVwiOlwiYm4tYmRcIixcIm5hbWVcIjpcIkJlbmdhbGkgKEJhbmdsYWRlc2gpXCJ9LHtcImtleVwiOlwiYm5cIixcIm5hbWVcIjpcIkJlbmdhbGlcIn0se1wia2V5XCI6XCJib1wiLFwibmFtZVwiOlwiVGliZXRhblwifSx7XCJrZXlcIjpcImJyXCIsXCJuYW1lXCI6XCJCcmV0b25cIn0se1wia2V5XCI6XCJic1wiLFwibmFtZVwiOlwiQm9zbmlhblwifSx7XCJrZXlcIjpcImNhXCIsXCJuYW1lXCI6XCJDYXRhbGFuXCJ9LHtcImtleVwiOlwiY3NcIixcIm5hbWVcIjpcIkN6ZWNoXCJ9LHtcImtleVwiOlwiY3ZcIixcIm5hbWVcIjpcIkNodXZhc2hcIn0se1wia2V5XCI6XCJjeVwiLFwibmFtZVwiOlwiV2Vsc2hcIn0se1wia2V5XCI6XCJkZS1hdFwiLFwibmFtZVwiOlwiR2VybWFuIChBdXN0cmlhKVwifSx7XCJrZXlcIjpcImRhXCIsXCJuYW1lXCI6XCJEYW5pc2hcIn0se1wia2V5XCI6XCJkZS1jaFwiLFwibmFtZVwiOlwiR2VybWFuIChTd2l0emVybGFuZClcIn0se1wia2V5XCI6XCJkZVwiLFwibmFtZVwiOlwiR2VybWFuXCJ9LHtcImtleVwiOlwiZHZcIixcIm5hbWVcIjpcIk1hbGRpdmlhblwifSx7XCJrZXlcIjpcImVsXCIsXCJuYW1lXCI6XCJHcmVla1wifSx7XCJrZXlcIjpcImVuLWF1XCIsXCJuYW1lXCI6XCJFbmdsaXNoIChBdXN0cmFsaWEpXCJ9LHtcImtleVwiOlwiZW4tY2FcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKENhbmFkYSlcIn0se1wia2V5XCI6XCJlbi1nYlwiLFwibmFtZVwiOlwiRW5nbGlzaCAoVW5pdGVkIEtpbmdkb20pXCJ9LHtcImtleVwiOlwiZW4taWVcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKElyZWxhbmQpXCJ9LHtcImtleVwiOlwiZW4taWxcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKElzcmFlbClcIn0se1wia2V5XCI6XCJlbi1pblwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSW5kaWEpXCJ9LHtcImtleVwiOlwiZW4tbnpcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKE5ldyBaZWFsYW5kKVwifSx7XCJrZXlcIjpcImVuLXNnXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChTaW5nYXBvcmUpXCJ9LHtcImtleVwiOlwiZW4tdHRcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFRyaW5pZGFkICYgVG9iYWdvKVwifSx7XCJrZXlcIjpcImVvXCIsXCJuYW1lXCI6XCJFc3BlcmFudG9cIn0se1wia2V5XCI6XCJlblwiLFwibmFtZVwiOlwiRW5nbGlzaFwifSx7XCJrZXlcIjpcImVzLWRvXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChEb21pbmljYW4gUmVwdWJsaWMpXCJ9LHtcImtleVwiOlwiZXMtbXhcIixcIm5hbWVcIjpcIlNwYW5pc2ggKE1leGljbylcIn0se1wia2V5XCI6XCJlcy1wclwiLFwibmFtZVwiOlwiU3BhbmlzaCAoUHVlcnRvIFJpY28pXCJ9LHtcImtleVwiOlwiZXMtdXNcIixcIm5hbWVcIjpcIlNwYW5pc2ggKFVuaXRlZCBTdGF0ZXMpXCJ9LHtcImtleVwiOlwiZXRcIixcIm5hbWVcIjpcIkVzdG9uaWFuXCJ9LHtcImtleVwiOlwiZXNcIixcIm5hbWVcIjpcIlNwYW5pc2hcIn0se1wia2V5XCI6XCJldVwiLFwibmFtZVwiOlwiQmFzcXVlXCJ9LHtcImtleVwiOlwiZmFcIixcIm5hbWVcIjpcIlBlcnNpYW5cIn0se1wia2V5XCI6XCJmb1wiLFwibmFtZVwiOlwiRmFyb2VzZVwifSx7XCJrZXlcIjpcImZpXCIsXCJuYW1lXCI6XCJGaW5uaXNoXCJ9LHtcImtleVwiOlwiZnItY2FcIixcIm5hbWVcIjpcIkZyZW5jaCAoQ2FuYWRhKVwifSx7XCJrZXlcIjpcImZyLWNoXCIsXCJuYW1lXCI6XCJGcmVuY2ggKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcImZyXCIsXCJuYW1lXCI6XCJGcmVuY2hcIn0se1wia2V5XCI6XCJmeVwiLFwibmFtZVwiOlwiRnJpc2lhblwifSx7XCJrZXlcIjpcImdhXCIsXCJuYW1lXCI6XCJJcmlzaCBvciBJcmlzaCBHYWVsaWNcIn0se1wia2V5XCI6XCJnZFwiLFwibmFtZVwiOlwiU2NvdHRpc2ggR2FlbGljXCJ9LHtcImtleVwiOlwiZ29tLWxhdG5cIixcIm5hbWVcIjpcIktvbmthbmkgTGF0aW4gc2NyaXB0XCJ9LHtcImtleVwiOlwiZ2xcIixcIm5hbWVcIjpcIkdhbGljaWFuXCJ9LHtcImtleVwiOlwiZ3VcIixcIm5hbWVcIjpcIkd1amFyYXRpXCJ9LHtcImtleVwiOlwiaGVcIixcIm5hbWVcIjpcIkhlYnJld1wifSx7XCJrZXlcIjpcImhpXCIsXCJuYW1lXCI6XCJIaW5kaVwifSx7XCJrZXlcIjpcImhyXCIsXCJuYW1lXCI6XCJDcm9hdGlhblwifSx7XCJrZXlcIjpcImh1XCIsXCJuYW1lXCI6XCJIdW5nYXJpYW5cIn0se1wia2V5XCI6XCJodFwiLFwibmFtZVwiOlwiSGFpdGlhbiBDcmVvbGUgKEhhaXRpKVwifSx7XCJrZXlcIjpcImh5LWFtXCIsXCJuYW1lXCI6XCJBcm1lbmlhblwifSx7XCJrZXlcIjpcImlkXCIsXCJuYW1lXCI6XCJJbmRvbmVzaWFuXCJ9LHtcImtleVwiOlwiaXNcIixcIm5hbWVcIjpcIkljZWxhbmRpY1wifSx7XCJrZXlcIjpcIml0LWNoXCIsXCJuYW1lXCI6XCJJdGFsaWFuIChTd2l0emVybGFuZClcIn0se1wia2V5XCI6XCJpdFwiLFwibmFtZVwiOlwiSXRhbGlhblwifSx7XCJrZXlcIjpcImphXCIsXCJuYW1lXCI6XCJKYXBhbmVzZVwifSx7XCJrZXlcIjpcImp2XCIsXCJuYW1lXCI6XCJKYXZhbmVzZVwifSx7XCJrZXlcIjpcImthXCIsXCJuYW1lXCI6XCJHZW9yZ2lhblwifSx7XCJrZXlcIjpcImtrXCIsXCJuYW1lXCI6XCJLYXpha2hcIn0se1wia2V5XCI6XCJrbVwiLFwibmFtZVwiOlwiQ2FtYm9kaWFuXCJ9LHtcImtleVwiOlwia25cIixcIm5hbWVcIjpcIkthbm5hZGFcIn0se1wia2V5XCI6XCJrb1wiLFwibmFtZVwiOlwiS29yZWFuXCJ9LHtcImtleVwiOlwia3VcIixcIm5hbWVcIjpcIkt1cmRpc2hcIn0se1wia2V5XCI6XCJreVwiLFwibmFtZVwiOlwiS3lyZ3l6XCJ9LHtcImtleVwiOlwibGJcIixcIm5hbWVcIjpcIkx1eGVtYm91cmdpc2hcIn0se1wia2V5XCI6XCJsb1wiLFwibmFtZVwiOlwiTGFvXCJ9LHtcImtleVwiOlwibHRcIixcIm5hbWVcIjpcIkxpdGh1YW5pYW5cIn0se1wia2V5XCI6XCJsdlwiLFwibmFtZVwiOlwiTGF0dmlhblwifSx7XCJrZXlcIjpcIm1lXCIsXCJuYW1lXCI6XCJNb250ZW5lZ3JpblwifSx7XCJrZXlcIjpcIm1pXCIsXCJuYW1lXCI6XCJNYW9yaVwifSx7XCJrZXlcIjpcIm1rXCIsXCJuYW1lXCI6XCJNYWNlZG9uaWFuXCJ9LHtcImtleVwiOlwibWxcIixcIm5hbWVcIjpcIk1hbGF5YWxhbVwifSx7XCJrZXlcIjpcIm1uXCIsXCJuYW1lXCI6XCJNb25nb2xpYW5cIn0se1wia2V5XCI6XCJtclwiLFwibmFtZVwiOlwiTWFyYXRoaVwifSx7XCJrZXlcIjpcIm1zLW15XCIsXCJuYW1lXCI6XCJNYWxheVwifSx7XCJrZXlcIjpcIm1zXCIsXCJuYW1lXCI6XCJNYWxheVwifSx7XCJrZXlcIjpcIm10XCIsXCJuYW1lXCI6XCJNYWx0ZXNlIChNYWx0YSlcIn0se1wia2V5XCI6XCJteVwiLFwibmFtZVwiOlwiQnVybWVzZVwifSx7XCJrZXlcIjpcIm5iXCIsXCJuYW1lXCI6XCJOb3J3ZWdpYW4gQm9rbcOlbFwifSx7XCJrZXlcIjpcIm5lXCIsXCJuYW1lXCI6XCJOZXBhbGVzZVwifSx7XCJrZXlcIjpcIm5sLWJlXCIsXCJuYW1lXCI6XCJEdXRjaCAoQmVsZ2l1bSlcIn0se1wia2V5XCI6XCJubFwiLFwibmFtZVwiOlwiRHV0Y2hcIn0se1wia2V5XCI6XCJwbFwiLFwibmFtZVwiOlwiUG9saXNoXCJ9LHtcImtleVwiOlwicHQtYnJcIixcIm5hbWVcIjpcIlBvcnR1Z3Vlc2UgKEJyYXppbClcIn0se1wia2V5XCI6XCJwdFwiLFwibmFtZVwiOlwiUG9ydHVndWVzZVwifSx7XCJrZXlcIjpcInJuXCIsXCJuYW1lXCI6XCJLaXJ1bmRpXCJ9LHtcImtleVwiOlwicm9cIixcIm5hbWVcIjpcIlJvbWFuaWFuXCJ9LHtcImtleVwiOlwicnVcIixcIm5hbWVcIjpcIlJ1c3NpYW5cIn0se1wia2V5XCI6XCJyd1wiLFwibmFtZVwiOlwiS2lueWFyd2FuZGEgKFJ3YW5kYSlcIn0se1wia2V5XCI6XCJzZFwiLFwibmFtZVwiOlwiU2luZGhpXCJ9LHtcImtleVwiOlwic2VcIixcIm5hbWVcIjpcIk5vcnRoZXJuIFNhbWlcIn0se1wia2V5XCI6XCJzaVwiLFwibmFtZVwiOlwiU2luaGFsZXNlXCJ9LHtcImtleVwiOlwic2tcIixcIm5hbWVcIjpcIlNsb3Zha1wifSx7XCJrZXlcIjpcInNsXCIsXCJuYW1lXCI6XCJTbG92ZW5pYW5cIn0se1wia2V5XCI6XCJzcVwiLFwibmFtZVwiOlwiQWxiYW5pYW5cIn0se1wia2V5XCI6XCJzci1jeXJsXCIsXCJuYW1lXCI6XCJTZXJiaWFuIEN5cmlsbGljXCJ9LHtcImtleVwiOlwic3NcIixcIm5hbWVcIjpcInNpU3dhdGlcIn0se1wia2V5XCI6XCJzdi1maVwiLFwibmFtZVwiOlwiRmlubGFuZCBTd2VkaXNoXCJ9LHtcImtleVwiOlwic3JcIixcIm5hbWVcIjpcIlNlcmJpYW5cIn0se1wia2V5XCI6XCJzdlwiLFwibmFtZVwiOlwiU3dlZGlzaFwifSx7XCJrZXlcIjpcInN3XCIsXCJuYW1lXCI6XCJTd2FoaWxpXCJ9LHtcImtleVwiOlwidGFcIixcIm5hbWVcIjpcIlRhbWlsXCJ9LHtcImtleVwiOlwidGVcIixcIm5hbWVcIjpcIlRlbHVndVwifSx7XCJrZXlcIjpcInRldFwiLFwibmFtZVwiOlwiVGV0dW4gRGlsaSAoRWFzdCBUaW1vcilcIn0se1wia2V5XCI6XCJ0Z1wiLFwibmFtZVwiOlwiVGFqaWtcIn0se1wia2V5XCI6XCJ0aFwiLFwibmFtZVwiOlwiVGhhaVwifSx7XCJrZXlcIjpcInRrXCIsXCJuYW1lXCI6XCJUdXJrbWVuXCJ9LHtcImtleVwiOlwidGwtcGhcIixcIm5hbWVcIjpcIlRhZ2Fsb2cgKFBoaWxpcHBpbmVzKVwifSx7XCJrZXlcIjpcInRsaFwiLFwibmFtZVwiOlwiS2xpbmdvblwifSx7XCJrZXlcIjpcInRyXCIsXCJuYW1lXCI6XCJUdXJraXNoXCJ9LHtcImtleVwiOlwidHpsXCIsXCJuYW1lXCI6XCJUYWxvc3NhblwifSx7XCJrZXlcIjpcInR6bS1sYXRuXCIsXCJuYW1lXCI6XCJDZW50cmFsIEF0bGFzIFRhbWF6aWdodCBMYXRpblwifSx7XCJrZXlcIjpcInR6bVwiLFwibmFtZVwiOlwiQ2VudHJhbCBBdGxhcyBUYW1hemlnaHRcIn0se1wia2V5XCI6XCJ1Zy1jblwiLFwibmFtZVwiOlwiVXlnaHVyIChDaGluYSlcIn0se1wia2V5XCI6XCJ1a1wiLFwibmFtZVwiOlwiVWtyYWluaWFuXCJ9LHtcImtleVwiOlwidXJcIixcIm5hbWVcIjpcIlVyZHVcIn0se1wia2V5XCI6XCJ1ei1sYXRuXCIsXCJuYW1lXCI6XCJVemJlayBMYXRpblwifSx7XCJrZXlcIjpcInV6XCIsXCJuYW1lXCI6XCJVemJla1wifSx7XCJrZXlcIjpcInZpXCIsXCJuYW1lXCI6XCJWaWV0bmFtZXNlXCJ9LHtcImtleVwiOlwieC1wc2V1ZG9cIixcIm5hbWVcIjpcIlBzZXVkb1wifSx7XCJrZXlcIjpcInlvXCIsXCJuYW1lXCI6XCJZb3J1YmEgTmlnZXJpYVwifSx7XCJrZXlcIjpcInpoLWNuXCIsXCJuYW1lXCI6XCJDaGluZXNlIChDaGluYSlcIn0se1wia2V5XCI6XCJ6aC1oa1wiLFwibmFtZVwiOlwiQ2hpbmVzZSAoSG9uZyBLb25nKVwifSx7XCJrZXlcIjpcInpoLXR3XCIsXCJuYW1lXCI6XCJDaGluZXNlIChUYWl3YW4pXCJ9LHtcImtleVwiOlwiemhcIixcIm5hbWVcIjpcIkNoaW5lc2VcIn0se1wia2V5XCI6XCJvYy1sbmNcIixcIm5hbWVcIjpcIk9jY2l0YW4sIGxlbmdhZG9jaWFuIGRpYWxlY3RlXCJ9LHtcImtleVwiOlwibm5cIixcIm5hbWVcIjpcIk55bm9yc2tcIn0se1wia2V5XCI6XCJwYS1pblwiLFwibmFtZVwiOlwiUHVuamFiaSAoSW5kaWEpXCJ9XVxuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYWYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hbS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWR6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItaXEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1rdy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWx5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItbWEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1zYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmcuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm4tYmQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9icy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2NhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3MuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2N5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS1hdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tYXUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWdiLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taWUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWluLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tbnouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1zZy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLXR0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLWRvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtbXguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1wci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLXVzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ldC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2V1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZmEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9maS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnItY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci1jaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2wuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nb20tbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2d1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaGUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9odS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h5LWFtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaWQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2l0LWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9qYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2p2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ray5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ttLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva24uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2t1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva3kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2xvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21lLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21sLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21zLW15LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL215LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9uZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25sLWJlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL29jLWxuYy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3BhLWluLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcGwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wdC1ici5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3B0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcm4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9yby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3J1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcncuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zci1jeXJsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3IuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N2LWZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3YuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ZXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90Zy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90bC1waC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RsaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHpsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHptLWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90em0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91Zy1jbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdXIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ei1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdXouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS92aS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3gtcHNldWRvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUveW8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC1jbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLWhrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtdHcuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC5qcydcblxuZXhwb3J0IGRlZmF1bHQgZGF5anNcbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBDaGV2cm9uRG93bkljb24sXG4gIENoZXZyb25MZWZ0SWNvbixcbiAgQ2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgeyBEYXlCdXR0b24gfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgRGF5UGlja2VyLCBnZXREZWZhdWx0Q2xhc3NOYW1lcyB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcblxuZnVuY3Rpb24gQ2FsZW5kYXIoe1xuICBjbGFzc05hbWUsXG4gIGNsYXNzTmFtZXMsXG4gIHNob3dPdXRzaWRlRGF5cyA9IHRydWUsXG4gIGNhcHRpb25MYXlvdXQgPSAnbGFiZWwnLFxuICBidXR0b25WYXJpYW50ID0gJ2dob3N0JyxcbiAgZm9ybWF0dGVycyxcbiAgY29tcG9uZW50cyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlQaWNrZXI+ICYge1xuICBidXR0b25WYXJpYW50PzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEJ1dHRvbj5bJ3ZhcmlhbnQnXVxufSkge1xuICBjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuICByZXR1cm4gKFxuICAgIDxEYXlQaWNrZXJcbiAgICAgIHNob3dPdXRzaWRlRGF5cz17c2hvd091dHNpZGVEYXlzfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2JnLWJhY2tncm91bmQgZ3JvdXAvY2FsZW5kYXIgcC0zIFstLWNlbGwtc2l6ZTotLXNwYWNpbmcoOCldIFtbZGF0YS1zbG90PWNhcmQtY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQgW1tkYXRhLXNsb3Q9cG9wb3Zlci1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCcsXG4gICAgICAgIFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX25leHQ+c3ZnXTpyb3RhdGUtMTgwYCxcbiAgICAgICAgU3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfcHJldmlvdXM+c3ZnXTpyb3RhdGUtMTgwYCxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgY2FwdGlvbkxheW91dD17Y2FwdGlvbkxheW91dH1cbiAgICAgIGZvcm1hdHRlcnM9e3tcbiAgICAgICAgZm9ybWF0TW9udGhEcm9wZG93bjogKGRhdGUpID0+XG4gICAgICAgICAgZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdzaG9ydCcgfSksXG4gICAgICAgIC4uLmZvcm1hdHRlcnMsXG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lcz17e1xuICAgICAgICByb290OiBjbigndy1maXQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yb290KSxcbiAgICAgICAgbW9udGhzOiBjbihcbiAgICAgICAgICAnZmxleCBnYXAtNCBmbGV4LWNvbCBtZDpmbGV4LXJvdyByZWxhdGl2ZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMubW9udGhzXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoOiBjbignZmxleCBmbGV4LWNvbCB3LWZ1bGwgZ2FwLTQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aCksXG4gICAgICAgIG5hdjogY24oXG4gICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHctZnVsbCBhYnNvbHV0ZSB0b3AtMCBpbnNldC14LTAganVzdGlmeS1iZXR3ZWVuJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5uYXZcbiAgICAgICAgKSxcbiAgICAgICAgYnV0dG9uX3ByZXZpb3VzOiBjbihcbiAgICAgICAgICBidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG4gICAgICAgICAgJ3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fcHJldmlvdXNcbiAgICAgICAgKSxcbiAgICAgICAgYnV0dG9uX25leHQ6IGNuKFxuICAgICAgICAgIGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcbiAgICAgICAgICAnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9uZXh0XG4gICAgICAgICksXG4gICAgICAgIG1vbnRoX2NhcHRpb246IGNuKFxuICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgdy1mdWxsIHB4LSgtLWNlbGwtc2l6ZSknLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoX2NhcHRpb25cbiAgICAgICAgKSxcbiAgICAgICAgZHJvcGRvd25zOiBjbihcbiAgICAgICAgICAndy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0ganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIGdhcC0xLjUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duc1xuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bl9yb290OiBjbihcbiAgICAgICAgICAncmVsYXRpdmUgaGFzLWZvY3VzOmJvcmRlci1yaW5nIGJvcmRlciBib3JkZXItaW5wdXQgc2hhZG93LXhzIGhhcy1mb2N1czpyaW5nLXJpbmcvNTAgaGFzLWZvY3VzOnJpbmctWzNweF0gcm91bmRlZC1tZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25fcm9vdFxuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bjogY24oXG4gICAgICAgICAgJ2Fic29sdXRlIGJnLXBvcG92ZXIgaW5zZXQtMCBvcGFjaXR5LTAnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duXG4gICAgICAgICksXG4gICAgICAgIGNhcHRpb25fbGFiZWw6IGNuKFxuICAgICAgICAgICdzZWxlY3Qtbm9uZSBmb250LW1lZGl1bScsXG4gICAgICAgICAgY2FwdGlvbkxheW91dCA9PT0gJ2xhYmVsJ1xuICAgICAgICAgICAgPyAndGV4dC1zbSdcbiAgICAgICAgICAgIDogJ3JvdW5kZWQtbWQgcGwtMiBwci0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtc20gaC04IFsmPnN2Z106dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmPnN2Z106c2l6ZS0zLjUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmNhcHRpb25fbGFiZWxcbiAgICAgICAgKSxcbiAgICAgICAgdGFibGU6ICd3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlJyxcbiAgICAgICAgd2Vla2RheXM6IGNuKCdmbGV4JywgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheXMpLFxuICAgICAgICB3ZWVrZGF5OiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZmxleC0xIGZvbnQtbm9ybWFsIHRleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlcbiAgICAgICAgKSxcbiAgICAgICAgd2VlazogY24oJ2ZsZXggdy1mdWxsIG10LTInLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrKSxcbiAgICAgICAgd2Vla19udW1iZXJfaGVhZGVyOiBjbihcbiAgICAgICAgICAnc2VsZWN0LW5vbmUgdy0oLS1jZWxsLXNpemUpJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlcl9oZWFkZXJcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla19udW1iZXI6IGNuKFxuICAgICAgICAgICd0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJcbiAgICAgICAgKSxcbiAgICAgICAgZGF5OiBjbihcbiAgICAgICAgICAncmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwLTAgdGV4dC1jZW50ZXIgWyY6Zmlyc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCBbJjpsYXN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLXItbWQgZ3JvdXAvZGF5IGFzcGVjdC1zcXVhcmUgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRheVxuICAgICAgICApLFxuICAgICAgICByYW5nZV9zdGFydDogY24oXG4gICAgICAgICAgJ3JvdW5kZWQtbC1tZCBiZy1hY2NlbnQnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX3N0YXJ0XG4gICAgICAgICksXG4gICAgICAgIHJhbmdlX21pZGRsZTogY24oJ3JvdW5kZWQtbm9uZScsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX21pZGRsZSksXG4gICAgICAgIHJhbmdlX2VuZDogY24oJ3JvdW5kZWQtci1tZCBiZy1hY2NlbnQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9lbmQpLFxuICAgICAgICB0b2RheTogY24oXG4gICAgICAgICAgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZGF0YS1bc2VsZWN0ZWQ9dHJ1ZV06cm91bmRlZC1ub25lJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy50b2RheVxuICAgICAgICApLFxuICAgICAgICBvdXRzaWRlOiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFyaWEtc2VsZWN0ZWQ6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5vdXRzaWRlXG4gICAgICAgICksXG4gICAgICAgIGRpc2FibGVkOiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRpc2FibGVkXG4gICAgICAgICksXG4gICAgICAgIGhpZGRlbjogY24oJ2ludmlzaWJsZScsIGRlZmF1bHRDbGFzc05hbWVzLmhpZGRlbiksXG4gICAgICAgIC4uLmNsYXNzTmFtZXMsXG4gICAgICB9fVxuICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICBSb290OiAoeyBjbGFzc05hbWUsIHJvb3RSZWYsIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG4gICAgICAgICAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihjbGFzc05hbWUpfVxuICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgQ2hldnJvbjogKHsgY2xhc3NOYW1lLCBvcmllbnRhdGlvbiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hldnJvbkxlZnRJY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3JpZW50YXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHRJY29uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX1cbiAgICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgRGF5QnV0dG9uOiBDYWxlbmRhckRheUJ1dHRvbixcbiAgICAgICAgV2Vla051bWJlcjogKHsgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIHsuLi5wcm9wc30+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLSgtLWNlbGwtc2l6ZSkgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgfX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhbGVuZGFyRGF5QnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICBkYXksXG4gIG1vZGlmaWVycyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlCdXR0b24+KSB7XG4gIGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW9kaWZpZXJzLmZvY3VzZWQpIHtcbiAgICAgIHJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbbW9kaWZpZXJzLmZvY3VzZWRdKVxuXG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgcmVmPXtyZWZ9XG4gICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgZGF0YS1kYXk9e2RheS5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpfVxuICAgICAgZGF0YS1zZWxlY3RlZC1zaW5nbGU9e1xuICAgICAgICBtb2RpZmllcnMuc2VsZWN0ZWQgJiZcbiAgICAgICAgIW1vZGlmaWVycy5yYW5nZV9zdGFydCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX2VuZCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX21pZGRsZVxuICAgICAgfVxuICAgICAgZGF0YS1yYW5nZS1zdGFydD17bW9kaWZpZXJzLnJhbmdlX3N0YXJ0fVxuICAgICAgZGF0YS1yYW5nZS1lbmQ9e21vZGlmaWVycy5yYW5nZV9lbmR9XG4gICAgICBkYXRhLXJhbmdlLW1pZGRsZT17bW9kaWZpZXJzLnJhbmdlX21pZGRsZX1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOmJnLWFjY2VudCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLWVuZD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpib3JkZXItcmluZyBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLXJpbmcvNTAgZGFyazpob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZsZXggYXNwZWN0LXNxdWFyZSBzaXplLWF1dG8gdy1mdWxsIG1pbi13LSgtLWNlbGwtc2l6ZSkgZmxleC1jb2wgZ2FwLTEgbGVhZGluZy1ub25lIGZvbnQtbm9ybWFsIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJlbGF0aXZlIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnotMTAgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1bM3B4XSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1yLW1kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpyb3VuZGVkLW5vbmUgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLWwtbWQgWyY+c3Bhbl06dGV4dC14cyBbJj5zcGFuXTpvcGFjaXR5LTcwJyxcbiAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGF5LFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBDYWxlbmRhciwgQ2FsZW5kYXJEYXlCdXR0b24gfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIENoZWNrYm94UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7IENoZWNrSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwiY2hlY2tib3hcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3BlZXIgYm9yZGVyLWlucHV0IGRhcms6YmctaW5wdXQvMzAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLXByaW1hcnkgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgc2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIHNoYWRvdy14cyB0cmFuc2l0aW9uLXNoYWRvdyBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3JcbiAgICAgICAgZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50IHRyYW5zaXRpb24tbm9uZVwiXG4gICAgICA+XG4gICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuICAgICAgPC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XG4gICAgPC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmV4cG9ydCB7IENoZWNrYm94IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhcmQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3RleHQtY2FyZC1mb3JlZ3JvdW5kIGZsZXggZmxleC1jb2wgZ2FwLTYgcm91bmRlZC14bCBib3JkZXIgc2hhZG93LXNtJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZEhlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1oZWFkZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ0Bjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGdyaWQtcm93cy1bYXV0b19hdXRvXSBpdGVtcy1zdGFydCBnYXAtMS41IHAtNCBwYi0wIGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRUaXRsZSh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkRGVzY3JpcHRpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZEFjdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1hY3Rpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2NvbC1zdGFydC0yIHJvdy1zcGFuLTIgcm93LXN0YXJ0LTEgc2VsZi1zdGFydCBqdXN0aWZ5LXNlbGYtZW5kJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZENvbnRlbnQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtY29udGVudFwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWZvb3RlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBweC02IFsuYm9yZGVyLXRdOnB0LTYnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgQ2FyZCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZEZvb3RlcixcbiAgQ2FyZFRpdGxlLFxuICBDYXJkQWN0aW9uLFxuICBDYXJkRGVzY3JpcHRpb24sXG4gIENhcmRDb250ZW50LFxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYWxlbmRhcidcbmltcG9ydCB7XG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFBvcG92ZXJDbG9zZSB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuXG5pbnRlcmZhY2UgRGF0ZVBpY2tlclByb3BzIHtcbiAgZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZFxuICBzZXREYXRlOiAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuICBsYWJlbD86IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgY2xvc2VPblNlbGVjdD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuICBkYXRlLFxuICBjbG9zZU9uU2VsZWN0LFxuICBzZXREYXRlLFxuICBsYWJlbCA9ICdQaWNrIGEgZGF0ZScsXG4gIGNsYXNzTmFtZSxcbn06IERhdGVQaWNrZXJQcm9wcykge1xuICBjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBvblNlbGVjdCA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgc2V0RGF0ZShkYXRlKVxuICAgIGlmIChjbG9zZU9uU2VsZWN0KSB7XG4gICAgICBwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgPFBvcG92ZXI+XG4gICAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICd3LWZ1bGwganVzdGlmeS1zdGFydCB0ZXh0LWxlZnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAhZGF0ZSAmJiAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2FsZW5kYXJJY29uIGNsYXNzTmFtZT1cIm1yLTIgaC00IHctNFwiIC8+XG4gICAgICAgICAgICB7ZGF0ZSA/IGRheWpzKGRhdGUpLmZvcm1hdCgnTU1NIEQsIFlZWVknKSA6IDxzcGFuPntsYWJlbH08L3NwYW4+fVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiIGFsaWduPVwic3RhcnRcIj5cbiAgICAgICAgICA8UG9wb3ZlckNsb3NlIHJlZj17cG9wT3ZlclJlZn0gLz5cbiAgICAgICAgICA8Q2FsZW5kYXJcbiAgICAgICAgICAgIG1vZGU9XCJzaW5nbGVcIlxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2RhdGV9XG4gICAgICAgICAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gICAgICAgICAgICBtb250aD17ZGF0ZX1cbiAgICAgICAgICAgIGluaXRpYWxGb2N1c1xuICAgICAgICAgIC8+XG4gICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICA8L1BvcG92ZXI+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBQb3BvdmVyUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBQb3BvdmVyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInBvcG92ZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJUcmlnZ2VyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG4gIHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cInBvcG92ZXItdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlckNvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGFsaWduID0gJ2NlbnRlcicsXG4gIHNpZGVPZmZzZXQgPSA0LFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8UG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8UG9wb3ZlclByaW1pdGl2ZS5Db250ZW50XG4gICAgICAgIGRhdGEtc2xvdD1cInBvcG92ZXItY29udGVudFwiXG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LTcyIG9yaWdpbi0oLS1yYWRpeC1wb3BvdmVyLWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgcm91bmRlZC1tZCBib3JkZXIgcC00IHNoYWRvdy1tZCBvdXRsaW5lLWhpZGRlbicsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgIC8+XG4gICAgPC9Qb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cbiAgKVxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQW5jaG9yKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkFuY2hvcj4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLkFuY2hvciBkYXRhLXNsb3Q9XCJwb3BvdmVyLWFuY2hvclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZXhwb3J0IHsgUG9wb3ZlciwgUG9wb3ZlclRyaWdnZXIsIFBvcG92ZXJDb250ZW50LCBQb3BvdmVyQW5jaG9yIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBEaWFsb2dQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWRpYWxvZydcbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy1vdmVybGF5XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cbiAgICAgIDxEaWFsb2dPdmVybGF5IC8+XG4gICAgICA8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1iYWNrZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBmaXhlZCB0b3AtWzUwJV0gbGVmdC1bNTAlXSB6LTUwIGdyaWQgdy1mdWxsIG1heC13LVtjYWxjKDEwMCUtMnJlbSldIHRyYW5zbGF0ZS14LVstNTAlXSB0cmFuc2xhdGUteS1bLTUwJV0gZ2FwLTQgcm91bmRlZC1sZyBib3JkZXIgcC02IHNoYWRvdy1sZyBkdXJhdGlvbi0yMDAgc206bWF4LXctbGcgbWF4LWgtWzkwJV0gb3ZlcmZsb3cteS1zY3JvbGwnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuICAgICAgICAgIDxYSWNvbiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cbiAgICAgICAgPC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG4gICAgICA8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuICAgIDwvRGlhbG9nUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtY29sIGdhcC0yIHRleHQtY2VudGVyIHNtOnRleHQtbGVmdCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy1mb290ZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpqdXN0aWZ5LWVuZCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctdGl0bGVcIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1sZyBsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG4gIHJldHVybiAoXG4gICAgPERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ2xvc2UsXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0Rlc2NyaXB0aW9uLFxuICBEaWFsb2dGb290ZXIsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nT3ZlcmxheSxcbiAgRGlhbG9nUG9ydGFsLFxuICBEaWFsb2dUaXRsZSxcbiAgRGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIElucHV0KHsgY2xhc3NOYW1lLCB0eXBlLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnaW5wdXQnPikge1xuICByZXR1cm4gKFxuICAgIDxpbnB1dFxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIGRhdGEtc2xvdD1cImlucHV0XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuICAgICAgICAnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuICAgICAgICAnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgSW5wdXQgfVxuIiwKICAgICIndXNlIGNsaWVudCdcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBMYWJlbFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtbGFiZWwnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIExhYmVsKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIExhYmVsUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPExhYmVsUHJpbWl0aXZlLlJvb3RcbiAgICAgIGRhdGEtc2xvdD1cImxhYmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGxlYWRpbmctbm9uZSBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOm9wYWNpdHktNTAgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgTGFiZWwgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgU2Nyb2xsQXJlYVByb3BzXG4gIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdD4ge1xuICB2aWV3UG9ydFByb3BzPzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG59XG5cbmZ1bmN0aW9uIFNjcm9sbEFyZWEoeyBjbGFzc05hbWUsIGNoaWxkcmVuLCAuLi5wcm9wcyB9OiBTY3JvbGxBcmVhUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdyZWxhdGl2ZScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnRcbiAgICAgICAgey4uLnByb3BzLnZpZXdQb3J0UHJvcHN9XG4gICAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXZpZXdwb3J0XCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuICAgICAgICAgIHByb3BzLnZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1Njcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG4gICAgICA8U2Nyb2xsQmFyIC8+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Db3JuZXIgLz5cbiAgICA8L1Njcm9sbEFyZWFQcmltaXRpdmUuUm9vdD5cbiAgKVxufVxuXG5mdW5jdGlvbiBTY3JvbGxCYXIoe1xuICBjbGFzc05hbWUsXG4gIG9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+KSB7XG4gIHJldHVybiAoXG4gICAgPFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhclxuICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcbiAgICAgIG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IHRvdWNoLW5vbmUgcC1weCB0cmFuc2l0aW9uLWNvbG9ycyBzZWxlY3Qtbm9uZScsXG4gICAgICAgIG9yaWVudGF0aW9uID09PSAndmVydGljYWwnICYmXG4gICAgICAgICAgJ2gtZnVsbCB3LTIuNSBib3JkZXItbCBib3JkZXItbC10cmFuc3BhcmVudCcsXG4gICAgICAgIG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgJiZcbiAgICAgICAgICAnaC0yLjUgZmxleC1jb2wgYm9yZGVyLXQgYm9yZGVyLXQtdHJhbnNwYXJlbnQnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVRodW1iXG4gICAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXRodW1iXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuICAgICAgLz5cbiAgICA8L1Njcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj5cbiAgKVxufVxuXG5leHBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFNlbGVjdFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2VsZWN0J1xuaW1wb3J0IHsgQ2hlY2tJY29uLCBDaGV2cm9uRG93bkljb24sIENoZXZyb25VcEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwic2VsZWN0XCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RHcm91cCh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkdyb3VwPikge1xuICByZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Hcm91cCBkYXRhLXNsb3Q9XCJzZWxlY3QtZ3JvdXBcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFZhbHVlKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVmFsdWU+KSB7XG4gIHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlZhbHVlIGRhdGEtc2xvdD1cInNlbGVjdC12YWx1ZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VHJpZ2dlcih7XG4gIGNsYXNzTmFtZSxcbiAgc2l6ZSA9ICdkZWZhdWx0JyxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+ICYge1xuICBzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuVHJpZ2dlclxuICAgICAgZGF0YS1zbG90PVwic2VsZWN0LXRyaWdnZXJcIlxuICAgICAgZGF0YS1zaXplPXtzaXplfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgXCJib3JkZXItaW5wdXQgZGF0YS1bcGxhY2Vob2xkZXJdOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwIGZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHB5LTIgdGV4dC1zbSB3aGl0ZXNwYWNlLW5vd3JhcCBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzaXplPWRlZmF1bHRdOmgtOSBkYXRhLVtzaXplPXNtXTpoLTggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06bGluZS1jbGFtcC0xICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmZsZXggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06aXRlbXMtY2VudGVyICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmdhcC0yIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgICAgPFNlbGVjdFByaW1pdGl2ZS5JY29uIGFzQ2hpbGQ+XG4gICAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00IG9wYWNpdHktNTBcIiAvPlxuICAgICAgPC9TZWxlY3RQcmltaXRpdmUuSWNvbj5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdENvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBwb3NpdGlvbiA9ICdwb3BwZXInLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuICAgICAgPFNlbGVjdFByaW1pdGl2ZS5Db250ZW50XG4gICAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1jb250ZW50XCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcmVsYXRpdmUgei01MCBtYXgtaC0oLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0KSBtaW4tdy1bOHJlbV0gb3JpZ2luLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byByb3VuZGVkLW1kIGJvcmRlciBzaGFkb3ctbWQnLFxuICAgICAgICAgIHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuICAgICAgICAgICAgJ2RhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICBwb3NpdGlvbj17cG9zaXRpb259XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAgPFNlbGVjdFNjcm9sbFVwQnV0dG9uIC8+XG4gICAgICAgIDxTZWxlY3RQcmltaXRpdmUuVmlld3BvcnRcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ3AtMScsXG4gICAgICAgICAgICBwb3NpdGlvbiA9PT0gJ3BvcHBlcicgJiZcbiAgICAgICAgICAgICAgJ2gtW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCldIHctZnVsbCBtaW4tdy1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgpXSBzY3JvbGwtbXktMSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1NlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydD5cbiAgICAgICAgPFNlbGVjdFNjcm9sbERvd25CdXR0b24gLz5cbiAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9TZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdExhYmVsKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5MYWJlbD4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLkxhYmVsXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtbGFiZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0SXRlbSh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkl0ZW0+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5JdGVtXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtaXRlbVwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCByZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1zbSBweS0xLjUgcHItOCBwbC0yIHRleHQtc20gb3V0bGluZS1oaWRkZW4gc2VsZWN0LW5vbmUgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yXCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxTZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cbiAgICAgICAgICA8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG4gICAgICA8L3NwYW4+XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PntjaGlsZHJlbn08L1NlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5JdGVtPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNlcGFyYXRvcih7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2VwYXJhdG9yXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2JnLWJvcmRlciBwb2ludGVyLWV2ZW50cy1ub25lIC1teC0xIG15LTEgaC1weCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxVcEJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvblxuICAgICAgZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC11cC1idXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPENoZXZyb25VcEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxEb3duQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvblxuICAgICAgZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC1kb3duLWJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgPC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj5cbiAgKVxufVxuXG5leHBvcnQge1xuICBTZWxlY3QsXG4gIFNlbGVjdENvbnRlbnQsXG4gIFNlbGVjdEdyb3VwLFxuICBTZWxlY3RJdGVtLFxuICBTZWxlY3RMYWJlbCxcbiAgU2VsZWN0U2Nyb2xsRG93bkJ1dHRvbixcbiAgU2VsZWN0U2Nyb2xsVXBCdXR0b24sXG4gIFNlbGVjdFNlcGFyYXRvcixcbiAgU2VsZWN0VHJpZ2dlcixcbiAgU2VsZWN0VmFsdWUsXG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgVGFic1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtdGFicydcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gVGFicyh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUYWJzUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPFRhYnNQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwidGFic1wiXG4gICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtY29sIGdhcC0yJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFRhYnNMaXN0KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuTGlzdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5MaXN0XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzLWxpc3RcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2JnLW11dGVkIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBpbmxpbmUtZmxleCBoLTkgdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbGcgcC1bM3B4XScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFRhYnNUcmlnZ2VyKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5UcmlnZ2VyXG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzLXRyaWdnZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgXCJkYXRhLVtzdGF0ZT1hY3RpdmVdOmJnLWJhY2tncm91bmQgZGFyazpkYXRhLVtzdGF0ZT1hY3RpdmVdOnRleHQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6b3V0bGluZS1yaW5nIGRhcms6ZGF0YS1bc3RhdGU9YWN0aXZlXTpib3JkZXItaW5wdXQgZGFyazpkYXRhLVtzdGF0ZT1hY3RpdmVdOmJnLWlucHV0LzMwIHRleHQtZm9yZWdyb3VuZCBkYXJrOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBpbmxpbmUtZmxleCBoLVtjYWxjKDEwMCUtMXB4KV0gZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCBweC0yIHB5LTEgdGV4dC1zbSBmb250LW1lZGl1bSB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3N0YXRlPWFjdGl2ZV06c2hhZG93LXNtIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUYWJzQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUYWJzUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG4gIHJldHVybiAoXG4gICAgPFRhYnNQcmltaXRpdmUuQ29udGVudFxuICAgICAgZGF0YS1zbG90PVwidGFicy1jb250ZW50XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXgtMSBvdXRsaW5lLW5vbmUnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgVGFicywgVGFic0xpc3QsIFRhYnNUcmlnZ2VyLCBUYWJzQ29udGVudCB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgVG9vbHRpcFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtdG9vbHRpcCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gVG9vbHRpcFByb3ZpZGVyKHtcbiAgZGVsYXlEdXJhdGlvbiA9IDAsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Qcm92aWRlcj4pIHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcFByaW1pdGl2ZS5Qcm92aWRlclxuICAgICAgZGF0YS1zbG90PVwidG9vbHRpcC1wcm92aWRlclwiXG4gICAgICBkZWxheUR1cmF0aW9uPXtkZWxheUR1cmF0aW9ufVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVG9vbHRpcCh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Sb290Pikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJvdmlkZXI+XG4gICAgICA8VG9vbHRpcFByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInRvb2x0aXBcIiB7Li4ucHJvcHN9IC8+XG4gICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gVG9vbHRpcFRyaWdnZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRvb2x0aXBQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxUb29sdGlwUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwidG9vbHRpcC10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBUb29sdGlwQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgc2lkZU9mZnNldCA9IDAsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRvb2x0aXBQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcFByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8VG9vbHRpcFByaW1pdGl2ZS5Db250ZW50XG4gICAgICAgIGRhdGEtc2xvdD1cInRvb2x0aXAtY29udGVudFwiXG4gICAgICAgIHNpZGVPZmZzZXQ9e3NpZGVPZmZzZXR9XG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgYW5pbWF0ZS1pbiBmYWRlLWluLTAgem9vbS1pbi05NSBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHotNTAgdy1maXQgb3JpZ2luLSgtLXJhZGl4LXRvb2x0aXAtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQteHMgdGV4dC1iYWxhbmNlJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDxUb29sdGlwUHJpbWl0aXZlLkFycm93IGNsYXNzTmFtZT1cImJnLXByaW1hcnkgZmlsbC1wcmltYXJ5IHotNTAgc2l6ZS0yLjUgdHJhbnNsYXRlLXktW2NhbGMoLTUwJV8tXzJweCldIHJvdGF0ZS00NSByb3VuZGVkLVsycHhdXCIgLz5cbiAgICAgIDwvVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50PlxuICAgIDwvVG9vbHRpcFByaW1pdGl2ZS5Qb3J0YWw+XG4gIClcbn1cblxuZXhwb3J0IHsgVG9vbHRpcCwgVG9vbHRpcFRyaWdnZXIsIFRvb2x0aXBDb250ZW50LCBUb29sdGlwUHJvdmlkZXIgfVxuIiwKICAgICJpbXBvcnQge1xuICBEaWFsb2csXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCBSZWFjdCwgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuLi90eXBlcydcblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuICByZWY6IFJlYWN0LlJlZjx7XG4gICAgb3BlbjogKCkgPT4gdm9pZFxuICAgIGNsb3NlOiAoKSA9PiB2b2lkXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG4gIH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuICBjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuICAgIHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgb3BlbjogKCkgPT4gc2V0RGlhbG9nT3Blbih0cnVlKSxcbiAgICBjbG9zZTogKCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSksXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PlxuICAgICAgc2V0U2VsZWN0ZWREYXlFdmVudHMoZGF5RXZlbnRzKSxcbiAgfSkpXG5cbiAgLy8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuICAvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuICBsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuICB3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG4gICAgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5JylcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPERpYWxvZyBvcGVuPXtkaWFsb2dPcGVufSBvbk9wZW5DaGFuZ2U9e3NldERpYWxvZ09wZW59PlxuICAgICAgPERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwibWF4LWgtWzgwdmhdIG1heC13LW1kIG92ZXJmbG93LXktYXV0b1wiPlxuICAgICAgICA8RGlhbG9nSGVhZGVyPlxuICAgICAgICAgIDxEaWFsb2dUaXRsZT5cbiAgICAgICAgICAgIHtzZWxlY3RlZERheUV2ZW50cyAmJiBzZWxlY3RlZERheUV2ZW50cy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cbiAgICAgICAgICA8L0RpYWxvZ1RpdGxlPlxuICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuICAgICAgICAgIHtzZWxlY3RlZERheUV2ZW50cyAmJlxuICAgICAgICAgICAgc2VsZWN0ZWREYXlFdmVudHMuZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RHJhZ2dhYmxlRXZlbnRcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9IC8vIFVzZSBldmVudCBJRCBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uXG4gICAgICAgICAgICAgICAgICBrZXk9e2V2ZW50LmlkfVxuICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgbXktMSBoLVszMHB4XVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9EaWFsb2dDb250ZW50PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5mdW5jdGlvbiBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQoe1xuICBlbGVtZW50SWQsXG4gIGV2ZW50LFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICBkaXNhYmxlRHJhZyA9IGZhbHNlLFxufToge1xuICBlbGVtZW50SWQ6IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzXG4gIGV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIGRpc2FibGVEcmFnPzogYm9vbGVhblxufSkge1xuICBjb25zdCB7IG9uRXZlbnRDbGljaywgcmVuZGVyRXZlbnQsIGRpc2FibGVFdmVudENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcgfSA9IHVzZURyYWdnYWJsZSh7XG4gICAgaWQ6IGVsZW1lbnRJZCxcbiAgICBkYXRhOiB7XG4gICAgICBldmVudCxcbiAgICAgIHR5cGU6ICdjYWxlbmRhci1ldmVudCcsXG4gICAgfSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wLFxuICB9KVxuXG4gIC8vIERlZmF1bHQgZXZlbnQgY29udGVudCB0byByZW5kZXIgaWYgY3VzdG9tIHJlbmRlckV2ZW50IGlzIG5vdCBwcm92aWRlZFxuICBjb25zdCBEZWZhdWx0RXZlbnRDb250ZW50ID0gKCkgPT4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuICAgICAgICBldmVudC5jb2xvciB8fCAndGV4dC13aGl0ZScsXG4gICAgICAgICdoLWZ1bGwgdy1mdWxsIHB4LTEgYm9yZGVyLVsxLjVweF0gYm9yZGVyLWNhcmQgcm91bmRlZC1tZCB0ZXh0LWxlZnQgb3ZlcmZsb3ctY2xpcCdcbiAgICAgICl9XG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW50LmJhY2tncm91bmRDb2xvciwgY29sb3I6IGV2ZW50LmNvbG9yIH19XG4gICAgPlxuICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhzIG10LTAuNVwiPlxuICAgICAgICB7ZXZlbnQudGl0bGV9XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgIGtleT17ZWxlbWVudElkfVxuICAgICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICAgIHsuLi5hdHRyaWJ1dGVzfVxuICAgICAgICB7Li4ubGlzdGVuZXJzfVxuICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC01MCB9fVxuICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtNTAgfX1cbiAgICAgICAgbGF5b3V0XG4gICAgICAgIGxheW91dElkPXtlbGVtZW50SWR9XG4gICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuNCwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG4gICAgICAgICAgZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wXG4gICAgICAgICAgICA/IGRpc2FibGVFdmVudENsaWNrXG4gICAgICAgICAgICAgID8gJ2N1cnNvci1kZWZhdWx0J1xuICAgICAgICAgICAgICA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgIDogJ2N1cnNvci1ncmFiJyxcbiAgICAgICAgICBpc0RyYWdnaW5nICYmXG4gICAgICAgICAgICAhKGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCkgJiZcbiAgICAgICAgICAgICdjdXJzb3ItZ3JhYmJpbmcgc2hhZG93LWxnJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBvbkV2ZW50Q2xpY2soZXZlbnQpXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cbiAgICAgICAge3JlbmRlckV2ZW50ID8gcmVuZGVyRXZlbnQoZXZlbnQpIDogPERlZmF1bHRFdmVudENvbnRlbnQgLz59XG4gICAgICA8L21vdGlvbi5kaXY+XG4gICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnYWJsZUV2ZW50ID0gbWVtbyhcbiAgRHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkLFxuICAocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHtcbiAgICAvLyBDb21wYXJlIHRoZSBlc3NlbnRpYWwgcHJvcHMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gICAgcmV0dXJuIChcbiAgICAgIHByZXZQcm9wcy5lbGVtZW50SWQgPT09IG5leHRQcm9wcy5lbGVtZW50SWQgJiZcbiAgICAgIHByZXZQcm9wcy5kaXNhYmxlRHJhZyA9PT0gbmV4dFByb3BzLmRpc2FibGVEcmFnICYmXG4gICAgICBwcmV2UHJvcHMuY2xhc3NOYW1lID09PSBuZXh0UHJvcHMuY2xhc3NOYW1lICYmXG4gICAgICBwcmV2UHJvcHMuZXZlbnQgPT09IG5leHRQcm9wcy5ldmVudFxuICAgIClcbiAgfVxuKVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJ0AvZmVhdHVyZXMvZHJvcHBhYmxlLWNlbGwvZHJvcHBhYmxlLWNlbGwnXG5pbXBvcnQgeyBBbGxFdmVudERpYWxvZyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5cbmludGVyZmFjZSBEYXlDZWxsUHJvcHMge1xuICBpbmRleDogbnVtYmVyIC8vIEluZGV4IG9mIHRoZSBkYXkgaW4gdGhlIHdlZWsgKDAtNilcbiAgZGF5OiBkYXlqcy5EYXlqc1xuICBkYXlNYXhFdmVudHM/OiBudW1iZXJcbiAgY2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUNlbGw6IFJlYWN0LkZDPERheUNlbGxQcm9wcz4gPSAoe1xuICBpbmRleCxcbiAgZGF5LFxuICBjbGFzc05hbWUgPSAnJyxcbn0pID0+IHtcbiAgY29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT4obnVsbClcbiAgY29uc3Qge1xuICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuICAgIGN1cnJlbnREYXRlLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGRheU1heEV2ZW50cyA9IDAsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB0b2RheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICBkYXkuc3RhcnRPZignZGF5JyksXG4gICAgZGF5LmVuZE9mKCdkYXknKVxuICApXG5cbiAgLy8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuICAvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuICBsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuICB3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG4gICAgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5JylcbiAgfVxuXG4gIC8vIEhhbmRsZXIgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyBpbiBhIGRpYWxvZ1xuICBjb25zdCBzaG93QWxsRXZlbnRzID0gKGRheTogZGF5anMuRGF5anMsIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdKSA9PiB7XG4gICAgYWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/LnNldFNlbGVjdGVkRGF5RXZlbnRzKHtcbiAgICAgIGRheSxcbiAgICAgIGV2ZW50cyxcbiAgICB9KVxuICAgIGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5vcGVuKClcbiAgfVxuXG4gIGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuICBjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG4gIGNvbnN0IGlzTGFzdENvbHVtbiA9IGluZGV4ID09PSA2IC8vIFNhdHVyZGF5IGlzIHRoZSBsYXN0IGNvbHVtbiBpbiBhIHdlZWtcblxuICBjb25zdCBoaWRkZW5FdmVudHNDb3VudCA9IHRvZGF5RXZlbnRzLmxlbmd0aCAtIGRheU1heEV2ZW50c1xuICBjb25zdCBoYXNIaWRkZW5FdmVudHMgPSBoaWRkZW5FdmVudHNDb3VudCA+IDBcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICBpZD17YGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgZGF0ZT17ZGF5fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdJyxcbiAgICAgICAgICAhaXNDdXJyZW50TW9udGggJiYgJ2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgIGlzTGFzdENvbHVtbiAmJiAnYm9yZGVyLXItMCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHsvKiBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQgbXVsdGktZGF5IGJhcnMgKEdvb2dsZSBDYWxlbmRhciBzdHlsZSkgKi99XG5cbiAgICAgICAgey8qIFNpbmdsZS1kYXkgZXZlbnRzIGNvbnRhaW5lciBwb3NpdGlvbmVkIGJlbG93IG11bHRpLWRheSBldmVudHMgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgIHsvKiBEYXkgbnVtYmVyICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzIHNtOmgtNiBzbTp3LTYnLFxuICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7IGRheTogJ251bWVyaWMnIH0pLmZvcm1hdChcbiAgICAgICAgICAgICAgZGF5LnRvRGF0ZSgpXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuICAgICAgICAgIHt0b2RheUV2ZW50cy5zbGljZSgwLCBkYXlNYXhFdmVudHMpLm1hcCgoZXZlbnQsIHJvd0luZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17YGVtcHR5LSR7cm93SW5kZXh9YH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bMjBweF0gdy1mdWxsXCJcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2V2ZW50Py50aXRsZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG5cbiAgICAgICAgICB7LyogU2hvdyBtb3JlIGV2ZW50cyBidXR0b24gd2l0aCBhY2N1cmF0ZSBjb3VudCAqL31cbiAgICAgICAgICB7aGFzSGlkZGVuRXZlbnRzICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzIG10LTFcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgICAgICAgICAgICAgIHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgIHNob3dBbGxFdmVudHMoZGF5LCB0b2RheUV2ZW50cylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXRhZy1vdmVyLXJvbGVcbiAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICt7aGlkZGVuRXZlbnRzQ291bnR9IG1vcmVcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuXG4gICAgICB7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG4gICAgICA8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIERyb3BwYWJsZUNlbGxQcm9wcyB7XG4gIGlkOiBzdHJpbmdcbiAgdHlwZTogJ2RheS1jZWxsJyB8ICd0aW1lLWNlbGwnXG4gIGRhdGU6IGRheWpzLkRheWpzXG4gIGhvdXI/OiBudW1iZXJcbiAgbWludXRlPzogbnVtYmVyXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG4gIGlkLFxuICB0eXBlLFxuICBkYXRlLFxuICBob3VyLFxuICBtaW51dGUsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufTogRHJvcHBhYmxlQ2VsbFByb3BzKSB7XG4gIGNvbnN0IHsgb25DZWxsQ2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCwgZGlzYWJsZUNlbGxDbGljayB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB7IGlzT3Zlciwgc2V0Tm9kZVJlZiB9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZCxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlLFxuICAgICAgZGF0ZSxcbiAgICAgIGhvdXIsXG4gICAgICBtaW51dGUsXG4gICAgfSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZUNlbGxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXRlLmhvdXIoaG91ciA/PyAwKS5taW51dGUobWludXRlID8/IDApXG4gICAgbGV0IGVuZERhdGUgPSBzdGFydERhdGUuY2xvbmUoKVxuICAgIGlmIChob3VyICE9PSB1bmRlZmluZWQgJiYgbWludXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuZERhdGUgPSBlbmREYXRlLmhvdXIoaG91cikubWludXRlKG1pbnV0ZSArIDE1KSAvLyBkYXkgdmlldyB0aW1lIHNsb3RzIGFyZSAxNSBtaW51dGVzXG4gICAgfSBlbHNlIGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuZERhdGUgPSBlbmREYXRlLmhvdXIoaG91ciArIDEpLm1pbnV0ZSgwKSAvLyB3ZWVrIHZpZXcgdGltZSBzbG90cyBhcmUgMSBob3VyXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZERhdGUgPSBlbmREYXRlLmhvdXIoMjMpLm1pbnV0ZSg1OSkgLy8gbW9udGggdmlldyBmdWxsIGRheVxuICAgIH1cblxuICAgIG9uQ2VsbENsaWNrKHN0YXJ0RGF0ZSwgZW5kRGF0ZSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGlzT3ZlciAmJiAhZGlzYWJsZURyYWdBbmREcm9wICYmICdiZy1hY2NlbnQnLFxuICAgICAgICBkaXNhYmxlQ2VsbENsaWNrID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDZWxsQ2xpY2t9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBNb250aEhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBNb250aEhlYWRlcjogUmVhY3QuRkM8TW9udGhIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgY3VycmVudExvY2FsZSxcbiAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIFJlb3JkZXIgd2VlayBkYXlzIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZGF5cyA9IGRheWpzLndlZWtkYXlzKCkubWFwKChkYXkpID0+IGRheS50b0xvd2VyQ2FzZSgpKVxuICAgIGNvbnN0IHNob3J0RGF5cyA9IGRheWpzLndlZWtkYXlzU2hvcnQoKS5tYXAoKGRheSkgPT4gZGF5LnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyBSb3RhdGUgdGhlIGFycmF5IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXJzdERheU9mV2VlazsgaSsrKSB7XG4gICAgICBjb25zdCBkYXlUb01vdmUgPSBkYXlzLnNoaWZ0KClcbiAgICAgIGNvbnN0IHNob3J0RGF5VG9Nb3ZlID0gc2hvcnREYXlzLnNoaWZ0KClcbiAgICAgIGlmIChkYXlUb01vdmUpIHtcbiAgICAgICAgZGF5cy5wdXNoKGRheVRvTW92ZSlcbiAgICAgIH1cbiAgICAgIGlmIChzaG9ydERheVRvTW92ZSkge1xuICAgICAgICBzaG9ydERheXMucHVzaChzaG9ydERheVRvTW92ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBkYXlzLCBzaG9ydERheXMgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2ZpcnN0RGF5T2ZXZWVrLCBjdXJyZW50TG9jYWxlXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncmlkIGdyaWQtY29scy03IGJvcmRlci1iJyxcbiAgICAgICAgc3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMTAwJyxcbiAgICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuICAgID5cbiAgICAgIHt3ZWVrRGF5cy5kYXlzLm1hcCgod2Vla0RheSwgaW5kZXgpID0+IChcbiAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBrZXk9e3dlZWtEYXl9IG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgIGtleT17d2Vla0RheX1cbiAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjI1LFxuICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJweS0yIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIGJvcmRlci1yIGZpcnN0OmJvcmRlci1sXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vla2RheS1oZWFkZXItJHt3ZWVrRGF5fWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIHRleHQtc20gc206aW5saW5lXCI+e3dlZWtEYXl9PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyBzbTpoaWRkZW5cIj5cbiAgICAgICAgICAgICAge3dlZWtEYXlzLnNob3J0RGF5c1tpbmRleF19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjggLy8gcHggKGgtNylcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcbiAgc3VuZGF5OiAwLFxuICBtb25kYXk6IDEsXG4gIHR1ZXNkYXk6IDIsXG4gIHdlZG5lc2RheTogMyxcbiAgdGh1cnNkYXk6IDQsXG4gIGZyaWRheTogNSxcbiAgc2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuICAwOiAnc3VuZGF5JyxcbiAgMTogJ21vbmRheScsXG4gIDI6ICd0dWVzZGF5JyxcbiAgMzogJ3dlZG5lc2RheScsXG4gIDQ6ICd0aHVyc2RheScsXG4gIDU6ICdmcmlkYXknLFxuICA2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7XG4gIERBWV9OVU1CRVJfSEVJR0hULFxuICBFVkVOVF9CQVJfSEVJR0hULFxuICBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIFByb2Nlc3NlZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG4gIGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgd2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG4gIHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG4gIGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG4gIHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcbn1cblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcyB7XG4gIGRheXM6IGRheWpzLkRheWpzW11cbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgPSAoe1xuICBkYXlzLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBkYXlNYXhFdmVudHMgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3Qgd2Vla1N0YXJ0ID0gZGF5c1swXS5zdGFydE9mKCdkYXknKVxuICBjb25zdCB3ZWVrRW5kID0gZGF5c1s2XS5lbmRPZignZGF5JylcblxuICAvLyBHZXQgYWxsIGV2ZW50cyB0aGF0IGludGVyc2VjdCB3aXRoIHRoaXMgd2Vla1xuICBjb25zdCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHdlZWtTdGFydCwgd2Vla0VuZClcblxuICAvLyBTZXBhcmF0ZSBtdWx0aS1kYXkgYW5kIHNpbmdsZS1kYXkgZXZlbnRzXG4gIGNvbnN0IG11bHRpRGF5RXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoXG4gICAgKGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgJ2RheScpID4gMFxuICApXG4gIGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKFxuICAgIChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsICdkYXknKSA9PT0gMFxuICApXG5cbiAgLy8gU29ydCBtdWx0aS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IGRhdGUsIHRoZW4gYnkgZHVyYXRpb25cbiAgY29uc3Qgc29ydGVkTXVsdGlEYXkgPSBbLi4ubXVsdGlEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBzdGFydERpZmYgPSBhLnN0YXJ0LmRpZmYoYi5zdGFydClcbiAgICBpZiAoc3RhcnREaWZmICE9PSAwKSB7XG4gICAgICByZXR1cm4gc3RhcnREaWZmXG4gICAgfVxuICAgIHJldHVybiBiLmVuZC5kaWZmKGIuc3RhcnQpIC0gYS5lbmQuZGlmZihhLnN0YXJ0KSAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG4gIH0pXG5cbiAgLy8gU29ydCBzaW5nbGUtZGF5IGV2ZW50cyBieSBzdGFydCB0aW1lXG4gIGNvbnN0IHNvcnRlZFNpbmdsZURheSA9IFsuLi5zaW5nbGVEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+XG4gICAgYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gIClcblxuICAvLyBDcmVhdGUgNyB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3NcbiAgY29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gW11cbiAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgIGdyaWRbcm93XSA9IFtdXG4gICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgNzsgY29sKyspIHtcbiAgICAgIGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogZmFsc2UsIGV2ZW50OiBudWxsIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9jZXNzZWRFdmVudHM6IFByb2Nlc3NlZEV2ZW50W10gPSBbXVxuXG4gIC8vIFN0ZXAgMTogQXNzaWduIHBvc2l0aW9ucyB0byBtdWx0aS1kYXkgZXZlbnRzIGZpcnN0XG4gIGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkTXVsdGlEYXkpIHtcbiAgICBjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoJ2RheScpLCB3ZWVrU3RhcnQpXG4gICAgY29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oZXZlbnQuZW5kLnN0YXJ0T2YoJ2RheScpLCB3ZWVrRW5kKVxuICAgIGNvbnN0IHN0YXJ0Q29sID0gTWF0aC5tYXgoMCwgZXZlbnRTdGFydC5kaWZmKHdlZWtTdGFydCwgJ2RheScpKVxuICAgIGNvbnN0IGVuZENvbCA9IE1hdGgubWluKDYsIGV2ZW50RW5kLmRpZmYod2Vla1N0YXJ0LCAnZGF5JykpXG5cbiAgICAvLyBUcnkgdG8gcGxhY2UgdGhlIGV2ZW50IHN0YXJ0aW5nIGZyb20gaXRzIG9yaWdpbmFsIHN0YXJ0IGNvbHVtblxuICAgIGxldCBwbGFjZWRTdWNjZXNzZnVsbHkgPSBmYWxzZVxuXG4gICAgLy8gRmlyc3QgdHJ5OiBwbGFjZSBmcm9tIG9yaWdpbmFsIHN0YXJ0IHBvc2l0aW9uXG4gICAgbGV0IGFzc2lnbmVkUm93ID0gLTFcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICBsZXQgY2FuUGxhY2UgPSB0cnVlXG4gICAgICBmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgaWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgICAgY2FuUGxhY2UgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjYW5QbGFjZSkge1xuICAgICAgICBhc3NpZ25lZFJvdyA9IHJvd1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50IHRvIGFsbCBpdHMgY29sdW1uc1xuICAgIGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcbiAgICAgIGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICBncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICBjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICBsZWZ0OiAoc3RhcnRDb2wgLyA3KSAqIDEwMCxcbiAgICAgICAgd2lkdGg6IChzcGFuRGF5cyAvIDcpICogMTAwLFxuICAgICAgICB0b3A6XG4gICAgICAgICAgREFZX05VTUJFUl9IRUlHSFQgK1xuICAgICAgICAgIEdBUF9CRVRXRUVOX0VMRU1FTlRTICtcbiAgICAgICAgICBhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgR0FQX0JFVFdFRU5fRUxFTUVOVFMpLFxuICAgICAgICBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICB9KVxuICAgICAgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIElmIGNvdWxkbid0IHBsYWNlIGF0IG9yaWdpbmFsIHBvc2l0aW9uLCB0cnkgdHJ1bmNhdGVkIHZlcnNpb25zIHN0YXJ0aW5nIGZyb20gbGF0ZXIgZGF5c1xuICAgIGlmICghcGxhY2VkU3VjY2Vzc2Z1bGx5KSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgdHJ5U3RhcnRDb2wgPSBzdGFydENvbCArIDE7XG4gICAgICAgIHRyeVN0YXJ0Q29sIDw9IGVuZENvbDtcbiAgICAgICAgdHJ5U3RhcnRDb2wrK1xuICAgICAgKSB7XG4gICAgICAgIC8vIFRyeSB0byBwbGFjZSB0aGUgdHJ1bmNhdGVkIGV2ZW50IHN0YXJ0aW5nIGZyb20gdGhpcyBjb2x1bW5cbiAgICAgICAgbGV0IHRydW5jYXRlZEFzc2lnbmVkUm93ID0gLTFcbiAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgICAgIGxldCBjYW5QbGFjZSA9IHRydWVcbiAgICAgICAgICBmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgICAgIGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICAgICAgICBjYW5QbGFjZSA9IGZhbHNlXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYW5QbGFjZSkge1xuICAgICAgICAgICAgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSByb3dcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgZm91bmQgYSByb3cgZm9yIHRoZSB0cnVuY2F0ZWQgdmVyc2lvbiwgcGxhY2UgaXRcbiAgICAgICAgaWYgKHRydW5jYXRlZEFzc2lnbmVkUm93ICE9PSAtMSkge1xuICAgICAgICAgIGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICAgICAgZ3JpZFt0cnVuY2F0ZWRBc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgdGhlIHRydW5jYXRlZCByZW5kZXJpbmdcbiAgICAgICAgICBjb25zdCB0cnVuY2F0ZWRTcGFuRGF5cyA9IGVuZENvbCAtIHRyeVN0YXJ0Q29sICsgMVxuICAgICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgIGxlZnQ6ICh0cnlTdGFydENvbCAvIDcpICogMTAwLFxuICAgICAgICAgICAgd2lkdGg6ICh0cnVuY2F0ZWRTcGFuRGF5cyAvIDcpICogMTAwLFxuICAgICAgICAgICAgdG9wOlxuICAgICAgICAgICAgICBEQVlfTlVNQkVSX0hFSUdIVCArXG4gICAgICAgICAgICAgIEdBUF9CRVRXRUVOX0VMRU1FTlRTICtcbiAgICAgICAgICAgICAgdHJ1bmNhdGVkQXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0cnVuY2F0ZWRBc3NpZ25lZFJvdyxcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrIC8vIFN1Y2Nlc3NmdWxseSBwbGFjZWQsIHN0b3AgdHJ5aW5nIG90aGVyIHN0YXJ0IHBvc2l0aW9uc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU3RlcCAyOiBGaWxsIGdhcHMgd2l0aCBzaW5nbGUtZGF5IGV2ZW50c1xuICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZFNpbmdsZURheSkge1xuICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZignZGF5JyksIHdlZWtTdGFydClcbiAgICBjb25zdCBjb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYod2Vla1N0YXJ0LCAnZGF5JykpXG5cbiAgICAvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG4gICAgbGV0IGFzc2lnbmVkUm93ID0gLTFcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICBpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgIGFzc2lnbmVkUm93ID0gcm93XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7XG4gICAgICAgIGxlZnQ6IChjb2wgLyA3KSAqIDEwMCxcbiAgICAgICAgd2lkdGg6ICgxIC8gNykgKiAxMDAsXG4gICAgICAgIHRvcDpcbiAgICAgICAgICBEQVlfTlVNQkVSX0hFSUdIVCArXG4gICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgIGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgcG9zaXRpb246IGFzc2lnbmVkUm93LFxuICAgICAgICAuLi5ldmVudCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgfSBmcm9tICdAL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgV2Vla0V2ZW50c0xheWVyUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCBXZWVrRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFdlZWtFdmVudHNMYXllclByb3BzPiA9ICh7IGRheXMgfSkgPT4ge1xuICBjb25zdCB3ZWVrU3RhcnQgPSBkYXlzWzBdXG4gIGNvbnN0IHByb2Nlc3NlZFdlZWtFdmVudHMgPSB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzKHsgZGF5cyB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0yMCBvdmVyZmxvdy1jbGlwXCI+XG4gICAgICB7cHJvY2Vzc2VkV2Vla0V2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgZXZlbnQtJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQuZm9ybWF0KFxuICAgICAgICAgICAgICAnWVlZWS1NTS1ERCdcbiAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1ldmVudC1sYXllci1ldmVudC0ke2V2ZW50LmlkfWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERyYWdnYWJsZUV2ZW50XG4gICAgICAgICAgICAgIGVsZW1lbnRJZD17YGV2ZW50LSR7ZXZlbnQuaWR9LSR7XG4gICAgICAgICAgICAgICAgZXZlbnQucG9zaXRpb25cbiAgICAgICAgICAgICAgfS0ke3dlZWtTdGFydC5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHdlZWtPZlllYXIgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtPZlllYXInXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrQWxsRGF5Um93IH0gZnJvbSAnLi4vd2Vlay1hbGwtZGF5LXJvdydcbmltcG9ydCB7IFdlZWtIZWFkZXIgfSBmcm9tICcuLi93ZWVrLWhlYWRlcidcbmltcG9ydCB7IFdlZWtUaW1lR3JpZCB9IGZyb20gJy4uL3dlZWstdGltZS1ncmlkJ1xuLy8gQWRkIHdlZWtPZlllYXIgcGx1Z2luIHRvIGRheWpzXG5kYXlqcy5leHRlbmQod2Vla09mWWVhcilcblxuY29uc3QgV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cIndlZWstdmlld1wiPlxuICAgICAgey8qIFdlZWsgaGVhZGVyIHJvdyAtIGZpeGVkICovfVxuICAgICAgPFdlZWtIZWFkZXIgY2xhc3NOYW1lPVwiaC1bNXJlbV1cIiAvPlxuXG4gICAgICB7LyogU2Nyb2xsYWJsZSB0aW1lIGdyaWQgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IG92ZXJmbG93LWF1dG8gaC1bY2FsYygxMDAlLTVyZW0pXVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay1zY3JvbGwtYXJlYVwiXG4gICAgICA+XG4gICAgICAgIHsvKiBBbGwtZGF5IGV2ZW50cyByb3cgLSBkeW5hbWljIGhlaWdodCBiYXNlZCBvbiBjb250ZW50ICovfVxuICAgICAgICA8V2Vla0FsbERheVJvdyAvPlxuICAgICAgICA8V2Vla1RpbWVHcmlkIC8+XG4gICAgICA8L1Njcm9sbEFyZWE+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgV2Vla1ZpZXdcbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICcuLi9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4uL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBQcm9jZXNzZWRDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCwgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBjb25zdCBXZWVrQWxsRGF5Um93OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBmaXJzdERheU9mV2VlayB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBzdGFydCBhbmQgZW5kIG9mIGN1cnJlbnQgd2VlayBiYXNlZCBvbiBmaXJzdERheU9mV2VlayBzZXR0aW5nXG4gIGNvbnN0IHN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuc3RhcnRPZignd2VlaycpLmRheShmaXJzdERheU9mV2VlaylcbiAgLy8gSWYgY3VycmVudCBkYXRlIGlzIGJlZm9yZSB0aGUgc3RhcnQgb2Ygd2VlaywgbW92ZSBiYWNrIG9uZSB3ZWVrXG4gIGNvbnN0IGFkanVzdGVkU3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5pc0JlZm9yZShzdGFydE9mV2VlaylcbiAgICA/IHN0YXJ0T2ZXZWVrLnN1YnRyYWN0KDEsICd3ZWVrJylcbiAgICA6IHN0YXJ0T2ZXZWVrXG4gIGNvbnN0IGVuZE9mV2VlayA9IGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKDYsICdkYXknKVxuXG4gIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBkYXlzIGZvciB0aGUgY3VycmVudCB3ZWVrXG4gIGNvbnN0IHdlZWtEYXlzID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICB3ZWVrRGF5cy5wdXNoKGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKGksICdkYXknKSlcbiAgfVxuXG4gIC8vIEdldCBldmVudHMgdGhhdCBtaWdodCBvdmVybGFwIHdpdGggdGhpcyB3ZWVrIChleHBhbmQgc2VhcmNoIHJhbmdlKVxuICBjb25zdCBleHBhbmRlZFN0YXJ0RGF0ZSA9IGFkanVzdGVkU3RhcnRPZldlZWsuc3VidHJhY3QoNiwgJ2RheScpIC8vIExvb2sgNiBkYXlzIGJlZm9yZSB3ZWVrIHN0YXJ0XG4gIGNvbnN0IGV4cGFuZGVkRW5kRGF0ZSA9IGVuZE9mV2Vlay5hZGQoNiwgJ2RheScpIC8vIExvb2sgNiBkYXlzIGFmdGVyIHdlZWsgZW5kXG4gIGNvbnN0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZXhwYW5kZWRTdGFydERhdGUsIGV4cGFuZGVkRW5kRGF0ZSlcblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcbiAgY29uc3QgYWxsRGF5RXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hbGxEYXkpXG5cbiAgLy8gUHJvY2VzcyBhbmQgbGF5b3V0IGFsbC1kYXkgZXZlbnRzIHRvIGF2b2lkIG92ZXJsYXBwaW5nXG4gIGNvbnN0IHsgcHJvY2Vzc2VkQWxsRGF5RXZlbnRzIH0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBTb3J0IGFsbC1kYXkgZXZlbnRzIGJ5IHN0YXJ0IGRhdGUgYW5kIHRoZW4gYnkgZHVyYXRpb24gKGxvbmdlciBldmVudHMgZmlyc3QpXG4gICAgY29uc3Qgc29ydGVkRXZlbnRzID0gWy4uLmFsbERheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgLy8gRmlyc3QgY29tcGFyZSBieSBzdGFydCBkYXRlXG4gICAgICBjb25zdCBzdGFydERpZmYgPSBhLnN0YXJ0LmRpZmYoYi5zdGFydClcbiAgICAgIGlmIChzdGFydERpZmYgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0YXJ0RGlmZlxuICAgICAgfVxuXG4gICAgICAvLyBJZiBzdGFydCBkYXRlcyBhcmUgdGhlIHNhbWUsIGxvbmdlciBldmVudHMgY29tZSBmaXJzdFxuICAgICAgY29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0KVxuICAgICAgY29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0KVxuICAgICAgcmV0dXJuIGJEdXJhdGlvbiAtIGFEdXJhdGlvblxuICAgIH0pXG5cbiAgICAvLyBUcmFjayBwb3NpdGlvbnMgaW4gcm93c1xuICAgIGNvbnN0IHJvd3M6IHsgZW5kOiBkYXlqcy5EYXlqczsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfVtdW10gPSBbXVxuICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudFtdID0gW11cblxuICAgIHNvcnRlZEV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgLy8gQ2FsY3VsYXRlIHdoaWNoIGRheXMgdGhpcyBldmVudCBzcGFuc1xuICAgICAgY29uc3QgZXZlbnRTdGFydCA9IGV2ZW50LnN0YXJ0LmlzQmVmb3JlKGFkanVzdGVkU3RhcnRPZldlZWspXG4gICAgICAgID8gYWRqdXN0ZWRTdGFydE9mV2Vla1xuICAgICAgICA6IGV2ZW50LnN0YXJ0XG4gICAgICBjb25zdCBldmVudEVuZCA9IGV2ZW50LmVuZC5pc0FmdGVyKGVuZE9mV2VlaykgPyBlbmRPZldlZWsgOiBldmVudC5lbmRcblxuICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIGFzIHBlcmNlbnRhZ2Ugb2YgdGhlIHdlZWsgd2lkdGhcbiAgICAgIGNvbnN0IHN0YXJ0RGF5SW5kZXggPSBNYXRoLm1heChcbiAgICAgICAgMCxcbiAgICAgICAgZXZlbnRTdGFydC5kaWZmKGFkanVzdGVkU3RhcnRPZldlZWssICdkYXknKVxuICAgICAgKVxuICAgICAgY29uc3QgZW5kRGF5SW5kZXggPSBNYXRoLm1pbig2LCBldmVudEVuZC5kaWZmKGFkanVzdGVkU3RhcnRPZldlZWssICdkYXknKSlcblxuICAgICAgY29uc3QgbGVmdCA9IChzdGFydERheUluZGV4IC8gNykgKiAxMDBcbiAgICAgIGNvbnN0IHdpZHRoID0gKChlbmREYXlJbmRleCAtIHN0YXJ0RGF5SW5kZXggKyAxKSAvIDcpICogMTAwXG5cbiAgICAgIC8vIEZpbmQgYSByb3cgd2hlcmUgdGhpcyBldmVudCBjYW4gZml0XG4gICAgICBsZXQgcm93SW5kZXggPSAwXG4gICAgICBsZXQgcGxhY2VkID0gZmFsc2VcblxuICAgICAgd2hpbGUgKCFwbGFjZWQpIHtcbiAgICAgICAgaWYgKHJvd0luZGV4ID49IHJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHJvdyBpZiBuZWVkZWRcbiAgICAgICAgICByb3dzLnB1c2goW10pXG4gICAgICAgICAgcGxhY2VkID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgZXZlbnQgY2FuIGZpdCBpbiB0aGUgY3VycmVudCByb3dcbiAgICAgICAgICBjb25zdCByb3cgPSByb3dzW3Jvd0luZGV4XVxuICAgICAgICAgIGNvbnN0IGNhbkZpdCA9IHJvdy5ldmVyeSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgZXZlbnRTdGFydC5pc0FmdGVyKGl0ZW0uZW5kKSB8fFxuICAgICAgICAgICAgICBldmVudEVuZC5pc0JlZm9yZShpdGVtLmV2ZW50LnN0YXJ0KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoY2FuRml0KSB7XG4gICAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd0luZGV4KytcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGV2ZW50IHRvIHRoZSByb3dcbiAgICAgIHJvd3Nbcm93SW5kZXhdLnB1c2goeyBlbmQ6IGV2ZW50RW5kLCBldmVudCB9KVxuXG4gICAgICAvLyBBZGQgcHJvY2Vzc2VkIGV2ZW50IHdpdGggY29ycmVjdCBwb3NpdGlvbmluZ1xuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgbGVmdCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIHRvcDogcm93SW5kZXggKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICBhbGxEYXk6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc2VkQWxsRGF5RXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG4gICAgICBhbGxEYXlSb3dzQ291bnQ6IE1hdGgubWF4KDEsIHJvd3MubGVuZ3RoKSwgLy8gQXQgbGVhc3QgMSByb3csIGV2ZW4gaWYgZW1wdHlcbiAgICB9XG4gIH0sIFthbGxEYXlFdmVudHMsIGFkanVzdGVkU3RhcnRPZldlZWssIGVuZE9mV2Vla10pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy1bYXV0b18xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJdIGdyaWQtcm93cy0xIHJlbGF0aXZlXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay1hbGwtZGF5LXJvd1wiXG4gICAgPlxuICAgICAgey8qIExlZnQgbGFiZWwgZm9yIGFsbC1kYXkgZXZlbnRzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTE0IGZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJvcmRlci14IGJvcmRlci1iIHByLTIgbWluLWgtMTZcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHNcIj5cbiAgICAgICAgICBBbGwtZGF5XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRHJvcHBhYmxlIGNlbGxzIGZvciBlYWNoIGRheSAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSkgPT4gKFxuICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgIGtleT17YGFsbC1kYXktJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICBpZD17YGFsbC1kYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgICAgZGF0ZT17ZGF5fVxuICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCBoLWZ1bGwgZmxleC0xIGN1cnNvci1wb2ludGVyIGJvcmRlci1yIGJvcmRlci1iXCJcbiAgICAgICAgLz5cbiAgICAgICkpfVxuXG4gICAgICB7LyogQWxsLWRheSBldmVudCBibG9ja3MgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwLTEgY29sLXNwYW4tNyBjb2wtc3RhcnQtMlwiPlxuICAgICAgICB7cHJvY2Vzc2VkQWxsRGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgYWxsLWRheS1jb250YWluZXItJHtldmVudC5pZH1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuICAgICAgICAgICAgICB0b3A6IGAke2V2ZW50LnRvcH1weGAsXG4gICAgICAgICAgICAgIGhlaWdodDogYCR7ZXZlbnQuaGVpZ2h0fXB4YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERyYWdnYWJsZUV2ZW50XG4gICAgICAgICAgICAgIGVsZW1lbnRJZD17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGtleT17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIG92ZXJmbG93LWNsaXAgdGV4dC14cyBhYnNvbHV0ZVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW50ZXJmYWNlIFdlZWtIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0hlYWRlcjogUmVhY3QuRkM8V2Vla0hlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50RGF0ZSxcbiAgICBjdXJyZW50TG9jYWxlLFxuICAgIHNlbGVjdERhdGUsXG4gICAgb3BlbkV2ZW50Rm9ybSxcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBzdGFydCBhbmQgZW5kIG9mIGN1cnJlbnQgd2VlayBiYXNlZCBvbiBmaXJzdERheU9mV2VlayBzZXR0aW5nXG4gIGNvbnN0IHN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuc3RhcnRPZignd2VlaycpLmRheShmaXJzdERheU9mV2VlaylcbiAgLy8gSWYgY3VycmVudCBkYXRlIGlzIGJlZm9yZSB0aGUgc3RhcnQgb2Ygd2VlaywgbW92ZSBiYWNrIG9uZSB3ZWVrXG4gIGNvbnN0IGFkanVzdGVkU3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5pc0JlZm9yZShzdGFydE9mV2VlaylcbiAgICA/IHN0YXJ0T2ZXZWVrLnN1YnRyYWN0KDEsICd3ZWVrJylcbiAgICA6IHN0YXJ0T2ZXZWVrXG5cbiAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIGRheXMgZm9yIHRoZSBjdXJyZW50IHdlZWtcbiAgY29uc3Qgd2Vla0RheXMgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgIHdlZWtEYXlzLnB1c2goYWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoaSwgJ2RheScpKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICAvLyBjc3MgZ3JpZCBoZWFkZXIgd2l0aCBsZWYgY29ybmVyIGNlbGwgc2hvcnRlciB0aGFuIHRoZSByZXN0XG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLVthdXRvXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl0gZ3JpZC1yb3dzLTEnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0xMDAnLFxuICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstaGVhZGVyXCJcbiAgICA+XG4gICAgICB7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMSB3LTE0IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIteCBib3JkZXItYiBwLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzXCI+V2Vlazwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGF5IGhlYWRlciBjZWxscyAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGJvcmRlci1iJyxcbiAgICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZGF5KVxuICAgICAgICAgICAgICAgIG9wZW5FdmVudEZvcm0oZGF5KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWhlYWRlci0ke2RheS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTcgc206dy03IHNtOnRleHQtc20nLFxuICAgICAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuXG5pbnRlcmZhY2UgUHJvY2Vzc2VkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgbGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICB3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2VcbiAgdG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgaGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2VcbiAgekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHsgZGF5IH06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQcm9jZXNzZWRFdmVudFtdPigoKSA9PiB7XG4gICAgbGV0IGV2ZW50c0ZvckRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICAgIGRheS5lbmRPZignZGF5JylcbiAgICApXG5cbiAgICAvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcbiAgICBldmVudHNGb3JEYXkgPSBldmVudHNGb3JEYXlcbiAgICAgIC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG4gICAgaWYgKGV2ZW50c0ZvckRheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMTogR3JvdXAgZXZlbnRzIGludG8gY2x1c3RlcnMgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG4gICAgY29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cbiAgICBsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG4gICAgbGV0IGxhc3RFdmVudEVuZDogZGF5anMuRGF5anMgfCBudWxsID0gbnVsbFxuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzRm9yRGF5KSB7XG4gICAgICBpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuICAgICAgICBpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudENsdXN0ZXIgPSBbXVxuICAgICAgfVxuICAgICAgY3VycmVudENsdXN0ZXIucHVzaChldmVudClcbiAgICAgIGxhc3RFdmVudEVuZCA9IGxhc3RFdmVudEVuZFxuICAgICAgICA/IGRheWpzLm1heChsYXN0RXZlbnRFbmQsIGV2ZW50LmVuZClcbiAgICAgICAgOiBldmVudC5lbmRcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG4gICAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRFdmVudFtdID0gW11cbiAgICBmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBTaW5nbGUgZXZlbnQgdGFrZXMgZnVsbCB3aWR0aFxuICAgICAgICBjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuaG91cigpICsgZXZlbnQuc3RhcnQubWludXRlKCkgLyA2MFxuICAgICAgICBsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5ob3VyKCkgKyBldmVudC5lbmQubWludXRlKCkgLyA2MFxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxEdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWVcbiAgICAgICAgY29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIDI0KSAqIDEwMFxuICAgICAgICBjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIDI0KSAqIDEwMFxuICAgICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7IC4uLmV2ZW50LCBsZWZ0OiAwLCB3aWR0aDogMTAwLCB0b3AsIGhlaWdodCB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBNdWx0aXBsZSBldmVudHMgLSB1c2UgbGF5ZXJlZCBwb3NpdGlvbmluZyBhcHByb2FjaFxuICAgICAgLy8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gWy4uLmNsdXN0ZXJdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcbiAgICAgICAgY29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJylcblxuICAgICAgICAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG4gICAgICAgIGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuICAgICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICB9KVxuXG4gICAgICAvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcbiAgICAgIGNvbnN0IHRvdGFsRXZlbnRzID0gc29ydGVkRXZlbnRzLmxlbmd0aFxuXG4gICAgICAvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuICAgICAgLy8gRmV3ZXIgZXZlbnRzID0gbGFyZ2VyIGluZGl2aWR1YWwgb2Zmc2V0cywgbW9yZSBldmVudHMgPSBzbWFsbGVyIG9mZnNldHNcbiAgICAgIGxldCBtYXhPZmZzZXQ6IG51bWJlclxuICAgICAgaWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDI1IC8vIDI1JSBvZmZzZXQgZm9yIDIgZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSAzKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuICAgICAgfSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gNCkge1xuICAgICAgICBtYXhPZmZzZXQgPSA2MCAvLyA2MCUgdG90YWwgZm9yIDQgZXZlbnRzICgyMCUgZWFjaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heE9mZnNldCA9IDcwIC8vIDcwJSB0b3RhbCBmb3IgNSsgZXZlbnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc29ydGVkRXZlbnRzW2ldXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmhvdXIoKSArIGV2ZW50LnN0YXJ0Lm1pbnV0ZSgpIC8gNjBcbiAgICAgICAgbGV0IGVuZFRpbWUgPSBldmVudC5lbmQuaG91cigpICsgZXZlbnQuZW5kLm1pbnV0ZSgpIC8gNjBcblxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICAgICAgICBjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gMjQpICogMTAwXG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gMjQpICogMTAwXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcbiAgICAgICAgbGV0IGxlZnQ6IG51bWJlclxuICAgICAgICBsZXQgd2lkdGg6IG51bWJlclxuICAgICAgICBsZXQgekluZGV4OiBudW1iZXJcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoIGF0IGJvdHRvbVxuICAgICAgICAgIGxlZnQgPSAwXG4gICAgICAgICAgd2lkdGggPSAxMDBcbiAgICAgICAgICB6SW5kZXggPSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3Vic2VxdWVudCBldmVudHMgYXJlIG9mZnNldCBkeW5hbWljYWxseSBiYXNlZCBvbiB0b3RhbCBldmVudCBjb3VudFxuICAgICAgICAgIGxlZnQgPSBvZmZzZXRQZXJFdmVudCAqIGlcbiAgICAgICAgICB3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG4gICAgICAgICAgekluZGV4ID0gaSArIDEgLy8gSGlnaGVyIHotaW5kZXggZm9yIGV2ZW50cyBvbiB0b3BcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIHRvcCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgekluZGV4LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbiAgfSwgW2RheSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlXSlcblxuICByZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJy4uLy4uL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF5RXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheTogZGF5anMuRGF5anMgLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5RXZlbnRzTGF5ZXI6IFJlYWN0LkZDPERheUV2ZW50c0xheWVyUHJvcHM+ID0gKHtcbiAgZGF5LFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheSB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgei0zMFwiXG4gICAgPlxuICAgICAge3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnlWZXJ5VW5pcXVlS2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5LmZvcm1hdChcbiAgICAgICAgICAnWVlZWS1NTS1ERCdcbiAgICAgICAgKX1gXG4gICAgICAgIGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2Bjb250YWluZXItJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuICAgICAgICAgICAgICB0b3A6IGAke2V2ZW50LnRvcH0lYCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BkcmFnZ2FibGUtJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG4gICAgICAgICAgICAgICAgJ1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlFdmVudHNMYXllciB9IGZyb20gJy4uL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuLi9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcblxuY29uc3QgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaSkubWFwKChob3VyKSA9PlxuICBkYXlqcygpLmhvdXIoaG91cikubWludXRlKDApXG4pXG5cbmludGVyZmFjZSBXZWVrRGF5Q29sUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0RheUNvbDogUmVhY3QuRkM8V2Vla0RheUNvbFByb3BzPiA9ICh7IGRheSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgIGNsYXNzTmFtZT1cImNvbC1zcGFuLTEgcmVsYXRpdmUgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXJcIlxuICAgID5cbiAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgY29uc3QgaG91ciA9IHRpbWUuaG91cigpXG4gICAgICAgIGNvbnN0IGNlbGxEYXRlID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMjAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInXG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pfVxuXG4gICAgICB7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuICAgICAgPERheUV2ZW50c0xheWVyXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktZXZlbnRzLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRheT17ZGF5fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrRGF5Q29sIH0gZnJvbSAnLi93ZWVrLWRheS1jb2wnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5leHBvcnQgY29uc3QgV2Vla1RpbWVHcmlkOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IHN0YXJ0IGFuZCBlbmQgb2YgY3VycmVudCB3ZWVrIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrIHNldHRpbmdcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCd3ZWVrJykuZGF5KGZpcnN0RGF5T2ZXZWVrKVxuICAvLyBJZiBjdXJyZW50IGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB3ZWVrLCBtb3ZlIGJhY2sgb25lIHdlZWtcbiAgY29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrKVxuICAgID8gc3RhcnRPZldlZWsuc3VidHJhY3QoMSwgJ3dlZWsnKVxuICAgIDogc3RhcnRPZldlZWtcblxuICAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZGF5cyBmb3IgdGhlIGN1cnJlbnQgd2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgd2Vla0RheXMucHVzaChhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChpLCAnZGF5JykpXG4gIH1cblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcblxuICAvLyBGaW5kIGlmIGN1cnJlbnQgZGF5IGlzIGluIHRoZSBkaXNwbGF5ZWQgd2Vla1xuICBjb25zdCB0b2RheUluZGV4ID0gd2Vla0RheXMuZmluZEluZGV4KChkYXkpID0+IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpKVxuICBjb25zdCBpc0N1cnJlbnRXZWVrID0gdG9kYXlJbmRleCAhPT0gLTFcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay10aW1lLWdyaWRcIlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIGdyaWQgZ3JpZC1jb2xzLVthdXRvX3JlcGVhdCg3LDFmcildIGdyaWQtcm93cy1bcmVwZWF0KDI0LG1pbm1heCg2MHB4LCAxZnIpKV1cIlxuICAgID5cbiAgICAgIHsvKiBUaW1lIGxhYmVscyBjb2x1bW4gLSBmaXhlZCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXRpbWUtbGFiZWxzXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiei0xMCBjb2wtc3Bhbi0xIHctMTQgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXhcIlxuICAgICAgPlxuICAgICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNjBweF0gYm9yZGVyLWIgdGV4dC1yaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgICAgICB9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPFdlZWtEYXlDb2wga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9IGRheT17ZGF5fSAvPlxuICAgICAgKSl9XG5cbiAgICAgIHsvKiBDdXJyZW50IHRpbWUgaW5kaWNhdG9yICovfVxuICAgICAge2lzQ3VycmVudFdlZWsgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLWN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgei00MFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHRvcDogYCR7KGRheWpzKCkuaG91cigpICsgZGF5anMoKS5taW51dGUoKSAvIDYwKSAqIDYwfXB4YCxcbiAgICAgICAgICAgIGxlZnQ6IGAke3RvZGF5SW5kZXggKiAoMTAwIC8gNyl9JWAsXG4gICAgICAgICAgICB3aWR0aDogYCR7MTAwIC8gN30lYCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLXQgYm9yZGVyLXJlZC01MDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiLW10LTEgbWwtMSBoLTIgdy0yIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAwXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9mZWF0dXJlcy9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IERheUFsbERheVJvdyB9IGZyb20gJy4uL2RheS1hbGwtZGF5LXJvdydcbmltcG9ydCB7IERheUV2ZW50c0xheWVyIH0gZnJvbSAnLi4vZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERheUhlYWRlciB9IGZyb20gJy4uL2RheS1oZWFkZXInXG5pbXBvcnQgeyBEYXlUaW1lQ29sIH0gZnJvbSAnLi4vZGF5LXRpbWUtY29sJ1xuXG4vLyBGb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzLCB3ZSdsbCBkaXZpZGUgZWFjaCBob3VyIGludG8gMTUtbWludXRlIHNlZ21lbnRzXG5jb25zdCB0aW1lU2VnbWVudHMgPSBbMCwgMTUsIDMwLCA0NV1cblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgY2VsbERhdGUgPSBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImRheS12aWV3XCIgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIj5cbiAgICAgIHsvKiBEYXkgaGVhZGVyICovfVxuICAgICAgPERheUhlYWRlciBjbGFzc05hbWU9XCJoLVszcmVtXVwiIC8+XG5cbiAgICAgIHsvKiBUaW1lIGdyaWQgd2l0aG91dCBzY3JvbGxiYXIgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1zY3JvbGwtYXJlYVwiXG4gICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LXktYXV0byBoLVtjYWxjKDEwMCUtM3JlbSldXCJcbiAgICAgID5cbiAgICAgICAgey8qIEFsbC1kYXkgZXZlbnRzIHJvdyAqL31cbiAgICAgICAgPERheUFsbERheVJvdyAvPlxuXG4gICAgICAgIHsvKiBTZXQgYSBmaXhlZCBoZWlnaHQgY29udGFpbmVyIHRoYXQgbWF0Y2hlcyBleGFjdGx5IHRoZSB0b3RhbCBoZWlnaHQgb2YgYWxsIGhvdXIgYmxvY2tzICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktdGltZS1ncmlkXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy04IGRpdmlkZS14IGJvcmRlci14XCJcbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IGAke2hvdXJzLmxlbmd0aCAqIDYwfXB4YCB9fVxuICAgICAgICA+XG4gICAgICAgICAgey8qIFRpbWUgbGFiZWxzIGNvbHVtbiAqL31cbiAgICAgICAgICA8RGF5VGltZUNvbCBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xXCIgLz5cblxuICAgICAgICAgIHsvKiBEYXkgY29sdW1uIHdpdGggZXZlbnRzICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWV2ZW50cy1jb2x1bW5cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgY29sLXNwYW4tNiBoLWZ1bGwgbWQ6Y29sLXNwYW4tN1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIEJhY2tncm91bmQgZ3JpZCBmb3IgdGltZSBzbG90cyAtIGxvd2VzdCBsYXllciAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktYmFja2dyb3VuZC1ncmlkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aG91cnMubWFwKChob3VyLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YGJnLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LSR7aG91ci5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICdISCdcbiAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7LyogMTUtbWludXRlIG1hcmtlciBsaW5lcyAqL31cbiAgICAgICAgICAgICAgICAgIHt0aW1lU2VnbWVudHMuc2xpY2UoMSkubWFwKChtaW51dGVzKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BiZy0ke2hvdXIuZm9ybWF0KCdISCcpfS0ke21pbnV0ZXN9YH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyIGFic29sdXRlIHctZnVsbCBib3JkZXItdCBib3JkZXItZGFzaGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB0b3A6IGAke2luZGV4ICogNjAgKyBtaW51dGVzfXB4YCB9fVxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEludGVyYWN0aXZlIGxheWVyIGZvciB0aW1lIHNsb3RzIC0gbWlkZGxlIGxheWVyIHdpdGggbm8gYm9yZGVycyAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaW50ZXJhY3RpdmUtbGF5ZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlIGluc2V0LTAgei0yMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gdGltZS5ob3VyKClcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS0wMGB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyJyl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX0tMTVgfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e2N1cnJlbnREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIGhvdXI9e2hvdXJ9XG4gICAgICAgICAgICAgICAgICAgICAgbWludXRlPXsxNX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1bMTVweF0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdGltZS1jZWxsLSR7Y2VsbERhdGV9LSR7dGltZS5mb3JtYXQoJ0hIJyl9LTMwYH1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZT17MzB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS00NWB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezQ1fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCBoLVsxNXB4XSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEV2ZW50cyBsYXllciAtIG1pZGRsZS10b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICA8RGF5RXZlbnRzTGF5ZXIgZGF5PXtjdXJyZW50RGF0ZX0gLz5cblxuICAgICAgICAgICAgey8qIEN1cnJlbnQgdGltZSBpbmRpY2F0b3IgLSB0b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICB7aXNUb2RheSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1jdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIGxlZnQtMCB6LTQwIGJvcmRlci10IGJvcmRlci1yZWQtNTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdG9wOiBgJHsoZGF5anMoKS5ob3VyKCkgKyBkYXlqcygpLm1pbnV0ZSgpIC8gNjApICogNjB9cHhgLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC0xIC1tbC0xIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXlWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICcuLi8uLi9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4uLy4uL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBQcm9jZXNzZWRDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGNvbnN0IERheUFsbERheVJvdyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBjdXJyZW50IGRheSdzIGV2ZW50cyAtIHRoaXMgd2lsbCByZWZyZXNoIGF1dG9tYXRpY2FsbHkgd2hlbiBzdG9yZSB1cGRhdGVzXG4gIC8vIGJlY2F1c2UgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIGlzIGEgc2VsZWN0b3IgZnVuY3Rpb24gZnJvbSB0aGUgc3RvcmUgdGhhdCBydW5zIHdoZW5ldmVyIGV2ZW50cyBjaGFuZ2VcbiAgY29uc3QgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgIGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuICAgIGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKVxuICApXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50c1xuICBjb25zdCB7IGFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gT25seSBldmVudHMgZXhwbGljaXRseSBtYXJrZWQgYXMgYWxsRGF5IHNob3VsZCBiZSBpbiB0aGUgYWxsLWRheSBzZWN0aW9uXG4gICAgY29uc3QgYWxsRGF5RXZ0cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hbGxEYXkpXG5cbiAgICAvLyBSZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gICAgY29uc3QgcmVndWxhckV2dHMgPSBkYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmFsbERheSlcblxuICAgIHJldHVybiB7IGFsbERheUV2ZW50czogYWxsRGF5RXZ0cywgcmVndWxhckV2ZW50czogcmVndWxhckV2dHMgfVxuICB9LCBbZGF5RXZlbnRzXSkgLy8gT25seSBkZXBlbmQgb24gdGhlIGRheUV2ZW50cyB3aGljaCBpcyByZWZyZXNoZWQgYXV0b21hdGljYWxseVxuXG4gIC8vIFByb2Nlc3MgYWxsLWRheSBldmVudHMgZm9yIGRpc3BsYXlcbiAgY29uc3QgeyBwcm9jZXNzZWRBbGxEYXlFdmVudHMgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIFNvcnQgYWxsLWRheSBldmVudHMgKGlmIG5lZWRlZClcbiAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSBbLi4uYWxsRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgfSlcblxuICAgIC8vIFRyYWNrIHBvc2l0aW9ucyBpbiByb3dzIGZvciBzdGFja2luZ1xuICAgIGNvbnN0IHJvd3M6IHsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfVtdW10gPSBbXVxuICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudFtdID0gW11cblxuICAgIHNvcnRlZEV2ZW50cy5mb3JFYWNoKChldmVudCwgcm93SW5kZXgpID0+IHtcbiAgICAgIGxldCBwbGFjZWQgPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIXBsYWNlZCkge1xuICAgICAgICBpZiAocm93SW5kZXggPj0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcm93IGlmIG5lZWRlZFxuICAgICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSW4gZGF5IHZpZXcsIHdlIGNhbiBwbGFjZSBvbmUgZXZlbnQgcGVyIHJvdyBhcyB0aGV5IGRvbid0IG92ZXJsYXAgaG9yaXpvbnRhbGx5XG4gICAgICAgICAgLy8gVGhpcyBpcyBzaW1wbGVyIHRoYW4gd2VlayB2aWV3IHdoZXJlIHdlIG5lZWRlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHNcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGV2ZW50IHRvIHRoZSByb3dcbiAgICAgIHJvd3Nbcm93SW5kZXhdLnB1c2goeyBldmVudCB9KVxuXG4gICAgICAvLyBBZGQgcHJvY2Vzc2VkIGV2ZW50IHdpdGggY29ycmVjdCBwb3NpdGlvbmluZ1xuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgdG9wOiByb3dJbmRleCAqIEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWFsbC1kYXktcm93XCJcbiAgICAgIGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTggYm9yZGVyLWIgYm9yZGVyLXhcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXItciBwci0yIG1kOmNvbC1zcGFuLTFcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHNcIj5cbiAgICAgICAgICBBbGwtZGF5XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQWxsLWRheSBldmVudHMgY29udGFpbmVyIHdpdGggZHluYW1pYyBoZWlnaHQgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTYgbWQ6Y29sLXNwYW4tNyBcIj5cbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBpZD17YGFsbC1kYXktJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IHctZnVsbCBjdXJzb3ItcG9pbnRlciBtaW4taC0xMCBmbGV4IGZsZXgtY29sXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtwcm9jZXNzZWRBbGxEYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQgKyAncHgnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RHJhZ2dhYmxlRXZlbnRcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRJZD17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib3ZlcmZsb3ctY2xpcCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBgY2FsYygxMDAlIC0gdmFyKC0tc3BhY2luZykgKiAyKWAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRGF5SGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUhlYWRlcjogUmVhY3QuRkM8RGF5SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCBpc1RvZGF5ID0gY3VycmVudERhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItYiBwLTIgYm9yZGVyLXgnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0xMDAnLFxuICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgIGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhsJyxcbiAgICAgICAgICAgIGlzVG9kYXkgJiYgJ3RleHQtcHJpbWFyeSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwieHM6aW5saW5lIGhpZGRlblwiPlxuICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgJyl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuICAgICAgICAgIHtpc1RvZGF5ICYmIChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgbWwtMiByb3VuZGVkLWZ1bGwgcHgtMSBweS0wLjUgdGV4dC14cyBzbTpweC0yIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgVG9kYXlcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5cbi8vIEhvdXJzIHRvIGRpc3BsYXkgKGFsbCAyNCBob3VycyBvZiB0aGUgZGF5KVxuY29uc3QgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaSkubWFwKChob3VyKSA9PiB7XG4gIHJldHVybiBkYXlqcygpLmhvdXIoaG91cikubWludXRlKDApXG59KVxuXG5pbnRlcmZhY2UgRGF5VGltZUNvbFByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBEYXlUaW1lQ29sOiBSZWFjdC5GQzxEYXlUaW1lQ29sUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW50TG9jYWxlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktdGltZS1jb2xcIlxuICAgICAgY2xhc3NOYW1lPXtgY29sLXNwYW4tMiBoLWZ1bGwgbWQ6Y29sLXNwYW4tMSAke2NsYXNzTmFtZX1gfVxuICAgID5cbiAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGtleT17dGltZS5mb3JtYXQoJ0hIOm1tJyl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9e2BkYXktdGltZS1ob3VyLSR7dGltZS5mb3JtYXQoJ0hIJyl9YH1cbiAgICAgICAgICBjbGFzc05hbWU9XCJoLVs2MHB4XSBib3JkZXItYiB0ZXh0LXJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwci0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14c1wiPlxuICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgICAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgICAgICB9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENoZWNrYm94LFxuICBEYXRlUGlja2VyLFxuICBEaWFsb2csXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0Rlc2NyaXB0aW9uLFxuICBEaWFsb2dGb290ZXIsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nVGl0bGUsXG4gIElucHV0LFxuICBMYWJlbCxcbiAgVG9vbHRpcCxcbiAgVG9vbHRpcENvbnRlbnQsXG4gIFRvb2x0aXBQcm92aWRlcixcbiAgVG9vbHRpcFRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlci90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdG9yIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3InXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgeyB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5cbmNvbnN0IGNvbG9yT3B0aW9ucyA9IFtcbiAgeyB2YWx1ZTogJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnLCBsYWJlbDogJ0JsdWUnIH0sXG4gIHsgdmFsdWU6ICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnLCBsYWJlbDogJ0dyZWVuJyB9LFxuICB7IHZhbHVlOiAnYmctcHVycGxlLTEwMCB0ZXh0LXB1cnBsZS04MDAnLCBsYWJlbDogJ1B1cnBsZScgfSxcbiAgeyB2YWx1ZTogJ2JnLXJlZC0xMDAgdGV4dC1yZWQtODAwJywgbGFiZWw6ICdSZWQnIH0sXG4gIHsgdmFsdWU6ICdiZy15ZWxsb3ctMTAwIHRleHQteWVsbG93LTgwMCcsIGxhYmVsOiAnWWVsbG93JyB9LFxuICB7IHZhbHVlOiAnYmctcGluay0xMDAgdGV4dC1waW5rLTgwMCcsIGxhYmVsOiAnUGluaycgfSxcbiAgeyB2YWx1ZTogJ2JnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwJywgbGFiZWw6ICdJbmRpZ28nIH0sXG4gIHsgdmFsdWU6ICdiZy1hbWJlci0xMDAgdGV4dC1hbWJlci04MDAnLCBsYWJlbDogJ0FtYmVyJyB9LFxuICB7IHZhbHVlOiAnYmctZW1lcmFsZC0xMDAgdGV4dC1lbWVyYWxkLTgwMCcsIGxhYmVsOiAnRW1lcmFsZCcgfSxcbiAgeyB2YWx1ZTogJ2JnLXNreS0xMDAgdGV4dC1za3ktODAwJywgbGFiZWw6ICdTa3knIH0sXG4gIHsgdmFsdWU6ICdiZy12aW9sZXQtMTAwIHRleHQtdmlvbGV0LTgwMCcsIGxhYmVsOiAnVmlvbGV0JyB9LFxuICB7IHZhbHVlOiAnYmctcm9zZS0xMDAgdGV4dC1yb3NlLTgwMCcsIGxhYmVsOiAnUm9zZScgfSxcbiAgeyB2YWx1ZTogJ2JnLXRlYWwtMTAwIHRleHQtdGVhbC04MDAnLCBsYWJlbDogJ1RlYWwnIH0sXG4gIHsgdmFsdWU6ICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCcsIGxhYmVsOiAnT3JhbmdlJyB9LFxuXVxuXG5pbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuICBzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgc2VsZWN0ZWREYXRlPzogZGF5anMuRGF5anMgfCBudWxsXG4gIG9uQWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uVXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybTogUmVhY3QuRkM8RXZlbnRGb3JtUHJvcHM+ID0gKHtcbiAgc2VsZWN0ZWRFdmVudCxcbiAgc2VsZWN0ZWREYXRlLFxuICBvbkNsb3NlLFxuICBvblVwZGF0ZSxcbiAgb25EZWxldGUsXG4gIG9uQWRkLFxufSkgPT4ge1xuICBjb25zdCB7XG4gICAgZGlhbG9nU3RhdGUsXG4gICAgb3BlbkVkaXREaWFsb2csXG4gICAgb3BlbkRlbGV0ZURpYWxvZyxcbiAgICBjbG9zZURpYWxvZyxcbiAgICBoYW5kbGVDb25maXJtLFxuICB9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cbiAgY29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3Qgc3RhcnQgPSBzZWxlY3RlZEV2ZW50Py5zdGFydFxuICBjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmRcblxuICAvLyBGaW5kIHBhcmVudCBldmVudCBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG4gIGNvbnN0IHBhcmVudEV2ZW50ID0gc2VsZWN0ZWRFdmVudFxuICAgID8gZmluZFBhcmVudFJlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpXG4gICAgOiBudWxsXG5cbiAgLy8gRm9ybSBkZWZhdWx0IHZhbHVlc1xuICBjb25zdCBkZWZhdWx0U3RhcnREYXRlID0gc2VsZWN0ZWREYXRlPy50b0RhdGUoKSB8fCBuZXcgRGF0ZSgpXG4gIGNvbnN0IGRlZmF1bHRFbmREYXRlID1cbiAgICBzZWxlY3RlZERhdGU/LmFkZCgxLCAnaG91cicpLnRvRGF0ZSgpIHx8IGRheWpzKCkuYWRkKDEsICdob3VyJykudG9EYXRlKClcblxuICAvLyBGb3JtIHN0YXRlXG4gIGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShcbiAgICBzdGFydD8udG9EYXRlKCkgfHwgZGVmYXVsdFN0YXJ0RGF0ZVxuICApXG4gIGNvbnN0IFtlbmREYXRlLCBzZXRFbmREYXRlXSA9IHVzZVN0YXRlKGVuZD8udG9EYXRlKCkgfHwgZGVmYXVsdEVuZERhdGUpXG4gIGNvbnN0IFtpc0FsbERheSwgc2V0SXNBbGxEYXldID0gdXNlU3RhdGUoc2VsZWN0ZWRFdmVudD8uYWxsRGF5IHx8IGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRDb2xvciwgc2V0U2VsZWN0ZWRDb2xvcl0gPSB1c2VTdGF0ZShcbiAgICBzZWxlY3RlZEV2ZW50Py5jb2xvciB8fCBjb2xvck9wdGlvbnNbMF0udmFsdWVcbiAgKVxuXG4gIC8vIFRpbWUgc3RhdGVcbiAgY29uc3QgW3N0YXJ0VGltZSwgc2V0U3RhcnRUaW1lXSA9IHVzZVN0YXRlKFxuICAgIHN0YXJ0ID8gc3RhcnQuZm9ybWF0KCdISDptbScpIDogZGF5anMoZGVmYXVsdFN0YXJ0RGF0ZSkuZm9ybWF0KCdISDptbScpXG4gIClcbiAgY29uc3QgW2VuZFRpbWUsIHNldEVuZFRpbWVdID0gdXNlU3RhdGUoXG4gICAgZW5kID8gZW5kLmZvcm1hdCgnSEg6bW0nKSA6IGRheWpzKGRlZmF1bHRFbmREYXRlKS5mb3JtYXQoJ0hIOm1tJylcbiAgKVxuXG4gIC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuICBjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG4gICAgdGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuICAgIGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICBsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG4gIH0pXG5cbiAgLy8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuICBjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG4gICAgcmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuICB9KVxuXG4gIC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG4gIGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHNldFN0YXJ0RGF0ZShkYXRlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICBzZXRFbmREYXRlKGRhdGUpXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGZvcm0gdmFsdWVzIHdoZW4gaW5wdXQgY2hhbmdlc1xuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IChcbiAgICBlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCB2YWx1ZSB9ID0gZS50YXJnZXRcbiAgICBzZXRGb3JtVmFsdWVzKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbbmFtZV06IHZhbHVlIH0pKVxuICB9XG5cbiAgLy8gSGFuZGxlIHRpbWUgY2hhbmdlc1xuICBjb25zdCBoYW5kbGVUaW1lQ2hhbmdlID0gKFxuICAgIGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIGlzU3RhcnQ6IGJvb2xlYW5cbiAgKSA9PiB7XG4gICAgY29uc3QgdGltZVZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICBpZiAoaXNTdGFydCkge1xuICAgICAgc2V0U3RhcnRUaW1lKHRpbWVWYWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RW5kVGltZSh0aW1lVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBSZXNldCBlbmQgdGltZSB3aGVuIGFsbCBkYXkgaXMgdG9nZ2xlZCB0byBvblxuICAgIGlmIChpc0FsbERheSkge1xuICAgICAgc2V0RW5kVGltZSgnMjM6NTknKVxuICAgIH1cbiAgfSwgW2lzQWxsRGF5XSlcblxuICAvLyBIYW5kbGUgZm9ybSBzdWJtaXNzaW9uXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIENyZWF0ZSBmdWxsIGRhdGV0aW1lIG9iamVjdHMgYnkgY29tYmluaW5nIGRhdGUgYW5kIHRpbWVcbiAgICBjb25zdCBbc3RhcnRIb3Vycywgc3RhcnRNaW51dGVzXSA9IHN0YXJ0VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG4gICAgY29uc3QgW2VuZEhvdXJzLCBlbmRNaW51dGVzXSA9IGVuZFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXG4gICAgbGV0IHN0YXJ0RGF0ZVRpbWUgPSBkYXlqcyhzdGFydERhdGUpLmhvdXIoc3RhcnRIb3VycykubWludXRlKHN0YXJ0TWludXRlcylcblxuICAgIGxldCBlbmREYXRlVGltZSA9IGRheWpzKGVuZERhdGUpLmhvdXIoZW5kSG91cnMpLm1pbnV0ZShlbmRNaW51dGVzKVxuXG4gICAgLy8gRm9yIGFsbC1kYXkgZXZlbnRzLCBzZXQgYXBwcm9wcmlhdGUgdGltZXNcbiAgICBpZiAoaXNBbGxEYXkpIHtcbiAgICAgIHN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGVUaW1lLmhvdXIoMCkubWludXRlKDApXG4gICAgICBlbmREYXRlVGltZSA9IGVuZERhdGVUaW1lLmhvdXIoMjMpLm1pbnV0ZSg1OSlcbiAgICB9XG5cbiAgICBjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICBpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG4gICAgICB0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcbiAgICAgIHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuICAgICAgZW5kOiBlbmREYXRlVGltZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuICAgICAgbG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG4gICAgICBhbGxEYXk6IGlzQWxsRGF5LFxuICAgICAgY29sb3I6IHNlbGVjdGVkQ29sb3IsXG4gICAgICBycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuICAgICAgaWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcbiAgICAgICAgLy8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2dcbiAgICAgICAgb3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuICAgICAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgICAgIHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuICAgICAgICAgIGVuZDogZW5kRGF0ZVRpbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgbG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG4gICAgICAgICAgYWxsRGF5OiBpc0FsbERheSxcbiAgICAgICAgICBjb2xvcjogc2VsZWN0ZWRDb2xvcixcbiAgICAgICAgICBycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gLy8gRG9uJ3QgY2xvc2UgdGhlIGZvcm0geWV0LCBsZXQgdGhlIGRpYWxvZyBoYW5kbGUgaXRcbiAgICAgIH1cbiAgICAgIG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkFkZD8uKGV2ZW50RGF0YSlcbiAgICB9XG5cbiAgICBvbkNsb3NlKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZSA9ICgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnRcbiAgICAgIGlmIChpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG4gICAgICAgIC8vIFNob3cgcmVjdXJyaW5nIGV2ZW50IGRlbGV0ZSBkaWFsb2dcbiAgICAgICAgb3BlbkRlbGV0ZURpYWxvZyhzZWxlY3RlZEV2ZW50KVxuICAgICAgICByZXR1cm4gLy8gRG9uJ3QgY2xvc2UgdGhlIGZvcm0geWV0LCBsZXQgdGhlIGRpYWxvZyBoYW5kbGUgaXRcbiAgICAgIH1cbiAgICAgIG9uRGVsZXRlPy4oc2VsZWN0ZWRFdmVudClcbiAgICAgIG9uQ2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVJSdWxlQ2hhbmdlID0gKG5ld1JSdWxlOiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB7XG4gICAgaWYgKG5ld1JSdWxlKSB7XG4gICAgICAvLyBDcmVhdGUgZHRzdGFydCB3aXRoIHRoZSBzYW1lIGxvZ2ljIGFzIGluIGhhbmRsZVN1Ym1pdFxuICAgICAgY29uc3QgW3N0YXJ0SG91cnMsIHN0YXJ0TWludXRlc10gPSBzdGFydFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuICAgICAgbGV0IHN0YXJ0RGF0ZVRpbWUgPSBkYXlqcyhzdGFydERhdGUpLmhvdXIoc3RhcnRIb3VycykubWludXRlKHN0YXJ0TWludXRlcylcblxuICAgICAgaWYgKGlzQWxsRGF5KSB7XG4gICAgICAgIHN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGVUaW1lLmhvdXIoMCkubWludXRlKDApXG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBkdHN0YXJ0IGlzIGFsd2F5cyBpbmNsdWRlZCBpbiBSUnVsZU9wdGlvbnMgYXMgYSBEYXRlIG9iamVjdFxuICAgICAgY29uc3QgY29tcGxldGVScnVsZTogUlJ1bGVPcHRpb25zID0ge1xuICAgICAgICAuLi5uZXdSUnVsZSxcbiAgICAgICAgZHRzdGFydDogc3RhcnREYXRlVGltZS50b0RhdGUoKSwgLy8gQ29udmVydCBkYXlqcyB0byBEYXRlXG4gICAgICB9XG4gICAgICBzZXRScnVsZShjb21wbGV0ZVJydWxlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRScnVsZShudWxsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGVuZCBkYXRlIGlzIG5vdCBiZWZvcmUgc3RhcnQgZGF0ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkYXlqcyhzdGFydERhdGUpLmlzQWZ0ZXIoZGF5anMoZW5kRGF0ZSkpKSB7XG4gICAgICBzZXRFbmREYXRlKHN0YXJ0RGF0ZSlcbiAgICB9XG4gIH0sIFtzdGFydERhdGUsIGVuZERhdGVdKVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEaWFsb2cgb3Blbj17dHJ1ZX0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cbiAgICAgICAgPERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwidy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02XCI+XG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG4gICAgICAgICAgICA8RGlhbG9nSGVhZGVyIGNsYXNzTmFtZT1cIm1iLTIgc206bWItNFwiPlxuICAgICAgICAgICAgICA8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cbiAgICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgPyAnRWRpdCBFdmVudCcgOiAnQ3JlYXRlIEV2ZW50J31cbiAgICAgICAgICAgICAgPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgICAgICAgPERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZFxuICAgICAgICAgICAgICAgICAgPyAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnXG4gICAgICAgICAgICAgICAgICA6ICdBZGQgYSBuZXcgZXZlbnQgdG8geW91ciBjYWxlbmRhcid9XG4gICAgICAgICAgICAgIDwvRGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHB5LTIgc206Z2FwLTQgc206cHktNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cInRpdGxlXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICBUaXRsZVxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybVZhbHVlcy50aXRsZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRXZlbnQgdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJkZXNjcmlwdGlvblwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkV2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgaWQ9XCJhbGxEYXlcIlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNBbGxEYXl9XG4gICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiYWxsRGF5XCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICBBbGwgZGF5XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5TdGFydCBEYXRlPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgIGRhdGU9e3N0YXJ0RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlU3RhcnREYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xXCJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VPblNlbGVjdFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPkVuZCBEYXRlPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgIGRhdGU9e2VuZERhdGV9XG4gICAgICAgICAgICAgICAgICAgIHNldERhdGU9e2hhbmRsZUVuZERhdGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTFcIlxuICAgICAgICAgICAgICAgICAgICBjbG9zZU9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7IWlzQWxsRGF5ICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwic3RhcnQtdGltZVwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0IFRpbWVcbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdGFydC10aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3N0YXJ0VGltZX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVRpbWVDaGFuZ2UoZSwgdHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImVuZC10aW1lXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgRW5kIFRpbWVcbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlbmQtdGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlbmRUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGltZUNoYW5nZShlLCBmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPkNvbG9yPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8VG9vbHRpcFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICB7Y29sb3JPcHRpb25zLm1hcCgoY29sb3IpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBrZXk9e2NvbG9yLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NvbG9yLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yID09PSBjb2xvci52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRDb2xvcihjb2xvci52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57Y29sb3IubGFiZWx9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibG9jYXRpb25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIExvY2F0aW9uXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwibG9jYXRpb25cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cbiAgICAgICAgICAgICAgPFJlY3VycmVuY2VFZGl0b3IgdmFsdWU9e3JydWxlfSBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC0yIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTptdC00IHNtOmZsZXgtcm93IHNtOmdhcC0wXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHNtOm1yLWF1dG8gc206dy1hdXRvXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIiBzaXplPVwic21cIj5cbiAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/ICdVcGRhdGUnIDogJ0NyZWF0ZSd9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9EaWFsb2dGb290ZXI+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgICA8L0RpYWxvZz5cblxuICAgICAgey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cbiAgICAgIDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuICAgICAgICBpc09wZW49e2RpYWxvZ1N0YXRlLmlzT3Blbn1cbiAgICAgICAgb25DbG9zZT17Y2xvc2VEaWFsb2d9XG4gICAgICAgIG9uQ29uZmlybT17aGFuZGxlQ29uZmlybX1cbiAgICAgICAgb3BlcmF0aW9uVHlwZT17ZGlhbG9nU3RhdGUub3BlcmF0aW9uVHlwZX1cbiAgICAgICAgZXZlbnRUaXRsZT17ZGlhbG9nU3RhdGUuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IG9taXRLZXlzLCBzYWZlRGF0ZSB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgaXNSZWN1cnJpbmdFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gQm9vbGVhbihldmVudC5ycnVsZSB8fCBldmVudC5yZWN1cnJlbmNlSWQgfHwgZXZlbnQudWlkKVxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyB7XG4gIGV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuICBzdGFydERhdGU6IGRheWpzLkRheWpzXG4gIGVuZERhdGU6IGRheWpzLkRheWpzXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyA9ICh7XG4gIGV2ZW50LFxuICBjdXJyZW50RXZlbnRzLFxuICBzdGFydERhdGUsXG4gIGVuZERhdGUsXG59OiBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgLy8gSWYgbm90IGEgcmVjdXJyaW5nIGV2ZW50LCByZXR1cm4gZW1wdHkgYXJyYXlcbiAgaWYgKCFldmVudC5ycnVsZSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgcnVsZSBmcm9tIFJSdWxlT3B0aW9ucyBlbnN1cmluZyBkdHN0YXJ0IGlzIGFsd2F5cyBwcm92aWRlZFxuICAgIC8vIElmIGR0c3RhcnQgaXMgbWlzc2luZyBmcm9tIHRoZSBSUlVMRSwgdXNlIHRoZSBldmVudCdzIHN0YXJ0IHRpbWUgYXMgZmFsbGJhY2tcbiAgICBjb25zdCBydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zID0ge1xuICAgICAgLi4uZXZlbnQucnJ1bGUsXG4gICAgICBkdHN0YXJ0OiBldmVudC5ycnVsZS5kdHN0YXJ0IHx8IGV2ZW50LnN0YXJ0LnRvRGF0ZSgpLFxuICAgIH1cbiAgICBjb25zdCBydWxlID0gbmV3IFJSdWxlKHJ1bGVPcHRpb25zKVxuXG4gICAgY29uc3Qgb3ZlcnJpZGVzID0gY3VycmVudEV2ZW50cy5maWx0ZXIoXG4gICAgICAoZSkgPT4gZS5yZWN1cnJlbmNlSWQgJiYgZS51aWQgPT09IGV2ZW50LnVpZFxuICAgIClcblxuICAgIC8vIEdlbmVyYXRlIG9jY3VycmVuY2VzIHdpdGhpbiB0aGUgZGF0ZSByYW5nZVxuICAgIGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGUudG9EYXRlKClcbiAgICBjb25zdCBlbmREYXRlVGltZSA9IGVuZERhdGUudG9EYXRlKClcbiAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihzdGFydERhdGVUaW1lLCBlbmREYXRlVGltZSwgdHJ1ZSlcblxuICAgIC8vIENvbnZlcnQgb2NjdXJyZW5jZXMgdG8gQ2FsZW5kYXJFdmVudCBpbnN0YW5jZXNcbiAgICBjb25zdCByZWN1cnJpbmdFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IG9jY3VycmVuY2VzXG4gICAgICAubWFwKChvY2N1cnJlbmNlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBvY2N1cnJlbmNlRGF0ZSA9IGRheWpzKG9jY3VycmVuY2UpXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nT3ZlcnJpZGUgPSBvdmVycmlkZXMuZmluZCgoZSkgPT5cbiAgICAgICAgICBzYWZlRGF0ZShlLnJlY3VycmVuY2VJZCkuaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuICAgICAgICApXG5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG4gICAgICAgIGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuICAgICAgICBjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG4gICAgICAgIGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcbiAgICAgICAgY29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcbiAgICAgICAgY29uc3QgcGFyZW50VUlEID0gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICBpZDogcmVjdXJyaW5nRXZlbnRJZCxcbiAgICAgICAgICBzdGFydDogb2NjdXJyZW5jZURhdGUsXG4gICAgICAgICAgZW5kOiBuZXdFbmRUaW1lLFxuICAgICAgICAgIHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuICAgICAgICAgIHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVjdXJyaW5nRXZlbnRcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuICAgICAgICAvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG4gICAgICAgIGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuICAgICAgICBpZiAoIWhhc0V4ZGF0ZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcbiAgICAgICAgY29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXMuaW5jbHVkZXMoZXZlbnRTdGFydElTTylcbiAgICAgICAgcmV0dXJuICFpc0V4Y2x1ZGVkXG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICApXG4gIH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuICB0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG4gIGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuICBzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuICB0YXJnZXRFdmVudCxcbiAgdXBkYXRlcyxcbiAgY3VycmVudEV2ZW50cyxcbiAgc2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG4gIC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG4gIGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcbiAgICBjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcbiAgICByZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcbiAgfSlcblxuICBpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuICB9XG5cbiAgY29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuICBzd2l0Y2ggKHNjb3BlKSB7XG4gICAgY2FzZSAndGhpcyc6IHtcbiAgICAgIC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG4gICAgICBjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuICAgICAgY29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cbiAgICAgIGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG4gICAgICAvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuICAgICAgY29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG4gICAgICBjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcbiAgICAgICAgLi4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgICBpZDogbW9kaWZpZWRFdmVudElkLFxuICAgICAgICByZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuICAgICAgICB1aWQ6IGJhc2VFdmVudC51aWQgfHwgYCR7YmFzZUV2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmAsIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuICAgICAgICBycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG4gICAgICB9IGFzIENhbGVuZGFyRXZlbnRcbiAgICAgIHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdmb2xsb3dpbmcnOiB7XG4gICAgICAvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcbiAgICAgIGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuICAgICAgY29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG4gICAgICAvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuICAgICAgY29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIHJydWxlOiB7XG4gICAgICAgICAgLi4uYmFzZUV2ZW50LnJydWxlLFxuICAgICAgICAgIHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG4gICAgICAvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG4gICAgICBjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcbiAgICAgIGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcbiAgICAgIGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuICAgICAgICB1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG4gICAgICBjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuICAgICAgY29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG4gICAgICBjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgICBycnVsZToge1xuICAgICAgICAgIC4uLmJhc2VFdmVudC5ycnVsZSxcbiAgICAgICAgICAuLi51cGRhdGVzLnJydWxlLFxuICAgICAgICAgIGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWQ6IG5ld1Nlcmllc0lkLFxuICAgICAgICB1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuICAgICAgICBzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuICAgICAgICBlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG4gICAgICAgIHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdhbGwnOiB7XG4gICAgICAvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgICAgIGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG4gICAgICApXG4gIH1cblxuICByZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG4gIHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuICBzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuICB0YXJnZXRFdmVudCxcbiAgY3VycmVudEV2ZW50cyxcbiAgc2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG4gIC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG4gIGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcbiAgICBjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcbiAgICByZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcbiAgfSlcblxuICBpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuICB9XG5cbiAgY29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuICBzd2l0Y2ggKHNjb3BlKSB7XG4gICAgY2FzZSAndGhpcyc6IHtcbiAgICAgIC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG4gICAgICBjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuICAgICAgY29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cbiAgICAgIGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG4gICAgICB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnZm9sbG93aW5nJzoge1xuICAgICAgLy8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcbiAgICAgIGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuICAgICAgY29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG4gICAgICBjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgcnJ1bGU6IHtcbiAgICAgICAgICAuLi5iYXNlRXZlbnQucnJ1bGUsXG4gICAgICAgICAgdW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2FsbCc6IHtcbiAgICAgIC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuICAgICAgY29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuICAgICAgICAoZSkgPT4gZS51aWQgIT09IHRhcmdldEV2ZW50LnVpZFxuICAgICAgKVxuICAgICAgcmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG4gICAgICApXG4gIH1cblxuICByZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQge1xuICBDYXJkLFxuICBDYXJkQ29udGVudCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBDaGVja2JveCxcbiAgRGF0ZVBpY2tlcixcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBTZWxlY3QsXG4gIFNlbGVjdENvbnRlbnQsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdFRyaWdnZXIsXG4gIFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5cbi8vIE5hdHVyYWwgbGFuZ3VhZ2UgZGVzY3JpcHRpb24gZnVuY3Rpb24gdXNpbmcgUlJ1bGUncyBidWlsdC1pbiBoZWxwZXIgbWV0aG9kc1xuZnVuY3Rpb24gZ2V0UlJ1bGVEZXNjcmlwdGlvbihycnVsZU9wdGlvbnM6IFJSdWxlT3B0aW9ucyB8IG51bGwpOiBzdHJpbmcge1xuICBpZiAoIXJydWxlT3B0aW9ucykge1xuICAgIHJldHVybiAnQ3VzdG9tIHJlY3VycmVuY2UnXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBSUnVsZSBpbnN0YW5jZSBkaXJlY3RseSBmcm9tIG9wdGlvbnNcbiAgICBjb25zdCBydWxlID0gbmV3IFJSdWxlKHJydWxlT3B0aW9ucylcblxuICAgIC8vIFVzZSBSUnVsZSdzIGJ1aWx0LWluIG5hdHVyYWwgbGFuZ3VhZ2UgY29udmVyc2lvbiB3aXRoIHRvVGV4dCgpXG4gICAgY29uc3QgbmF0dXJhbFRleHQgPSBydWxlLnRvVGV4dCgpXG5cbiAgICAvLyBIYW5kbGUgY2FzZXMgd2hlcmUgUlJ1bGUgY2FuJ3QgY29udmVydCB0byBuYXR1cmFsIGxhbmd1YWdlXG4gICAgaWYgKFxuICAgICAgIW5hdHVyYWxUZXh0IHx8XG4gICAgICBuYXR1cmFsVGV4dC5pbmNsdWRlcygnUlJ1bGUgZXJyb3InKSB8fFxuICAgICAgbmF0dXJhbFRleHQuaW5jbHVkZXMoJ1VuYWJsZSB0byBmdWxseSBjb252ZXJ0JykgfHxcbiAgICAgIG5hdHVyYWxUZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcbiAgICApIHtcbiAgICAgIHJldHVybiAnQ3VzdG9tIHJlY3VycmVuY2UnXG4gICAgfVxuXG4gICAgLy8gQ2FwaXRhbGl6ZSBmaXJzdCBsZXR0ZXIgZm9yIGNvbnNpc3RlbnQgZm9ybWF0dGluZ1xuICAgIHJldHVybiBuYXR1cmFsVGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hdHVyYWxUZXh0LnNsaWNlKDEpXG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHBhcnNpbmcgZmFpbHMsIHJldHVybiBmYWxsYmFja1xuICAgIHJldHVybiAnQ3VzdG9tIHJlY3VycmVuY2UnXG4gIH1cbn1cblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0b3JQcm9wcyB7XG4gIHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuICBvbkNoYW5nZTogKHJydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4gdm9pZFxufVxuXG5jb25zdCBXRUVLX0RBWVM6IHsgdmFsdWU6IFdlZWtkYXk7IGxhYmVsOiBzdHJpbmc7IHNob3J0OiBzdHJpbmcgfVtdID0gW1xuICB7IHZhbHVlOiBSUnVsZS5TVSwgbGFiZWw6ICdTdW5kYXknLCBzaG9ydDogJ1N1bicgfSxcbiAgeyB2YWx1ZTogUlJ1bGUuTU8sIGxhYmVsOiAnTW9uZGF5Jywgc2hvcnQ6ICdNb24nIH0sXG4gIHsgdmFsdWU6IFJSdWxlLlRVLCBsYWJlbDogJ1R1ZXNkYXknLCBzaG9ydDogJ1R1ZScgfSxcbiAgeyB2YWx1ZTogUlJ1bGUuV0UsIGxhYmVsOiAnV2VkbmVzZGF5Jywgc2hvcnQ6ICdXZWQnIH0sXG4gIHsgdmFsdWU6IFJSdWxlLlRILCBsYWJlbDogJ1RodXJzZGF5Jywgc2hvcnQ6ICdUaHUnIH0sXG4gIHsgdmFsdWU6IFJSdWxlLkZSLCBsYWJlbDogJ0ZyaWRheScsIHNob3J0OiAnRnJpJyB9LFxuICB7IHZhbHVlOiBSUnVsZS5TQSwgbGFiZWw6ICdTYXR1cmRheScsIHNob3J0OiAnU2F0JyB9LFxuXVxuXG5leHBvcnQgY29uc3QgUmVjdXJyZW5jZUVkaXRvcjogUmVhY3QuRkM8UmVjdXJyZW5jZUVkaXRvclByb3BzPiA9ICh7XG4gIHZhbHVlLFxuICBvbkNoYW5nZSxcbn0pID0+IHtcbiAgY29uc3QgW3Nob3dSZWN1cnJlbmNlLCBzZXRTaG93UmVjdXJyZW5jZV0gPSB1c2VTdGF0ZSghIXZhbHVlKVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IFJSdWxlIGZyZXF1ZW5jeSB0byBzdHJpbmdcbiAgY29uc3QgZ2V0RnJlcXVlbmN5U3RyaW5nID0gKGZyZXE6IFJSdWxlT3B0aW9uc1snZnJlcSddKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBmcmVxTWFwOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xuICAgICAgW1JSdWxlLkRBSUxZXTogJ0RBSUxZJyxcbiAgICAgIFtSUnVsZS5XRUVLTFldOiAnV0VFS0xZJyxcbiAgICAgIFtSUnVsZS5NT05USExZXTogJ01PTlRITFknLFxuICAgICAgW1JSdWxlLllFQVJMWV06ICdZRUFSTFknLFxuICAgIH1cbiAgICByZXR1cm4gZnJlcU1hcFtmcmVxXSB8fCAnREFJTFknXG4gIH1cblxuICAvLyBXb3JrIHdpdGggY29tcGxldGUgUlJ1bGVPcHRpb25zIC0gZHRzdGFydCBjb21lcyBmcm9tIHBhcmVudCBFdmVudEZvcm1cbiAgY29uc3QgW3JydWxlT3B0aW9ucywgc2V0UlJ1bGVPcHRpb25zXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KFxuICAgICgpID0+IHZhbHVlIHx8IG51bGxcbiAgKVxuXG4gIC8vIFN5bmMgc3RhdGUgd2hlbiB2YWx1ZSBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTaG93UmVjdXJyZW5jZSghIXZhbHVlKVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgc2V0UlJ1bGVPcHRpb25zKHZhbHVlKVxuICAgIH1cbiAgfSwgW3ZhbHVlXSlcblxuICBjb25zdCB1cGRhdGVSUnVsZSA9ICh1cGRhdGVzOiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcbiAgICBpZiAoIXJydWxlT3B0aW9ucykge1xuICAgICAgcmV0dXJuIC8vIENhbid0IHVwZGF0ZSBpZiBubyBiYXNlIG9wdGlvbnMgZXhpc3RcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7IC4uLnJydWxlT3B0aW9ucywgLi4udXBkYXRlcyB9XG4gICAgc2V0UlJ1bGVPcHRpb25zKG5ld09wdGlvbnMpXG5cbiAgICBpZiAoc2hvd1JlY3VycmVuY2UpIHtcbiAgICAgIG9uQ2hhbmdlKG5ld09wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUmVjdXJyZW5jZVRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG4gICAgc2V0U2hvd1JlY3VycmVuY2UoY2hlY2tlZClcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgaWYgKHJydWxlT3B0aW9ucykge1xuICAgICAgICBvbkNoYW5nZShycnVsZU9wdGlvbnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBSUnVsZSB3aGVuIHRvZ2dsaW5nIG9uIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAvLyBOb3RlOiBkdHN0YXJ0IHdpbGwgYmUgc2V0IGJ5IHRoZSBwYXJlbnQgRXZlbnRGb3JtXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSUnVsZTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0ge1xuICAgICAgICAgIGZyZXE6IFJSdWxlLkRBSUxZLFxuICAgICAgICAgIGludGVydmFsOiAxLFxuICAgICAgICB9XG4gICAgICAgIHNldFJSdWxlT3B0aW9ucyhkZWZhdWx0UlJ1bGUgYXMgUlJ1bGVPcHRpb25zKVxuICAgICAgICBvbkNoYW5nZShkZWZhdWx0UlJ1bGUgYXMgUlJ1bGVPcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShudWxsKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZyZXF1ZW5jeUNoYW5nZSA9IChmcmVxdWVuY3k6IHN0cmluZykgPT4ge1xuICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFJSdWxlIGZyZXF1ZW5jeSBjb25zdGFudFxuICAgIGNvbnN0IGZyZXFNYXA6IFJlY29yZDxzdHJpbmcsIFJSdWxlT3B0aW9uc1snZnJlcSddPiA9IHtcbiAgICAgIERBSUxZOiBSUnVsZS5EQUlMWSxcbiAgICAgIFdFRUtMWTogUlJ1bGUuV0VFS0xZLFxuICAgICAgTU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcbiAgICAgIFlFQVJMWTogUlJ1bGUuWUVBUkxZLFxuICAgIH1cbiAgICB1cGRhdGVSUnVsZSh7IGZyZXE6IGZyZXFNYXBbZnJlcXVlbmN5XSB8fCBSUnVsZS5EQUlMWSB9KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlSW50ZXJ2YWxDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBpbnRlcnZhbCA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChlLnRhcmdldC52YWx1ZSkgfHwgMSlcbiAgICB1cGRhdGVSUnVsZSh7IGludGVydmFsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVFbmRUeXBlQ2hhbmdlID0gKGVuZFR5cGU6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJykgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZXM6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPiA9IHt9XG5cbiAgICBpZiAoZW5kVHlwZSA9PT0gJ25ldmVyJykge1xuICAgICAgLy8gUmVtb3ZlIGNvdW50IGFuZCB1bnRpbFxuICAgICAgdXBkYXRlcy5jb3VudCA9IHVuZGVmaW5lZFxuICAgICAgdXBkYXRlcy51bnRpbCA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoZW5kVHlwZSA9PT0gJ2NvdW50Jykge1xuICAgICAgLy8gU2V0IGRlZmF1bHQgY291bnQgaWYgbm9uZSBleGlzdHMsIHJlbW92ZSB1bnRpbFxuICAgICAgdXBkYXRlcy5jb3VudCA9IHJydWxlT3B0aW9ucz8uY291bnQgfHwgMVxuICAgICAgdXBkYXRlcy51bnRpbCA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoZW5kVHlwZSA9PT0gJ3VudGlsJykge1xuICAgICAgLy8gU2V0IGRlZmF1bHQgdW50aWwgZGF0ZSBpZiBub25lIGV4aXN0cywgcmVtb3ZlIGNvdW50XG4gICAgICB1cGRhdGVzLnVudGlsID1cbiAgICAgICAgcnJ1bGVPcHRpb25zPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcbiAgICAgIHVwZGF0ZXMuY291bnQgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICB1cGRhdGVSUnVsZSh1cGRhdGVzKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ291bnRDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBjb3VudCA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChlLnRhcmdldC52YWx1ZSkgfHwgMSlcbiAgICB1cGRhdGVSUnVsZSh7IGNvdW50IH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBjb25zdCB1bnRpbCA9IGRhdGUgPyBkYXlqcyhkYXRlKS5lbmRPZignZGF5JykudG9EYXRlKCkgOiB1bmRlZmluZWRcbiAgICB1cGRhdGVSUnVsZSh7IHVudGlsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVEYXlUb2dnbGUgPSAoZGF5SW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHdlZWtkYXlNYXAgPSBbXG4gICAgICBSUnVsZS5TVSxcbiAgICAgIFJSdWxlLk1PLFxuICAgICAgUlJ1bGUuVFUsXG4gICAgICBSUnVsZS5XRSxcbiAgICAgIFJSdWxlLlRILFxuICAgICAgUlJ1bGUuRlIsXG4gICAgICBSUnVsZS5TQSxcbiAgICBdXG4gICAgY29uc3QgY3VycmVudFdlZWtkYXlzID0gKHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cbiAgICBjb25zdCB0YXJnZXRXZWVrZGF5ID0gd2Vla2RheU1hcFtkYXlJbmRleF1cblxuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBjdXJyZW50V2Vla2RheXMuaW5jbHVkZXModGFyZ2V0V2Vla2RheSlcbiAgICBsZXQgbmV3V2Vla2RheXM6IFdlZWtkYXlbXVxuXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIG5ld1dlZWtkYXlzID0gY3VycmVudFdlZWtkYXlzLmZpbHRlcigoZGF5KSA9PiBkYXkgIT09IHRhcmdldFdlZWtkYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1dlZWtkYXlzID0gWy4uLmN1cnJlbnRXZWVrZGF5cywgdGFyZ2V0V2Vla2RheV1cbiAgICB9XG5cbiAgICB1cGRhdGVSUnVsZSh7XG4gICAgICBieXdlZWtkYXk6IG5ld1dlZWtkYXlzLmxlbmd0aCA+IDAgPyBuZXdXZWVrZGF5cyA6IHVuZGVmaW5lZCxcbiAgICB9KVxuICB9XG5cbiAgLy8gSGVscGVyIHRvIGRldGVybWluZSBlbmQgdHlwZSBmcm9tIGN1cnJlbnQgb3B0aW9uc1xuICBjb25zdCBnZXRFbmRUeXBlID0gKCk6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJyA9PiB7XG4gICAgaWYgKHJydWxlT3B0aW9ucz8udW50aWwpIHtcbiAgICAgIHJldHVybiAndW50aWwnXG4gICAgfVxuICAgIGlmIChycnVsZU9wdGlvbnM/LmNvdW50KSB7XG4gICAgICByZXR1cm4gJ2NvdW50J1xuICAgIH1cbiAgICByZXR1cm4gJ25ldmVyJ1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG4gICAgICA8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBpZD1cInJlY3VycmluZ1wiXG4gICAgICAgICAgICBjaGVja2VkPXtzaG93UmVjdXJyZW5jZX1cbiAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17aGFuZGxlUmVjdXJyZW5jZVRvZ2dsZX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPENhcmRUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+UmVwZWF0PC9DYXJkVGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1JlY3VycmVuY2UgJiYgdmFsdWUgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICB7Z2V0UlJ1bGVEZXNjcmlwdGlvbih2YWx1ZSl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICApfVxuICAgICAgPC9DYXJkSGVhZGVyPlxuXG4gICAgICB7c2hvd1JlY3VycmVuY2UgJiYgKFxuICAgICAgICA8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHQtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG4gICAgICAgICAgICB7LyogRnJlcXVlbmN5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZnJlcXVlbmN5XCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgUmVwZWF0c1xuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2dldEZyZXF1ZW5jeVN0cmluZyhycnVsZU9wdGlvbnM/LmZyZXEgPz8gUlJ1bGUuREFJTFkpfVxuICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17aGFuZGxlRnJlcXVlbmN5Q2hhbmdlfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZWxlY3RUcmlnZ2VyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiZnJlcXVlbmN5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04XCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJmcmVxdWVuY3ktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICA8L1NlbGVjdFRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICA8U2VsZWN0Q29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJEQUlMWVwiPkRhaWx5PC9TZWxlY3RJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0SXRlbSB2YWx1ZT1cIldFRUtMWVwiPldlZWtseTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJNT05USExZXCI+TW9udGhseTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJZRUFSTFlcIj5ZZWFybHk8L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICA8L1NlbGVjdENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJpbnRlcnZhbFwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgIEV2ZXJ5XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtycnVsZU9wdGlvbnM/LmludGVydmFsIHx8IDF9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW50ZXJ2YWxDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLThcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBXZWVrbHkgRGF5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIHtycnVsZU9wdGlvbnM/LmZyZXEgPT09IFJSdWxlLldFRUtMWSAmJiAoXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj5SZXBlYXQgb248L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAge1dFRUtfREFZUy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl3ZWVrZGF5QXJyYXkgPSBBcnJheS5pc0FycmF5KFxuICAgICAgICAgICAgICAgICAgICAgIHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA/IHJydWxlT3B0aW9ucy5ieXdlZWtkYXlcbiAgICAgICAgICAgICAgICAgICAgICA6IHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtycnVsZU9wdGlvbnMuYnl3ZWVrZGF5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnl3ZWVrZGF5QXJyYXkuaW5jbHVkZXMoZGF5LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRGF5VG9nZ2xlKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF5LnNob3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgey8qIEVuZCBDb25kaXRpb24gKi99XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPkVuZHM8L0xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBtdC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBpZD1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Z2V0RW5kVHlwZSgpID09PSAnbmV2ZXInfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eygpID0+IGhhbmRsZUVuZFR5cGVDaGFuZ2UoJ25ldmVyJyl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJuZXZlclwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgTmV2ZXJcbiAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWZ0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtnZXRFbmRUeXBlKCkgPT09ICdjb3VudCd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRW5kVHlwZUNoYW5nZSgnY291bnQnKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImFmdGVyXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICBBZnRlclxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtnZXRFbmRUeXBlKCkgPT09ICdjb3VudCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cnJ1bGVPcHRpb25zPy5jb3VudCB8fCAxfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDb3VudENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTYgdy0xNiB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNvdW50LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+b2NjdXJyZW5jZXM8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGlkPVwib25cIlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtnZXRFbmRUeXBlKCkgPT09ICd1bnRpbCd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRW5kVHlwZUNoYW5nZSgndW50aWwnKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cIm9uXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICBPblxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtnZXRFbmRUeXBlKCkgPT09ICd1bnRpbCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8RGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e3JydWxlT3B0aW9ucz8udW50aWx9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTZcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9DYXJkQ29udGVudD5cbiAgICAgICl9XG4gICAgPC9DYXJkPlxuICApXG59XG4iLAogICAgImltcG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbiAgQnV0dG9uLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmludGVyZmFjZSBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWRcbiAgb25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcbiAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcbiAgZXZlbnRUaXRsZTogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWN1cnJlbmNlRWRpdERpYWxvZyh7XG4gIGlzT3BlbixcbiAgb25DbG9zZSxcbiAgb25Db25maXJtLFxuICBvcGVyYXRpb25UeXBlLFxuICBldmVudFRpdGxlLFxufTogUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcykge1xuICBjb25zdCBoYW5kbGVTY29wZVNlbGVjdCA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgIG9uQ29uZmlybShzY29wZSlcbiAgICBvbkNsb3NlKClcbiAgfVxuXG4gIGNvbnN0IGFjdGlvblRleHQgPSBvcGVyYXRpb25UeXBlID09PSAnZWRpdCcgPyAnY2hhbmdlJyA6ICdkZWxldGUnXG4gIGNvbnN0IGFjdGlvblZlcmIgPSBvcGVyYXRpb25UeXBlID09PSAnZWRpdCcgPyAnRWRpdCcgOiAnRGVsZXRlJ1xuXG4gIHJldHVybiAoXG4gICAgPERpYWxvZyBvcGVuPXtpc09wZW59IG9uT3BlbkNoYW5nZT17b25DbG9zZX0+XG4gICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1tZFwiPlxuICAgICAgICA8RGlhbG9nSGVhZGVyPlxuICAgICAgICAgIDxEaWFsb2dUaXRsZT57YWN0aW9uVmVyYn0gcmVjdXJyaW5nIGV2ZW50PC9EaWFsb2dUaXRsZT5cbiAgICAgICAgICA8RGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgICAgICBcIntldmVudFRpdGxlfVwiIGlzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG97JyAnfVxuICAgICAgICAgICAge2FjdGlvblRleHR9IGl0P1xuICAgICAgICAgIDwvRGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgIDwvRGlhbG9nSGVhZGVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgndGhpcycpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj5UaGlzIGV2ZW50PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICBPbmx5IHthY3Rpb25UZXh0fSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2VcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj5UaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICB7YWN0aW9uVmVyYn0gdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlc1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgnYWxsJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPkFsbCBldmVudHM8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHthY3Rpb25WZXJifSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXNcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9EaWFsb2dGb290ZXI+XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyhvbkNvbXBsZXRlPzogKCkgPT4gdm9pZCkge1xuICBjb25zdCB7IHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkZWxldGVSZWN1cnJpbmdFdmVudCB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCBbZGlhbG9nU3RhdGUsIHNldERpYWxvZ1N0YXRlXSA9IHVzZVN0YXRlPHtcbiAgICBpc09wZW46IGJvb2xlYW5cbiAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICAgIHVwZGF0ZXM/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG4gICAgb25Db25maXJtPzogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG4gIH0+KHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIG9wZXJhdGlvblR5cGU6ICdlZGl0JyxcbiAgICBldmVudDogbnVsbCxcbiAgfSlcblxuICBjb25zdCBvcGVuRWRpdERpYWxvZyA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCwgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuICAgICAgc2V0RGlhbG9nU3RhdGUoe1xuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6ICdlZGl0JyxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHVwZGF0ZXMsIHtcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgZXZlbnREYXRlOiBldmVudC5zdGFydCxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuICAgIFt1cGRhdGVSZWN1cnJpbmdFdmVudF1cbiAgKVxuXG4gIGNvbnN0IG9wZW5EZWxldGVEaWFsb2cgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgIHNldERpYWxvZ1N0YXRlKHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiAnZGVsZXRlJyxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgICAgICAgZGVsZXRlUmVjdXJyaW5nRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgZXZlbnREYXRlOiBldmVudC5zdGFydCxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtkZWxldGVSZWN1cnJpbmdFdmVudF1cbiAgKVxuXG4gIGNvbnN0IGNsb3NlRGlhbG9nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldERpYWxvZ1N0YXRlKHtcbiAgICAgIGlzT3BlbjogZmFsc2UsXG4gICAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG4gICAgICBldmVudDogbnVsbCxcbiAgICB9KVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVDb25maXJtID0gdXNlQ2FsbGJhY2soXG4gICAgKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgICBpZiAoZGlhbG9nU3RhdGUub25Db25maXJtKSB7XG4gICAgICAgIGRpYWxvZ1N0YXRlLm9uQ29uZmlybShzY29wZSlcbiAgICAgIH1cbiAgICAgIGNsb3NlRGlhbG9nKClcbiAgICAgIC8vIENhbGwgb25Db21wbGV0ZSB0byBjbG9zZSB0aGUgcGFyZW50IGZvcm1cbiAgICAgIG9uQ29tcGxldGU/LigpXG4gICAgfSxcbiAgICBbZGlhbG9nU3RhdGUsIGNsb3NlRGlhbG9nLCBvbkNvbXBsZXRlXVxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBkaWFsb2dTdGF0ZSxcbiAgICBvcGVuRWRpdERpYWxvZyxcbiAgICBvcGVuRGVsZXRlRGlhbG9nLFxuICAgIGNsb3NlRGlhbG9nLFxuICAgIGhhbmRsZUNvbmZpcm0sXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5cbi8qKlxuICogRXhwb3J0IGNhbGVuZGFyIGV2ZW50cyB0byBpQ2FsZW5kYXIgKC5pY2FsKSBmb3JtYXRcbiAqIEZ1bGx5IFJGQyA1NTQ1IGNvbXBsaWFudCBpQ2FsZW5kYXIgZ2VuZXJhdGlvblxuICovXG5cbi8qKlxuICogRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBpQ2FsZW5kYXIgdGV4dCBmaWVsZHNcbiAqL1xuY29uc3QgZXNjYXBlSUNhbFRleHQgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpIC8vIEVzY2FwZSBiYWNrc2xhc2hlc1xuICAgIC5yZXBsYWNlQWxsKCc7JywgJ1xcXFw7JykgLy8gRXNjYXBlIHNlbWljb2xvbnNcbiAgICAucmVwbGFjZUFsbCgnLCcsICdcXFxcLCcpIC8vIEVzY2FwZSBjb21tYXNcbiAgICAucmVwbGFjZUFsbCgnXFxuJywgJ1xcXFxuJykgLy8gRXNjYXBlIG5ld2xpbmVzXG4gICAgLnJlcGxhY2VBbGwoJ1xccicsICcnKSAvLyBSZW1vdmUgY2FycmlhZ2UgcmV0dXJuc1xufVxuXG4vKipcbiAqIEZvcm1hdCBkYXRlIGZvciBpQ2FsZW5kYXIgZm9ybWF0IChZWVlZTU1ERFRISE1NU1NaIGZvciBVVEMpXG4gKi9cbmNvbnN0IGZvcm1hdElDYWxEYXRlID0gKGRhdGU6IGRheWpzLkRheWpzLCBhbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG4gIGlmIChhbGxEYXkpIHtcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcbiAgfVxuICByZXR1cm4gZGF0ZS51dGMoKS5mb3JtYXQoJ1lZWVlNTUREW1RdSEhtbXNzW1pdJylcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHVuaXF1ZSBVSUQgZm9yIGFuIGV2ZW50IGlmIG5vdCBhbHJlYWR5IHByZXNlbnRcbiAqL1xuY29uc3QgZ2VuZXJhdGVVSUQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuICBpZiAoZXZlbnQudWlkKSB7XG4gICAgcmV0dXJuIGV2ZW50LnVpZFxuICB9XG4gIHJldHVybiBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbi8qKlxuICogQ29udmVydCBSUnVsZU9wdGlvbnMgdG8gaUNhbGVuZGFyIFJSVUxFIHN0cmluZ1xuICovXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICB0cnkge1xuICAgIC8vIENyZWF0ZSBSUnVsZSBpbnN0YW5jZSB3aXRoIGFwcHJvcHJpYXRlIHR5cGUgY2FzdGluZ1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUoXG4gICAgICBycnVsZU9wdGlvbnMgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBSUnVsZT5bMF1cbiAgICApXG4gICAgY29uc3QgcnJ1bGVTdHJpbmcgPSBydWxlLnRvU3RyaW5nKClcbiAgICAvLyBFeHRyYWN0IGp1c3QgdGhlIFJSVUxFIHBhcnQgKHJlbW92ZSBEVFNUQVJUIGlmIHByZXNlbnQpXG4gICAgY29uc3QgcnJ1bGVQYXJ0ID0gcnJ1bGVTdHJpbmdcbiAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgIC5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKVxuICAgIHJldHVybiBycnVsZVBhcnQgfHwgJydcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc2luZ2xlIENhbGVuZGFyRXZlbnQgdG8gaUNhbGVuZGFyIFZFVkVOVCBzdHJpbmdcbiAqL1xuY29uc3QgZXZlbnRUb0lDYWxFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgbGluZXMucHVzaCgnQkVHSU46VkVWRU5UJylcblxuICAvLyBVSUQgKHJlcXVpcmVkKVxuICBsaW5lcy5wdXNoKGBVSUQ6JHtnZW5lcmF0ZVVJRChldmVudCl9YClcblxuICAvLyBEVFNUQVJUIChyZXF1aXJlZClcbiAgY29uc3QgZHRzdGFydCA9IGZvcm1hdElDYWxEYXRlKGV2ZW50LnN0YXJ0LCBldmVudC5hbGxEYXkpXG4gIGlmIChldmVudC5hbGxEYXkpIHtcbiAgICBsaW5lcy5wdXNoKGBEVFNUQVJUO1ZBTFVFPURBVEU6JHtkdHN0YXJ0fWApXG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaChgRFRTVEFSVDoke2R0c3RhcnR9YClcbiAgfVxuXG4gIC8vIERURU5EIChyZXF1aXJlZCBmb3IgZXZlbnRzIHdpdGggZHVyYXRpb24pXG4gIGNvbnN0IGR0ZW5kID0gZm9ybWF0SUNhbERhdGUoZXZlbnQuZW5kLCBldmVudC5hbGxEYXkpXG4gIGlmIChldmVudC5hbGxEYXkpIHtcbiAgICBsaW5lcy5wdXNoKGBEVEVORDtWQUxVRT1EQVRFOiR7ZHRlbmR9YClcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKGBEVEVORDoke2R0ZW5kfWApXG4gIH1cblxuICAvLyBTVU1NQVJZICh0aXRsZSlcbiAgbGluZXMucHVzaChgU1VNTUFSWToke2VzY2FwZUlDYWxUZXh0KGV2ZW50LnRpdGxlKX1gKVxuXG4gIC8vIERFU0NSSVBUSU9OIChvcHRpb25hbClcbiAgaWYgKGV2ZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgbGluZXMucHVzaChgREVTQ1JJUFRJT046JHtlc2NhcGVJQ2FsVGV4dChldmVudC5kZXNjcmlwdGlvbil9YClcbiAgfVxuXG4gIC8vIExPQ0FUSU9OIChvcHRpb25hbClcbiAgaWYgKGV2ZW50LmxvY2F0aW9uKSB7XG4gICAgbGluZXMucHVzaChgTE9DQVRJT046JHtlc2NhcGVJQ2FsVGV4dChldmVudC5sb2NhdGlvbil9YClcbiAgfVxuXG4gIC8vIFJSVUxFIChyZWN1cnJlbmNlIHJ1bGUpXG4gIGlmIChldmVudC5ycnVsZSkge1xuICAgIGNvbnN0IHJydWxlU3RyaW5nID0gZm9ybWF0UlJ1bGUoZXZlbnQucnJ1bGUpXG4gICAgaWYgKHJydWxlU3RyaW5nKSB7XG4gICAgICBsaW5lcy5wdXNoKHJydWxlU3RyaW5nKVxuICAgIH1cbiAgfVxuXG4gIC8vIEVYREFURSAoZXhjZXB0aW9uIGRhdGVzKVxuICBpZiAoZXZlbnQuZXhkYXRlcyAmJiBldmVudC5leGRhdGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBleGRhdGVzID0gZXZlbnQuZXhkYXRlc1xuICAgICAgLm1hcCgoZGF0ZVN0cikgPT4gZm9ybWF0SUNhbERhdGUoZGF5anMoZGF0ZVN0ciksIGV2ZW50LmFsbERheSkpXG4gICAgICAuam9pbignLCcpXG4gICAgbGluZXMucHVzaChgRVhEQVRFOiR7ZXhkYXRlc31gKVxuICB9XG5cbiAgLy8gUkVDVVJSRU5DRS1JRCAoZm9yIG1vZGlmaWVkIGluc3RhbmNlcylcbiAgaWYgKGV2ZW50LnJlY3VycmVuY2VJZCkge1xuICAgIGNvbnN0IHJlY3VycmVuY2VJZCA9IGZvcm1hdElDYWxEYXRlKGRheWpzKGV2ZW50LnJlY3VycmVuY2VJZCksIGV2ZW50LmFsbERheSlcbiAgICBsaW5lcy5wdXNoKGBSRUNVUlJFTkNFLUlEOiR7cmVjdXJyZW5jZUlkfWApXG4gIH1cblxuICAvLyBEVFNUQU1QIChyZXF1aXJlZCAtIHdoZW4gdGhpcyB3YXMgY3JlYXRlZC9tb2RpZmllZClcbiAgY29uc3Qgbm93ID0gZGF5anMoKS51dGMoKS5mb3JtYXQoJ1lZWVlNTUREW1RdSEhtbXNzW1pdJylcbiAgbGluZXMucHVzaChgRFRTVEFNUDoke25vd31gKVxuXG4gIC8vIENSRUFURUQgKHdoZW4gZXZlbnQgd2FzIGNyZWF0ZWQpXG4gIGxpbmVzLnB1c2goYENSRUFURUQ6JHtub3d9YClcblxuICAvLyBMQVNULU1PRElGSUVEICh3aGVuIGV2ZW50IHdhcyBsYXN0IG1vZGlmaWVkKVxuICBsaW5lcy5wdXNoKGBMQVNULU1PRElGSUVEOiR7bm93fWApXG5cbiAgLy8gU1RBVFVTIChkZWZhdWx0IHRvIENPTkZJUk1FRClcbiAgbGluZXMucHVzaCgnU1RBVFVTOkNPTkZJUk1FRCcpXG5cbiAgLy8gU0VRVUVOQ0UgKHZlcnNpb24gbnVtYmVyLCBkZWZhdWx0IHRvIDApXG4gIGxpbmVzLnB1c2goJ1NFUVVFTkNFOjAnKVxuXG4gIC8vIFRSQU5TUCAodHJhbnNwYXJlbmN5IC0gT1BBUVVFIGZvciBidXN5IHRpbWUpXG4gIGxpbmVzLnB1c2goJ1RSQU5TUDpPUEFRVUUnKVxuXG4gIGxpbmVzLnB1c2goJ0VORDpWRVZFTlQnKVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXHJcXG4nKVxufVxuXG4vKipcbiAqIEZpbHRlciBldmVudHMgZm9yIHByb3BlciBpQ2FsZW5kYXIgZXhwb3J0XG4gKiAtIEluY2x1ZGUgYmFzZSByZWN1cnJpbmcgZXZlbnRzICh3aXRoIFJSVUxFKVxuICogLSBJbmNsdWRlIG1vZGlmaWVkIGluc3RhbmNlcyAod2l0aCByZWN1cnJlbmNlSWQpXG4gKiAtIEluY2x1ZGUgbm9uLXJlY3VycmluZyBldmVudHNcbiAqIC0gRVhDTFVERSBnZW5lcmF0ZWQgcmVjdXJyaW5nIGluc3RhbmNlcyAobm8gcnJ1bGUsIG5vIHJlY3VycmVuY2VJZClcbiAqL1xuY29uc3QgZmlsdGVyRXZlbnRzRm9yRXhwb3J0ID0gKGV2ZW50czogQ2FsZW5kYXJFdmVudFtdKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgY29uc3QgZXhwb3J0RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuICBjb25zdCBwcm9jZXNzZWRVSURzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgIC8vIEdldCBvciBnZW5lcmF0ZSBVSUQgZm9yIHRoZSBldmVudFxuICAgIGNvbnN0IGV2ZW50VUlEID0gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcblxuICAgIC8vIENhc2UgMTogQmFzZSByZWN1cnJpbmcgZXZlbnQgKGhhcyBSUlVMRSwgbm8gcmVjdXJyZW5jZUlkKVxuICAgIGlmIChldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkKSB7XG4gICAgICBleHBvcnRFdmVudHMucHVzaChldmVudClcbiAgICAgIHByb2Nlc3NlZFVJRHMuYWRkKGV2ZW50VUlEKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyBDYXNlIDI6IE1vZGlmaWVkIHJlY3VycmluZyBpbnN0YW5jZSAoaGFzIHJlY3VycmVuY2VJZCwgbm8gUlJVTEUpXG4gICAgaWYgKGV2ZW50LnJlY3VycmVuY2VJZCAmJiAhZXZlbnQucnJ1bGUpIHtcbiAgICAgIGV4cG9ydEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyBDYXNlIDM6IE5vbi1yZWN1cnJpbmcgZXZlbnQgKG5vIFJSVUxFLCBubyByZWN1cnJlbmNlSWQsIG5vIFVJRCBwYXR0ZXJuKVxuICAgIGlmICghZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIGdlbmVyYXRlZCBpbnN0YW5jZSBieSBVSUQgcGF0dGVyblxuICAgICAgY29uc3QgaXNHZW5lcmF0ZWRJbnN0YW5jZSA9IHByb2Nlc3NlZFVJRHMuaGFzKGV2ZW50VUlEKVxuXG4gICAgICBpZiAoIWlzR2VuZXJhdGVkSW5zdGFuY2UpIHtcbiAgICAgICAgZXhwb3J0RXZlbnRzLnB1c2goZXZlbnQpXG4gICAgICB9XG4gICAgICAvLyBTa2lwIGdlbmVyYXRlZCBpbnN0YW5jZXMgLSB0aGV5J2xsIGJlIHJlY3JlYXRlZCBieSBSUlVMRVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBvcnRFdmVudHNcbn1cblxuLyoqXG4gKiBFeHBvcnQgZXZlbnRzIHRvIGlDYWxlbmRhciBmb3JtYXRcbiAqL1xuZXhwb3J0IGNvbnN0IGV4cG9ydFRvSUNhbGVuZGFyID0gKFxuICBldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcbiAgY2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cblxuICAvLyBDYWxlbmRhciBoZWFkZXJcbiAgbGluZXMucHVzaCgnQkVHSU46VkNBTEVOREFSJylcbiAgbGluZXMucHVzaCgnVkVSU0lPTjoyLjAnKVxuICBsaW5lcy5wdXNoKCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicpXG4gIGxpbmVzLnB1c2goJ0NBTFNDQUxFOkdSRUdPUklBTicpXG4gIGxpbmVzLnB1c2goJ01FVEhPRDpQVUJMSVNIJylcbiAgbGluZXMucHVzaChgWC1XUi1DQUxOQU1FOiR7ZXNjYXBlSUNhbFRleHQoY2FsZW5kYXJOYW1lKX1gKVxuICBsaW5lcy5wdXNoKGBYLVdSLUNBTERFU0M6JHtlc2NhcGVJQ2FsVGV4dChgRXhwb3J0ZWQgZnJvbSAke2NhbGVuZGFyTmFtZX1gKX1gKVxuXG4gIC8vIEFkZCB0aW1lem9uZSBpbmZvcm1hdGlvbiAoVVRDKVxuICBsaW5lcy5wdXNoKCdCRUdJTjpWVElNRVpPTkUnKVxuICBsaW5lcy5wdXNoKCdUWklEOlVUQycpXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlNUQU5EQVJEJylcbiAgbGluZXMucHVzaCgnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnKVxuICBsaW5lcy5wdXNoKCdUWk5BTUU6VVRDJylcbiAgbGluZXMucHVzaCgnVFpPRkZTRVRGUk9NOiswMDAwJylcbiAgbGluZXMucHVzaCgnVFpPRkZTRVRUTzorMDAwMCcpXG4gIGxpbmVzLnB1c2goJ0VORDpTVEFOREFSRCcpXG4gIGxpbmVzLnB1c2goJ0VORDpWVElNRVpPTkUnKVxuXG4gIC8vIEZpbHRlciBldmVudHMgZm9yIHByb3BlciBpQ2FsZW5kYXIgZXhwb3J0XG4gIGNvbnN0IGZpbHRlcmVkRXZlbnRzID0gZmlsdGVyRXZlbnRzRm9yRXhwb3J0KGV2ZW50cylcblxuICAvLyBBZGQgZWFjaCBmaWx0ZXJlZCBldmVudFxuICBmaWx0ZXJlZEV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgIGxpbmVzLnB1c2goZXZlbnRUb0lDYWxFdmVudChldmVudCkpXG4gIH0pXG5cbiAgLy8gQ2FsZW5kYXIgZm9vdGVyXG4gIGxpbmVzLnB1c2goJ0VORDpWQ0FMRU5EQVInKVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXHJcXG4nKVxufVxuXG4vKipcbiAqIERvd25sb2FkIGlDYWxlbmRhciBmaWxlIHRvIHVzZXIncyBkZXZpY2VcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuICBldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcbiAgZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcbiAgY2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG4gIGNvbnN0IGljYWxDb250ZW50ID0gZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXG5cbiAgLy8gQ3JlYXRlIGJsb2IgYW5kIGRvd25sb2FkXG4gIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbaWNhbENvbnRlbnRdLCB7XG4gICAgdHlwZTogJ3RleHQvY2FsZW5kYXI7Y2hhcnNldD11dGYtOCcsXG4gIH0pXG5cbiAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gIGxpbmsuaHJlZiA9IHVybFxuICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWUuZW5kc1dpdGgoJy5pY3MnKSA/IGZpbGVuYW1lIDogYCR7ZmlsZW5hbWV9Lmljc2BcblxuICAvLyBUcmlnZ2VyIGRvd25sb2FkXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kKGxpbmspXG4gIGxpbmsuY2xpY2soKVxuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG5cbiAgLy8gQ2xlYW4gdXBcbiAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG59XG4iLAogICAgImltcG9ydCB7XG4gIEJ1dHRvbixcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGRvd25sb2FkSUNhbGVuZGFyIH0gZnJvbSAnQC9saWIvZXhwb3J0LWljYWwnXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFRpdGxlQ29udGVudCBmcm9tICcuL3RpdGxlLWNvbnRlbnQnXG5pbXBvcnQgVmlld0NvbnRyb2xzIGZyb20gJy4vdmlldy1jb250cm9scydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWInXG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSA9ICcnIH0pID0+IHtcbiAgY29uc3Qge1xuICAgIHZpZXcsXG4gICAgc2V0VmlldyxcbiAgICBuZXh0UGVyaW9kLFxuICAgIHByZXZQZXJpb2QsXG4gICAgdG9kYXksXG4gICAgb3BlbkV2ZW50Rm9ybSxcbiAgICBoZWFkZXJDb21wb25lbnQsXG4gICAgcmF3RXZlbnRzLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBTdGF0ZSBmb3IgbW9iaWxlIG1lbnUgcG9wb3ZlclxuICBjb25zdCBbbW9iaWxlUG9wb3Zlck9wZW4sIHNldE1vYmlsZVBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIC8vIEhhbmRsZSB2aWV3IGNoYW5nZSB3aXRoIG9wdGlvbmFsIHBvcG92ZXIgY2xvc2luZ1xuICBjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gKFxuICAgIG5ld1ZpZXc6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJyxcbiAgICBjbG9zZVBvcG92ZXIgPSBmYWxzZVxuICApID0+IHtcbiAgICBzZXRWaWV3KG5ld1ZpZXcpXG4gICAgaWYgKGNsb3NlUG9wb3Zlcikge1xuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIGlDYWxlbmRhciBleHBvcnRcbiAgY29uc3QgaGFuZGxlRXhwb3J0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2BcbiAgICBkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICB9LCBbcmF3RXZlbnRzXSlcblxuICAvLyBDYWxsYmFjayBmb3IgbmF2aWdhdGlvbiB0aGF0IGFsc28gY2xvc2VzIHRoZSBtb2JpbGUgcG9wb3ZlclxuICBjb25zdCBoYW5kbGVOYXZpZ2F0aW9uID0ge1xuICAgIHRvZGF5OiAoKSA9PiB7XG4gICAgICB0b2RheSgpXG4gICAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgICB9LFxuICAgIHByZXZpb3VzOiAoKSA9PiB7XG4gICAgICBwcmV2UGVyaW9kKClcbiAgICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIH0sXG4gICAgbmV4dDogKCkgPT4ge1xuICAgICAgbmV4dFBlcmlvZCgpXG4gICAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgICB9LFxuICB9XG5cbiAgY29uc3QgTmV3RXZlbnRCdXR0b24gPSB1c2VDYWxsYmFjayhcbiAgICAoKSA9PiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG4gICAgICAgICAgdmFyaWFudD1cImRlZmF1bHRcIlxuICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICA+XG4gICAgICAgICAgPFBsdXMgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIGxnOmlubGluZVwiPk5ldzwvc3Bhbj5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICApLFxuICAgIFtvcGVuRXZlbnRGb3JtXVxuICApXG5cbiAgaWYgKGhlYWRlckNvbXBvbmVudCkge1xuICAgIC8vIFJlbmRlciBjdXN0b20gaGVhZGVyIGNvbXBvbmVudCBpZiBwcm92aWRlZFxuICAgIHJldHVybiBoZWFkZXJDb21wb25lbnRcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHsvKiBDYWxlbmRhciBIZWFkZXIgd2l0aCBncmlkIGxheW91dCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnQGNvbnRhaW5lciBmbGV4IGp1c3RpZnktY2VudGVyIGxnOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yIGJvcmRlci1iJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICB7LyogVGl0bGUgYXJlYSAtIExlZnQgc2VjdGlvbiAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgMnhsOmNvbC1zcGFuLTUgMnhsOmp1c3RpZnktc3RhcnRcIj5cbiAgICAgICAgICA8Q2FsZW5kYXJJY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgIDxUaXRsZUNvbnRlbnQgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIE5ldyBldmVudCBidXR0b24gLSBNb2JpbGUgJiBEZXNrdG9wICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktY2VudGVyIGdhcC0xIDJ4bDpjb2wtc3Bhbi03IDJ4bDpqdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgIHsvKiBEZXNrdG9wIGNvbnRyb2xzIC0gY2VudHJhbGl6ZWQgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgbGc6anVzdGlmeS1jZW50ZXIgMnhsOmp1c3RpZnktZW5kIGdhcC0xIHNtOmZsZXggdy1mdWxsIG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICBjdXJyZW50Vmlldz17dmlld31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldFZpZXd9XG4gICAgICAgICAgICAgIG9uVG9kYXk9e3RvZGF5fVxuICAgICAgICAgICAgICBvbk5leHQ9e25leHRQZXJpb2R9XG4gICAgICAgICAgICAgIG9uUHJldmlvdXM9e3ByZXZQZXJpb2R9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgey8qIE5ldyBldmVudCBidXR0b24gLSBEZXNrdG9wICovfVxuICAgICAgICAgICAgPE5ld0V2ZW50QnV0dG9uIC8+XG5cbiAgICAgICAgICAgIHsvKiBFeHBvcnQgYnV0dG9uIC0gRGVza3RvcCAqL31cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRXhwb3J0fVxuICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJoaWRkZW4gbGc6aW5saW5lXCI+RXhwb3J0PC9zcGFuPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogTW9iaWxlIG5hdmlnYXRpb24gbWVudSBidXR0b24gLSBSaWdodCBhbGlnbmVkICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgc206aGlkZGVuXCI+XG4gICAgICAgICAgICB7LyogTmV3IGV2ZW50IGJ1dHRvbiAtIE1vYmlsZSAqL31cbiAgICAgICAgICAgIDxOZXdFdmVudEJ1dHRvbiAvPlxuXG4gICAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgICBvcGVuPXttb2JpbGVQb3BvdmVyT3Blbn1cbiAgICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXtzZXRNb2JpbGVQb3BvdmVyT3Blbn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJzbVwiPlxuICAgICAgICAgICAgICAgICAgPE1lbnUgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBhbGlnbj1cImVuZFwiIGNsYXNzTmFtZT1cInctWzI0MHB4XSBwLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cIm1iLTEgdGV4dC1zbSBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICBWaWV3ICYgTmF2aWdhdGlvblxuICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgIDxWaWV3Q29udHJvbHNcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZpZXc9e3ZpZXd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmlldykgPT4gaGFuZGxlVmlld0NoYW5nZShuZXdWaWV3LCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgb25Ub2RheT17aGFuZGxlTmF2aWdhdGlvbi50b2RheX1cbiAgICAgICAgICAgICAgICAgICAgb25OZXh0PXtoYW5kbGVOYXZpZ2F0aW9uLm5leHR9XG4gICAgICAgICAgICAgICAgICAgIG9uUHJldmlvdXM9e2hhbmRsZU5hdmlnYXRpb24ucHJldmlvdXN9XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJncmlkXCJcbiAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgIHsvKiBFeHBvcnQgYnV0dG9uIC0gTW9iaWxlICovfVxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxEb3dubG9hZCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICBFeHBvcnQgQ2FsZW5kYXIgKC5pY3MpXG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhZGVyXG4iLAogICAgImltcG9ydCB7XG4gIEJ1dHRvbixcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbi8vIENyZWF0ZSBhcnJheXMgZm9yIG1vbnRoIGFuZCB5ZWFyIG9wdGlvbnNcbmNvbnN0IG1vbnRocyA9IFtcbiAgJ0phbnVhcnknLFxuICAnRmVicnVhcnknLFxuICAnTWFyY2gnLFxuICAnQXByaWwnLFxuICAnTWF5JyxcbiAgJ0p1bmUnLFxuICAnSnVseScsXG4gICdBdWd1c3QnLFxuICAnU2VwdGVtYmVyJyxcbiAgJ09jdG9iZXInLFxuICAnTm92ZW1iZXInLFxuICAnRGVjZW1iZXInLFxuXVxuXG4vLyBBbmltYXRpb24gdmFyaWFudHMgZm9yIG51bWJlciB0cmFuc2l0aW9uc1xuY29uc3QgYW5pbWF0aW9uVmFyaWFudHMgPSB7XG4gIGluaXRpYWw6IHsgb3BhY2l0eTogMCwgeTogMTAgfSxcbiAgYW5pbWF0ZTogeyBvcGFjaXR5OiAxLCB5OiAwIH0sXG4gIGV4aXQ6IHsgb3BhY2l0eTogMCwgeTogLTEwIH0sXG59XG5cbmNvbnN0IFRpdGxlQ29udGVudCA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgdmlldywgc2V0Q3VycmVudERhdGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gU3RhdGUgZm9yIG1vYmlsZSBtZW51IGFuZCBwb3BvdmVyc1xuICBjb25zdCBbbW9udGhQb3BvdmVyT3Blbiwgc2V0TW9udGhQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3llYXJQb3BvdmVyT3Blbiwgc2V0WWVhclBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbd2Vla1BvcG92ZXJPcGVuLCBzZXRXZWVrUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtkYXlQb3BvdmVyT3Blbiwgc2V0RGF5UG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcbiAgY29uc3QgeWVhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoXywgaSkgPT4gY3VycmVudFllYXIgLSA1ICsgaSlcblxuICAvLyBIYW5kbGUgbW9udGggYW5kIHllYXIgc2VsZWN0aW9uXG4gIGNvbnN0IGhhbmRsZU1vbnRoQ2hhbmdlID0gKG1vbnRoOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUubW9udGgobW9udGgpXG4gICAgc2V0Q3VycmVudERhdGUobmV3RGF0ZSlcbiAgICBzZXRNb250aFBvcG92ZXJPcGVuKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlWWVhckNoYW5nZSA9ICh5ZWFyOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUueWVhcih5ZWFyKVxuICAgIHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG4gICAgc2V0WWVhclBvcG92ZXJPcGVuKGZhbHNlKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge3ZpZXcgIT09ICd5ZWFyJyAmJiAoXG4gICAgICAgIDxQb3BvdmVyIG9wZW49e21vbnRoUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0TW9udGhQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2Btb250aC0ke2N1cnJlbnREYXRlLm1vbnRoKCl9YH1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICAgIGV4aXQ9XCJleGl0XCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTScpfVxuICAgICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTQwIHAtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAge21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17bW9udGh9XG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb250aENoYW5nZShpbmRleCl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge21vbnRofVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG5cbiAgICAgIDxQb3BvdmVyIG9wZW49e3llYXJQb3BvdmVyT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXRZZWFyUG9wb3Zlck9wZW59PlxuICAgICAgICA8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cbiAgICAgICAgICAgICAgICBrZXk9e2B5ZWFyLSR7Y3VycmVudERhdGUueWVhcigpfWB9XG4gICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZJyl9XG4gICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctMjQgcC0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgIHt5ZWFycy5tYXAoKHllYXIpID0+IChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17eWVhcn1cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS55ZWFyKCkgPT09IHllYXIgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVZZWFyQ2hhbmdlKHllYXIpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3llYXJ9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICA8L1BvcG92ZXI+XG5cbiAgICAgIHsvKiBEaXNwbGF5IGFkZGl0aW9uYWwgdmlldy1zcGVjaWZpYyBpbmZvcm1hdGlvbiAqL31cbiAgICAgIHt2aWV3ID09PSAnd2VlaycgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXt3ZWVrUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0V2Vla1BvcG92ZXJPcGVufT5cbiAgICAgICAgICA8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cbiAgICAgICAgICAgICAgICAgIGtleT17YHdlZWstcmFuZ2UtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgICAgYW5pbWF0ZT1cImFuaW1hdGVcIlxuICAgICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7YCR7Y3VycmVudERhdGVcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KCdNTU0gRCcpfSAtICR7Y3VycmVudERhdGVcbiAgICAgICAgICAgICAgICAgICAgLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgnTU1NIEQnKX1gfVxuICAgICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwibWwtMSBoLTMgdy0zIG9wYWNpdHktNzBcIiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy01NiBwLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICAgIHsvKiBTaG93IDcgd2Vla3MgKDMgcGFzdCwgY3VycmVudCwgMyBmdXR1cmUpICovfVxuICAgICAgICAgICAgICB7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2ZXZWVrID0gd2Vla0RhdGUuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kT2ZXZWVrID0gd2Vla0RhdGUuZW5kT2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudFdlZWsgPSB3ZWVrRGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICd3ZWVrJylcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtleT17c3RhcnRPZldlZWsuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50RGF0ZShzdGFydE9mV2VlaylcbiAgICAgICAgICAgICAgICAgICAgICBzZXRXZWVrUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntgJHtzdGFydE9mV2Vlay5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAnTU1NIEQnXG4gICAgICAgICAgICAgICAgICAgICAgKX0gLSAke2VuZE9mV2Vlay5mb3JtYXQoJ0QnKX1gfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7c3RhcnRPZldlZWsubW9udGgoKSAhPT0gZW5kT2ZXZWVrLm1vbnRoKCkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyBvcGFjaXR5LTcwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtgJHtzdGFydE9mV2Vlay5mb3JtYXQoJ01NTScpfS0ke2VuZE9mV2Vlay5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01NTSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG4gICAgICB7dmlldyA9PT0gJ2RheScgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXtkYXlQb3BvdmVyT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXREYXlQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2BkYXktaW5mby0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPVwiaW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50cz17YW5pbWF0aW9uVmFyaWFudHN9XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIEQnKX1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cIm1sLTEgaC0zIHctMyBvcGFjaXR5LTcwXCIgLz5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNTYgcC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICAgICAgICB7LyogU2hvdyBhbGwgZGF5cyBvZiB0aGUgY3VycmVudCBtb250aCAqL31cbiAgICAgICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGZpcnN0IGRheSBvZiBtb250aCBhbmQgbGFzdCBkYXkgb2YgbW9udGhcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG4gICAgICAgICAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cbiAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBhcnJheSBvZiBkYXlzIGluIHRoZSBtb250aFxuICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZNb250aC5kYXRlKGkgKyAxKSAvLyBpICsgMSBiZWNhdXNlIGRheXMgc3RhcnQgYXQgMVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50RGF5ID0gZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtkYXlEYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnREYXRlKGRheURhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXREYXlQb3BvdmVyT3BlbihmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57ZGF5RGF0ZS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtc20gcHgtMSEgdGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICA8L1BvcG92ZXI+XG4gICAgICApfVxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpdGxlQ29udGVudFxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQ2hldnJvbkxlZnQsIENoZXZyb25SaWdodCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW50ZXJmYWNlIFZpZXdDb250cm9sc1Byb3BzIHtcbiAgY3VycmVudFZpZXc6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJ1xuICBvbkNoYW5nZTogKHZpZXc6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4gdm9pZFxuICBvblRvZGF5PzogKCkgPT4gdm9pZFxuICBvbk5leHQ/OiAoKSA9PiB2b2lkXG4gIG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG4gIHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcbiAgc2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcbiAgY3VycmVudFZpZXcsXG4gIG9uQ2hhbmdlLFxuICB2YXJpYW50ID0gJ2RlZmF1bHQnLFxuICBzaXplID0gJ3NtJyxcbiAgY2xhc3NOYW1lLFxuICBvblRvZGF5LFxuICBvbk5leHQsXG4gIG9uUHJldmlvdXMsXG59KSA9PiB7XG4gIGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXG4gIC8vIEV4dHJhY3QgY29tbW9uIGJ1dHRvbiBjbGFzc05hbWUgbG9naWMgdG8gYSBmdW5jdGlvblxuICBjb25zdCBnZXRCdXR0b25DbGFzc05hbWUgPSAodmlld1R5cGU6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4ge1xuICAgIHJldHVybiBjbihcbiAgICAgIC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG4gICAgICBpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciB5ZWFyIGJ1dHRvbiB2aXNpYmlsaXR5IG9uIG1vYmlsZVxuICAgICAgdmlld1R5cGUgPT09ICd5ZWFyJyA/IChpc0dyaWQgPyAndy1mdWxsJyA6ICdoaWRkZW4gbWQ6aW5saW5lLWZsZXgnKSA6ICcnLFxuICAgICAgLy8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuICAgICAgY3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4ge1xuICAgIHJldHVybiBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgPyAnZGVmYXVsdCcgOiAnb3V0bGluZSdcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgaXNHcmlkID8gJ2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTInIDogJ2ZsZXggZ2FwLTEnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvblByZXZpb3VzfSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICA8Q2hldnJvbkxlZnQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b24gb25DbGljaz17b25OZXh0fSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICA8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ2RheScpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCdkYXknKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ2RheScpfVxuICAgICAgPlxuICAgICAgICBEYXlcbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgnd2VlaycpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCd3ZWVrJyl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKCd3ZWVrJyl9XG4gICAgICA+XG4gICAgICAgIFdlZWtcbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgnbW9udGgnKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgnbW9udGgnKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ21vbnRoJyl9XG4gICAgICA+XG4gICAgICAgIE1vbnRoXG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ3llYXInKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgneWVhcicpfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSgneWVhcicpfVxuICAgICAgPlxuICAgICAgICBZZWFyXG4gICAgICA8L0J1dHRvbj5cblxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICBUb2RheVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld0NvbnRyb2xzXG4iLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5cbmNvbnN0IFllYXJWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgc2VsZWN0RGF0ZSwgZXZlbnRzLCBzZXRWaWV3LCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgeWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXG4gIC8vIEdlbmVyYXRlIGFuIGFycmF5IG9mIDEyIG1vbnRocyBmb3IgdGhlIGN1cnJlbnQgeWVhclxuICBjb25zdCBtb250aHMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMiB9LCAoXywgaSkgPT4ge1xuICAgIGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKCkueWVhcih5ZWFyKS5tb250aChpKS5zdGFydE9mKCdtb250aCcpXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGU6IG1vbnRoRGF0ZSxcbiAgICAgIG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcbiAgICAgIGRheXNJbk1vbnRoOiBtb250aERhdGUuZGF5c0luTW9udGgoKSxcbiAgICAgIGZpcnN0RGF5T2ZNb250aDogbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuZGF5KCksIC8vIDAtNiwgMCBpcyBTdW5kYXlcbiAgICB9XG4gIH0pXG5cbiAgLy8gQ2FsY3VsYXRlIGV2ZW50cyBmb3IgZWFjaCBtb250aFxuICBjb25zdCBtb250aHNXaXRoRXZlbnRDb3VudCA9IG1vbnRocy5tYXAoKG1vbnRoKSA9PiB7XG4gICAgY29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG4gICAgICAoZXZlbnQpID0+XG4gICAgICAgIGV2ZW50LnN0YXJ0LnllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICBldmVudC5zdGFydC5tb250aCgpID09PSBtb250aC5kYXRlLm1vbnRoKClcbiAgICApXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubW9udGgsXG4gICAgICBldmVudENvdW50OiBldmVudHNJbk1vbnRoLmxlbmd0aCxcbiAgICB9XG4gIH0pXG5cbiAgLy8gSGFuZGxlIG1vbnRoIGNsaWNrIHRvIG5hdmlnYXRlIHRvIG1vbnRoIHZpZXdcbiAgY29uc3QgaGFuZGxlTW9udGhDbGljayA9IChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuICAgIHNlbGVjdERhdGUoZGF0ZSlcbiAgICBzZXRWaWV3KCdtb250aCcpXG4gIH1cblxuICAvLyBIYW5kbGUgZGF5IGNsaWNrIHdpdGhpbiB0aGUgbWluaSBjYWxlbmRhclxuICBjb25zdCBoYW5kbGVEYXlDbGljayA9IChkYXRlOiBkYXlqcy5EYXlqcywgZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKSAvLyBQcmV2ZW50IHRyaWdnZXJpbmcgdGhlIG1vbnRoIGNsaWNrXG4gICAgc2VsZWN0RGF0ZShkYXRlKVxuICAgIHNldFZpZXcoJ2RheScpIC8vIE5hdmlnYXRlIGRpcmVjdGx5IHRvIGRheSB2aWV3IHdoZW4gY2xpY2tpbmcgb24gYSBzcGVjaWZpYyBkYXlcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIGRheXMgZm9yIG1pbmkgY2FsZW5kYXIgaW4gZWFjaCBtb250aFxuICBjb25zdCByZW5kZXJNaW5pQ2FsZW5kYXIgPSAobW9udGg6ICh0eXBlb2YgbW9udGhzV2l0aEV2ZW50Q291bnQpWzBdKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoJ3MgY2FsZW5kYXIgKHdoaWNoIGNvdWxkIGJlIGluIHRoZSBwcmV2aW91cyBtb250aClcbiAgICBjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aC5kYXRlLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpXG5cbiAgICAvLyBDcmVhdGUgNDIgZGF5cyAoNiByb3dzIG9mIDcgZGF5cykgZm9yIGNvbnNpc3RlbmN5XG4gICAgY29uc3QgZGF5c0FycmF5ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogNDIgfSwgKF8sIGkpID0+IHtcbiAgICAgIGNvbnN0IGRheSA9IGZpcnN0RGF5T2ZDYWxlbmRhci5hZGQoaSwgJ2RheScpXG4gICAgICBjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBtb250aC5kYXRlLm1vbnRoKClcbiAgICAgIGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuICAgICAgY29uc3QgaXNDdXJyZW50RGF0ZSA9IGRheS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKVxuXG4gICAgICAvLyBHZXQgZXZlbnRzIGZvciB0aGlzIGRheVxuICAgICAgY29uc3QgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgICAgICBkYXkuc3RhcnRPZignZGF5JyksXG4gICAgICAgIGRheS5lbmRPZignZGF5JylcbiAgICAgIClcbiAgICAgIGNvbnN0IGhhc0V2ZW50cyA9IGRheUV2ZW50cy5sZW5ndGggPiAwXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRheSxcbiAgICAgICAgaXNDdXJyZW50TW9udGgsXG4gICAgICAgIGlzVG9kYXksXG4gICAgICAgIGlzQ3VycmVudERhdGUsXG4gICAgICAgIGhhc0V2ZW50cyxcbiAgICAgICAgZXZlbnRDb3VudDogZGF5RXZlbnRzLmxlbmd0aCxcbiAgICAgICAgLy8gR3JvdXAgZXZlbnRzIGJ5IHRoZWlyIGNhdGVnb3JpZXMgdG8gc2hvdyBkaWZmZXJlbnQgY29sb3JzXG4gICAgICAgIGV2ZW50czogZGF5RXZlbnRzLFxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbWluaS1jYWxlbmRhci0ke21vbnRoLmRhdGUuZm9ybWF0KCdNTScpfWB9XG4gICAgICAgIGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTcgZ2FwLVsxcHhdIHRleHQtWzAuNnJlbV1cIlxuICAgICAgPlxuICAgICAgICB7LyogRGF5IG5hbWVzICovfVxuICAgICAgICB7WydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10ubWFwKChkYXlOYW1lLCBpKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgaGVhZGVyLSR7aX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGgtMyB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2RheU5hbWV9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuXG4gICAgICAgIHsvKiBDYWxlbmRhciBkYXlzICovfVxuICAgICAgICB7ZGF5c0FycmF5Lm1hcCgoZGF5SW5mbywgaSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGRheS0ke2l9YH1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1kYXktJHttb250aC5kYXRlLmZvcm1hdCgnWVlZWS1NTScpfS0ke2RheUluZm8uZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gaGFuZGxlRGF5Q2xpY2soZGF5SW5mby5kYXksIGUpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ3JlbGF0aXZlIGZsZXggYXNwZWN0LXNxdWFyZSB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyJyxcbiAgICAgICAgICAgICAgJ2hvdmVyOmJnLWFjY2VudCByb3VuZGVkLXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMCcsXG4gICAgICAgICAgICAgICFkYXlJbmZvLmlzQ3VycmVudE1vbnRoICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG4gICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSAmJlxuICAgICAgICAgICAgICAgICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCcsXG4gICAgICAgICAgICAgIGRheUluZm8uaXNDdXJyZW50RGF0ZSAmJlxuICAgICAgICAgICAgICAgICFkYXlJbmZvLmlzVG9kYXkgJiZcbiAgICAgICAgICAgICAgICAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcsXG4gICAgICAgICAgICAgIGRheUluZm8uaGFzRXZlbnRzICYmXG4gICAgICAgICAgICAgICAgIWRheUluZm8uaXNUb2RheSAmJlxuICAgICAgICAgICAgICAgICFkYXlJbmZvLmlzQ3VycmVudERhdGUgJiZcbiAgICAgICAgICAgICAgICAnZm9udC1tZWRpdW0nXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICBkYXlJbmZvLmhhc0V2ZW50c1xuICAgICAgICAgICAgICAgID8gYCR7ZGF5SW5mby5ldmVudENvdW50fSBldmVudCR7XG4gICAgICAgICAgICAgICAgICAgIGRheUluZm8uZXZlbnRDb3VudCA+IDEgPyAncycgOiAnJ1xuICAgICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1jZW50ZXIgbGVhZGluZy1ub25lXCI+XG4gICAgICAgICAgICAgIHtkYXlJbmZvLmRheS5kYXRlKCl9XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIHsvKiBFbmhhbmNlZCBldmVudCBpbmRpY2F0b3IgLSBzaG93IG11bHRpcGxlIGNvbG9yZWQgZG90cyBmb3IgZGlmZmVyZW50IGV2ZW50IHR5cGVzICovfVxuICAgICAgICAgICAge2RheUluZm8uaGFzRXZlbnRzICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAnYWJzb2x1dGUgYm90dG9tLTAgZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgc3BhY2UteC1bMXB4XScsXG4gICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYm90dG9tLVsxcHhdJyA6ICcnXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHsvKiBTaG93IHVwIHRvIDMgZXZlbnQgZG90cyB3aXRoIGRpZmZlcmVudCBjb2xvcnMgaWYgYXZhaWxhYmxlICovfVxuICAgICAgICAgICAgICAgIHtkYXlJbmZvLmV2ZW50Q291bnQgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2gtWzNweF0gdy1bM3B4XSByb3VuZGVkLWZ1bGwnLFxuICAgICAgICAgICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSA/ICdiZy1wcmltYXJ5LWZvcmVncm91bmQnIDogJ2JnLXByaW1hcnknXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2RheUluZm8uZXZlbnRDb3VudCA+IDEgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAnaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiAnYmctYmx1ZS01MDAnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge2RheUluZm8uZXZlbnRDb3VudCA+IDIgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAnaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiAnYmctZ3JlZW4tNTAwJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYSBkYXRhLXRlc3RpZD1cInllYXItdmlld1wiIGNsYXNzTmFtZT1cImgtZnVsbFwiPlxuICAgICAgPGRpdlxuICAgICAgICBkYXRhLXRlc3RpZD1cInllYXItZ3JpZFwiXG4gICAgICAgIGNsYXNzTmFtZT1cImdyaWQgYXV0by1yb3dzLWZyIGdyaWQtY29scy0xIGdhcC00IHAtNCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiXG4gICAgICA+XG4gICAgICAgIHttb250aHNXaXRoRXZlbnRDb3VudC5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17bW9udGgubmFtZX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC0ke21vbnRoLmRhdGUuZm9ybWF0KCdNTScpfWB9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVNb250aENsaWNrKG1vbnRoLmRhdGUpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6Ym9yZGVyLXByaW1hcnkgZmxleCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCByb3VuZGVkLWxnIGJvcmRlciBwLTMgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNjYWxlLVsxLjAxXSBob3ZlcjpzaGFkb3ctbWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICBrZXk9e2Btb250aC0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3tcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjI1LFxuICAgICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgICBkZWxheTogaW5kZXggKiAwLjA1LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWItMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGgzXG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbW9udGgtdGl0bGUtJHttb250aC5kYXRlLmZvcm1hdCgnTU0nKX1gfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge21vbnRoLm5hbWV9XG4gICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICB7bW9udGguZXZlbnRDb3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLWV2ZW50LWNvdW50LSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwgcHgtMiBweS0xIHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7bW9udGguZXZlbnRDb3VudH17JyAnfVxuICAgICAgICAgICAgICAgICAgICB7bW9udGguZXZlbnRDb3VudCA9PT0gMSA/ICdldmVudCcgOiAnZXZlbnRzJ31cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cblxuICAgICAgICAgICAge3JlbmRlck1pbmlDYWxlbmRhcihtb250aCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgPC9TY3JvbGxBcmVhPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFllYXJWaWV3XG4iLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IE1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL3ZpZXcvbW9udGgtdmlldydcbmltcG9ydCBXZWVrVmlldyBmcm9tICdAL2ZlYXR1cmVzL3dlZWstdmlldy92aWV3L3dlZWstdmlldydcbmltcG9ydCBEYXlWaWV3IGZyb20gJ0AvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy92aWV3L2RheS12aWV3J1xuaW1wb3J0IHsgRXZlbnRGb3JtIH0gZnJvbSAnLi4vZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnLi4vaGVhZGVyJ1xuaW1wb3J0IFllYXJWaWV3IGZyb20gJ0AvZmVhdHVyZXMveWVhci12aWV3L3ZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZHVwbGljYXRlc1xuaW1wb3J0ICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBXRUVLX0RBWVNfTlVNQkVSX01BUCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZVB1YmxpY0ZhY2luZ0NhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2xpYidcbmltcG9ydCB0eXBlIHsgSWxhbXlDYWxlbmRhclByb3BzIH0gZnJvbSAnLi90eXBlcydcblxuY29uc3QgQ2FsZW5kYXJDb250ZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3Qge1xuICAgIHZpZXcsXG4gICAgaXNFdmVudEZvcm1PcGVuLFxuICAgIGNsb3NlRXZlbnRGb3JtLFxuICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlLFxuICAgIGFkZEV2ZW50LFxuICAgIHVwZGF0ZUV2ZW50LFxuICAgIGRlbGV0ZUV2ZW50LFxuICAgIGRheU1heEV2ZW50cyxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3Qgdmlld01hcCA9IHtcbiAgICBtb250aDogPE1vbnRoVmlldyBrZXk9XCJtb250aFwiIGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSAvPixcbiAgICB3ZWVrOiA8V2Vla1ZpZXcga2V5PVwid2Vla1wiIC8+LFxuICAgIGRheTogPERheVZpZXcga2V5PVwiZGF5XCIgLz4sXG4gICAgeWVhcjogPFllYXJWaWV3IGtleT1cInllYXJcIiAvPixcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9uVXBkYXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgdXBkYXRlRXZlbnQoZXZlbnQuaWQsIGV2ZW50KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlT25EZWxldGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICBkZWxldGVFdmVudChldmVudC5pZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIj5cbiAgICAgIDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblxuICAgICAgey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlUHJlc2VuY2UgZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG4gICAgICA8Q2FsZW5kYXJEbmRDb250ZXh0PlxuICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgIGtleT17dmlld31cbiAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeDogMjAgfX1cbiAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeDogMCB9fVxuICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB4OiAtMjAgfX1cbiAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt2aWV3TWFwW3ZpZXddfVxuICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICA8L0NhbGVuZGFyRG5kQ29udGV4dD5cblxuICAgICAgey8qIEV2ZW50IEZvcm0gRGlhbG9nICovfVxuICAgICAge2lzRXZlbnRGb3JtT3BlbiAmJiAoXG4gICAgICAgIDxFdmVudEZvcm1cbiAgICAgICAgICBvbkNsb3NlPXtjbG9zZUV2ZW50Rm9ybX1cbiAgICAgICAgICBzZWxlY3RlZEV2ZW50PXtzZWxlY3RlZEV2ZW50fVxuICAgICAgICAgIHNlbGVjdGVkRGF0ZT17c2VsZWN0ZWREYXRlfVxuICAgICAgICAgIG9uQWRkPXthZGRFdmVudH1cbiAgICAgICAgICBvblVwZGF0ZT17aGFuZGxlT25VcGRhdGV9XG4gICAgICAgICAgb25EZWxldGU9e2hhbmRsZU9uRGVsZXRlfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5jb25zdCBERUZBVUxUX0RBWV9NQVhfRVZFTlRTID0gNFxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuICBldmVudHMsXG4gIGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIGxvY2FsZSxcbiAgdGltZXpvbmUsXG4gIGRpc2FibGVDZWxsQ2xpY2ssXG4gIGRpc2FibGVFdmVudENsaWNrLFxuICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIGRheU1heEV2ZW50cyA9IERFRkFVTFRfREFZX01BWF9FVkVOVFMsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Q2FsZW5kYXJQcm92aWRlclxuICAgICAgZXZlbnRzPXtub3JtYWxpemVQdWJsaWNGYWNpbmdDYWxlbmRhckV2ZW50KGV2ZW50cyl9XG4gICAgICBmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuICAgICAgcmVuZGVyRXZlbnQ9e3JlbmRlckV2ZW50fVxuICAgICAgb25FdmVudENsaWNrPXtvbkV2ZW50Q2xpY2t9XG4gICAgICBvbkNlbGxDbGljaz17b25DZWxsQ2xpY2t9XG4gICAgICBvblZpZXdDaGFuZ2U9e29uVmlld0NoYW5nZX1cbiAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgdGltZXpvbmU9e3RpbWV6b25lfVxuICAgICAgZGlzYWJsZUNlbGxDbGljaz17ZGlzYWJsZUNlbGxDbGlja31cbiAgICAgIGRpc2FibGVFdmVudENsaWNrPXtkaXNhYmxlRXZlbnRDbGlja31cbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcD17ZGlzYWJsZURyYWdBbmREcm9wfVxuICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICBzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZT17dmlld0hlYWRlckNsYXNzTmFtZX1cbiAgICAgIGhlYWRlckNvbXBvbmVudD17aGVhZGVyQ29tcG9uZW50fVxuICAgID5cbiAgICAgIDxDYWxlbmRhckNvbnRlbnQgLz5cbiAgICA8L0NhbGVuZGFyUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHtcbiAgRG5kQ29udGV4dCxcbiAgRHJhZ092ZXJsYXksXG4gIE1vdXNlU2Vuc29yLFxuICBwb2ludGVyV2l0aGluLFxuICBUb3VjaFNlbnNvcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUge1xuICBEcmFnQ2FuY2VsRXZlbnQsXG4gIERyYWdFbmRFdmVudCxcbiAgRHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9saWIvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhckRuZENvbnRleHQoeyBjaGlsZHJlbiB9OiBDYWxlbmRhckRuZENvbnRleHRQcm9wcykge1xuICBjb25zdCB7IHVwZGF0ZUV2ZW50LCB1cGRhdGVSZWN1cnJpbmdFdmVudCwgdmlldywgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuICAgIHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IFthY3RpdmVFdmVudCwgc2V0QWN0aXZlRXZlbnRdID0gUmVhY3QudXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KFxuICAgIG51bGxcbiAgKVxuXG4gIC8vIFN0YXRlIGZvciByZWN1cnJpbmcgZXZlbnQgZGlhbG9nXG4gIGNvbnN0IFtyZWN1cnJpbmdEaWFsb2csIHNldFJlY3VycmluZ0RpYWxvZ10gPSB1c2VTdGF0ZTx7XG4gICAgaXNPcGVuOiBib29sZWFuXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PiB8IG51bGxcbiAgfT4oe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgZXZlbnQ6IG51bGwsXG4gICAgdXBkYXRlczogbnVsbCxcbiAgfSlcblxuICAvLyBDb25maWd1cmUgc2Vuc29ycyB3aXRoIHJlZHVjZWQgYWN0aXZhdGlvbiBjb25zdHJhaW50cyBmb3IgZWFzaWVyIGRyYWdnaW5nXG4gIGNvbnN0IG1vdXNlU2Vuc29yID0gdXNlU2Vuc29yKE1vdXNlU2Vuc29yLCB7XG4gICAgLy8gUmVxdWlyZSBtaW5pbWFsIG1vdmVtZW50IGJlZm9yZSBhY3RpdmF0aW5nXG4gICAgYWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcbiAgICAgIGRpc3RhbmNlOiAyLFxuICAgIH0sXG4gIH0pXG5cbiAgY29uc3QgdG91Y2hTZW5zb3IgPSB1c2VTZW5zb3IoVG91Y2hTZW5zb3IsIHtcbiAgICAvLyBSZWR1Y2UgZGVsYXkgZm9yIHRvdWNoIGRldmljZXNcbiAgICBhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuICAgICAgZGVsYXk6IDEwMCxcbiAgICAgIHRvbGVyYW5jZTogNSxcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0IHNlbnNvcnMgPSB1c2VTZW5zb3JzKG1vdXNlU2Vuc29yLCB0b3VjaFNlbnNvcilcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGV2ZW50IHVwZGF0ZVxuICBjb25zdCBwZXJmb3JtRXZlbnRVcGRhdGUgPSAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICApID0+IHtcbiAgICAvLyBWYWxpZGF0ZSBpbnB1dHNcbiAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5pZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVzIHx8IE9iamVjdC5rZXlzKHVwZGF0ZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzUmVjdXJyaW5nRXZlbnQoZXZlbnQpKSB7XG4gICAgICAvLyBTaG93IGRpYWxvZyBmb3IgcmVjdXJyaW5nIGV2ZW50c1xuICAgICAgc2V0UmVjdXJyaW5nRGlhbG9nKHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBldmVudCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERpcmVjdGx5IHVwZGF0ZSByZWd1bGFyIGV2ZW50c1xuICAgICAgdXBkYXRlRXZlbnQoZXZlbnQuaWQsIHVwZGF0ZXMpXG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY29uZmlybWF0aW9uXG4gIGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybSA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgIGlmICghcmVjdXJyaW5nRGlhbG9nLmV2ZW50IHx8ICFyZWN1cnJpbmdEaWFsb2cudXBkYXRlcykge1xuICAgICAgc2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudChyZWN1cnJpbmdEaWFsb2cuZXZlbnQsIHJlY3VycmluZ0RpYWxvZy51cGRhdGVzLCB7XG4gICAgICAgIHNjb3BlLFxuICAgICAgICBldmVudERhdGU6IHJlY3VycmluZ0RpYWxvZy5ldmVudC5zdGFydCxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBTaWxlbnRseSBoYW5kbGUgZXJyb3IgYW5kIHJlc2V0IGRpYWxvZyBzdGF0ZVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNsb3NlXG4gIGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2UgPSAoKSA9PiB7XG4gICAgc2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IChldmVudDogRHJhZ1N0YXJ0RXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGFjdGl2ZSB9ID0gZXZlbnRcblxuICAgIC8vIFNldCB0aGUgYWN0aXZlIGV2ZW50IGJhc2VkIG9uIHRoZSBldmVudCBkYXRhXG4gICAgaWYgKGFjdGl2ZS5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICdjYWxlbmRhci1ldmVudCcpIHtcbiAgICAgIHNldEFjdGl2ZUV2ZW50KGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0VuZCA9IChldmVudDogRHJhZ0VuZEV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmUsIG92ZXIgfSA9IGV2ZW50XG5cbiAgICBpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcbiAgICAgIHNldEFjdGl2ZUV2ZW50KG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAob3Zlci5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICd0aW1lLWNlbGwnKSB7XG4gICAgICBjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGV2ZW50IGR1cmF0aW9uIGluIG1pbnV0ZXNcbiAgICAgIGNvbnN0IHN0YXJ0ID0gYWN0aXZlRXZlbnQuc3RhcnRcbiAgICAgIGNvbnN0IGVuZCA9IGFjdGl2ZUV2ZW50LmVuZFxuICAgICAgY29uc3QgZHVyYXRpb25NaW51dGVzID0gZW5kLmRpZmYoc3RhcnQsICdtaW51dGUnKVxuXG4gICAgICAvLyBDcmVhdGUgbmV3IHN0YXJ0IHRpbWUgYmFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0XG4gICAgICBjb25zdCBuZXdTdGFydCA9IGRheWpzKGRhdGUpXG4gICAgICAgIC5ob3VyKGhvdXIpXG4gICAgICAgIC5taW51dGUobWludXRlIHx8IDApXG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgZW5kIHRpbWUgYnkgYWRkaW5nIHRoZSBvcmlnaW5hbCBkdXJhdGlvblxuICAgICAgbGV0IG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChkdXJhdGlvbk1pbnV0ZXMsICdtaW51dGUnKVxuICAgICAgaWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuICAgICAgICAvLyBJZiB0aGUgbmV3IGVuZCB0aW1lIGlzIGF0IG1pZG5pZ2h0LCBzZXQgaXQgdG8gMjQgaG91cnMgb2YgcGFydGlhbCBkYXlcbiAgICAgICAgbmV3RW5kID0gbmV3RW5kLnN1YnRyYWN0KDEsICdkYXknKS5lbmRPZignZGF5JylcbiAgICAgIH1cblxuICAgICAgLy8gVXBkYXRlIHRoZSBldmVudCB3aXRoIG5ldyB0aW1lc1xuICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB7XG4gICAgICAgIHN0YXJ0OiBuZXdTdGFydCxcbiAgICAgICAgZW5kOiBuZXdFbmQsXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAob3Zlci5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICdkYXktY2VsbCcpIHtcbiAgICAgIGNvbnN0IHsgZGF0ZSB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcbiAgICAgIGNvbnN0IG5ld0RhdGUgPSBkYXlqcyhkYXRlKVxuXG4gICAgICAvLyBGb3IgbXVsdGktZGF5IGV2ZW50cywgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZHVyYXRpb24gaW4gZGF5c1xuICAgICAgY29uc3QgaXNNdWx0aURheUV2ZW50ID0gIWFjdGl2ZUV2ZW50LnN0YXJ0LmlzU2FtZShhY3RpdmVFdmVudC5lbmQsICdkYXknKVxuICAgICAgY29uc3Qgc3RhcnQgPSBhY3RpdmVFdmVudC5zdGFydFxuICAgICAgY29uc3QgZW5kID0gYWN0aXZlRXZlbnQuZW5kXG5cbiAgICAgIGlmIChpc011bHRpRGF5RXZlbnQpIHtcbiAgICAgICAgaWYgKHZpZXcgPT09ICd3ZWVrJykge1xuICAgICAgICAgIC8vIEdldCB0aW1lIGNvbXBvbmVudHMgdG8gcHJlc2VydmVcbiAgICAgICAgICBjb25zdCBzdGFydEhvdXIgPSBzdGFydC5ob3VyKClcbiAgICAgICAgICBjb25zdCBzdGFydE1pbnV0ZSA9IHN0YXJ0Lm1pbnV0ZSgpXG4gICAgICAgICAgY29uc3QgZW5kSG91ciA9IGVuZC5ob3VyKClcbiAgICAgICAgICBjb25zdCBlbmRNaW51dGUgPSBlbmQubWludXRlKClcblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSBkdXJhdGlvbiBpbiBkYXlzIHRvIHByZXNlcnZlXG4gICAgICAgICAgY29uc3QgZHVyYXRpb25EYXlzID0gZW5kLmRpZmYoc3RhcnQsICdkYXknKVxuXG4gICAgICAgICAgLy8gQ3JlYXRlIG5ldyBzdGFydCBhbmQgZW5kIGRhdGVzXG4gICAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBuZXdEYXRlXG4gICAgICAgICAgICAuc3RhcnRPZignZGF5JylcbiAgICAgICAgICAgIC5ob3VyKHN0YXJ0SG91cilcbiAgICAgICAgICAgIC5taW51dGUoc3RhcnRNaW51dGUpXG4gICAgICAgICAgY29uc3QgbmV3RW5kID0gbmV3U3RhcnRcbiAgICAgICAgICAgIC5hZGQoZHVyYXRpb25EYXlzLCAnZGF5JylcbiAgICAgICAgICAgIC5ob3VyKGVuZEhvdXIpXG4gICAgICAgICAgICAubWludXRlKGVuZE1pbnV0ZSlcblxuICAgICAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwge1xuICAgICAgICAgICAgc3RhcnQ6IG5ld1N0YXJ0LFxuICAgICAgICAgICAgZW5kOiBuZXdFbmQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb3Igb3RoZXIgdmlld3MgbGlrZSBtb250aCB2aWV3XG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkYXRlIHNoaWZ0IChob3cgbWFueSBkYXlzIHdlJ3JlIG1vdmluZyB0aGUgZXZlbnQpXG4gICAgICAgICAgY29uc3QgZGF5c0RpZmZlcmVuY2UgPSBuZXdEYXRlLmRpZmYoc3RhcnQuc3RhcnRPZignZGF5JyksICdkYXknKVxuXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBzdGFydCBhbmQgZW5kIHdoaWxlIHByZXNlcnZpbmcgdGltZSBjb21wb25lbnRzXG4gICAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBzdGFydC5hZGQoZGF5c0RpZmZlcmVuY2UsICdkYXknKVxuICAgICAgICAgIGNvbnN0IG5ld0VuZCA9IGVuZC5hZGQoZGF5c0RpZmZlcmVuY2UsICdkYXknKVxuXG4gICAgICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB7XG4gICAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igc2luZ2xlLWRheSBldmVudHMsIG1haW50YWluIHRoZSB0aW1lIGJ1dCBjaGFuZ2UgdGhlIGRhdGVcbiAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBuZXdEYXRlXG4gICAgICAgICAgLmhvdXIoYWN0aXZlRXZlbnQuc3RhcnQuaG91cigpKVxuICAgICAgICAgIC5taW51dGUoYWN0aXZlRXZlbnQuc3RhcnQubWludXRlKCkpXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIGFuZCBzZXQgbmV3IGVuZCB0aW1lXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IGFjdGl2ZUV2ZW50LmVuZC5kaWZmKFxuICAgICAgICAgIGFjdGl2ZUV2ZW50LnN0YXJ0LFxuICAgICAgICAgICdtaW51dGUnXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGR1cmF0aW9uTWludXRlcywgJ21pbnV0ZScpXG5cbiAgICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB7XG4gICAgICAgICAgc3RhcnQ6IG5ld1N0YXJ0LFxuICAgICAgICAgIGVuZDogbmV3RW5kLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHNldEFjdGl2ZUV2ZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnQ2FuY2VsID0gKF9ldmVudDogRHJhZ0NhbmNlbEV2ZW50KSA9PiB7XG4gICAgc2V0QWN0aXZlRXZlbnQobnVsbClcbiAgfVxuXG4gIC8vIElmIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWQsIGp1c3QgcmV0dXJuIGNoaWxkcmVuIHdpdGhvdXQgRG5kQ29udGV4dFxuICBpZiAoZGlzYWJsZURyYWdBbmREcm9wKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuIGFzIFJlYWN0LlJlYWN0RWxlbWVudFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgc2Vuc29ycz17c2Vuc29yc31cbiAgICAgICAgb25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cbiAgICAgICAgb25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuICAgICAgICBvbkRyYWdDYW5jZWw9e2hhbmRsZURyYWdDYW5jZWx9XG4gICAgICAgIGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8RHJhZ092ZXJsYXkgbW9kaWZpZXJzPXtbc25hcENlbnRlclRvQ3Vyc29yXX0+XG4gICAgICAgICAge2FjdGl2ZUV2ZW50ICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzJyxcbiAgICAgICAgICAgICAgICBhY3RpdmVFdmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcbiAgICAgICAgICAgICAgICBhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2FjdGl2ZUV2ZW50Py50aXRsZX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRHJhZ092ZXJsYXk+XG4gICAgICA8L0RuZENvbnRleHQ+XG5cbiAgICAgIHsvKiBSZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2cgKi99XG4gICAgICA8UmVjdXJyZW5jZUVkaXREaWFsb2dcbiAgICAgICAgaXNPcGVuPXtyZWN1cnJpbmdEaWFsb2cuaXNPcGVufVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlfVxuICAgICAgICBvbkNvbmZpcm09e2hhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybX1cbiAgICAgICAgb3BlcmF0aW9uVHlwZT1cImVkaXRcIlxuICAgICAgICBldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHtcbiAgZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50IGFzIHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCxcbiAgZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcblxuaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG4gIGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdE5vZGVcbiAgb25FdmVudENsaWNrPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uQ2VsbENsaWNrPzogKHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIG9uVmlld0NoYW5nZT86ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHRpbWV6b25lPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI/OiBib29sZWFuXG4gIHZpZXdIZWFkZXJDbGFzc05hbWU/OiBzdHJpbmdcbiAgaGVhZGVyQ29tcG9uZW50PzogUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGV2ZW50cyA9IFtdLFxuICBmaXJzdERheU9mV2VlayA9IDAsIC8vIERlZmF1bHQgdG8gU3VuZGF5LFxuICByZW5kZXJFdmVudCxcbiAgb25FdmVudENsaWNrLFxuICBvbkNlbGxDbGljayxcbiAgb25WaWV3Q2hhbmdlLFxuICBsb2NhbGUsXG4gIHRpbWV6b25lLFxuICBkaXNhYmxlQ2VsbENsaWNrLFxuICBkaXNhYmxlRXZlbnRDbGljayxcbiAgZGlzYWJsZURyYWdBbmREcm9wLFxuICBkYXlNYXhFdmVudHMsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbn0pID0+IHtcbiAgLy8gU3RhdGVcbiAgY29uc3QgW2N1cnJlbnREYXRlLCBzZXRDdXJyZW50RGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcz4oZGF5anMoKSlcbiAgY29uc3QgW3ZpZXcsIHNldFZpZXddID0gdXNlU3RhdGU8J21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInPignbW9udGgnKVxuICBjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcbiAgY29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGU8c3RyaW5nPihsb2NhbGUgfHwgJ2VuJylcbiAgY29uc3QgW2N1cnJlbnRUaW1lem9uZSwgc2V0Q3VycmVudFRpbWV6b25lXSA9IHVzZVN0YXRlPHN0cmluZz4odGltZXpvbmUgfHwgJycpXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBldmVudHMgZm9yIGEgc3BlY2lmaWMgZGF0ZSByYW5nZSAob24tZGVtYW5kIGdlbmVyYXRpb24pXG4gIGNvbnN0IGdldEV2ZW50c0ZvckRhdGVSYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gICAgICBjb25zdCBhbGxFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgY3VycmVudEV2ZW50cykge1xuICAgICAgICBpZiAoZXZlbnQucnJ1bGUpIHtcbiAgICAgICAgICAvLyBHZW5lcmF0ZSByZWN1cnJpbmcgaW5zdGFuY2VzIGZvciB0aGUgc3BlY2lmaWMgcmFuZ2VcbiAgICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudHMgPSBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgICAgICBzdGFydERhdGUsXG4gICAgICAgICAgICBlbmREYXRlLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgYWxsRXZlbnRzLnB1c2goLi4ucmVjdXJyaW5nRXZlbnRzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFkZCBub24tcmVjdXJyaW5nIGV2ZW50cyB3aXRoIGNvbXByZWhlbnNpdmUgcmFuZ2UgY2hlY2tpbmdcbiAgICAgICAgICBjb25zdCBldmVudFN0YXJ0c0luUmFuZ2UgPVxuICAgICAgICAgICAgZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG4gICAgICAgICAgICBldmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXG4gICAgICAgICAgY29uc3QgZXZlbnRFbmRzSW5SYW5nZSA9XG4gICAgICAgICAgICBldmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG4gICAgICAgICAgICBldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcblxuICAgICAgICAgIGNvbnN0IGV2ZW50U3BhbnNSYW5nZSA9XG4gICAgICAgICAgICBldmVudC5zdGFydC5pc0JlZm9yZShzdGFydERhdGUpICYmIGV2ZW50LmVuZC5pc0FmdGVyKGVuZERhdGUpXG5cbiAgICAgICAgICBpZiAoZXZlbnRTdGFydHNJblJhbmdlIHx8IGV2ZW50RW5kc0luUmFuZ2UgfHwgZXZlbnRTcGFuc1JhbmdlKSB7XG4gICAgICAgICAgICBhbGxFdmVudHMucHVzaChldmVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsbEV2ZW50c1xuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHNdXG4gIClcblxuICAvLyBHZXQgdGhlIGN1cnJlbnQgdmlldydzIGRhdGUgcmFuZ2UgZm9yIG9uLWRlbWFuZCBldmVudCBnZW5lcmF0aW9uXG4gIGNvbnN0IGdldEN1cnJlbnRWaWV3UmFuZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKSxcbiAgICAgICAgfVxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnREYXRlXG4gICAgICAgICAgICAuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgICAuc3VidHJhY3QoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5lbmRPZignd2VlaycpXG4gICAgICAgICAgICAuYWRkKGZpcnN0RGF5T2ZXZWVrID09PSAxID8gMSA6IDAsICdkYXknKSxcbiAgICAgICAgfVxuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ21vbnRoJylcbiAgICAgICAgICAgIC5zdGFydE9mKCd3ZWVrJylcbiAgICAgICAgICAgIC5zdWJ0cmFjdChmaXJzdERheU9mV2VlayA9PT0gMSA/IDEgOiAwLCAnZGF5JyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZVxuICAgICAgICAgICAgLmVuZE9mKCdtb250aCcpXG4gICAgICAgICAgICAuZW5kT2YoJ3dlZWsnKVxuICAgICAgICAgICAgLmFkZChmaXJzdERheU9mV2VlayA9PT0gMSA/IDEgOiAwLCAnZGF5JyksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZS5zdGFydE9mKCd5ZWFyJyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZS5lbmRPZigneWVhcicpLFxuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGUuZW5kT2YoJ21vbnRoJyksXG4gICAgICAgIH1cbiAgICB9XG4gIH0sIFtjdXJyZW50RGF0ZSwgdmlldywgZmlyc3REYXlPZldlZWtdKVxuXG4gIC8vIEdldCBwcm9jZXNzZWQgZXZlbnRzIGZvciB0aGUgY3VycmVudCB2aWV3IChvbi1kZW1hbmQpXG4gIGNvbnN0IHByb2Nlc3NlZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gZ2V0Q3VycmVudFZpZXdSYW5nZSgpXG4gICAgcmV0dXJuIGdldEV2ZW50c0ZvckRhdGVSYW5nZShzdGFydCwgZW5kKVxuICB9LCBbZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBnZXRDdXJyZW50Vmlld1JhbmdlXSlcblxuICAvLyBVcGRhdGUgZXZlbnRzIHdoZW4gZXZlbnRzIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChldmVudHMpIHtcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoZXZlbnRzKVxuICAgIH1cbiAgfSwgW2V2ZW50c10pXG5cbiAgLy8gQ29uZmlndXJlIGxvY2FsZSB3aGVuIGxvY2FsZSBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9jYWxlKSB7XG4gICAgICBzZXRDdXJyZW50TG9jYWxlKGxvY2FsZSlcbiAgICAgIGRheWpzLmxvY2FsZShsb2NhbGUpXG4gICAgfVxuICB9LCBbbG9jYWxlXSlcblxuICAvLyBDb25maWd1cmUgdGltZXpvbmUgZm9yIGN1cnJlbnREYXRlIHdoZW4gdGltZXpvbmUgcHJvcCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRpbWV6b25lKSB7XG4gICAgICBzZXRDdXJyZW50VGltZXpvbmUodGltZXpvbmUpXG4gICAgICBkYXlqcy50ei5zZXREZWZhdWx0KHRpbWV6b25lKVxuICAgIH1cbiAgfSwgW3RpbWV6b25lXSlcblxuICAvLyBIYW5kbGVyc1xuICBjb25zdCBzZWxlY3REYXRlID0gdXNlQ2FsbGJhY2soKGRhdGU6IGRheWpzLkRheWpzKSA9PiB7XG4gICAgc2V0Q3VycmVudERhdGUoZGF0ZSlcbiAgfSwgW10pXG5cbiAgY29uc3QgbmV4dFBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiBjdXJyZW50RGF0ZS5hZGQoMSwgJ21vbnRoJykpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiBjdXJyZW50RGF0ZS5hZGQoMSwgJ3dlZWsnKSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4gY3VycmVudERhdGUuYWRkKDEsICdkYXknKSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IGN1cnJlbnREYXRlLmFkZCgxLCAneWVhcicpKVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgW3ZpZXddKVxuXG4gIGNvbnN0IHByZXZQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ21vbnRoJykpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnZGF5JykpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAneWVhcicpKVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgW3ZpZXddKVxuXG4gIGNvbnN0IHRvZGF5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEN1cnJlbnREYXRlKGRheWpzKCkpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgc2V0Q3VycmVudEV2ZW50cygocHJldkV2ZW50cykgPT4gWy4uLnByZXZFdmVudHMsIGV2ZW50XSlcbiAgfSwgW10pXG5cbiAgY29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnRJZDogc3RyaW5nLCB1cGRhdGVkRXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoKHByZXZFdmVudHMpID0+XG4gICAgICAgIHByZXZFdmVudHMubWFwKChldmVudCkgPT5cbiAgICAgICAgICBldmVudC5pZCA9PT0gZXZlbnRJZCA/IHsgLi4uZXZlbnQsIC4uLnVwZGF0ZWRFdmVudCB9IDogZXZlbnRcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuICAgICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICAgKSA9PiB7XG4gICAgICAvLyBVc2Ugb3VyIGltcGxlbWVudGVkIHJlY3VycmluZyBldmVudCB1cGRhdGUgZnVuY3Rpb25cbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICB0YXJnZXRFdmVudDogZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudEV2ZW50cyh1cGRhdGVkRXZlbnRzKVxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHNdXG4gIClcblxuICBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG4gICAgICAvLyBVc2Ugb3VyIGltcGxlbWVudGVkIHJlY3VycmluZyBldmVudCBkZWxldGUgZnVuY3Rpb25cbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICB0YXJnZXRFdmVudDogZXZlbnQsXG4gICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudEV2ZW50cyh1cGRhdGVkRXZlbnRzKVxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHNdXG4gIClcblxuICBjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKChldmVudElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRDdXJyZW50RXZlbnRzKChwcmV2RXZlbnRzKSA9PlxuICAgICAgcHJldkV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5pZCAhPT0gZXZlbnRJZClcbiAgICApXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIHNldFNlbGVjdGVkRXZlbnQoZXZlbnQpXG4gICAgc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsb3NlRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlbGVjdGVkRGF0ZShudWxsKVxuICAgIHNldFNlbGVjdGVkRXZlbnQobnVsbClcbiAgICBzZXRJc0V2ZW50Rm9ybU9wZW4oZmFsc2UpXG4gIH0sIFtdKVxuXG4gIC8vIEN1c3RvbSBoYW5kbGVycyB0aGF0IGNhbGwgZXh0ZXJuYWwgY2FsbGJhY2tzXG4gIGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3VmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInKSA9PiB7XG4gICAgICBzZXRWaWV3KG5ld1ZpZXcpXG4gICAgICBvblZpZXdDaGFuZ2U/LihuZXdWaWV3KVxuICAgIH0sXG4gICAgW29uVmlld0NoYW5nZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUV2ZW50Q2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9uRXZlbnRDbGljaykge1xuICAgICAgICBvbkV2ZW50Q2xpY2soZXZlbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0RXZlbnQoZXZlbnQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbZGlzYWJsZUNlbGxDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAob25DZWxsQ2xpY2spIHtcbiAgICAgICAgb25DZWxsQ2xpY2soc3RhcnREYXRlLCBlbmREYXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKHN0YXJ0RGF0ZSlcbiAgICAgICAgc2V0U2VsZWN0ZWRFdmVudCh7XG4gICAgICAgICAgdGl0bGU6IGBOZXcgRXZlbnRgLFxuICAgICAgICAgIHN0YXJ0OiBzdGFydERhdGUsXG4gICAgICAgICAgZW5kOiBlbmREYXRlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICBhbGxEYXk6IGZhbHNlLFxuICAgICAgICB9IGFzIENhbGVuZGFyRXZlbnQpXG4gICAgICAgIHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrXVxuICApXG5cbiAgY29uc3QgaGFuZGxlT3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRlPzogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgIHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRFdmVudCh7XG4gICAgICAgIHRpdGxlOiBgTmV3IEV2ZW50YCxcbiAgICAgICAgc3RhcnQ6IGRhdGUgPz8gY3VycmVudERhdGUsXG4gICAgICAgIGVuZDogZGF0ZSA/PyBjdXJyZW50RGF0ZS5hZGQoMSwgJ2hvdXInKSxcbiAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICBhbGxEYXk6IGZhbHNlLFxuICAgICAgfSBhcyBDYWxlbmRhckV2ZW50KVxuICAgICAgc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gICAgfSxcbiAgICBbY3VycmVudERhdGVdXG4gIClcblxuICAvLyBGaW5kIHBhcmVudCByZWN1cnJpbmcgZXZlbnQgZm9yIGEgZ2l2ZW4gZXZlbnQgaW5zdGFuY2VcbiAgY29uc3QgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogQ2FsZW5kYXJFdmVudCB8IG51bGwgPT4ge1xuICAgICAgLy8gR2VuZXJhdGUgVUlEIGlmIG1pc3NpbmcgKGZvbGxvd2luZyBSRkMgNTU0NSBjb21wbGlhbmNlKVxuICAgICAgY29uc3QgdGFyZ2V0VUlEID0gZXZlbnQudWlkXG5cbiAgICAgIGNvbnN0IHBhcmVudEV2ZW50ID0gY3VycmVudEV2ZW50cy5maW5kKChlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudFVJRCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgICAgICByZXR1cm4gcGFyZW50VUlEID09PSB0YXJnZXRVSUQgJiYgZS5ycnVsZVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHBhcmVudEV2ZW50IHx8IG51bGxcbiAgICB9LFxuICAgIFtjdXJyZW50RXZlbnRzXVxuICApXG5cbiAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGN1cnJlbnREYXRlLFxuICAgICAgdmlldyxcbiAgICAgIGV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgcmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuICAgICAgY3VycmVudExvY2FsZSxcbiAgICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgICBzZWxlY3RlZERhdGUsXG4gICAgICBmaXJzdERheU9mV2VlayxcbiAgICAgIHNldEN1cnJlbnREYXRlLFxuICAgICAgc2VsZWN0RGF0ZSxcbiAgICAgIHNldFZpZXc6IGhhbmRsZVZpZXdDaGFuZ2UsXG4gICAgICBuZXh0UGVyaW9kLFxuICAgICAgcHJldlBlcmlvZCxcbiAgICAgIHRvZGF5LFxuICAgICAgYWRkRXZlbnQsXG4gICAgICB1cGRhdGVFdmVudCxcbiAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgZGVsZXRlRXZlbnQsXG4gICAgICBkZWxldGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIG9wZW5FdmVudEZvcm06IGhhbmRsZU9wZW5FdmVudEZvcm0sXG4gICAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICAgIGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcbiAgICAgIGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcbiAgICAgIHJlbmRlckV2ZW50LFxuICAgICAgb25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuICAgICAgb25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcbiAgICAgIGxvY2FsZSxcbiAgICAgIHRpbWV6b25lOiBjdXJyZW50VGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICB9KSxcbiAgICBbXG4gICAgICBjdXJyZW50RGF0ZSxcbiAgICAgIHZpZXcsXG4gICAgICBwcm9jZXNzZWRFdmVudHMsXG4gICAgICBjdXJyZW50RXZlbnRzLFxuICAgICAgY3VycmVudExvY2FsZSxcbiAgICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgICBzZWxlY3RlZERhdGUsXG4gICAgICBmaXJzdERheU9mV2VlayxcbiAgICAgIHNlbGVjdERhdGUsXG4gICAgICBoYW5kbGVWaWV3Q2hhbmdlLFxuICAgICAgbmV4dFBlcmlvZCxcbiAgICAgIGhhbmRsZU9wZW5FdmVudEZvcm0sXG4gICAgICBwcmV2UGVyaW9kLFxuICAgICAgdG9kYXksXG4gICAgICBhZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50LFxuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICBkZWxldGVFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgY2xvc2VFdmVudEZvcm0sXG4gICAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgICBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICBjdXJyZW50VGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICBdXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9DYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiLy8gTWFpbiBjYWxlbmRhciBjb21wb25lbnRcbmV4cG9ydCB7IElsYW15Q2FsZW5kYXIgfSBmcm9tICcuL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIvaWxhbXktY2FsZW5kYXInXG5cbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tcbmV4cG9ydCB7IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5cbi8vIFJSVUxFLWJhc2VkIHJlY3VycmVuY2Ugc3lzdGVtXG5leHBvcnQge1xuICBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcbiAgaXNSZWN1cnJpbmdFdmVudCxcbn0gZnJvbSAnLi9saWIvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnLi9saWIvcmVjdXJyZW5jZS1oYW5kbGVyL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBJbGFteUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIvdHlwZXMnXG5leHBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB9IGZyb20gJy4vY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBGcmVxdWVuY3ksIFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsNEJBQVMsNEJBQWlCO0FBQzFCLDRCQUFnQjs7O0FDQ2hCO0FBaURPLElBQU0sa0JBQ1gsY0FBK0MsU0FBUztBQUVuRCxJQUFNLHFCQUFxQixNQUEyQjtBQUFBLEVBQzNELE1BQU0sVUFBVSxXQUFXLGVBQWU7QUFBQSxFQUMxQyxJQUFJLFlBQVksV0FBVztBQUFBLElBQ3pCLE1BQU0sSUFBSSxNQUFNLDJEQUEyRDtBQUFBLEVBQzdFO0FBQUEsRUFDQSxPQUFPO0FBQUE7QUErQkYsSUFBTSwwQkFBMEIsTUFBcUM7QUFBQSxFQUMxRSxNQUFNLFVBQVUsV0FBVyxlQUFlO0FBQUEsRUFDMUMsSUFBSSxZQUFZLFdBQVc7QUFBQSxJQUN6QixNQUFNLElBQUksTUFDUixnRUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLGFBQWEsUUFBUTtBQUFBLElBQ3JCLE1BQU0sUUFBUTtBQUFBLElBQ2QsUUFBUSxRQUFRO0FBQUEsSUFDaEIsaUJBQWlCLFFBQVE7QUFBQSxJQUN6QixlQUFlLFFBQVE7QUFBQSxJQUN2QixjQUFjLFFBQVE7QUFBQSxJQUN0QixnQkFBZ0IsUUFBUTtBQUFBLElBQ3hCLGdCQUFnQixRQUFRO0FBQUEsSUFDeEIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsU0FBUyxRQUFRO0FBQUEsSUFDakIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsT0FBTyxRQUFRO0FBQUEsSUFDZixVQUFVLFFBQVE7QUFBQSxJQUNsQixhQUFhLFFBQVE7QUFBQSxJQUNyQixhQUFhLFFBQVE7QUFBQSxJQUNyQixlQUFlLFFBQVE7QUFBQSxJQUN2QixnQkFBZ0IsUUFBUTtBQUFBLEVBQzFCO0FBQUE7OztBQ3BIRjtBQUVBOzs7QUNEQTs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQUEsUUFDVixVQUFVO0FBQUEsT0FDWjtBQUFBO0FBQUEsR0FFRjtBQUFBO0FBSU4sSUFBTSx5QkFBeUI7QUFDeEIsSUFBTSxnQkFBOEM7QUFBQSxFQUN6RDtBQUFBLEVBQ0EsaUJBQWlCO0FBQUEsRUFDakI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQUEsRUFDbkIsc0JBQXNCO0FBQUEsRUFDdEI7QUFBQSxNQUNJO0FBQUEsRUFDSix1QkFDRSxNQWtCRSxrQkFsQkY7QUFBQSxJQUNFLFFBQVEsbUNBQW1DLE1BQU07QUFBQSxJQUNqRCxnQkFBZ0IscUJBQXFCO0FBQUEsSUFDckM7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBZkYsMEJBaUJFLE1BQUMsaUJBQUQsRUFBaUI7QUFBQSxHQUNqQjtBQUFBOzs7QUdsR04sa0JBQVM7IiwKICAiZGVidWdJZCI6ICI3NzIxRkY0MkVBODVCQTYwNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
4803
+ //# debugId=610D3B681CFFAA3D64756E2164756E21
4804
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy92aWV3L21vbnRoLXZpZXcudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCIsICIuLi9zcmMvbGliL3V0aWxzLnRzIiwgIi4uL3NyYy9saWIvZGF5anMtY29uZmlnLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2NhbGVuZGFyLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9jaGVja2JveC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvY2FyZC50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL3BvcG92ZXIudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvdWkvc2VsZWN0LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90YWJzLnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy91aS90b29sdGlwLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL21vbnRoLXZpZXcvY29tcG9uZW50cy9kYXktY2VsbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvbW9udGgtdmlldy9jb21wb25lbnRzL21vbnRoLWhlYWRlci9tb250aC1oZWFkZXIudHN4IiwgIi4uL3NyYy9saWIvY29uc3RhbnRzLnRzIiwgIi4uL3NyYy9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgIi4uL3NyYy9mZWF0dXJlcy9tb250aC12aWV3L2NvbXBvbmVudHMvd2Vlay1ldmVudHMtbGF5ZXIvd2Vlay1ldmVudHMtbGF5ZXIudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvdmlldy93ZWVrLXZpZXcudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy93ZWVrLXZpZXcvd2Vlay1hbGwtZGF5LXJvdy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLWhlYWRlci50c3giLCAiLi4vc3JjL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktZXZlbnRzLWxheWVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvd2Vlay12aWV3L3dlZWstZGF5LWNvbC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3dlZWstdmlldy93ZWVrLXRpbWUtZ3JpZC50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvdmlldy9kYXktdmlldy50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWFsbC1kYXktcm93LnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktaGVhZGVyLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMvZGF5LXZpZXcvY29tcG9uZW50cy9kYXktdGltZS1jb2wudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAiLi4vc3JjL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXIvaW5kZXgudHMiLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cudHN4IiwgIi4uL3NyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICIuLi9zcmMvbGliL2V4cG9ydC1pY2FsLnRzIiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci9iYXNlLWhlYWRlci50c3giLCAiLi4vc3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgIi4uL3NyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICIuLi9zcmMvZmVhdHVyZXMveWVhci12aWV3L3ZpZXcveWVhci12aWV3LnRzeCIsICIuLi9zcmMvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci9pbGFteS1jYWxlbmRhci50c3giLCAiLi4vc3JjL2ZlYXR1cmVzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgIi4uL3NyYy9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICIuLi9zcmMvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0LnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgeyBEYXlDZWxsIH0gZnJvbSAnLi4vZGF5LWNlbGwnXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzLCBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuLi9tb250aC1oZWFkZXIvbW9udGgtaGVhZGVyJ1xuaW1wb3J0IHsgV2Vla0V2ZW50c0xheWVyIH0gZnJvbSAnLi4vd2Vlay1ldmVudHMtbGF5ZXIvd2Vlay1ldmVudHMtbGF5ZXInXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoeyBkYXlNYXhFdmVudHMgPSAzIH0pID0+IHtcbiAgY29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT4obnVsbClcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG4gIC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuICAvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuICBsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuICB3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG4gICAgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5JylcbiAgfVxuXG4gIC8vIEFsd2F5cyBnZW5lcmF0ZSA2IHdlZWtzICg0MiBkYXlzKSByZWdhcmRsZXNzIG9mIHRoZSBtb250aCBsZW5ndGhcbiAgLy8gVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIDYgcm93cyBvZiBkYXlzXG4gIGNvbnN0IGNhbGVuZGFyRGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIDYgd2Vla3Mgw5cgNyBkYXlzID0gNDIgZGF5c1xuICAgIGNvbnN0IGRheXM6IGRheWpzLkRheWpzW11bXSA9IFtbXV1cbiAgICBsZXQgZGF5ID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuY2xvbmUoKSAvLyBDbG9uZSB0byBhdm9pZCBtdXRhdGlvblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDI7IGkrKykge1xuICAgICAgaWYgKGRheXNbZGF5cy5sZW5ndGggLSAxXS5sZW5ndGggPT09IDcpIHtcbiAgICAgICAgZGF5cy5wdXNoKFtdKSAvLyBTdGFydCBhIG5ldyB3ZWVrXG4gICAgICB9XG4gICAgICBkYXlzW2RheXMubGVuZ3RoIC0gMV0ucHVzaChkYXkpXG4gICAgICBkYXkgPSBkYXkuYWRkKDEsICdkYXknKSAvLyBNb3ZlIHRvIHRoZSBuZXh0IGRheVxuICAgIH1cbiAgICByZXR1cm4gZGF5c1xuICB9LCBbYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXJdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbFwiIGRhdGEtdGVzdGlkPVwibW9udGgtdmlld1wiPlxuICAgICAgey8qIFdlZWsgZGF5cyBoZWFkZXIgKi99XG4gICAgICA8TW9udGhIZWFkZXIgY2xhc3NOYW1lPVwiaC1bM3JlbV1cIiAvPlxuXG4gICAgICB7LyogQ2FsZW5kYXIgZ3JpZCAtIGFkZGVkIGZpeGVkIGhlaWdodCAqL31cbiAgICAgIDxTY3JvbGxBcmVhXG4gICAgICAgIGNsYXNzTmFtZT1cIm92ZXJmbG93LWF1dG8gaC1bY2FsYygxMDAlLTNyZW0pXVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtc2Nyb2xsLWFyZWFcIlxuICAgICAgICB2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCAqOm1pbi1oLWZ1bGwnIH19XG4gICAgICA+XG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBncmlkIGgtZnVsbCBncmlkLWNvbHMtNyBncmlkLXJvd3MtNiBvdmVyZmxvdy1hdXRvIGZsZXgtMVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbnRoLWNhbGVuZGFyLWdyaWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBEYXkgY2VsbHMgKi99XG4gICAgICAgICAgICB7Y2FsZW5kYXJEYXlzLm1hcCgoZGF5cywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2B3ZWVrLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTcgZ3JpZCBncmlkLWNvbHMtN1wiXG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstcm93LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7ZGF5cy5tYXAoKGRheSwgZGF5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8RGF5Q2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2RheUluZGV4fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5PXtkYXl9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXIgYm9yZGVyLWIgZmlyc3Q6Ym9yZGVyLWxcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxXZWVrRXZlbnRzTGF5ZXIgZGF5cz17ZGF5c30gLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgPC9TY3JvbGxBcmVhPlxuXG4gICAgICB7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG4gICAgICA8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdE9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uS2V5IH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHNldFZpZXc6ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHRvZGF5OiAoKSA9PiB2b2lkXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuICBvcGVuRXZlbnRGb3JtOiAoZGF0ZT86IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG4gIGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuICAgIHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG4gICAgZW5kRGF0ZTogZGF5anMuRGF5anNcbiAgKSA9PiBDYWxlbmRhckV2ZW50W11cbiAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s6IChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBjdXJyZW50TG9jYWxlPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI6IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZTogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuICBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuICB0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuICBjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuICB9XG4gIHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuICByZWFkb25seSB2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcidcbiAgcmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgcmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG4gIHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG4gIHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgcmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2V0VmlldzogKHZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4gdm9pZFxuICByZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSB1cGRhdGVFdmVudDogKFxuICAgIGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICApID0+IHZvaWRcbiAgcmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlDYWxlbmRhckNvbnRleHQgPSAoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndXNlSWxhbXlDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInXG4gICAgKVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG4gICAgdmlldzogY29udGV4dC52aWV3LFxuICAgIGV2ZW50czogY29udGV4dC5ldmVudHMsXG4gICAgaXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3BlbixcbiAgICBzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcbiAgICBmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2VlayxcbiAgICBzZXRDdXJyZW50RGF0ZTogY29udGV4dC5zZXRDdXJyZW50RGF0ZSxcbiAgICBzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG4gICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgIG5leHRQZXJpb2Q6IGNvbnRleHQubmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG4gICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgYWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG4gICAgZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG4gICAgb3BlbkV2ZW50Rm9ybTogY29udGV4dC5vcGVuRXZlbnRGb3JtLFxuICAgIGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuICB9IGFzIGNvbnN0XG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zbG90J1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgeyBjdmEgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuICBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcbiAgICAgICAgZGVzdHJ1Y3RpdmU6XG4gICAgICAgICAgJ2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgc2hhZG93LXhzIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzYwJyxcbiAgICAgICAgb3V0bGluZTpcbiAgICAgICAgICAnYm9yZGVyIGJnLWJhY2tncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpib3JkZXItaW5wdXQgZGFyazpob3ZlcjpiZy1pbnB1dC81MCcsXG4gICAgICAgIHNlY29uZGFyeTpcbiAgICAgICAgICAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG4gICAgICAgIGdob3N0OlxuICAgICAgICAgICdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG4gICAgICAgIGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuICAgICAgICBzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG4gICAgICAgIGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00JyxcbiAgICAgICAgaWNvbjogJ3NpemUtOScsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmYXVsdFZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiAnZGVmYXVsdCcsXG4gICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgfSxcbiAgfVxuKVxuXG5mdW5jdGlvbiBCdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIHZhcmlhbnQsXG4gIHNpemUsXG4gIGFzQ2hpbGQgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdidXR0b24nPiAmXG4gIFZhcmlhbnRQcm9wczx0eXBlb2YgYnV0dG9uVmFyaWFudHM+ICYge1xuICAgIGFzQ2hpbGQ/OiBib29sZWFuXG4gIH0pIHtcbiAgY29uc3QgQ29tcCA9IGFzQ2hpbGQgPyBTbG90IDogJ2J1dHRvbidcblxuICByZXR1cm4gKFxuICAgIDxDb21wXG4gICAgICBkYXRhLXNsb3Q9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHR5cGUgeyBDbGFzc1ZhbHVlIH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCB0eXBlIHsgSWxhbXlDYWxlbmRhclByb3BFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGNuKC4uLmlucHV0czogQ2xhc3NWYWx1ZVtdKSB7XG4gIHJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTW9ja0V2ZW50cyh7IGNvdW50ID0gNSB9ID0ge30pIHtcbiAgY29uc3QgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBldmVudHMucHVzaCh7XG4gICAgICBpZDogaS50b1N0cmluZygpLFxuICAgICAgdGl0bGU6IGBNb2NrIEV2ZW50ICR7aSArIDF9YCxcbiAgICAgIHN0YXJ0OiBkYXlqcygpLnN0YXJ0T2YoJ3dlZWsnKS5hZGQoaSwgJ2RheScpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgZW5kOiBkYXlqcygpLnN0YXJ0T2YoJ3dlZWsnKS5hZGQoaSwgJ2RheScpLmVuZE9mKCdkYXknKSxcbiAgICAgIGNvbG9yOiAnYmctZ3JheS0xMDAgdGV4dC1ncmF5LTgwMCcsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZXZlbnRzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGF0ZShkYXRlOiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmcpOiBkYXlqcy5EYXlqcyB7XG4gIGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZERhdGUgPSBkYXlqcyhkYXRlKVxuICByZXR1cm4gcGFyc2VkRGF0ZS5pc1ZhbGlkKCkgPyBwYXJzZWREYXRlIDogZGF5anMoKVxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmo6IFQsXG4gIGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGRlbGV0ZSByZXN1bHRba2V5XVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVB1YmxpY0ZhY2luZ0NhbGVuZGFyRXZlbnQoXG4gIGV2ZW50czogSWxhbXlDYWxlbmRhclByb3BFdmVudFtdXG4pOiBDYWxlbmRhckV2ZW50W10ge1xuICBpZiAoIWV2ZW50cyB8fCAhZXZlbnRzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgLy8gRXZlbnRzIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCB3aXRoIFJSVUxFIHN0cmluZ3NcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICBzdGFydDogZGF5anMuaXNEYXlqcyhldmVudC5zdGFydCkgPyBldmVudC5zdGFydCA6IGRheWpzKGV2ZW50LnN0YXJ0KSxcbiAgICAgIGVuZDogZGF5anMuaXNEYXlqcyhldmVudC5lbmQpID8gZXZlbnQuZW5kIDogZGF5anMoZXZlbnQuZW5kKSxcbiAgICB9IGFzIENhbGVuZGFyRXZlbnRcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IHdlZWtkYXkgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtkYXkuanMnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhci5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcblxuLy8gRXh0ZW5kIGRheWpzIHdpdGggcGx1Z2luc1xuZGF5anMuZXh0ZW5kKHdlZWtkYXkpXG5kYXlqcy5leHRlbmQod2Vla09mWWVhcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKVxuZGF5anMuZXh0ZW5kKGlzQmV0d2VlbilcbmRheWpzLmV4dGVuZChtaW5NYXgpXG5kYXlqcy5leHRlbmQodGltZXpvbmUpXG5kYXlqcy5leHRlbmQodXRjKVxuZGF5anMuZXh0ZW5kKGxvY2FsZURhdGEpXG5cbi8vIEltcG9ydCBhbGwgZGF5anMgbG9jYWxlcyBhbHBoYWJldGljYWxseVxuLy8gbG9jYWxlLmpzb24gZmlsZTogW3tcImtleVwiOlwiYWZcIixcIm5hbWVcIjpcIkFmcmlrYWFuc1wifSx7XCJrZXlcIjpcImFtXCIsXCJuYW1lXCI6XCJBbWhhcmljXCJ9LHtcImtleVwiOlwiYXItZHpcIixcIm5hbWVcIjpcIkFyYWJpYyAoQWxnZXJpYSlcIn0se1wia2V5XCI6XCJhci1pcVwiLFwibmFtZVwiOlwiIEFyYWJpYyAoSXJhcSlcIn0se1wia2V5XCI6XCJhci1rd1wiLFwibmFtZVwiOlwiQXJhYmljIChLdXdhaXQpXCJ9LHtcImtleVwiOlwiYXItbHlcIixcIm5hbWVcIjpcIkFyYWJpYyAoTHliaWEpXCJ9LHtcImtleVwiOlwiYXItbWFcIixcIm5hbWVcIjpcIkFyYWJpYyAoTW9yb2NjbylcIn0se1wia2V5XCI6XCJhci1zYVwiLFwibmFtZVwiOlwiQXJhYmljIChTYXVkaSBBcmFiaWEpXCJ9LHtcImtleVwiOlwiYXItdG5cIixcIm5hbWVcIjpcIiBBcmFiaWMgKFR1bmlzaWEpXCJ9LHtcImtleVwiOlwiYXJcIixcIm5hbWVcIjpcIkFyYWJpY1wifSx7XCJrZXlcIjpcImF6XCIsXCJuYW1lXCI6XCJBemVyYmFpamFuaVwifSx7XCJrZXlcIjpcImJlXCIsXCJuYW1lXCI6XCJCZWxhcnVzaWFuXCJ9LHtcImtleVwiOlwiYmdcIixcIm5hbWVcIjpcIkJ1bGdhcmlhblwifSx7XCJrZXlcIjpcImJpXCIsXCJuYW1lXCI6XCJCaXNsYW1hXCJ9LHtcImtleVwiOlwiYm1cIixcIm5hbWVcIjpcIkJhbWJhcmFcIn0se1wia2V5XCI6XCJibi1iZFwiLFwibmFtZVwiOlwiQmVuZ2FsaSAoQmFuZ2xhZGVzaClcIn0se1wia2V5XCI6XCJiblwiLFwibmFtZVwiOlwiQmVuZ2FsaVwifSx7XCJrZXlcIjpcImJvXCIsXCJuYW1lXCI6XCJUaWJldGFuXCJ9LHtcImtleVwiOlwiYnJcIixcIm5hbWVcIjpcIkJyZXRvblwifSx7XCJrZXlcIjpcImJzXCIsXCJuYW1lXCI6XCJCb3NuaWFuXCJ9LHtcImtleVwiOlwiY2FcIixcIm5hbWVcIjpcIkNhdGFsYW5cIn0se1wia2V5XCI6XCJjc1wiLFwibmFtZVwiOlwiQ3plY2hcIn0se1wia2V5XCI6XCJjdlwiLFwibmFtZVwiOlwiQ2h1dmFzaFwifSx7XCJrZXlcIjpcImN5XCIsXCJuYW1lXCI6XCJXZWxzaFwifSx7XCJrZXlcIjpcImRlLWF0XCIsXCJuYW1lXCI6XCJHZXJtYW4gKEF1c3RyaWEpXCJ9LHtcImtleVwiOlwiZGFcIixcIm5hbWVcIjpcIkRhbmlzaFwifSx7XCJrZXlcIjpcImRlLWNoXCIsXCJuYW1lXCI6XCJHZXJtYW4gKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcImRlXCIsXCJuYW1lXCI6XCJHZXJtYW5cIn0se1wia2V5XCI6XCJkdlwiLFwibmFtZVwiOlwiTWFsZGl2aWFuXCJ9LHtcImtleVwiOlwiZWxcIixcIm5hbWVcIjpcIkdyZWVrXCJ9LHtcImtleVwiOlwiZW4tYXVcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKEF1c3RyYWxpYSlcIn0se1wia2V5XCI6XCJlbi1jYVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoQ2FuYWRhKVwifSx7XCJrZXlcIjpcImVuLWdiXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSlcIn0se1wia2V5XCI6XCJlbi1pZVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSXJlbGFuZClcIn0se1wia2V5XCI6XCJlbi1pbFwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSXNyYWVsKVwifSx7XCJrZXlcIjpcImVuLWluXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJbmRpYSlcIn0se1wia2V5XCI6XCJlbi1uelwiLFwibmFtZVwiOlwiRW5nbGlzaCAoTmV3IFplYWxhbmQpXCJ9LHtcImtleVwiOlwiZW4tc2dcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFNpbmdhcG9yZSlcIn0se1wia2V5XCI6XCJlbi10dFwiLFwibmFtZVwiOlwiRW5nbGlzaCAoVHJpbmlkYWQgJiBUb2JhZ28pXCJ9LHtcImtleVwiOlwiZW9cIixcIm5hbWVcIjpcIkVzcGVyYW50b1wifSx7XCJrZXlcIjpcImVuXCIsXCJuYW1lXCI6XCJFbmdsaXNoXCJ9LHtcImtleVwiOlwiZXMtZG9cIixcIm5hbWVcIjpcIlNwYW5pc2ggKERvbWluaWNhbiBSZXB1YmxpYylcIn0se1wia2V5XCI6XCJlcy1teFwiLFwibmFtZVwiOlwiU3BhbmlzaCAoTWV4aWNvKVwifSx7XCJrZXlcIjpcImVzLXByXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChQdWVydG8gUmljbylcIn0se1wia2V5XCI6XCJlcy11c1wiLFwibmFtZVwiOlwiU3BhbmlzaCAoVW5pdGVkIFN0YXRlcylcIn0se1wia2V5XCI6XCJldFwiLFwibmFtZVwiOlwiRXN0b25pYW5cIn0se1wia2V5XCI6XCJlc1wiLFwibmFtZVwiOlwiU3BhbmlzaFwifSx7XCJrZXlcIjpcImV1XCIsXCJuYW1lXCI6XCJCYXNxdWVcIn0se1wia2V5XCI6XCJmYVwiLFwibmFtZVwiOlwiUGVyc2lhblwifSx7XCJrZXlcIjpcImZvXCIsXCJuYW1lXCI6XCJGYXJvZXNlXCJ9LHtcImtleVwiOlwiZmlcIixcIm5hbWVcIjpcIkZpbm5pc2hcIn0se1wia2V5XCI6XCJmci1jYVwiLFwibmFtZVwiOlwiRnJlbmNoIChDYW5hZGEpXCJ9LHtcImtleVwiOlwiZnItY2hcIixcIm5hbWVcIjpcIkZyZW5jaCAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiZnJcIixcIm5hbWVcIjpcIkZyZW5jaFwifSx7XCJrZXlcIjpcImZ5XCIsXCJuYW1lXCI6XCJGcmlzaWFuXCJ9LHtcImtleVwiOlwiZ2FcIixcIm5hbWVcIjpcIklyaXNoIG9yIElyaXNoIEdhZWxpY1wifSx7XCJrZXlcIjpcImdkXCIsXCJuYW1lXCI6XCJTY290dGlzaCBHYWVsaWNcIn0se1wia2V5XCI6XCJnb20tbGF0blwiLFwibmFtZVwiOlwiS29ua2FuaSBMYXRpbiBzY3JpcHRcIn0se1wia2V5XCI6XCJnbFwiLFwibmFtZVwiOlwiR2FsaWNpYW5cIn0se1wia2V5XCI6XCJndVwiLFwibmFtZVwiOlwiR3VqYXJhdGlcIn0se1wia2V5XCI6XCJoZVwiLFwibmFtZVwiOlwiSGVicmV3XCJ9LHtcImtleVwiOlwiaGlcIixcIm5hbWVcIjpcIkhpbmRpXCJ9LHtcImtleVwiOlwiaHJcIixcIm5hbWVcIjpcIkNyb2F0aWFuXCJ9LHtcImtleVwiOlwiaHVcIixcIm5hbWVcIjpcIkh1bmdhcmlhblwifSx7XCJrZXlcIjpcImh0XCIsXCJuYW1lXCI6XCJIYWl0aWFuIENyZW9sZSAoSGFpdGkpXCJ9LHtcImtleVwiOlwiaHktYW1cIixcIm5hbWVcIjpcIkFybWVuaWFuXCJ9LHtcImtleVwiOlwiaWRcIixcIm5hbWVcIjpcIkluZG9uZXNpYW5cIn0se1wia2V5XCI6XCJpc1wiLFwibmFtZVwiOlwiSWNlbGFuZGljXCJ9LHtcImtleVwiOlwiaXQtY2hcIixcIm5hbWVcIjpcIkl0YWxpYW4gKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcIml0XCIsXCJuYW1lXCI6XCJJdGFsaWFuXCJ9LHtcImtleVwiOlwiamFcIixcIm5hbWVcIjpcIkphcGFuZXNlXCJ9LHtcImtleVwiOlwianZcIixcIm5hbWVcIjpcIkphdmFuZXNlXCJ9LHtcImtleVwiOlwia2FcIixcIm5hbWVcIjpcIkdlb3JnaWFuXCJ9LHtcImtleVwiOlwia2tcIixcIm5hbWVcIjpcIkthemFraFwifSx7XCJrZXlcIjpcImttXCIsXCJuYW1lXCI6XCJDYW1ib2RpYW5cIn0se1wia2V5XCI6XCJrblwiLFwibmFtZVwiOlwiS2FubmFkYVwifSx7XCJrZXlcIjpcImtvXCIsXCJuYW1lXCI6XCJLb3JlYW5cIn0se1wia2V5XCI6XCJrdVwiLFwibmFtZVwiOlwiS3VyZGlzaFwifSx7XCJrZXlcIjpcImt5XCIsXCJuYW1lXCI6XCJLeXJneXpcIn0se1wia2V5XCI6XCJsYlwiLFwibmFtZVwiOlwiTHV4ZW1ib3VyZ2lzaFwifSx7XCJrZXlcIjpcImxvXCIsXCJuYW1lXCI6XCJMYW9cIn0se1wia2V5XCI6XCJsdFwiLFwibmFtZVwiOlwiTGl0aHVhbmlhblwifSx7XCJrZXlcIjpcImx2XCIsXCJuYW1lXCI6XCJMYXR2aWFuXCJ9LHtcImtleVwiOlwibWVcIixcIm5hbWVcIjpcIk1vbnRlbmVncmluXCJ9LHtcImtleVwiOlwibWlcIixcIm5hbWVcIjpcIk1hb3JpXCJ9LHtcImtleVwiOlwibWtcIixcIm5hbWVcIjpcIk1hY2Vkb25pYW5cIn0se1wia2V5XCI6XCJtbFwiLFwibmFtZVwiOlwiTWFsYXlhbGFtXCJ9LHtcImtleVwiOlwibW5cIixcIm5hbWVcIjpcIk1vbmdvbGlhblwifSx7XCJrZXlcIjpcIm1yXCIsXCJuYW1lXCI6XCJNYXJhdGhpXCJ9LHtcImtleVwiOlwibXMtbXlcIixcIm5hbWVcIjpcIk1hbGF5XCJ9LHtcImtleVwiOlwibXNcIixcIm5hbWVcIjpcIk1hbGF5XCJ9LHtcImtleVwiOlwibXRcIixcIm5hbWVcIjpcIk1hbHRlc2UgKE1hbHRhKVwifSx7XCJrZXlcIjpcIm15XCIsXCJuYW1lXCI6XCJCdXJtZXNlXCJ9LHtcImtleVwiOlwibmJcIixcIm5hbWVcIjpcIk5vcndlZ2lhbiBCb2ttw6VsXCJ9LHtcImtleVwiOlwibmVcIixcIm5hbWVcIjpcIk5lcGFsZXNlXCJ9LHtcImtleVwiOlwibmwtYmVcIixcIm5hbWVcIjpcIkR1dGNoIChCZWxnaXVtKVwifSx7XCJrZXlcIjpcIm5sXCIsXCJuYW1lXCI6XCJEdXRjaFwifSx7XCJrZXlcIjpcInBsXCIsXCJuYW1lXCI6XCJQb2xpc2hcIn0se1wia2V5XCI6XCJwdC1iclwiLFwibmFtZVwiOlwiUG9ydHVndWVzZSAoQnJhemlsKVwifSx7XCJrZXlcIjpcInB0XCIsXCJuYW1lXCI6XCJQb3J0dWd1ZXNlXCJ9LHtcImtleVwiOlwicm5cIixcIm5hbWVcIjpcIktpcnVuZGlcIn0se1wia2V5XCI6XCJyb1wiLFwibmFtZVwiOlwiUm9tYW5pYW5cIn0se1wia2V5XCI6XCJydVwiLFwibmFtZVwiOlwiUnVzc2lhblwifSx7XCJrZXlcIjpcInJ3XCIsXCJuYW1lXCI6XCJLaW55YXJ3YW5kYSAoUndhbmRhKVwifSx7XCJrZXlcIjpcInNkXCIsXCJuYW1lXCI6XCJTaW5kaGlcIn0se1wia2V5XCI6XCJzZVwiLFwibmFtZVwiOlwiTm9ydGhlcm4gU2FtaVwifSx7XCJrZXlcIjpcInNpXCIsXCJuYW1lXCI6XCJTaW5oYWxlc2VcIn0se1wia2V5XCI6XCJza1wiLFwibmFtZVwiOlwiU2xvdmFrXCJ9LHtcImtleVwiOlwic2xcIixcIm5hbWVcIjpcIlNsb3ZlbmlhblwifSx7XCJrZXlcIjpcInNxXCIsXCJuYW1lXCI6XCJBbGJhbmlhblwifSx7XCJrZXlcIjpcInNyLWN5cmxcIixcIm5hbWVcIjpcIlNlcmJpYW4gQ3lyaWxsaWNcIn0se1wia2V5XCI6XCJzc1wiLFwibmFtZVwiOlwic2lTd2F0aVwifSx7XCJrZXlcIjpcInN2LWZpXCIsXCJuYW1lXCI6XCJGaW5sYW5kIFN3ZWRpc2hcIn0se1wia2V5XCI6XCJzclwiLFwibmFtZVwiOlwiU2VyYmlhblwifSx7XCJrZXlcIjpcInN2XCIsXCJuYW1lXCI6XCJTd2VkaXNoXCJ9LHtcImtleVwiOlwic3dcIixcIm5hbWVcIjpcIlN3YWhpbGlcIn0se1wia2V5XCI6XCJ0YVwiLFwibmFtZVwiOlwiVGFtaWxcIn0se1wia2V5XCI6XCJ0ZVwiLFwibmFtZVwiOlwiVGVsdWd1XCJ9LHtcImtleVwiOlwidGV0XCIsXCJuYW1lXCI6XCJUZXR1biBEaWxpIChFYXN0IFRpbW9yKVwifSx7XCJrZXlcIjpcInRnXCIsXCJuYW1lXCI6XCJUYWppa1wifSx7XCJrZXlcIjpcInRoXCIsXCJuYW1lXCI6XCJUaGFpXCJ9LHtcImtleVwiOlwidGtcIixcIm5hbWVcIjpcIlR1cmttZW5cIn0se1wia2V5XCI6XCJ0bC1waFwiLFwibmFtZVwiOlwiVGFnYWxvZyAoUGhpbGlwcGluZXMpXCJ9LHtcImtleVwiOlwidGxoXCIsXCJuYW1lXCI6XCJLbGluZ29uXCJ9LHtcImtleVwiOlwidHJcIixcIm5hbWVcIjpcIlR1cmtpc2hcIn0se1wia2V5XCI6XCJ0emxcIixcIm5hbWVcIjpcIlRhbG9zc2FuXCJ9LHtcImtleVwiOlwidHptLWxhdG5cIixcIm5hbWVcIjpcIkNlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IExhdGluXCJ9LHtcImtleVwiOlwidHptXCIsXCJuYW1lXCI6XCJDZW50cmFsIEF0bGFzIFRhbWF6aWdodFwifSx7XCJrZXlcIjpcInVnLWNuXCIsXCJuYW1lXCI6XCJVeWdodXIgKENoaW5hKVwifSx7XCJrZXlcIjpcInVrXCIsXCJuYW1lXCI6XCJVa3JhaW5pYW5cIn0se1wia2V5XCI6XCJ1clwiLFwibmFtZVwiOlwiVXJkdVwifSx7XCJrZXlcIjpcInV6LWxhdG5cIixcIm5hbWVcIjpcIlV6YmVrIExhdGluXCJ9LHtcImtleVwiOlwidXpcIixcIm5hbWVcIjpcIlV6YmVrXCJ9LHtcImtleVwiOlwidmlcIixcIm5hbWVcIjpcIlZpZXRuYW1lc2VcIn0se1wia2V5XCI6XCJ4LXBzZXVkb1wiLFwibmFtZVwiOlwiUHNldWRvXCJ9LHtcImtleVwiOlwieW9cIixcIm5hbWVcIjpcIllvcnViYSBOaWdlcmlhXCJ9LHtcImtleVwiOlwiemgtY25cIixcIm5hbWVcIjpcIkNoaW5lc2UgKENoaW5hKVwifSx7XCJrZXlcIjpcInpoLWhrXCIsXCJuYW1lXCI6XCJDaGluZXNlIChIb25nIEtvbmcpXCJ9LHtcImtleVwiOlwiemgtdHdcIixcIm5hbWVcIjpcIkNoaW5lc2UgKFRhaXdhbilcIn0se1wia2V5XCI6XCJ6aFwiLFwibmFtZVwiOlwiQ2hpbmVzZVwifSx7XCJrZXlcIjpcIm9jLWxuY1wiLFwibmFtZVwiOlwiT2NjaXRhbiwgbGVuZ2Fkb2NpYW4gZGlhbGVjdGVcIn0se1wia2V5XCI6XCJublwiLFwibmFtZVwiOlwiTnlub3Jza1wifSx7XCJrZXlcIjpcInBhLWluXCIsXCJuYW1lXCI6XCJQdW5qYWJpIChJbmRpYSlcIn1dXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hZi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItZHouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1pcS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWt3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItbHkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1tYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLXNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2F6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iZy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibi1iZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ici5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2N2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLWF0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUtY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2R2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1hdS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tZ2IuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWlsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1uei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLXNnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tdHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtZG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1teC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLXByLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtdXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2V0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci1jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9meS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2QuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dvbS1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ3UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9odC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHktYW0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2lzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXQtY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2phLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvanYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2trLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva20uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2tvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva3UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9reS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2xiLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2x2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9taS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21rLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21yLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXMtbXkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL210LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9uYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25lLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmwtYmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25uLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvb2MtbG5jLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcGEtaW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3B0LWJyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ybi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3JvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcnUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ydy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2wuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zcS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NyLWN5cmwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3YtZmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RldC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RsLXBoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGxoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90emwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90em0tbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VnLWNuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdWsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3V6LWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3ZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUveC1wc2V1ZG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS95by5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLWNuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtaGsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC10dy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBkYXlqc1xuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7XG4gIENoZXZyb25Eb3duSWNvbixcbiAgQ2hldnJvbkxlZnRJY29uLFxuICBDaGV2cm9uUmlnaHRJY29uLFxufSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheUJ1dHRvbiB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBEYXlQaWNrZXIsIGdldERlZmF1bHRDbGFzc05hbWVzIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuXG5mdW5jdGlvbiBDYWxlbmRhcih7XG4gIGNsYXNzTmFtZSxcbiAgY2xhc3NOYW1lcyxcbiAgc2hvd091dHNpZGVEYXlzID0gdHJ1ZSxcbiAgY2FwdGlvbkxheW91dCA9ICdsYWJlbCcsXG4gIGJ1dHRvblZhcmlhbnQgPSAnZ2hvc3QnLFxuICBmb3JtYXR0ZXJzLFxuICBjb21wb25lbnRzLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheVBpY2tlcj4gJiB7XG4gIGJ1dHRvblZhcmlhbnQ/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQnV0dG9uPlsndmFyaWFudCddXG59KSB7XG4gIGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG4gIHJldHVybiAoXG4gICAgPERheVBpY2tlclxuICAgICAgc2hvd091dHNpZGVEYXlzPXtzaG93T3V0c2lkZURheXN9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnYmctYmFja2dyb3VuZCBncm91cC9jYWxlbmRhciBwLTMgWy0tY2VsbC1zaXplOi0tc3BhY2luZyg4KV0gW1tkYXRhLXNsb3Q9Y2FyZC1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCBbW2RhdGEtc2xvdD1wb3BvdmVyLWNvbnRlbnRdXyZdOmJnLXRyYW5zcGFyZW50JyxcbiAgICAgICAgU3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfbmV4dD5zdmddOnJvdGF0ZS0xODBgLFxuICAgICAgICBTdHJpbmcucmF3YHJ0bDoqKjpbLnJkcC1idXR0b25cXF9wcmV2aW91cz5zdmddOnJvdGF0ZS0xODBgLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBjYXB0aW9uTGF5b3V0PXtjYXB0aW9uTGF5b3V0fVxuICAgICAgZm9ybWF0dGVycz17e1xuICAgICAgICBmb3JtYXRNb250aERyb3Bkb3duOiAoZGF0ZSkgPT5cbiAgICAgICAgICBkYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ3Nob3J0JyB9KSxcbiAgICAgICAgLi4uZm9ybWF0dGVycyxcbiAgICAgIH19XG4gICAgICBjbGFzc05hbWVzPXt7XG4gICAgICAgIHJvb3Q6IGNuKCd3LWZpdCcsIGRlZmF1bHRDbGFzc05hbWVzLnJvb3QpLFxuICAgICAgICBtb250aHM6IGNuKFxuICAgICAgICAgICdmbGV4IGdhcC00IGZsZXgtY29sIG1kOmZsZXgtcm93IHJlbGF0aXZlJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aHNcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGg6IGNuKCdmbGV4IGZsZXgtY29sIHctZnVsbCBnYXAtNCcsIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoKSxcbiAgICAgICAgbmF2OiBjbihcbiAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdy1mdWxsIGFic29sdXRlIHRvcC0wIGluc2V0LXgtMCBqdXN0aWZ5LWJldHdlZW4nLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm5hdlxuICAgICAgICApLFxuICAgICAgICBidXR0b25fcHJldmlvdXM6IGNuKFxuICAgICAgICAgIGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcbiAgICAgICAgICAnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9wcmV2aW91c1xuICAgICAgICApLFxuICAgICAgICBidXR0b25fbmV4dDogY24oXG4gICAgICAgICAgYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiBidXR0b25WYXJpYW50IH0pLFxuICAgICAgICAgICdzaXplLSgtLWNlbGwtc2l6ZSkgYXJpYS1kaXNhYmxlZDpvcGFjaXR5LTUwIHAtMCBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuYnV0dG9uX25leHRcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhfY2FwdGlvbjogY24oXG4gICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtKC0tY2VsbC1zaXplKSB3LWZ1bGwgcHgtKC0tY2VsbC1zaXplKScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMubW9udGhfY2FwdGlvblxuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bnM6IGNuKFxuICAgICAgICAgICd3LWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bSBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgZ2FwLTEuNScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25zXG4gICAgICAgICksXG4gICAgICAgIGRyb3Bkb3duX3Jvb3Q6IGNuKFxuICAgICAgICAgICdyZWxhdGl2ZSBoYXMtZm9jdXM6Ym9yZGVyLXJpbmcgYm9yZGVyIGJvcmRlci1pbnB1dCBzaGFkb3cteHMgaGFzLWZvY3VzOnJpbmctcmluZy81MCBoYXMtZm9jdXM6cmluZy1bM3B4XSByb3VuZGVkLW1kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5kcm9wZG93bl9yb290XG4gICAgICAgICksXG4gICAgICAgIGRyb3Bkb3duOiBjbihcbiAgICAgICAgICAnYWJzb2x1dGUgYmctcG9wb3ZlciBpbnNldC0wIG9wYWNpdHktMCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25cbiAgICAgICAgKSxcbiAgICAgICAgY2FwdGlvbl9sYWJlbDogY24oXG4gICAgICAgICAgJ3NlbGVjdC1ub25lIGZvbnQtbWVkaXVtJyxcbiAgICAgICAgICBjYXB0aW9uTGF5b3V0ID09PSAnbGFiZWwnXG4gICAgICAgICAgICA/ICd0ZXh0LXNtJ1xuICAgICAgICAgICAgOiAncm91bmRlZC1tZCBwbC0yIHByLTEgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC1zbSBoLTggWyY+c3ZnXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyY+c3ZnXTpzaXplLTMuNScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuY2FwdGlvbl9sYWJlbFxuICAgICAgICApLFxuICAgICAgICB0YWJsZTogJ3ctZnVsbCBib3JkZXItY29sbGFwc2UnLFxuICAgICAgICB3ZWVrZGF5czogY24oJ2ZsZXgnLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrZGF5cyksXG4gICAgICAgIHdlZWtkYXk6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgcm91bmRlZC1tZCBmbGV4LTEgZm9udC1ub3JtYWwgdGV4dC1bMC44cmVtXSBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheVxuICAgICAgICApLFxuICAgICAgICB3ZWVrOiBjbignZmxleCB3LWZ1bGwgbXQtMicsIGRlZmF1bHRDbGFzc05hbWVzLndlZWspLFxuICAgICAgICB3ZWVrX251bWJlcl9oZWFkZXI6IGNuKFxuICAgICAgICAgICdzZWxlY3Qtbm9uZSB3LSgtLWNlbGwtc2l6ZSknLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLndlZWtfbnVtYmVyX2hlYWRlclxuICAgICAgICApLFxuICAgICAgICB3ZWVrX251bWJlcjogY24oXG4gICAgICAgICAgJ3RleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlclxuICAgICAgICApLFxuICAgICAgICBkYXk6IGNuKFxuICAgICAgICAgICdyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHAtMCB0ZXh0LWNlbnRlciBbJjpmaXJzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kIFsmOmxhc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtci1tZCBncm91cC9kYXkgYXNwZWN0LXNxdWFyZSBzZWxlY3Qtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGF5XG4gICAgICAgICksXG4gICAgICAgIHJhbmdlX3N0YXJ0OiBjbihcbiAgICAgICAgICAncm91bmRlZC1sLW1kIGJnLWFjY2VudCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2Vfc3RhcnRcbiAgICAgICAgKSxcbiAgICAgICAgcmFuZ2VfbWlkZGxlOiBjbigncm91bmRlZC1ub25lJywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfbWlkZGxlKSxcbiAgICAgICAgcmFuZ2VfZW5kOiBjbigncm91bmRlZC1yLW1kIGJnLWFjY2VudCcsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX2VuZCksXG4gICAgICAgIHRvZGF5OiBjbihcbiAgICAgICAgICAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQgcm91bmRlZC1tZCBkYXRhLVtzZWxlY3RlZD10cnVlXTpyb3VuZGVkLW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLnRvZGF5XG4gICAgICAgICksXG4gICAgICAgIG91dHNpZGU6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgYXJpYS1zZWxlY3RlZDp0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm91dHNpZGVcbiAgICAgICAgKSxcbiAgICAgICAgZGlzYWJsZWQ6IGNuKFxuICAgICAgICAgICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGlzYWJsZWRcbiAgICAgICAgKSxcbiAgICAgICAgaGlkZGVuOiBjbignaW52aXNpYmxlJywgZGVmYXVsdENsYXNzTmFtZXMuaGlkZGVuKSxcbiAgICAgICAgLi4uY2xhc3NOYW1lcyxcbiAgICAgIH19XG4gICAgICBjb21wb25lbnRzPXt7XG4gICAgICAgIFJvb3Q6ICh7IGNsYXNzTmFtZSwgcm9vdFJlZiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGRhdGEtc2xvdD1cImNhbGVuZGFyXCJcbiAgICAgICAgICAgICAgcmVmPXtyb290UmVmfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKGNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICBDaGV2cm9uOiAoeyBjbGFzc05hbWUsIG9yaWVudGF0aW9uLCAuLi5wcm9wcyB9KSA9PiB7XG4gICAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGV2cm9uTGVmdEljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPENoZXZyb25SaWdodEljb25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICBEYXlCdXR0b246IENhbGVuZGFyRGF5QnV0dG9uLFxuICAgICAgICBXZWVrTnVtYmVyOiAoeyBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQgey4uLnByb3BzfT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHNpemUtKC0tY2VsbC1zaXplKSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICB9fVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FsZW5kYXJEYXlCdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGRheSxcbiAgbW9kaWZpZXJzLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheUJ1dHRvbj4pIHtcbiAgY29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RpZmllcnMuZm9jdXNlZCkge1xuICAgICAgcmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFttb2RpZmllcnMuZm9jdXNlZF0pXG5cbiAgcmV0dXJuIChcbiAgICA8QnV0dG9uXG4gICAgICByZWY9e3JlZn1cbiAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICBzaXplPVwiaWNvblwiXG4gICAgICBkYXRhLWRheT17ZGF5LmRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCl9XG4gICAgICBkYXRhLXNlbGVjdGVkLXNpbmdsZT17XG4gICAgICAgIG1vZGlmaWVycy5zZWxlY3RlZCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX3N0YXJ0ICYmXG4gICAgICAgICFtb2RpZmllcnMucmFuZ2VfZW5kICYmXG4gICAgICAgICFtb2RpZmllcnMucmFuZ2VfbWlkZGxlXG4gICAgICB9XG4gICAgICBkYXRhLXJhbmdlLXN0YXJ0PXttb2RpZmllcnMucmFuZ2Vfc3RhcnR9XG4gICAgICBkYXRhLXJhbmdlLWVuZD17bW9kaWZpZXJzLnJhbmdlX2VuZH1cbiAgICAgIGRhdGEtcmFuZ2UtbWlkZGxlPXttb2RpZmllcnMucmFuZ2VfbWlkZGxlfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2RhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3NlbGVjdGVkLXNpbmdsZT10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06YmctYWNjZW50IGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OmJvcmRlci1yaW5nIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctcmluZy81MCBkYXJrOmhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZmxleCBhc3BlY3Qtc3F1YXJlIHNpemUtYXV0byB3LWZ1bGwgbWluLXctKC0tY2VsbC1zaXplKSBmbGV4LWNvbCBnYXAtMSBsZWFkaW5nLW5vbmUgZm9udC1ub3JtYWwgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmVsYXRpdmUgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6ei0xMCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLVszcHhdIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpyb3VuZGVkLXItbWQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnJvdW5kZWQtbm9uZSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLW1kIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbC1tZCBbJj5zcGFuXTp0ZXh0LXhzIFsmPnNwYW5dOm9wYWNpdHktNzAnLFxuICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5kYXksXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IENhbGVuZGFyLCBDYWxlbmRhckRheUJ1dHRvbiB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgQ2hlY2tib3hQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWNoZWNrYm94J1xuaW1wb3J0IHsgQ2hlY2tJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuICByZXR1cm4gKFxuICAgIDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuICAgICAgICBkYXRhLXNsb3Q9XCJjaGVja2JveC1pbmRpY2F0b3JcIlxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcbiAgICAgID5cbiAgICAgICAgPENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG4gICAgICA8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cbiAgICA8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG4gIClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2FyZCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnQGNvbnRhaW5lci9jYXJkLWhlYWRlciBncmlkIGF1dG8tcm93cy1taW4gZ3JpZC1yb3dzLVthdXRvX2F1dG9dIGl0ZW1zLXN0YXJ0IGdhcC0xLjUgcC00IHBiLTAgaGFzLWRhdGEtW3Nsb3Q9Y2FyZC1hY3Rpb25dOmdyaWQtY29scy1bMWZyX2F1dG9dJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZFRpdGxlKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLXRpdGxlXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmREZXNjcmlwdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1kZXNjcmlwdGlvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkQWN0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWFjdGlvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnY29sLXN0YXJ0LTIgcm93LXNwYW4tMiByb3ctc3RhcnQtMSBzZWxmLXN0YXJ0IGp1c3RpZnktc2VsZi1lbmQnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkQ29udGVudCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1jb250ZW50XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3AtNCBwdC0wJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIHB4LTYgWy5ib3JkZXItdF06cHQtNicsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQge1xuICBDYXJkLFxuICBDYXJkSGVhZGVyLFxuICBDYXJkRm9vdGVyLFxuICBDYXJkVGl0bGUsXG4gIENhcmRBY3Rpb24sXG4gIENhcmREZXNjcmlwdGlvbixcbiAgQ2FyZENvbnRlbnQsXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUG9wb3ZlckNsb3NlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuICBkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG4gIHNldERhdGU6IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG4gIGxhYmVsPzogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0ZVBpY2tlcih7XG4gIGRhdGUsXG4gIGNsb3NlT25TZWxlY3QsXG4gIHNldERhdGUsXG4gIGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcbiAgY2xhc3NOYW1lLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG4gIGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IG9uU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXREYXRlKGRhdGUpXG4gICAgaWYgKGNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8UG9wb3Zlcj5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICFkYXRlICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQnXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cbiAgICAgICAgICAgIHtkYXRlID8gZGF5anMoZGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpIDogPHNwYW4+e2xhYmVsfTwvc3Bhbj59XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCIgYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgIDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuICAgICAgICAgIDxDYWxlbmRhclxuICAgICAgICAgICAgbW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICBzZWxlY3RlZD17ZGF0ZX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgICAgIG1vbnRoPXtkYXRlfVxuICAgICAgICAgICAgaW5pdGlhbEZvY3VzXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFBvcG92ZXJQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgYWxpZ24gPSAnY2VudGVyJyxcbiAgc2lkZU9mZnNldCA9IDQsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICA8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuICByZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyVHJpZ2dlciwgUG9wb3ZlckNvbnRlbnQsIFBvcG92ZXJBbmNob3IgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIERpYWxvZyh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJkaWFsb2ctdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUG9ydGFsPikge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nQ2xvc2Uoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5DbG9zZT4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGZpeGVkIGluc2V0LTAgei01MCBiZy1ibGFjay81MCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiPlxuICAgICAgPERpYWxvZ092ZXJsYXkgLz5cbiAgICAgIDxEaWFsb2dQcmltaXRpdmUuQ29udGVudFxuICAgICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctY29udGVudFwiXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXSBvdmVyZmxvdy15LXNjcm9sbCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGNsYXNzTmFtZT1cInJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXM6cmluZy1yaW5nIGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNCByb3VuZGVkLXhzIG9wYWNpdHktNzAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOm91dGxpbmUtaGlkZGVuIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCI+XG4gICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgICA8L0RpYWxvZ1ByaW1pdGl2ZS5DbG9zZT5cbiAgICAgIDwvRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9EaWFsb2dQb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Zvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nVGl0bGUoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRpdGxlPikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuVGl0bGVcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Rlc2NyaXB0aW9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uXG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDbG9zZSxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dPdmVybGF5LFxuICBEaWFsb2dQb3J0YWwsXG4gIERpYWxvZ1RpdGxlLFxuICBEaWFsb2dUcmlnZ2VyLFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGF0YS1zbG90PVwiaW5wdXRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG4gICAgICAgICdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1sYWJlbCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8TGFiZWxQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwibGFiZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2Nyb2xsQXJlYVByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2Nyb2xsLWFyZWEnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBTY3JvbGxBcmVhUHJvcHNcbiAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PiB7XG4gIHZpZXdQb3J0UHJvcHM/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQXJlYSh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLnByb3BzIH06IFNjcm9sbEFyZWFQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3RcbiAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICB7Li4ucHJvcHMudmlld1BvcnRQcm9wc31cbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdmlld3BvcnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBzaXplLWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMScsXG4gICAgICAgICAgcHJvcHMudmlld1BvcnRQcm9wcz8uY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbiAgICAgIDxTY3JvbGxCYXIgLz5cbiAgICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG4gIGNsYXNzTmFtZSxcbiAgb3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG4gICAgICBkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS1zY3JvbGxiYXJcIlxuICAgICAgb3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggdG91Y2gtbm9uZSBwLXB4IHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lJyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiZcbiAgICAgICAgICAnaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50JyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJlxuICAgICAgICAgICdoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdGh1bWJcIlxuICAgICAgICBjbGFzc05hbWU9XCJiZy1ib3JkZXIgcmVsYXRpdmUgZmxleC0xIHJvdW5kZWQtZnVsbFwiXG4gICAgICAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuICApXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG4gIHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcbiAgY2xhc3NOYW1lLFxuICBzaXplID0gJ2RlZmF1bHQnLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG4gIHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtdHJpZ2dlclwiXG4gICAgICBkYXRhLXNpemU9e3NpemV9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cbiAgICAgICAgPENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG4gICAgICA8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIHBvc2l0aW9uID0gJ3BvcHBlcicsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwic2VsZWN0LWNvbnRlbnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG4gICAgICAgICAgcG9zaXRpb24gPT09ICdwb3BwZXInICYmXG4gICAgICAgICAgICAnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHBvc2l0aW9uPXtwb3NpdGlvbn1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICA8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAncC0xJyxcbiAgICAgICAgICAgIHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuICAgICAgICAgICAgICAnaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIHNjcm9sbC1teS0xJ1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0PlxuICAgICAgICA8U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbiAvPlxuICAgICAgPC9TZWxlY3RQcmltaXRpdmUuQ29udGVudD5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0TGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkxhYmVsPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuTGFiZWxcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1sYWJlbFwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RJdGVtKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuSXRlbT4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLkl0ZW1cbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXNtIHB5LTEuNSBwci04IHBsLTIgdGV4dC1zbSBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuICAgICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgPC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3JcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuICAgICAgY2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIFNlbGVjdCxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0R3JvdXAsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdExhYmVsLFxuICBTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuICBTZWxlY3RTY3JvbGxVcEJ1dHRvbixcbiAgU2VsZWN0U2VwYXJhdG9yLFxuICBTZWxlY3RUcmlnZ2VyLFxuICBTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUYWJzUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10YWJzJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUYWJzKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTInLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic0xpc3Qoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5MaXN0Pikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLkxpc3RcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtbGlzdFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnYmctbXV0ZWQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtOSB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBwLVszcHhdJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic1RyaWdnZXIoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLlRyaWdnZXJcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtdHJpZ2dlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImRhdGEtW3N0YXRlPWFjdGl2ZV06YmctYmFja2dyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXJpbmcgZGFyazpkYXRhLVtzdGF0ZT1hY3RpdmVdOmJvcmRlci1pbnB1dCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06YmctaW5wdXQvMzAgdGV4dC1mb3JlZ3JvdW5kIGRhcms6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtW2NhbGMoMTAwJS0xcHgpXSBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHB4LTIgcHktMSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc3RhdGU9YWN0aXZlXTpzaGFkb3ctc20gWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFRhYnNDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Db250ZW50XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzLWNvbnRlbnRcIlxuICAgICAgY2xhc3NOYW1lPXtjbignZmxleC0xIG91dGxpbmUtbm9uZScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBUYWJzLCBUYWJzTGlzdCwgVGFic1RyaWdnZXIsIFRhYnNDb250ZW50IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUb29sdGlwUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10b29sdGlwJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUb29sdGlwUHJvdmlkZXIoe1xuICBkZWxheUR1cmF0aW9uID0gMCxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyPikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyXG4gICAgICBkYXRhLXNsb3Q9XCJ0b29sdGlwLXByb3ZpZGVyXCJcbiAgICAgIGRlbGF5RHVyYXRpb249e2RlbGF5RHVyYXRpb259XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPFRvb2x0aXBQcm92aWRlcj5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwidG9vbHRpcFwiIHsuLi5wcm9wc30gLz5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwVHJpZ2dlcih7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gPFRvb2x0aXBQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJ0b29sdGlwLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBzaWRlT2Zmc2V0ID0gMCxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwidG9vbHRpcC1jb250ZW50XCJcbiAgICAgICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBhbmltYXRlLWluIGZhZGUtaW4tMCB6b29tLWluLTk1IGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LWZpdCBvcmlnaW4tKC0tcmFkaXgtdG9vbHRpcC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyB0ZXh0LWJhbGFuY2UnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPFRvb2x0aXBQcmltaXRpdmUuQXJyb3cgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSBmaWxsLXByaW1hcnkgei01MCBzaXplLTIuNSB0cmFuc2xhdGUteS1bY2FsYygtNTAlXy1fMnB4KV0gcm90YXRlLTQ1IHJvdW5kZWQtWzJweF1cIiAvPlxuICAgICAgPC9Ub29sdGlwUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9Ub29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgKVxufVxuXG5leHBvcnQgeyBUb29sdGlwLCBUb29sdGlwVHJpZ2dlciwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBQcm92aWRlciB9XG4iLAogICAgImltcG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG4gIHJlZjogUmVhY3QuUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG4gIGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG4gICAgdXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuICBjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICBvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuICAgIGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG4gICAgICBzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuICB9KSlcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2RpYWxvZ09wZW59IG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0+XG4gICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmIHNlbGVjdGVkRGF5RXZlbnRzLmRheS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuICAgICAgICAgIDwvRGlhbG9nVGl0bGU+XG4gICAgICAgIDwvRGlhbG9nSGVhZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgc3BhY2UteS0zXCI+XG4gICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmXG4gICAgICAgICAgICBzZWxlY3RlZERheUV2ZW50cy5ldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICAgICAgZWxlbWVudElkPXtgYWxsLWV2ZW50cy1kaWFsb2ctZXZlbnQtJCR7ZXZlbnQuaWR9YH0gLy8gVXNlIGV2ZW50IElEIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuaWR9XG4gICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBteS0xIGgtWzMwcHhdXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuICBpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuICBpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG4gIGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG4gICAgcmV0dXJuICdyb3VuZGVkLW5vbmUnXG4gIH1cbiAgaWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcbiAgICByZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcbiAgfVxuICBpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcbiAgICByZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcbiAgfVxuICByZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG4gIGVsZW1lbnRJZCxcbiAgZXZlbnQsXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gIGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG4gIGVsZW1lbnRJZDogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBzdHlsZT86IENTU1Byb3BlcnRpZXNcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG4gIGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycywgc2V0Tm9kZVJlZiwgaXNEcmFnZ2luZyB9ID0gdXNlRHJhZ2dhYmxlKHtcbiAgICBpZDogZWxlbWVudElkLFxuICAgIGRhdGE6IHtcbiAgICAgIGV2ZW50LFxuICAgICAgdHlwZTogJ2NhbGVuZGFyLWV2ZW50JyxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgLy8gRGVmYXVsdCBldmVudCBjb250ZW50IHRvIHJlbmRlciBpZiBjdXN0b20gcmVuZGVyRXZlbnQgaXMgbm90IHByb3ZpZGVkXG4gIGNvbnN0IERlZmF1bHRFdmVudENvbnRlbnQgPSAoKSA9PiB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBldmVudCBoYXMgdHJ1bmNhdGlvbiBpbmZvcm1hdGlvblxuICAgIGNvbnN0IGVuaGFuY2VkRXZlbnQgPSBldmVudCBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlzVHJ1bmNhdGVkU3RhcnQ/OiBib29sZWFuXG4gICAgICBpc1RydW5jYXRlZEVuZD86IGJvb2xlYW5cbiAgICB9XG4gICAgY29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRTdGFydFxuICAgIGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZEVuZFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICBldmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcbiAgICAgICAgICBldmVudC5jb2xvciB8fCAndGV4dC13aGl0ZScsXG4gICAgICAgICAgJ2gtZnVsbCB3LWZ1bGwgcHgtMSBib3JkZXItWzEuNXB4XSBib3JkZXItY2FyZCB0ZXh0LWxlZnQgb3ZlcmZsb3ctY2xpcCByZWxhdGl2ZScsXG4gICAgICAgICAgZ2V0Qm9yZGVyUmFkaXVzQ2xhc3MoaXNUcnVuY2F0ZWRTdGFydCwgaXNUcnVuY2F0ZWRFbmQpXG4gICAgICAgICl9XG4gICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogZXZlbnQuYmFja2dyb3VuZENvbG9yLCBjb2xvcjogZXZlbnQuY29sb3IgfX1cbiAgICAgID5cbiAgICAgICAgey8qIExlZnQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cbiAgICAgICAge2lzVHJ1bmNhdGVkU3RhcnQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogRXZlbnQgdGl0bGUgKi99XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICd0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHNtOnRleHQteHMgbXQtMC41JyxcbiAgICAgICAgICAgIC8vIEFkZCBzbGlnaHQgcGFkZGluZyB0byBhdm9pZCBvdmVybGFwIHdpdGggaW5kaWNhdG9yc1xuICAgICAgICAgICAgaXNUcnVuY2F0ZWRTdGFydCAmJiAncGwtMScsXG4gICAgICAgICAgICBpc1RydW5jYXRlZEVuZCAmJiAncHItMSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2V2ZW50LnRpdGxlfVxuICAgICAgICA8L3A+XG5cbiAgICAgICAgey8qIFJpZ2h0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG4gICAgICAgIHtpc1RydW5jYXRlZEVuZCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAga2V5PXtlbGVtZW50SWR9XG4gICAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgICAgey4uLmF0dHJpYnV0ZXN9XG4gICAgICAgIHsuLi5saXN0ZW5lcnN9XG4gICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTUwIH19XG4gICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC01MCB9fVxuICAgICAgICBsYXlvdXRcbiAgICAgICAgbGF5b3V0SWQ9e2VsZW1lbnRJZH1cbiAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC40LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICd0cnVuY2F0ZSBoLWZ1bGwgdy1mdWxsJyxcbiAgICAgICAgICBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3BcbiAgICAgICAgICAgID8gZGlzYWJsZUV2ZW50Q2xpY2tcbiAgICAgICAgICAgICAgPyAnY3Vyc29yLWRlZmF1bHQnXG4gICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgOiAnY3Vyc29yLWdyYWInLFxuICAgICAgICAgIGlzRHJhZ2dpbmcgJiZcbiAgICAgICAgICAgICEoZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wKSAmJlxuICAgICAgICAgICAgJ2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgey8qIFVzZSBjdXN0b20gcmVuZGVyRXZlbnQgZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0ICovfVxuICAgICAgICB7cmVuZGVyRXZlbnQgPyByZW5kZXJFdmVudChldmVudCkgOiA8RGVmYXVsdEV2ZW50Q29udGVudCAvPn1cbiAgICAgIDwvbW90aW9uLmRpdj5cbiAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlRXZlbnQgPSBtZW1vKFxuICBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQsXG4gIChwcmV2UHJvcHMsIG5leHRQcm9wcykgPT4ge1xuICAgIC8vIENvbXBhcmUgdGhlIGVzc2VudGlhbCBwcm9wcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgICByZXR1cm4gKFxuICAgICAgcHJldlByb3BzLmVsZW1lbnRJZCA9PT0gbmV4dFByb3BzLmVsZW1lbnRJZCAmJlxuICAgICAgcHJldlByb3BzLmRpc2FibGVEcmFnID09PSBuZXh0UHJvcHMuZGlzYWJsZURyYWcgJiZcbiAgICAgIHByZXZQcm9wcy5jbGFzc05hbWUgPT09IG5leHRQcm9wcy5jbGFzc05hbWUgJiZcbiAgICAgIHByZXZQcm9wcy5ldmVudCA9PT0gbmV4dFByb3BzLmV2ZW50XG4gICAgKVxuICB9XG4pXG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9mZWF0dXJlcy9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcblxuaW50ZXJmYWNlIERheUNlbGxQcm9wcyB7XG4gIGluZGV4OiBudW1iZXIgLy8gSW5kZXggb2YgdGhlIGRheSBpbiB0aGUgd2VlayAoMC02KVxuICBkYXk6IGRheWpzLkRheWpzXG4gIGRheU1heEV2ZW50cz86IG51bWJlclxuICBjbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY2xhc3NOYW1lIGZvciBjdXN0b20gc3R5bGluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5Q2VsbDogUmVhY3QuRkM8RGF5Q2VsbFByb3BzPiA9ICh7XG4gIGluZGV4LFxuICBkYXksXG4gIGNsYXNzTmFtZSA9ICcnLFxufSkgPT4ge1xuICBjb25zdCBhbGxFdmVudHNEaWFsb2dSZWYgPSBSZWFjdC51c2VSZWY8e1xuICAgIG9wZW46ICgpID0+IHZvaWRcbiAgICBjbG9zZTogKCkgPT4gdm9pZFxuICAgIHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuICB9PihudWxsKVxuICBjb25zdCB7XG4gICAgY3VycmVudExvY2FsZSxcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgZGF5TWF4RXZlbnRzID0gMCxcbiAgICB0LFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgZGF5LnN0YXJ0T2YoJ2RheScpLFxuICAgIGRheS5lbmRPZignZGF5JylcbiAgKVxuXG4gIC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuICAvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcbiAgLy8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcbiAgd2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgIGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG4gIH1cblxuICAvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcbiAgY29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IGRheWpzLkRheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuICAgIGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG4gICAgICBkYXksXG4gICAgICBldmVudHMsXG4gICAgfSlcbiAgICBhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG4gIH1cblxuICBjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuICBjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gNiAvLyBTYXR1cmRheSBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gYSB3ZWVrXG5cbiAgY29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcbiAgY29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgaWQ9e2BkYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICBkYXRhLXRlc3RpZD17YGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctY2xpcCBwLTEgaG92ZXI6YmctYWNjZW50IG1pbi1oLVs2MHB4XScsXG4gICAgICAgICAgIWlzQ3VycmVudE1vbnRoICYmICdiZy1zZWNvbmRhcnkgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBpc0xhc3RDb2x1bW4gJiYgJ2JvcmRlci1yLTAnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICB7LyogQWJzb2x1dGVseSBwb3NpdGlvbmVkIG11bHRpLWRheSBiYXJzIChHb29nbGUgQ2FsZW5kYXIgc3R5bGUpICovfVxuXG4gICAgICAgIHsvKiBTaW5nbGUtZGF5IGV2ZW50cyBjb250YWluZXIgcG9zaXRpb25lZCBiZWxvdyBtdWx0aS1kYXkgZXZlbnRzICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICB7LyogRGF5IG51bWJlciAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTYgc206dy02JyxcbiAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb250LW1lZGl1bSdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgIGRheS50b0RhdGUoKVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cbiAgICAgICAgICB7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e2BlbXB0eS0ke3Jvd0luZGV4fWB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzIwcHhdIHctZnVsbFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtldmVudD8udGl0bGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuXG4gICAgICAgICAgey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG4gICAgICAgICAge2hhc0hpZGRlbkV2ZW50cyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBtdC0xXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0Ryb3BwYWJsZUNlbGw+XG5cbiAgICAgIHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cbiAgICAgIDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VEcm9wcGFibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRHJvcHBhYmxlQ2VsbFByb3BzIHtcbiAgaWQ6IHN0cmluZ1xuICB0eXBlOiAnZGF5LWNlbGwnIHwgJ3RpbWUtY2VsbCdcbiAgZGF0ZTogZGF5anMuRGF5anNcbiAgaG91cj86IG51bWJlclxuICBtaW51dGU/OiBudW1iZXJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wcGFibGVDZWxsKHtcbiAgaWQsXG4gIHR5cGUsXG4gIGRhdGUsXG4gIGhvdXIsXG4gIG1pbnV0ZSxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gICdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcbiAgY29uc3QgeyBvbkNlbGxDbGljaywgZGlzYWJsZURyYWdBbmREcm9wLCBkaXNhYmxlQ2VsbENsaWNrIH0gPVxuICAgIHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuICAgIGlkLFxuICAgIGRhdGE6IHtcbiAgICAgIHR5cGUsXG4gICAgICBkYXRlLFxuICAgICAgaG91cixcbiAgICAgIG1pbnV0ZSxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQ2VsbENsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGRhdGUuaG91cihob3VyID8/IDApLm1pbnV0ZShtaW51dGUgPz8gMClcbiAgICBsZXQgZW5kRGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpXG4gICAgaWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cihob3VyKS5taW51dGUobWludXRlICsgMTUpIC8vIGRheSB2aWV3IHRpbWUgc2xvdHMgYXJlIDE1IG1pbnV0ZXNcbiAgICB9IGVsc2UgaWYgKGhvdXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cihob3VyICsgMSkubWludXRlKDApIC8vIHdlZWsgdmlldyB0aW1lIHNsb3RzIGFyZSAxIGhvdXJcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuaG91cigyMykubWludXRlKDU5KSAvLyBtb250aCB2aWV3IGZ1bGwgZGF5XG4gICAgfVxuXG4gICAgb25DZWxsQ2xpY2soc3RhcnREYXRlLCBlbmREYXRlKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgaXNPdmVyICYmICFkaXNhYmxlRHJhZ0FuZERyb3AgJiYgJ2JnLWFjY2VudCcsXG4gICAgICAgIGRpc2FibGVDZWxsQ2xpY2sgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIE1vbnRoSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IE1vbnRoSGVhZGVyOiBSZWFjdC5GQzxNb250aEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICBjdXJyZW50TG9jYWxlLFxuICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gUmVvcmRlciB3ZWVrIGRheXMgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgY29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBkYXlzID0gZGF5anMud2Vla2RheXMoKS5tYXAoKGRheSkgPT4gZGF5LnRvTG93ZXJDYXNlKCkpXG4gICAgY29uc3Qgc2hvcnREYXlzID0gZGF5anMud2Vla2RheXNTaG9ydCgpLm1hcCgoZGF5KSA9PiBkYXkudG9Mb3dlckNhc2UoKSlcblxuICAgIC8vIFJvdGF0ZSB0aGUgYXJyYXkgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpcnN0RGF5T2ZXZWVrOyBpKyspIHtcbiAgICAgIGNvbnN0IGRheVRvTW92ZSA9IGRheXMuc2hpZnQoKVxuICAgICAgY29uc3Qgc2hvcnREYXlUb01vdmUgPSBzaG9ydERheXMuc2hpZnQoKVxuICAgICAgaWYgKGRheVRvTW92ZSkge1xuICAgICAgICBkYXlzLnB1c2goZGF5VG9Nb3ZlKVxuICAgICAgfVxuICAgICAgaWYgKHNob3J0RGF5VG9Nb3ZlKSB7XG4gICAgICAgIHNob3J0RGF5cy5wdXNoKHNob3J0RGF5VG9Nb3ZlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGRheXMsIHNob3J0RGF5cyB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGVdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLTcgYm9yZGVyLWInLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtaGVhZGVyXCJcbiAgICA+XG4gICAgICB7d2Vla0RheXMuZGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXt3ZWVrRGF5fSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3dlZWtEYXl9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicHktMiB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBib3JkZXItciBmaXJzdDpib3JkZXItbFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWtkYXktaGVhZGVyLSR7d2Vla0RheX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiB0ZXh0LXNtIHNtOmlubGluZVwiPnt3ZWVrRGF5fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgc206aGlkZGVuXCI+XG4gICAgICAgICAgICAgIHt3ZWVrRGF5cy5zaG9ydERheXNbaW5kZXhdfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI4IC8vIHB4IChoLTcpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG4gIHN1bmRheTogMCxcbiAgbW9uZGF5OiAxLFxuICB0dWVzZGF5OiAyLFxuICB3ZWRuZXNkYXk6IDMsXG4gIHRodXJzZGF5OiA0LFxuICBmcmlkYXk6IDUsXG4gIHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcbiAgMDogJ3N1bmRheScsXG4gIDE6ICdtb25kYXknLFxuICAyOiAndHVlc2RheScsXG4gIDM6ICd3ZWRuZXNkYXknLFxuICA0OiAndGh1cnNkYXknLFxuICA1OiAnZnJpZGF5JyxcbiAgNjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQge1xuICBEQVlfTlVNQkVSX0hFSUdIVCxcbiAgRVZFTlRfQkFSX0hFSUdIVCxcbiAgR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBQcm9jZXNzZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuICBsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG4gIHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuICB0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICBoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuICBwb3NpdGlvbjogbnVtYmVyIC8vIFBvc2l0aW9uIGluIHRoZSByb3cgKDAgZm9yIGZpcnN0LCAxIGZvciBzZWNvbmQsIGV0Yy4pXG59XG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcbiAgZGF5cyxcbn06IFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcykgPT4ge1xuICBjb25zdCB7IGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZGF5TWF4RXZlbnRzIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHdlZWtTdGFydCA9IGRheXNbMF0uc3RhcnRPZignZGF5JylcbiAgY29uc3Qgd2Vla0VuZCA9IGRheXNbNl0uZW5kT2YoJ2RheScpXG5cbiAgLy8gR2V0IGFsbCBldmVudHMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGlzIHdlZWtcbiAgY29uc3Qgd2Vla0V2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZSh3ZWVrU3RhcnQsIHdlZWtFbmQpXG5cbiAgLy8gU2VwYXJhdGUgbXVsdGktZGF5IGFuZCBzaW5nbGUtZGF5IGV2ZW50c1xuICBjb25zdCBtdWx0aURheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKFxuICAgIChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsICdkYXknKSA+IDBcbiAgKVxuICBjb25zdCBzaW5nbGVEYXlFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcihcbiAgICAoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCAnZGF5JykgPT09IDBcbiAgKVxuXG4gIC8vIFNvcnQgbXVsdGktZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlLCB0aGVuIGJ5IGR1cmF0aW9uXG4gIGNvbnN0IHNvcnRlZE11bHRpRGF5ID0gWy4uLm11bHRpRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgaWYgKHN0YXJ0RGlmZiAhPT0gMCkge1xuICAgICAgcmV0dXJuIHN0YXJ0RGlmZlxuICAgIH1cbiAgICByZXR1cm4gYi5lbmQuZGlmZihiLnN0YXJ0KSAtIGEuZW5kLmRpZmYoYS5zdGFydCkgLy8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuICB9KVxuXG4gIC8vIFNvcnQgc2luZ2xlLWRheSBldmVudHMgYnkgc3RhcnQgdGltZVxuICBjb25zdCBzb3J0ZWRTaW5nbGVEYXkgPSBbLi4uc2luZ2xlRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PlxuICAgIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuICApXG5cbiAgLy8gQ3JlYXRlIDcgeCBkYXlNYXhFdmVudHMgZ3JpZCB3aXRoIGZsYWdzXG4gIGNvbnN0IGdyaWQ6IHsgdGFrZW46IGJvb2xlYW47IGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCB9W11bXSA9IFtdXG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcbiAgICBncmlkW3Jvd10gPSBbXVxuICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IDc7IGNvbCsrKSB7XG4gICAgICBncmlkW3Jvd11bY29sXSA9IHsgdGFrZW46IGZhbHNlLCBldmVudDogbnVsbCB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRFdmVudFtdID0gW11cblxuICAvLyBTdGVwIDE6IEFzc2lnbiBwb3NpdGlvbnMgdG8gbXVsdGktZGF5IGV2ZW50cyBmaXJzdFxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZE11bHRpRGF5KSB7XG4gICAgY29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKCdkYXknKSwgd2Vla1N0YXJ0KVxuICAgIGNvbnN0IGV2ZW50RW5kID0gZGF5anMubWluKGV2ZW50LmVuZC5zdGFydE9mKCdkYXknKSwgd2Vla0VuZClcbiAgICBjb25zdCBzdGFydENvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZih3ZWVrU3RhcnQsICdkYXknKSlcbiAgICBjb25zdCBlbmRDb2wgPSBNYXRoLm1pbig2LCBldmVudEVuZC5kaWZmKHdlZWtTdGFydCwgJ2RheScpKVxuXG4gICAgLy8gRGV0ZWN0IGlmIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgYm91bmRhcmllc1xuICAgIGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKCdkYXknKS5pc0JlZm9yZSh3ZWVrU3RhcnQpXG4gICAgY29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBldmVudC5lbmQuc3RhcnRPZignZGF5JykuaXNBZnRlcih3ZWVrRW5kKVxuXG4gICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSBldmVudCBzdGFydGluZyBmcm9tIGl0cyBvcmlnaW5hbCBzdGFydCBjb2x1bW5cbiAgICBsZXQgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gZmFsc2VcblxuICAgIC8vIEZpcnN0IHRyeTogcGxhY2UgZnJvbSBvcmlnaW5hbCBzdGFydCBwb3NpdGlvblxuICAgIGxldCBhc3NpZ25lZFJvdyA9IC0xXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgZm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgIGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2FuUGxhY2UpIHtcbiAgICAgICAgYXNzaWduZWRSb3cgPSByb3dcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudCB0byBhbGwgaXRzIGNvbHVtbnNcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgZ3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuICAgICAgY29uc3Qgc3BhbkRheXMgPSBlbmRDb2wgLSBzdGFydENvbCArIDFcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgbGVmdDogKHN0YXJ0Q29sIC8gNykgKiAxMDAsXG4gICAgICAgIHdpZHRoOiAoc3BhbkRheXMgLyA3KSAqIDEwMCxcbiAgICAgICAgdG9wOlxuICAgICAgICAgIERBWV9OVU1CRVJfSEVJR0hUICtcbiAgICAgICAgICBHQVBfQkVUV0VFTl9FTEVNRU5UUyArXG4gICAgICAgICAgYXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICBwb3NpdGlvbjogYXNzaWduZWRSb3csXG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBpc1RydW5jYXRlZFN0YXJ0LFxuICAgICAgICBpc1RydW5jYXRlZEVuZCxcbiAgICAgIH0gYXMgUHJvY2Vzc2VkRXZlbnQpXG4gICAgICBwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgY291bGRuJ3QgcGxhY2UgYXQgb3JpZ2luYWwgcG9zaXRpb24sIHRyeSB0cnVuY2F0ZWQgdmVyc2lvbnMgc3RhcnRpbmcgZnJvbSBsYXRlciBkYXlzXG4gICAgaWYgKCFwbGFjZWRTdWNjZXNzZnVsbHkpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIGxldCB0cnlTdGFydENvbCA9IHN0YXJ0Q29sICsgMTtcbiAgICAgICAgdHJ5U3RhcnRDb2wgPD0gZW5kQ29sO1xuICAgICAgICB0cnlTdGFydENvbCsrXG4gICAgICApIHtcbiAgICAgICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSB0cnVuY2F0ZWQgZXZlbnQgc3RhcnRpbmcgZnJvbSB0aGlzIGNvbHVtblxuICAgICAgICBsZXQgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSAtMVxuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgICAgIGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICAgICAgaWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhblBsYWNlKSB7XG4gICAgICAgICAgICB0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IHJvd1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdyBmb3IgdGhlIHRydW5jYXRlZCB2ZXJzaW9uLCBwbGFjZSBpdFxuICAgICAgICBpZiAodHJ1bmNhdGVkQXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgICAgICBncmlkW3RydW5jYXRlZEFzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciB0aGUgdHJ1bmNhdGVkIHJlbmRlcmluZ1xuICAgICAgICAgIGNvbnN0IHRydW5jYXRlZFNwYW5EYXlzID0gZW5kQ29sIC0gdHJ5U3RhcnRDb2wgKyAxXG4gICAgICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbGVmdDogKHRyeVN0YXJ0Q29sIC8gNykgKiAxMDAsXG4gICAgICAgICAgICB3aWR0aDogKHRydW5jYXRlZFNwYW5EYXlzIC8gNykgKiAxMDAsXG4gICAgICAgICAgICB0b3A6XG4gICAgICAgICAgICAgIERBWV9OVU1CRVJfSEVJR0hUICtcbiAgICAgICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgICAgICB0cnVuY2F0ZWRBc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgR0FQX0JFVFdFRU5fRUxFTUVOVFMpLFxuICAgICAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICAgICAgcG9zaXRpb246IHRydW5jYXRlZEFzc2lnbmVkUm93LFxuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICBpc1RydW5jYXRlZFN0YXJ0OiB0cnVlLCAvLyBBbHdheXMgdHJ1bmNhdGVkIGF0IHN0YXJ0IHdoZW4gdXNpbmcgdGhpcyBmYWxsYmFjayBsb2dpY1xuICAgICAgICAgICAgaXNUcnVuY2F0ZWRFbmQsXG4gICAgICAgICAgfSBhcyBQcm9jZXNzZWRFdmVudClcbiAgICAgICAgICBwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG4gICAgICAgICAgYnJlYWsgLy8gU3VjY2Vzc2Z1bGx5IHBsYWNlZCwgc3RvcCB0cnlpbmcgb3RoZXIgc3RhcnQgcG9zaXRpb25zXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG4gIGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG4gICAgY29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKCdkYXknKSwgd2Vla1N0YXJ0KVxuICAgIGNvbnN0IGNvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZih3ZWVrU3RhcnQsICdkYXknKSlcblxuICAgIC8vIFNpbmdsZS1kYXkgZXZlbnRzIGFyZSBub3QgdHJ1bmNhdGVkIGJ5IGRlZmluaXRpb25cbiAgICBjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZmFsc2VcbiAgICBjb25zdCBpc1RydW5jYXRlZEVuZCA9IGZhbHNlXG5cbiAgICAvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG4gICAgbGV0IGFzc2lnbmVkUm93ID0gLTFcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICBpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgIGFzc2lnbmVkUm93ID0gcm93XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7XG4gICAgICAgIGxlZnQ6IChjb2wgLyA3KSAqIDEwMCxcbiAgICAgICAgd2lkdGg6ICgxIC8gNykgKiAxMDAsXG4gICAgICAgIHRvcDpcbiAgICAgICAgICBEQVlfTlVNQkVSX0hFSUdIVCArXG4gICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgIGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgcG9zaXRpb246IGFzc2lnbmVkUm93LFxuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgaXNUcnVuY2F0ZWRTdGFydCxcbiAgICAgICAgaXNUcnVuY2F0ZWRFbmQsXG4gICAgICB9IGFzIFByb2Nlc3NlZEV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIFdlZWtFdmVudHNMYXllclByb3BzIHtcbiAgZGF5czogZGF5anMuRGF5anNbXVxufVxuXG5leHBvcnQgY29uc3QgV2Vla0V2ZW50c0xheWVyOiBSZWFjdC5GQzxXZWVrRXZlbnRzTGF5ZXJQcm9wcz4gPSAoeyBkYXlzIH0pID0+IHtcbiAgY29uc3Qgd2Vla1N0YXJ0ID0gZGF5c1swXVxuICBjb25zdCBwcm9jZXNzZWRXZWVrRXZlbnRzID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7IGRheXMgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiPlxuICAgICAge3Byb2Nlc3NlZFdlZWtFdmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGV2ZW50LSR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LmZvcm1hdChcbiAgICAgICAgICAgICAgJ1lZWVktTU0tREQnXG4gICAgICAgICAgICApfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke2V2ZW50LmxlZnR9JSArIHZhcigtLXNwYWNpbmcpICogMC4yNSlgLFxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAxKWAsXG4gICAgICAgICAgICAgIHRvcDogYCR7ZXZlbnQudG9wfXB4YCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZXZlbnQtbGF5ZXItZXZlbnQtJHtldmVudC5pZH1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BldmVudC0ke2V2ZW50LmlkfS0ke1xuICAgICAgICAgICAgICAgIGV2ZW50LnBvc2l0aW9uXG4gICAgICAgICAgICAgIH0tJHt3ZWVrU3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLWZ1bGwgdy1mdWxsIHNoYWRvd1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyJ1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgV2Vla0FsbERheVJvdyB9IGZyb20gJy4uL3dlZWstYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBXZWVrSGVhZGVyIH0gZnJvbSAnLi4vd2Vlay1oZWFkZXInXG5pbXBvcnQgeyBXZWVrVGltZUdyaWQgfSBmcm9tICcuLi93ZWVrLXRpbWUtZ3JpZCdcbi8vIEFkZCB3ZWVrT2ZZZWFyIHBsdWdpbiB0byBkYXlqc1xuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5cbmNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXdcIj5cbiAgICAgIHsvKiBXZWVrIGhlYWRlciByb3cgLSBmaXhlZCAqL31cbiAgICAgIDxXZWVrSGVhZGVyIGNsYXNzTmFtZT1cImgtWzVyZW1dXCIgLz5cblxuICAgICAgey8qIFNjcm9sbGFibGUgdGltZSBncmlkICovfVxuICAgICAgPFNjcm9sbEFyZWFcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBvdmVyZmxvdy1hdXRvIGgtW2NhbGMoMTAwJS01cmVtKV1cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cIndlZWstc2Nyb2xsLWFyZWFcIlxuICAgICAgPlxuICAgICAgICB7LyogQWxsLWRheSBldmVudHMgcm93IC0gZHluYW1pYyBoZWlnaHQgYmFzZWQgb24gY29udGVudCAqL31cbiAgICAgICAgPFdlZWtBbGxEYXlSb3cgLz5cbiAgICAgICAgPFdlZWtUaW1lR3JpZCAvPlxuICAgICAgPC9TY3JvbGxBcmVhPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IFdlZWtWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnLi4vZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuLi9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQsIEdBUF9CRVRXRUVOX0VMRU1FTlRTIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgY29uc3QgV2Vla0FsbERheVJvdzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZmlyc3REYXlPZldlZWsgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBHZXQgc3RhcnQgYW5kIGVuZCBvZiBjdXJyZW50IHdlZWsgYmFzZWQgb24gZmlyc3REYXlPZldlZWsgc2V0dGluZ1xuICBjb25zdCBzdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3dlZWsnKS5kYXkoZmlyc3REYXlPZldlZWspXG4gIC8vIElmIGN1cnJlbnQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHdlZWssIG1vdmUgYmFjayBvbmUgd2Vla1xuICBjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWspXG4gICAgPyBzdGFydE9mV2Vlay5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgOiBzdGFydE9mV2Vla1xuICBjb25zdCBlbmRPZldlZWsgPSBhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZCg2LCAnZGF5JylcblxuICAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZGF5cyBmb3IgdGhlIGN1cnJlbnQgd2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgd2Vla0RheXMucHVzaChhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChpLCAnZGF5JykpXG4gIH1cblxuICAvLyBHZXQgZXZlbnRzIHRoYXQgbWlnaHQgb3ZlcmxhcCB3aXRoIHRoaXMgd2VlayAoZXhwYW5kIHNlYXJjaCByYW5nZSlcbiAgY29uc3QgZXhwYW5kZWRTdGFydERhdGUgPSBhZGp1c3RlZFN0YXJ0T2ZXZWVrLnN1YnRyYWN0KDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBiZWZvcmUgd2VlayBzdGFydFxuICBjb25zdCBleHBhbmRlZEVuZERhdGUgPSBlbmRPZldlZWsuYWRkKDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBhZnRlciB3ZWVrIGVuZFxuICBjb25zdCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGV4cGFuZGVkU3RhcnREYXRlLCBleHBhbmRlZEVuZERhdGUpXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gIGNvbnN0IGFsbERheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYWxsRGF5KVxuXG4gIC8vIFByb2Nlc3MgYW5kIGxheW91dCBhbGwtZGF5IGV2ZW50cyB0byBhdm9pZCBvdmVybGFwcGluZ1xuICBjb25zdCB7IHByb2Nlc3NlZEFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gU29ydCBhbGwtZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlIGFuZCB0aGVuIGJ5IGR1cmF0aW9uIChsb25nZXIgZXZlbnRzIGZpcnN0KVxuICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IFsuLi5hbGxEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIC8vIEZpcnN0IGNvbXBhcmUgYnkgc3RhcnQgZGF0ZVxuICAgICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICBpZiAoc3RhcnREaWZmICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzdGFydERpZmZcbiAgICAgIH1cblxuICAgICAgLy8gSWYgc3RhcnQgZGF0ZXMgYXJlIHRoZSBzYW1lLCBsb25nZXIgZXZlbnRzIGNvbWUgZmlyc3RcbiAgICAgIGNvbnN0IGFEdXJhdGlvbiA9IGEuZW5kLmRpZmYoYS5zdGFydClcbiAgICAgIGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydClcbiAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICB9KVxuXG4gICAgLy8gVHJhY2sgcG9zaXRpb25zIGluIHJvd3NcbiAgICBjb25zdCByb3dzOiB7IGVuZDogZGF5anMuRGF5anM7IGV2ZW50OiBDYWxlbmRhckV2ZW50IH1bXVtdID0gW11cbiAgICBjb25zdCBwcm9jZXNzZWRFdmVudHM6IFByb2Nlc3NlZENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cbiAgICBzb3J0ZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBkYXlzIHRoaXMgZXZlbnQgc3BhbnNcbiAgICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBldmVudC5zdGFydC5pc0JlZm9yZShhZGp1c3RlZFN0YXJ0T2ZXZWVrKVxuICAgICAgICA/IGFkanVzdGVkU3RhcnRPZldlZWtcbiAgICAgICAgOiBldmVudC5zdGFydFxuICAgICAgY29uc3QgZXZlbnRFbmQgPSBldmVudC5lbmQuaXNBZnRlcihlbmRPZldlZWspID8gZW5kT2ZXZWVrIDogZXZlbnQuZW5kXG5cbiAgICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBhcyBwZXJjZW50YWdlIG9mIHRoZSB3ZWVrIHdpZHRoXG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIGV2ZW50U3RhcnQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JylcbiAgICAgIClcbiAgICAgIGNvbnN0IGVuZERheUluZGV4ID0gTWF0aC5taW4oNiwgZXZlbnRFbmQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JykpXG5cbiAgICAgIGNvbnN0IGxlZnQgPSAoc3RhcnREYXlJbmRleCAvIDcpICogMTAwXG4gICAgICBjb25zdCB3aWR0aCA9ICgoZW5kRGF5SW5kZXggLSBzdGFydERheUluZGV4ICsgMSkgLyA3KSAqIDEwMFxuXG4gICAgICAvLyBGaW5kIGEgcm93IHdoZXJlIHRoaXMgZXZlbnQgY2FuIGZpdFxuICAgICAgbGV0IHJvd0luZGV4ID0gMFxuICAgICAgbGV0IHBsYWNlZCA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghcGxhY2VkKSB7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByb3cgaWYgbmVlZGVkXG4gICAgICAgICAgcm93cy5wdXNoKFtdKVxuICAgICAgICAgIHBsYWNlZCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGNhbiBmaXQgaW4gdGhlIGN1cnJlbnQgcm93XG4gICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tyb3dJbmRleF1cbiAgICAgICAgICBjb25zdCBjYW5GaXQgPSByb3cuZXZlcnkoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGV2ZW50U3RhcnQuaXNBZnRlcihpdGVtLmVuZCkgfHxcbiAgICAgICAgICAgICAgZXZlbnRFbmQuaXNCZWZvcmUoaXRlbS5ldmVudC5zdGFydClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGNhbkZpdCkge1xuICAgICAgICAgICAgcGxhY2VkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBldmVudCB0byB0aGUgcm93XG4gICAgICByb3dzW3Jvd0luZGV4XS5wdXNoKHsgZW5kOiBldmVudEVuZCwgZXZlbnQgfSlcblxuICAgICAgLy8gQWRkIHByb2Nlc3NlZCBldmVudCB3aXRoIGNvcnJlY3QgcG9zaXRpb25pbmdcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICB0b3A6IHJvd0luZGV4ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzLCBhZGp1c3RlZFN0YXJ0T2ZXZWVrLCBlbmRPZldlZWtdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtW2F1dG9fMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXSBncmlkLXJvd3MtMSByZWxhdGl2ZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstYWxsLWRheS1yb3dcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xNCBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXIteCBib3JkZXItYiBwci0yIG1pbi1oLTE2XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgQWxsLWRheVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERyb3BwYWJsZSBjZWxscyBmb3IgZWFjaCBkYXkgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgaWQ9e2BhbGwtZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1mdWxsIGZsZXgtMSBjdXJzb3ItcG9pbnRlciBib3JkZXItciBib3JkZXItYlwiXG4gICAgICAgIC8+XG4gICAgICApKX1cblxuICAgICAgey8qIEFsbC1kYXkgZXZlbnQgYmxvY2tzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcC0xIGNvbC1zcGFuLTcgY29sLXN0YXJ0LTJcIj5cbiAgICAgICAge3Byb2Nlc3NlZEFsbERheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGFsbC1kYXktY29udGFpbmVyLSR7ZXZlbnQuaWR9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH1weGAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1jbGlwIHRleHQteHMgYWJzb2x1dGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmludGVyZmFjZSBXZWVrSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFdlZWtIZWFkZXI6IFJlYWN0LkZDPFdlZWtIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgY3VycmVudERhdGUsXG4gICAgY3VycmVudExvY2FsZSxcbiAgICBzZWxlY3REYXRlLFxuICAgIG9wZW5FdmVudEZvcm0sXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBHZXQgc3RhcnQgYW5kIGVuZCBvZiBjdXJyZW50IHdlZWsgYmFzZWQgb24gZmlyc3REYXlPZldlZWsgc2V0dGluZ1xuICBjb25zdCBzdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3dlZWsnKS5kYXkoZmlyc3REYXlPZldlZWspXG4gIC8vIElmIGN1cnJlbnQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHdlZWssIG1vdmUgYmFjayBvbmUgd2Vla1xuICBjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gY3VycmVudERhdGUuaXNCZWZvcmUoc3RhcnRPZldlZWspXG4gICAgPyBzdGFydE9mV2Vlay5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgOiBzdGFydE9mV2Vla1xuXG4gIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBkYXlzIGZvciB0aGUgY3VycmVudCB3ZWVrXG4gIGNvbnN0IHdlZWtEYXlzID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICB3ZWVrRGF5cy5wdXNoKGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKGksICdkYXknKSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgLy8gY3NzIGdyaWQgaGVhZGVyIHdpdGggbGVmIGNvcm5lciBjZWxsIHNob3J0ZXIgdGhhbiB0aGUgcmVzdFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncmlkIGdyaWQtY29scy1bYXV0b18xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJdIGdyaWQtcm93cy0xJyxcbiAgICAgICAgc3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstaGVhZGVyXCJcbiAgICA+XG4gICAgICB7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMSB3LTE0IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXIteCBib3JkZXItYiBwLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzXCI+V2Vlazwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGF5IGhlYWRlciBjZWxscyAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGJvcmRlci1iJyxcbiAgICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZGF5KVxuICAgICAgICAgICAgICAgIG9wZW5FdmVudEZvcm0oZGF5KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWhlYWRlci0ke2RheS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTcgc206dy03IHNtOnRleHQtc20nLFxuICAgICAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuXG5pbnRlcmZhY2UgUHJvY2Vzc2VkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgbGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICB3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2VcbiAgdG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgaGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2VcbiAgekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHsgZGF5IH06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQcm9jZXNzZWRFdmVudFtdPigoKSA9PiB7XG4gICAgbGV0IGV2ZW50c0ZvckRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICAgIGRheS5lbmRPZignZGF5JylcbiAgICApXG5cbiAgICAvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcbiAgICBldmVudHNGb3JEYXkgPSBldmVudHNGb3JEYXlcbiAgICAgIC5maWx0ZXIoKGUpID0+ICFlLmFsbERheSlcbiAgICAgIC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG4gICAgaWYgKGV2ZW50c0ZvckRheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMTogR3JvdXAgZXZlbnRzIGludG8gY2x1c3RlcnMgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG4gICAgY29uc3QgY2x1c3RlcnM6IENhbGVuZGFyRXZlbnRbXVtdID0gW11cbiAgICBsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG4gICAgbGV0IGxhc3RFdmVudEVuZDogZGF5anMuRGF5anMgfCBudWxsID0gbnVsbFxuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzRm9yRGF5KSB7XG4gICAgICBpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuICAgICAgICBpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudENsdXN0ZXIgPSBbXVxuICAgICAgfVxuICAgICAgY3VycmVudENsdXN0ZXIucHVzaChldmVudClcbiAgICAgIGxhc3RFdmVudEVuZCA9IGxhc3RFdmVudEVuZFxuICAgICAgICA/IGRheWpzLm1heChsYXN0RXZlbnRFbmQsIGV2ZW50LmVuZClcbiAgICAgICAgOiBldmVudC5lbmRcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsdXN0ZXJzLnB1c2goY3VycmVudENsdXN0ZXIpXG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG4gICAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRFdmVudFtdID0gW11cbiAgICBmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBTaW5nbGUgZXZlbnQgdGFrZXMgZnVsbCB3aWR0aFxuICAgICAgICBjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuaG91cigpICsgZXZlbnQuc3RhcnQubWludXRlKCkgLyA2MFxuICAgICAgICBsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5ob3VyKCkgKyBldmVudC5lbmQubWludXRlKCkgLyA2MFxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxEdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWVcbiAgICAgICAgY29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIDI0KSAqIDEwMFxuICAgICAgICBjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIDI0KSAqIDEwMFxuICAgICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7IC4uLmV2ZW50LCBsZWZ0OiAwLCB3aWR0aDogMTAwLCB0b3AsIGhlaWdodCB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBNdWx0aXBsZSBldmVudHMgLSB1c2UgbGF5ZXJlZCBwb3NpdGlvbmluZyBhcHByb2FjaFxuICAgICAgLy8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gWy4uLmNsdXN0ZXJdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcbiAgICAgICAgY29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJylcblxuICAgICAgICAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG4gICAgICAgIGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuICAgICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICB9KVxuXG4gICAgICAvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcbiAgICAgIGNvbnN0IHRvdGFsRXZlbnRzID0gc29ydGVkRXZlbnRzLmxlbmd0aFxuXG4gICAgICAvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuICAgICAgLy8gRmV3ZXIgZXZlbnRzID0gbGFyZ2VyIGluZGl2aWR1YWwgb2Zmc2V0cywgbW9yZSBldmVudHMgPSBzbWFsbGVyIG9mZnNldHNcbiAgICAgIGxldCBtYXhPZmZzZXQ6IG51bWJlclxuICAgICAgaWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDI1IC8vIDI1JSBvZmZzZXQgZm9yIDIgZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSAzKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuICAgICAgfSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gNCkge1xuICAgICAgICBtYXhPZmZzZXQgPSA2MCAvLyA2MCUgdG90YWwgZm9yIDQgZXZlbnRzICgyMCUgZWFjaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heE9mZnNldCA9IDcwIC8vIDcwJSB0b3RhbCBmb3IgNSsgZXZlbnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc29ydGVkRXZlbnRzW2ldXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmhvdXIoKSArIGV2ZW50LnN0YXJ0Lm1pbnV0ZSgpIC8gNjBcbiAgICAgICAgbGV0IGVuZFRpbWUgPSBldmVudC5lbmQuaG91cigpICsgZXZlbnQuZW5kLm1pbnV0ZSgpIC8gNjBcblxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICAgICAgICBjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gMjQpICogMTAwXG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gMjQpICogMTAwXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcbiAgICAgICAgbGV0IGxlZnQ6IG51bWJlclxuICAgICAgICBsZXQgd2lkdGg6IG51bWJlclxuICAgICAgICBsZXQgekluZGV4OiBudW1iZXJcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoIGF0IGJvdHRvbVxuICAgICAgICAgIGxlZnQgPSAwXG4gICAgICAgICAgd2lkdGggPSAxMDBcbiAgICAgICAgICB6SW5kZXggPSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3Vic2VxdWVudCBldmVudHMgYXJlIG9mZnNldCBkeW5hbWljYWxseSBiYXNlZCBvbiB0b3RhbCBldmVudCBjb3VudFxuICAgICAgICAgIGxlZnQgPSBvZmZzZXRQZXJFdmVudCAqIGlcbiAgICAgICAgICB3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG4gICAgICAgICAgekluZGV4ID0gaSArIDEgLy8gSGlnaGVyIHotaW5kZXggZm9yIGV2ZW50cyBvbiB0b3BcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIHRvcCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgekluZGV4LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbiAgfSwgW2RheSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlXSlcblxuICByZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJy4uLy4uL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF5RXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheTogZGF5anMuRGF5anMgLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5RXZlbnRzTGF5ZXI6IFJlYWN0LkZDPERheUV2ZW50c0xheWVyUHJvcHM+ID0gKHtcbiAgZGF5LFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheSB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgei0xMFwiXG4gICAgPlxuICAgICAge3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnlWZXJ5VW5pcXVlS2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5LmZvcm1hdChcbiAgICAgICAgICAnWVlZWS1NTS1ERCdcbiAgICAgICAgKX1gXG4gICAgICAgIGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2Bjb250YWluZXItJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuICAgICAgICAgICAgICB0b3A6IGAke2V2ZW50LnRvcH0lYCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BkcmFnZ2FibGUtJHt2ZXJ5VmVyeVVuaXF1ZUtleX1gfVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG4gICAgICAgICAgICAgICAgJ1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlFdmVudHNMYXllciB9IGZyb20gJy4uL2RheS12aWV3L2NvbXBvbmVudHMvZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuLi9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcblxuY29uc3QgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaSkubWFwKChob3VyKSA9PlxuICBkYXlqcygpLmhvdXIoaG91cikubWludXRlKDApXG4pXG5cbmludGVyZmFjZSBXZWVrRGF5Q29sUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0RheUNvbDogUmVhY3QuRkM8V2Vla0RheUNvbFByb3BzPiA9ICh7IGRheSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1jb2wtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgIGNsYXNzTmFtZT1cImNvbC1zcGFuLTEgcmVsYXRpdmUgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXJcIlxuICAgID5cbiAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgY29uc3QgaG91ciA9IHRpbWUuaG91cigpXG4gICAgICAgIGNvbnN0IGNlbGxEYXRlID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInXG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pfVxuXG4gICAgICB7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuICAgICAgPERheUV2ZW50c0xheWVyXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktZXZlbnRzLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRheT17ZGF5fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrRGF5Q29sIH0gZnJvbSAnLi93ZWVrLWRheS1jb2wnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5leHBvcnQgY29uc3QgV2Vla1RpbWVHcmlkOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IHN0YXJ0IGFuZCBlbmQgb2YgY3VycmVudCB3ZWVrIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrIHNldHRpbmdcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCd3ZWVrJykuZGF5KGZpcnN0RGF5T2ZXZWVrKVxuICAvLyBJZiBjdXJyZW50IGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB3ZWVrLCBtb3ZlIGJhY2sgb25lIHdlZWtcbiAgY29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrKVxuICAgID8gc3RhcnRPZldlZWsuc3VidHJhY3QoMSwgJ3dlZWsnKVxuICAgIDogc3RhcnRPZldlZWtcblxuICAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZGF5cyBmb3IgdGhlIGN1cnJlbnQgd2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgd2Vla0RheXMucHVzaChhZGp1c3RlZFN0YXJ0T2ZXZWVrLmFkZChpLCAnZGF5JykpXG4gIH1cblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcblxuICAvLyBGaW5kIGlmIGN1cnJlbnQgZGF5IGlzIGluIHRoZSBkaXNwbGF5ZWQgd2Vla1xuICBjb25zdCB0b2RheUluZGV4ID0gd2Vla0RheXMuZmluZEluZGV4KChkYXkpID0+IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpKVxuICBjb25zdCBpc0N1cnJlbnRXZWVrID0gdG9kYXlJbmRleCAhPT0gLTFcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay10aW1lLWdyaWRcIlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIGdyaWQgZ3JpZC1jb2xzLVthdXRvX3JlcGVhdCg3LDFmcildIGdyaWQtcm93cy1bcmVwZWF0KDI0LG1pbm1heCg2MHB4LCAxZnIpKV1cIlxuICAgID5cbiAgICAgIHsvKiBUaW1lIGxhYmVscyBjb2x1bW4gLSBmaXhlZCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXRpbWUtbGFiZWxzXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiei0xMCBjb2wtc3Bhbi0xIHctMTQgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXhcIlxuICAgICAgPlxuICAgICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNjBweF0gYm9yZGVyLWIgdGV4dC1yaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgICAgICB9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPFdlZWtEYXlDb2wga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9IGRheT17ZGF5fSAvPlxuICAgICAgKSl9XG5cbiAgICAgIHsvKiBDdXJyZW50IHRpbWUgaW5kaWNhdG9yICovfVxuICAgICAge2lzQ3VycmVudFdlZWsgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLWN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgei00MFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHRvcDogYCR7KGRheWpzKCkuaG91cigpICsgZGF5anMoKS5taW51dGUoKSAvIDYwKSAqIDYwfXB4YCxcbiAgICAgICAgICAgIGxlZnQ6IGAke3RvZGF5SW5kZXggKiAoMTAwIC8gNyl9JWAsXG4gICAgICAgICAgICB3aWR0aDogYCR7MTAwIC8gN30lYCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLXQgYm9yZGVyLXJlZC01MDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiLW10LTEgbWwtMSBoLTIgdy0yIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAwXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9mZWF0dXJlcy9kcm9wcGFibGUtY2VsbC9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IERheUFsbERheVJvdyB9IGZyb20gJy4uL2RheS1hbGwtZGF5LXJvdydcbmltcG9ydCB7IERheUV2ZW50c0xheWVyIH0gZnJvbSAnLi4vZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERheUhlYWRlciB9IGZyb20gJy4uL2RheS1oZWFkZXInXG5pbXBvcnQgeyBEYXlUaW1lQ29sIH0gZnJvbSAnLi4vZGF5LXRpbWUtY29sJ1xuXG4vLyBGb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzLCB3ZSdsbCBkaXZpZGUgZWFjaCBob3VyIGludG8gMTUtbWludXRlIHNlZ21lbnRzXG5jb25zdCB0aW1lU2VnbWVudHMgPSBbMCwgMTUsIDMwLCA0NV1cblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgY2VsbERhdGUgPSBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImRheS12aWV3XCIgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIj5cbiAgICAgIHsvKiBEYXkgaGVhZGVyICovfVxuICAgICAgPERheUhlYWRlciBjbGFzc05hbWU9XCJoLVszcmVtXVwiIC8+XG5cbiAgICAgIHsvKiBUaW1lIGdyaWQgd2l0aG91dCBzY3JvbGxiYXIgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1zY3JvbGwtYXJlYVwiXG4gICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LXktYXV0byBoLVtjYWxjKDEwMCUtM3JlbSldXCJcbiAgICAgID5cbiAgICAgICAgey8qIEFsbC1kYXkgZXZlbnRzIHJvdyAqL31cbiAgICAgICAgPERheUFsbERheVJvdyAvPlxuXG4gICAgICAgIHsvKiBTZXQgYSBmaXhlZCBoZWlnaHQgY29udGFpbmVyIHRoYXQgbWF0Y2hlcyBleGFjdGx5IHRoZSB0b3RhbCBoZWlnaHQgb2YgYWxsIGhvdXIgYmxvY2tzICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktdGltZS1ncmlkXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy04IGRpdmlkZS14IGJvcmRlci14XCJcbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IGAke2hvdXJzLmxlbmd0aCAqIDYwfXB4YCB9fVxuICAgICAgICA+XG4gICAgICAgICAgey8qIFRpbWUgbGFiZWxzIGNvbHVtbiAqL31cbiAgICAgICAgICA8RGF5VGltZUNvbCBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xXCIgLz5cblxuICAgICAgICAgIHsvKiBEYXkgY29sdW1uIHdpdGggZXZlbnRzICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWV2ZW50cy1jb2x1bW5cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgY29sLXNwYW4tNiBoLWZ1bGwgbWQ6Y29sLXNwYW4tN1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIEJhY2tncm91bmQgZ3JpZCBmb3IgdGltZSBzbG90cyAtIGxvd2VzdCBsYXllciAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktYmFja2dyb3VuZC1ncmlkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aG91cnMubWFwKChob3VyLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YGJnLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LSR7aG91ci5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICdISCdcbiAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7LyogMTUtbWludXRlIG1hcmtlciBsaW5lcyAqL31cbiAgICAgICAgICAgICAgICAgIHt0aW1lU2VnbWVudHMuc2xpY2UoMSkubWFwKChtaW51dGVzKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BiZy0ke2hvdXIuZm9ybWF0KCdISCcpfS0ke21pbnV0ZXN9YH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyIGFic29sdXRlIHctZnVsbCBib3JkZXItdCBib3JkZXItZGFzaGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB0b3A6IGAke2luZGV4ICogNjAgKyBtaW51dGVzfXB4YCB9fVxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEludGVyYWN0aXZlIGxheWVyIGZvciB0aW1lIHNsb3RzIC0gbWlkZGxlIGxheWVyIHdpdGggbm8gYm9yZGVycyAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaW50ZXJhY3RpdmUtbGF5ZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlIGluc2V0LTAgei0xMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gdGltZS5ob3VyKClcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS0wMGB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyJyl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX0tMTVgfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e2N1cnJlbnREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIGhvdXI9e2hvdXJ9XG4gICAgICAgICAgICAgICAgICAgICAgbWludXRlPXsxNX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1bMTVweF0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdGltZS1jZWxsLSR7Y2VsbERhdGV9LSR7dGltZS5mb3JtYXQoJ0hIJyl9LTMwYH1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZT17MzB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS00NWB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezQ1fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCBoLVsxNXB4XSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEV2ZW50cyBsYXllciAtIG1pZGRsZS10b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICA8RGF5RXZlbnRzTGF5ZXIgZGF5PXtjdXJyZW50RGF0ZX0gLz5cblxuICAgICAgICAgICAgey8qIEN1cnJlbnQgdGltZSBpbmRpY2F0b3IgLSB0b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICB7aXNUb2RheSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1jdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIGxlZnQtMCB6LTQwIGJvcmRlci10IGJvcmRlci1yZWQtNTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdG9wOiBgJHsoZGF5anMoKS5ob3VyKCkgKyBkYXlqcygpLm1pbnV0ZSgpIC8gNjApICogNjB9cHhgLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC0xIC1tbC0xIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXlWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICcuLi8uLi9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4uLy4uL2Ryb3BwYWJsZS1jZWxsL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBQcm9jZXNzZWRDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGNvbnN0IERheUFsbERheVJvdyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBjdXJyZW50IGRheSdzIGV2ZW50cyAtIHRoaXMgd2lsbCByZWZyZXNoIGF1dG9tYXRpY2FsbHkgd2hlbiBzdG9yZSB1cGRhdGVzXG4gIC8vIGJlY2F1c2UgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIGlzIGEgc2VsZWN0b3IgZnVuY3Rpb24gZnJvbSB0aGUgc3RvcmUgdGhhdCBydW5zIHdoZW5ldmVyIGV2ZW50cyBjaGFuZ2VcbiAgY29uc3QgZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgIGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuICAgIGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKVxuICApXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50c1xuICBjb25zdCB7IGFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gT25seSBldmVudHMgZXhwbGljaXRseSBtYXJrZWQgYXMgYWxsRGF5IHNob3VsZCBiZSBpbiB0aGUgYWxsLWRheSBzZWN0aW9uXG4gICAgY29uc3QgYWxsRGF5RXZ0cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hbGxEYXkpXG5cbiAgICAvLyBSZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gICAgY29uc3QgcmVndWxhckV2dHMgPSBkYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmFsbERheSlcblxuICAgIHJldHVybiB7IGFsbERheUV2ZW50czogYWxsRGF5RXZ0cywgcmVndWxhckV2ZW50czogcmVndWxhckV2dHMgfVxuICB9LCBbZGF5RXZlbnRzXSkgLy8gT25seSBkZXBlbmQgb24gdGhlIGRheUV2ZW50cyB3aGljaCBpcyByZWZyZXNoZWQgYXV0b21hdGljYWxseVxuXG4gIC8vIFByb2Nlc3MgYWxsLWRheSBldmVudHMgZm9yIGRpc3BsYXlcbiAgY29uc3QgeyBwcm9jZXNzZWRBbGxEYXlFdmVudHMgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIFNvcnQgYWxsLWRheSBldmVudHMgKGlmIG5lZWRlZClcbiAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSBbLi4uYWxsRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgfSlcblxuICAgIC8vIFRyYWNrIHBvc2l0aW9ucyBpbiByb3dzIGZvciBzdGFja2luZ1xuICAgIGNvbnN0IHJvd3M6IHsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfVtdW10gPSBbXVxuICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUHJvY2Vzc2VkQ2FsZW5kYXJFdmVudFtdID0gW11cblxuICAgIHNvcnRlZEV2ZW50cy5mb3JFYWNoKChldmVudCwgcm93SW5kZXgpID0+IHtcbiAgICAgIGxldCBwbGFjZWQgPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIXBsYWNlZCkge1xuICAgICAgICBpZiAocm93SW5kZXggPj0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcm93IGlmIG5lZWRlZFxuICAgICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSW4gZGF5IHZpZXcsIHdlIGNhbiBwbGFjZSBvbmUgZXZlbnQgcGVyIHJvdyBhcyB0aGV5IGRvbid0IG92ZXJsYXAgaG9yaXpvbnRhbGx5XG4gICAgICAgICAgLy8gVGhpcyBpcyBzaW1wbGVyIHRoYW4gd2VlayB2aWV3IHdoZXJlIHdlIG5lZWRlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHNcbiAgICAgICAgICBwbGFjZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGV2ZW50IHRvIHRoZSByb3dcbiAgICAgIHJvd3Nbcm93SW5kZXhdLnB1c2goeyBldmVudCB9KVxuXG4gICAgICAvLyBBZGQgcHJvY2Vzc2VkIGV2ZW50IHdpdGggY29ycmVjdCBwb3NpdGlvbmluZ1xuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgdG9wOiByb3dJbmRleCAqIEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWFsbC1kYXktcm93XCJcbiAgICAgIGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTggYm9yZGVyLWIgYm9yZGVyLXhcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNwYW4tMiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXItciBwci0yIG1kOmNvbC1zcGFuLTFcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHNcIj5cbiAgICAgICAgICBBbGwtZGF5XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQWxsLWRheSBldmVudHMgY29udGFpbmVyIHdpdGggZHluYW1pYyBoZWlnaHQgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTYgbWQ6Y29sLXNwYW4tNyBcIj5cbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBpZD17YGFsbC1kYXktJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IHctZnVsbCBjdXJzb3ItcG9pbnRlciBtaW4taC0xMCBmbGV4IGZsZXgtY29sXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtwcm9jZXNzZWRBbGxEYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQgKyAncHgnIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RHJhZ2dhYmxlRXZlbnRcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRJZD17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib3ZlcmZsb3ctY2xpcCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBgY2FsYygxMDAlIC0gdmFyKC0tc3BhY2luZykgKiAyKWAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRGF5SGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUhlYWRlcjogUmVhY3QuRkM8RGF5SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCBpc1RvZGF5ID0gY3VycmVudERhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItYiBwLTIgYm9yZGVyLXgnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuICAgICAgICAgICAgaXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG4gICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG4gICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICBUb2RheVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmludGVyZmFjZSBEYXlUaW1lQ29sUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheVRpbWVDb2w6IFJlYWN0LkZDPERheVRpbWVDb2xQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD1cImRheS10aW1lLWNvbFwiXG4gICAgICBjbGFzc05hbWU9e2Bjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xICR7Y2xhc3NOYW1lfWB9XG4gICAgPlxuICAgICAge2hvdXJzLm1hcCgodGltZSkgPT4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YGRheS10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIHRleHQtcmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICB7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG4gICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgIH0pLmZvcm1hdCh0aW1lLnRvRGF0ZSgpKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2hlY2tib3gsXG4gIERhdGVQaWNrZXIsXG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBUb29sdGlwLFxuICBUb29sdGlwQ29udGVudCxcbiAgVG9vbHRpcFByb3ZpZGVyLFxuICBUb29sdGlwVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9saWIvcmVjdXJyZW5jZS1oYW5kbGVyL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcblxuY29uc3QgY29sb3JPcHRpb25zID0gW1xuICB7IHZhbHVlOiAnYmctYmx1ZS0xMDAgdGV4dC1ibHVlLTgwMCcsIGxhYmVsOiAnQmx1ZScgfSxcbiAgeyB2YWx1ZTogJ2JnLWdyZWVuLTEwMCB0ZXh0LWdyZWVuLTgwMCcsIGxhYmVsOiAnR3JlZW4nIH0sXG4gIHsgdmFsdWU6ICdiZy1wdXJwbGUtMTAwIHRleHQtcHVycGxlLTgwMCcsIGxhYmVsOiAnUHVycGxlJyB9LFxuICB7IHZhbHVlOiAnYmctcmVkLTEwMCB0ZXh0LXJlZC04MDAnLCBsYWJlbDogJ1JlZCcgfSxcbiAgeyB2YWx1ZTogJ2JnLXllbGxvdy0xMDAgdGV4dC15ZWxsb3ctODAwJywgbGFiZWw6ICdZZWxsb3cnIH0sXG4gIHsgdmFsdWU6ICdiZy1waW5rLTEwMCB0ZXh0LXBpbmstODAwJywgbGFiZWw6ICdQaW5rJyB9LFxuICB7IHZhbHVlOiAnYmctaW5kaWdvLTEwMCB0ZXh0LWluZGlnby04MDAnLCBsYWJlbDogJ0luZGlnbycgfSxcbiAgeyB2YWx1ZTogJ2JnLWFtYmVyLTEwMCB0ZXh0LWFtYmVyLTgwMCcsIGxhYmVsOiAnQW1iZXInIH0sXG4gIHsgdmFsdWU6ICdiZy1lbWVyYWxkLTEwMCB0ZXh0LWVtZXJhbGQtODAwJywgbGFiZWw6ICdFbWVyYWxkJyB9LFxuICB7IHZhbHVlOiAnYmctc2t5LTEwMCB0ZXh0LXNreS04MDAnLCBsYWJlbDogJ1NreScgfSxcbiAgeyB2YWx1ZTogJ2JnLXZpb2xldC0xMDAgdGV4dC12aW9sZXQtODAwJywgbGFiZWw6ICdWaW9sZXQnIH0sXG4gIHsgdmFsdWU6ICdiZy1yb3NlLTEwMCB0ZXh0LXJvc2UtODAwJywgbGFiZWw6ICdSb3NlJyB9LFxuICB7IHZhbHVlOiAnYmctdGVhbC0xMDAgdGV4dC10ZWFsLTgwMCcsIGxhYmVsOiAnVGVhbCcgfSxcbiAgeyB2YWx1ZTogJ2JnLW9yYW5nZS0xMDAgdGV4dC1vcmFuZ2UtODAwJywgbGFiZWw6ICdPcmFuZ2UnIH0sXG5dXG5cbmludGVyZmFjZSBFdmVudEZvcm1Qcm9wcyB7XG4gIHNlbGVjdGVkRXZlbnQ/OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU/OiBkYXlqcy5EYXlqcyB8IG51bGxcbiAgb25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuICBzZWxlY3RlZEV2ZW50LFxuICBzZWxlY3RlZERhdGUsXG4gIG9uQ2xvc2UsXG4gIG9uVXBkYXRlLFxuICBvbkRlbGV0ZSxcbiAgb25BZGQsXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaWFsb2dTdGF0ZSxcbiAgICBvcGVuRWRpdERpYWxvZyxcbiAgICBvcGVuRGVsZXRlRGlhbG9nLFxuICAgIGNsb3NlRGlhbG9nLFxuICAgIGhhbmRsZUNvbmZpcm0sXG4gIH0gPSB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25DbG9zZSlcblxuICBjb25zdCB7IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCwgdCB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCBzdGFydCA9IHNlbGVjdGVkRXZlbnQ/LnN0YXJ0XG4gIGNvbnN0IGVuZCA9IHNlbGVjdGVkRXZlbnQ/LmVuZFxuXG4gIC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2VcbiAgY29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG4gICAgPyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcbiAgICA6IG51bGxcblxuICAvLyBGb3JtIGRlZmF1bHQgdmFsdWVzXG4gIGNvbnN0IGRlZmF1bHRTdGFydERhdGUgPSBzZWxlY3RlZERhdGU/LnRvRGF0ZSgpIHx8IG5ldyBEYXRlKClcbiAgY29uc3QgZGVmYXVsdEVuZERhdGUgPVxuICAgIHNlbGVjdGVkRGF0ZT8uYWRkKDEsICdob3VyJykudG9EYXRlKCkgfHwgZGF5anMoKS5hZGQoMSwgJ2hvdXInKS50b0RhdGUoKVxuXG4gIC8vIEZvcm0gc3RhdGVcbiAgY29uc3QgW3N0YXJ0RGF0ZSwgc2V0U3RhcnREYXRlXSA9IHVzZVN0YXRlKFxuICAgIHN0YXJ0Py50b0RhdGUoKSB8fCBkZWZhdWx0U3RhcnREYXRlXG4gIClcbiAgY29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kPy50b0RhdGUoKSB8fCBkZWZhdWx0RW5kRGF0ZSlcbiAgY29uc3QgW2lzQWxsRGF5LCBzZXRJc0FsbERheV0gPSB1c2VTdGF0ZShzZWxlY3RlZEV2ZW50Py5hbGxEYXkgfHwgZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZENvbG9yLCBzZXRTZWxlY3RlZENvbG9yXSA9IHVzZVN0YXRlKFxuICAgIHNlbGVjdGVkRXZlbnQ/LmNvbG9yIHx8IGNvbG9yT3B0aW9uc1swXS52YWx1ZVxuICApXG5cbiAgLy8gVGltZSBzdGF0ZVxuICBjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoXG4gICAgc3RhcnQgPyBzdGFydC5mb3JtYXQoJ0hIOm1tJykgOiBkYXlqcyhkZWZhdWx0U3RhcnREYXRlKS5mb3JtYXQoJ0hIOm1tJylcbiAgKVxuICBjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShcbiAgICBlbmQgPyBlbmQuZm9ybWF0KCdISDptbScpIDogZGF5anMoZGVmYXVsdEVuZERhdGUpLmZvcm1hdCgnSEg6bW0nKVxuICApXG5cbiAgLy8gSW5pdGlhbGl6ZSBmb3JtIHZhbHVlcyBmcm9tIHNlbGVjdGVkIGV2ZW50IG9yIGRlZmF1bHRzXG4gIGNvbnN0IFtmb3JtVmFsdWVzLCBzZXRGb3JtVmFsdWVzXSA9IHVzZVN0YXRlKHtcbiAgICB0aXRsZTogc2VsZWN0ZWRFdmVudD8udGl0bGUgfHwgJycsXG4gICAgZGVzY3JpcHRpb246IHNlbGVjdGVkRXZlbnQ/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgIGxvY2F0aW9uOiBzZWxlY3RlZEV2ZW50Py5sb2NhdGlvbiB8fCAnJyxcbiAgfSlcblxuICAvLyBSZWN1cnJlbmNlIHN0YXRlIC0gcHVsbCBSUlVMRSBmcm9tIHBhcmVudCBpZiB0aGlzIGlzIGFuIGluc3RhbmNlXG4gIGNvbnN0IFtycnVsZSwgc2V0UnJ1bGVdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50UnJ1bGUgPSBzZWxlY3RlZEV2ZW50Py5ycnVsZSB8fCBwYXJlbnRFdmVudD8ucnJ1bGVcbiAgICByZXR1cm4gZXZlbnRScnVsZSB8fCBudWxsXG4gIH0pXG5cbiAgLy8gQ3JlYXRlIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGZpeCBUeXBlU2NyaXB0IGVycm9ycyB3aXRoIERhdGVQaWNrZXJcbiAgY29uc3QgaGFuZGxlU3RhcnREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgc2V0U3RhcnREYXRlKGRhdGUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRW5kRGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHNldEVuZERhdGUoZGF0ZSlcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgZm9ybSB2YWx1ZXMgd2hlbiBpbnB1dCBjaGFuZ2VzXG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKFxuICAgIGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICApID0+IHtcbiAgICBjb25zdCB7IG5hbWUsIHZhbHVlIH0gPSBlLnRhcmdldFxuICAgIHNldEZvcm1WYWx1ZXMoKHByZXYpID0+ICh7IC4uLnByZXYsIFtuYW1lXTogdmFsdWUgfSkpXG4gIH1cblxuICAvLyBIYW5kbGUgdGltZSBjaGFuZ2VzXG4gIGNvbnN0IGhhbmRsZVRpbWVDaGFuZ2UgPSAoXG4gICAgZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4sXG4gICAgaXNTdGFydDogYm9vbGVhblxuICApID0+IHtcbiAgICBjb25zdCB0aW1lVmFsdWUgPSBlLnRhcmdldC52YWx1ZVxuICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICBzZXRTdGFydFRpbWUodGltZVZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFbmRUaW1lKHRpbWVWYWx1ZSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFJlc2V0IGVuZCB0aW1lIHdoZW4gYWxsIGRheSBpcyB0b2dnbGVkIHRvIG9uXG4gICAgaWYgKGlzQWxsRGF5KSB7XG4gICAgICBzZXRFbmRUaW1lKCcyMzo1OScpXG4gICAgfVxuICB9LCBbaXNBbGxEYXldKVxuXG4gIC8vIEhhbmRsZSBmb3JtIHN1Ym1pc3Npb25cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgLy8gQ3JlYXRlIGZ1bGwgZGF0ZXRpbWUgb2JqZWN0cyBieSBjb21iaW5pbmcgZGF0ZSBhbmQgdGltZVxuICAgIGNvbnN0IFtzdGFydEhvdXJzLCBzdGFydE1pbnV0ZXNdID0gc3RhcnRUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcbiAgICBjb25zdCBbZW5kSG91cnMsIGVuZE1pbnV0ZXNdID0gZW5kVGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cbiAgICBsZXQgc3RhcnREYXRlVGltZSA9IGRheWpzKHN0YXJ0RGF0ZSkuaG91cihzdGFydEhvdXJzKS5taW51dGUoc3RhcnRNaW51dGVzKVxuXG4gICAgbGV0IGVuZERhdGVUaW1lID0gZGF5anMoZW5kRGF0ZSkuaG91cihlbmRIb3VycykubWludXRlKGVuZE1pbnV0ZXMpXG5cbiAgICAvLyBGb3IgYWxsLWRheSBldmVudHMsIHNldCBhcHByb3ByaWF0ZSB0aW1lc1xuICAgIGlmIChpc0FsbERheSkge1xuICAgICAgc3RhcnREYXRlVGltZSA9IHN0YXJ0RGF0ZVRpbWUuaG91cigwKS5taW51dGUoMClcbiAgICAgIGVuZERhdGVUaW1lID0gZW5kRGF0ZVRpbWUuaG91cigyMykubWludXRlKDU5KVxuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgIGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcbiAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG4gICAgICBlbmQ6IGVuZERhdGVUaW1lLFxuICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICBsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcbiAgICAgIGFsbERheTogaXNBbGxEYXksXG4gICAgICBjb2xvcjogc2VsZWN0ZWRDb2xvcixcbiAgICAgIHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG4gICAgfVxuXG4gICAgaWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG4gICAgICBpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuICAgICAgICAvLyBTaG93IHJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZ1xuICAgICAgICBvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG4gICAgICAgICAgdGl0bGU6IGZvcm1WYWx1ZXMudGl0bGUsXG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG4gICAgICAgICAgZW5kOiBlbmREYXRlVGltZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZm9ybVZhbHVlcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogZm9ybVZhbHVlcy5sb2NhdGlvbixcbiAgICAgICAgICBhbGxEYXk6IGlzQWxsRGF5LFxuICAgICAgICAgIGNvbG9yOiBzZWxlY3RlZENvbG9yLFxuICAgICAgICAgIHJydWxlOiBycnVsZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuICAgICAgfVxuICAgICAgb25VcGRhdGU/LihldmVudERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQWRkPy4oZXZlbnREYXRhKVxuICAgIH1cblxuICAgIG9uQ2xvc2UoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlID0gKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuICAgICAgaWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcbiAgICAgICAgLy8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZGVsZXRlIGRpYWxvZ1xuICAgICAgICBvcGVuRGVsZXRlRGlhbG9nKHNlbGVjdGVkRXZlbnQpXG4gICAgICAgIHJldHVybiAvLyBEb24ndCBjbG9zZSB0aGUgZm9ybSB5ZXQsIGxldCB0aGUgZGlhbG9nIGhhbmRsZSBpdFxuICAgICAgfVxuICAgICAgb25EZWxldGU/LihzZWxlY3RlZEV2ZW50KVxuICAgICAgb25DbG9zZSgpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUlJ1bGVDaGFuZ2UgPSAobmV3UlJ1bGU6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHtcbiAgICBpZiAobmV3UlJ1bGUpIHtcbiAgICAgIC8vIENyZWF0ZSBkdHN0YXJ0IHdpdGggdGhlIHNhbWUgbG9naWMgYXMgaW4gaGFuZGxlU3VibWl0XG4gICAgICBjb25zdCBbc3RhcnRIb3Vycywgc3RhcnRNaW51dGVzXSA9IHN0YXJ0VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG4gICAgICBsZXQgc3RhcnREYXRlVGltZSA9IGRheWpzKHN0YXJ0RGF0ZSkuaG91cihzdGFydEhvdXJzKS5taW51dGUoc3RhcnRNaW51dGVzKVxuXG4gICAgICBpZiAoaXNBbGxEYXkpIHtcbiAgICAgICAgc3RhcnREYXRlVGltZSA9IHN0YXJ0RGF0ZVRpbWUuaG91cigwKS5taW51dGUoMClcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIGR0c3RhcnQgaXMgYWx3YXlzIGluY2x1ZGVkIGluIFJSdWxlT3B0aW9ucyBhcyBhIERhdGUgb2JqZWN0XG4gICAgICBjb25zdCBjb21wbGV0ZVJydWxlOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm5ld1JSdWxlLFxuICAgICAgICBkdHN0YXJ0OiBzdGFydERhdGVUaW1lLnRvRGF0ZSgpLCAvLyBDb252ZXJ0IGRheWpzIHRvIERhdGVcbiAgICAgIH1cbiAgICAgIHNldFJydWxlKGNvbXBsZXRlUnJ1bGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFJydWxlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgZW5kIGRhdGUgaXMgbm90IGJlZm9yZSBzdGFydCBkYXRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRheWpzKHN0YXJ0RGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcbiAgICAgIHNldEVuZERhdGUoc3RhcnREYXRlKVxuICAgIH1cbiAgfSwgW3N0YXJ0RGF0ZSwgZW5kRGF0ZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERpYWxvZyBvcGVuPXt0cnVlfSBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9PlxuICAgICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJ3LVs5MHZ3XSBtYXgtdy1bNTAwcHhdIHAtNCBzbTpwLTZcIj5cbiAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAgICAgICAgICAgIDxEaWFsb2dIZWFkZXIgY2xhc3NOYW1lPVwibWItMiBzbTptYi00XCI+XG4gICAgICAgICAgICAgIDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudCcpIDogdCgnY3JlYXRlRXZlbnQnKX1cbiAgICAgICAgICAgICAgPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgICAgICAgPERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudERldGFpbHMnKSA6IHQoJ2FkZE5ld0V2ZW50Jyl9XG4gICAgICAgICAgICAgIDwvRGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHB5LTIgc206Z2FwLTQgc206cHktNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cInRpdGxlXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgndGl0bGUnKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMudGl0bGV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgnZGVzY3JpcHRpb24nKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICBpZD1cImFsbERheVwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0FsbERheX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldElzQWxsRGF5KGNoZWNrZWQgPT09IHRydWUpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJhbGxEYXlcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdhbGxEYXknKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdzdGFydERhdGUnKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZT17c3RhcnREYXRlfVxuICAgICAgICAgICAgICAgICAgICBzZXREYXRlPXtoYW5kbGVTdGFydERhdGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTFcIlxuICAgICAgICAgICAgICAgICAgICBjbG9zZU9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2VuZERhdGUnKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZT17ZW5kRGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMVwiXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlT25TZWxlY3RcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHshaXNBbGxEYXkgJiYgKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJzdGFydC10aW1lXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ3N0YXJ0VGltZScpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInN0YXJ0LXRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c3RhcnRUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGltZUNoYW5nZShlLCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZW5kLXRpbWVcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnZW5kVGltZScpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImVuZC10aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2VuZFRpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVUaW1lQ2hhbmdlKGUsIGZhbHNlKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2NvbG9yJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8VG9vbHRpcFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgICAgICB7Y29sb3JPcHRpb25zLm1hcCgoY29sb3IpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBrZXk9e2NvbG9yLnZhbHVlfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NvbG9yLnZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENvbG9yID09PSBjb2xvci52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRDb2xvcihjb2xvci52YWx1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXBUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXBDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57Y29sb3IubGFiZWx9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibG9jYXRpb25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdsb2NhdGlvbicpfVxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJsb2NhdGlvblwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdldmVudExvY2F0aW9uUGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cbiAgICAgICAgICAgICAgPFJlY3VycmVuY2VFZGl0b3IgdmFsdWU9e3JydWxlfSBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC0yIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTptdC00IHNtOmZsZXgtcm93IHNtOmdhcC0wXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCAmJiAoXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHNtOm1yLWF1dG8gc206dy1hdXRvXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3QoJ2RlbGV0ZScpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGdhcC0yIHNtOnctYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dCgnY2FuY2VsJyl9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiPlxuICAgICAgICAgICAgICAgICAge3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0RpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvRGlhbG9nQ29udGVudD5cbiAgICAgIDwvRGlhbG9nPlxuXG4gICAgICB7LyogUmVjdXJyaW5nIEV2ZW50IEVkaXQgRGlhbG9nICovfVxuICAgICAgPFJlY3VycmVuY2VFZGl0RGlhbG9nXG4gICAgICAgIGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuICAgICAgICBvbkNsb3NlPXtjbG9zZURpYWxvZ31cbiAgICAgICAgb25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuICAgICAgICBvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuICAgICAgICBldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG4gICAgICAvPlxuICAgIDwvPlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcbiAgZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcbiAgZXZlbnQsXG4gIGN1cnJlbnRFdmVudHMsXG4gIHN0YXJ0RGF0ZSxcbiAgZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuICBpZiAoIWV2ZW50LnJydWxlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBydWxlIGZyb20gUlJ1bGVPcHRpb25zIGVuc3VyaW5nIGR0c3RhcnQgaXMgYWx3YXlzIHByb3ZpZGVkXG4gICAgLy8gSWYgZHRzdGFydCBpcyBtaXNzaW5nIGZyb20gdGhlIFJSVUxFLCB1c2UgdGhlIGV2ZW50J3Mgc3RhcnQgdGltZSBhcyBmYWxsYmFja1xuICAgIGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAuLi5ldmVudC5ycnVsZSxcbiAgICAgIGR0c3RhcnQ6IGV2ZW50LnJydWxlLmR0c3RhcnQgfHwgZXZlbnQuc3RhcnQudG9EYXRlKCksXG4gICAgfVxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcbiAgICAgIChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG4gICAgKVxuXG4gICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuICAgIGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuICAgIC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuICAgIC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG4gICAgY29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gc3RhcnREYXRlXG4gICAgICAuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcbiAgICAgIC50b0RhdGUoKVxuICAgIGNvbnN0IGVuZERhdGVUaW1lID0gZW5kRGF0ZS50b0RhdGUoKVxuXG4gICAgLy8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2VcbiAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG4gICAgLy8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcbiAgICAgIC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZGF5anMob2NjdXJyZW5jZSlcbiAgICAgICAgY29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuICAgICAgICAgIHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKS5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG4gICAgICAgIClcblxuICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcbiAgICAgICAgaWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcbiAgICAgICAgY29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuICAgICAgICBjb25zdCBwYXJlbnRVSUQgPSBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG4gICAgICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgIGlkOiByZWN1cnJpbmdFdmVudElkLFxuICAgICAgICAgIHN0YXJ0OiBvY2N1cnJlbmNlRGF0ZSxcbiAgICAgICAgICBlbmQ6IG5ld0VuZFRpbWUsXG4gICAgICAgICAgdWlkOiBwYXJlbnRVSUQsIC8vIFNhbWUgVUlEIGFzIHBhcmVudCBmb3IgcHJvcGVyIGdyb3VwaW5nXG4gICAgICAgICAgcnJ1bGU6IHVuZGVmaW5lZCwgLy8gSW5zdGFuY2UgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWN1cnJpbmdFdmVudFxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHJlY3VycmluZ0V2ZW50KSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgRVhEQVRFIGV4Y2x1c2lvbnNcbiAgICAgICAgY29uc3QgaGFzRXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwXG4gICAgICAgIGlmIChoYXNFeGRhdGVzKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcbiAgICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXZlbnQuZXhkYXRlcy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuICAgICAgICAgIGlmIChpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2VcbiAgICAgICAgLy8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcbiAgICAgICAgLy8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuICAgICAgICBjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuICAgICAgICAgIHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG4gICAgICAgICAgcmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG4gICAgICAgIHJldHVybiBldmVudFNwYW5zUmFuZ2VcbiAgICAgIH0pXG5cbiAgICByZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgIClcbiAgfVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG4gIHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICB1cGRhdGVzLFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG4gICAgICBjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcbiAgICAgIGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuICAgICAgICAuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIGlkOiBtb2RpZmllZEV2ZW50SWQsXG4gICAgICAgIHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG4gICAgICAgIHVpZDogYmFzZUV2ZW50LnVpZCB8fCBgJHtiYXNlRXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYCwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG4gICAgICAgIHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudFxuICAgICAgdXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2ZvbGxvd2luZyc6IHtcbiAgICAgIC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIC8vIFVwZGF0ZSBvcmlnaW5hbCBzZXJpZXMgd2l0aCBVTlRJTCB0byBlbmQgYmVmb3JlIHRhcmdldCBkYXRlXG4gICAgICBjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgcnJ1bGU6IHtcbiAgICAgICAgICAuLi5iYXNlRXZlbnQucnJ1bGUsXG4gICAgICAgICAgdW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcbiAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuICAgICAgY29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuICAgICAgY29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG4gICAgICAgIHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcbiAgICAgIGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG4gICAgICBjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAgIGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIHJydWxlOiB7XG4gICAgICAgICAgLi4uYmFzZUV2ZW50LnJydWxlLFxuICAgICAgICAgIC4uLnVwZGF0ZXMucnJ1bGUsXG4gICAgICAgICAgZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICBpZDogbmV3U2VyaWVzSWQsXG4gICAgICAgIHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG4gICAgICAgIHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG4gICAgICAgIGVuZDogbmV3U2VyaWVzRW5kVGltZSxcbiAgICAgICAgcmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG4gICAgICB9XG4gICAgICB1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2FsbCc6IHtcbiAgICAgIC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG5cbmludGVyZmFjZSBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzIHtcbiAgdGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gZXhjbHVkZSB0aGlzIG9jY3VycmVuY2VcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0geyAuLi5iYXNlRXZlbnQsIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdmb2xsb3dpbmcnOiB7XG4gICAgICAvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIHNlcmllcyB3aXRoIFVOVElMIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICBycnVsZToge1xuICAgICAgICAgIC4uLmJhc2VFdmVudC5ycnVsZSxcbiAgICAgICAgICB1bnRpbDogdGVybWluYXRpb25EYXRlLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnYWxsJzoge1xuICAgICAgLy8gXCJBbGwgZXZlbnRzXCIgLSBSZW1vdmUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzXG4gICAgICBjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAgIChlKSA9PiBlLnVpZCAhPT0gdGFyZ2V0RXZlbnQudWlkXG4gICAgICApXG4gICAgICByZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7XG4gIENhcmQsXG4gIENhcmRDb250ZW50LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG4gIENoZWNrYm94LFxuICBEYXRlUGlja2VyLFxuICBJbnB1dCxcbiAgTGFiZWwsXG4gIFNlbGVjdCxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0SXRlbSxcbiAgU2VsZWN0VHJpZ2dlcixcbiAgU2VsZWN0VmFsdWUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlci90eXBlcydcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG4vLyBOYXR1cmFsIGxhbmd1YWdlIGRlc2NyaXB0aW9uIGZ1bmN0aW9uIHVzaW5nIFJSdWxlJ3MgYnVpbHQtaW4gaGVscGVyIG1ldGhvZHNcbmZ1bmN0aW9uIGdldFJSdWxlRGVzY3JpcHRpb24oXG4gIHJydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zIHwgbnVsbCxcbiAgdDogKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcbik6IHN0cmluZyB7XG4gIGlmICghcnJ1bGVPcHRpb25zKSB7XG4gICAgcmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgUlJ1bGUgaW5zdGFuY2UgZGlyZWN0bHkgZnJvbSBvcHRpb25zXG4gICAgY29uc3QgcnVsZSA9IG5ldyBSUnVsZShycnVsZU9wdGlvbnMpXG5cbiAgICAvLyBVc2UgUlJ1bGUncyBidWlsdC1pbiBuYXR1cmFsIGxhbmd1YWdlIGNvbnZlcnNpb24gd2l0aCB0b1RleHQoKVxuICAgIGNvbnN0IG5hdHVyYWxUZXh0ID0gcnVsZS50b1RleHQoKVxuXG4gICAgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIFJSdWxlIGNhbid0IGNvbnZlcnQgdG8gbmF0dXJhbCBsYW5ndWFnZVxuICAgIGlmIChcbiAgICAgICFuYXR1cmFsVGV4dCB8fFxuICAgICAgbmF0dXJhbFRleHQuaW5jbHVkZXMoJ1JSdWxlIGVycm9yJykgfHxcbiAgICAgIG5hdHVyYWxUZXh0LmluY2x1ZGVzKCdVbmFibGUgdG8gZnVsbHkgY29udmVydCcpIHx8XG4gICAgICBuYXR1cmFsVGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdlcnJvcicpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG4gICAgfVxuXG4gICAgLy8gQ2FwaXRhbGl6ZSBmaXJzdCBsZXR0ZXIgZm9yIGNvbnNpc3RlbnQgZm9ybWF0dGluZ1xuICAgIHJldHVybiBuYXR1cmFsVGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hdHVyYWxUZXh0LnNsaWNlKDEpXG4gIH0gY2F0Y2gge1xuICAgIC8vIElmIHBhcnNpbmcgZmFpbHMsIHJldHVybiBmYWxsYmFja1xuICAgIHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcbiAgfVxufVxuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXRvclByb3BzIHtcbiAgdmFsdWU/OiBSUnVsZU9wdGlvbnMgfCBudWxsXG4gIG9uQ2hhbmdlOiAocnJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxSZWN1cnJlbmNlRWRpdG9yUHJvcHM+ID0gKHtcbiAgdmFsdWUsXG4gIG9uQ2hhbmdlLFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IFtzaG93UmVjdXJyZW5jZSwgc2V0U2hvd1JlY3VycmVuY2VdID0gdXNlU3RhdGUoISF2YWx1ZSlcblxuICAvLyBDcmVhdGUgV0VFS19EQVlTIGFycmF5IHdpdGggdHJhbnNsYXRpb25zXG4gIGNvbnN0IFdFRUtfREFZUyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgeyB2YWx1ZTogUlJ1bGUuU1UsIGxhYmVsOiB0KCdzdW5kYXknKSwgc2hvcnQ6IHQoJ3N1bicpIH0sXG4gICAgICB7IHZhbHVlOiBSUnVsZS5NTywgbGFiZWw6IHQoJ21vbmRheScpLCBzaG9ydDogdCgnbW9uJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLlRVLCBsYWJlbDogdCgndHVlc2RheScpLCBzaG9ydDogdCgndHVlJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLldFLCBsYWJlbDogdCgnd2VkbmVzZGF5JyksIHNob3J0OiB0KCd3ZWQnKSB9LFxuICAgICAgeyB2YWx1ZTogUlJ1bGUuVEgsIGxhYmVsOiB0KCd0aHVyc2RheScpLCBzaG9ydDogdCgndGh1JykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLkZSLCBsYWJlbDogdCgnZnJpZGF5JyksIHNob3J0OiB0KCdmcmknKSB9LFxuICAgICAgeyB2YWx1ZTogUlJ1bGUuU0EsIGxhYmVsOiB0KCdzYXR1cmRheScpLCBzaG9ydDogdCgnc2F0JykgfSxcbiAgICBdLFxuICAgIFt0XVxuICApXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgUlJ1bGUgZnJlcXVlbmN5IHRvIHN0cmluZ1xuICBjb25zdCBnZXRGcmVxdWVuY3lTdHJpbmcgPSAoZnJlcTogUlJ1bGVPcHRpb25zWydmcmVxJ10pOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGZyZXFNYXA6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gICAgICBbUlJ1bGUuREFJTFldOiAnREFJTFknLFxuICAgICAgW1JSdWxlLldFRUtMWV06ICdXRUVLTFknLFxuICAgICAgW1JSdWxlLk1PTlRITFldOiAnTU9OVEhMWScsXG4gICAgICBbUlJ1bGUuWUVBUkxZXTogJ1lFQVJMWScsXG4gICAgfVxuICAgIHJldHVybiBmcmVxTWFwW2ZyZXFdIHx8ICdEQUlMWSdcbiAgfVxuXG4gIC8vIFdvcmsgd2l0aCBjb21wbGV0ZSBSUnVsZU9wdGlvbnMgLSBkdHN0YXJ0IGNvbWVzIGZyb20gcGFyZW50IEV2ZW50Rm9ybVxuICBjb25zdCBbcnJ1bGVPcHRpb25zLCBzZXRSUnVsZU9wdGlvbnNdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oXG4gICAgKCkgPT4gdmFsdWUgfHwgbnVsbFxuICApXG5cbiAgLy8gU3luYyBzdGF0ZSB3aGVuIHZhbHVlIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNob3dSZWN1cnJlbmNlKCEhdmFsdWUpXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBzZXRSUnVsZU9wdGlvbnModmFsdWUpXG4gICAgfVxuICB9LCBbdmFsdWVdKVxuXG4gIGNvbnN0IHVwZGF0ZVJSdWxlID0gKHVwZGF0ZXM6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPikgPT4ge1xuICAgIGlmICghcnJ1bGVPcHRpb25zKSB7XG4gICAgICByZXR1cm4gLy8gQ2FuJ3QgdXBkYXRlIGlmIG5vIGJhc2Ugb3B0aW9ucyBleGlzdFxuICAgIH1cblxuICAgIGNvbnN0IG5ld09wdGlvbnM6IFJSdWxlT3B0aW9ucyA9IHsgLi4ucnJ1bGVPcHRpb25zLCAuLi51cGRhdGVzIH1cbiAgICBzZXRSUnVsZU9wdGlvbnMobmV3T3B0aW9ucylcblxuICAgIGlmIChzaG93UmVjdXJyZW5jZSkge1xuICAgICAgb25DaGFuZ2UobmV3T3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UobnVsbClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVSZWN1cnJlbmNlVG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBzZXRTaG93UmVjdXJyZW5jZShjaGVja2VkKVxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBpZiAocnJ1bGVPcHRpb25zKSB7XG4gICAgICAgIG9uQ2hhbmdlKHJydWxlT3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IFJSdWxlIHdoZW4gdG9nZ2xpbmcgb24gZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgIC8vIE5vdGU6IGR0c3RhcnQgd2lsbCBiZSBzZXQgYnkgdGhlIHBhcmVudCBFdmVudEZvcm1cbiAgICAgICAgY29uc3QgZGVmYXVsdFJSdWxlOiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7XG4gICAgICAgICAgZnJlcTogUlJ1bGUuREFJTFksXG4gICAgICAgICAgaW50ZXJ2YWw6IDEsXG4gICAgICAgIH1cbiAgICAgICAgc2V0UlJ1bGVPcHRpb25zKGRlZmF1bHRSUnVsZSBhcyBSUnVsZU9wdGlvbnMpXG4gICAgICAgIG9uQ2hhbmdlKGRlZmF1bHRSUnVsZSBhcyBSUnVsZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRnJlcXVlbmN5Q2hhbmdlID0gKGZyZXF1ZW5jeTogc3RyaW5nKSA9PiB7XG4gICAgLy8gQ29udmVydCBzdHJpbmcgdG8gUlJ1bGUgZnJlcXVlbmN5IGNvbnN0YW50XG4gICAgY29uc3QgZnJlcU1hcDogUmVjb3JkPHN0cmluZywgUlJ1bGVPcHRpb25zWydmcmVxJ10+ID0ge1xuICAgICAgREFJTFk6IFJSdWxlLkRBSUxZLFxuICAgICAgV0VFS0xZOiBSUnVsZS5XRUVLTFksXG4gICAgICBNT05USExZOiBSUnVsZS5NT05USExZLFxuICAgICAgWUVBUkxZOiBSUnVsZS5ZRUFSTFksXG4gICAgfVxuICAgIHVwZGF0ZVJSdWxlKHsgZnJlcTogZnJlcU1hcFtmcmVxdWVuY3ldIHx8IFJSdWxlLkRBSUxZIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVJbnRlcnZhbENoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSB8fCAxKVxuICAgIHVwZGF0ZVJSdWxlKHsgaW50ZXJ2YWwgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZFR5cGVDaGFuZ2UgPSAoZW5kVHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlczogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0ge31cblxuICAgIGlmIChlbmRUeXBlID09PSAnbmV2ZXInKSB7XG4gICAgICAvLyBSZW1vdmUgY291bnQgYW5kIHVudGlsXG4gICAgICB1cGRhdGVzLmNvdW50ID0gdW5kZWZpbmVkXG4gICAgICB1cGRhdGVzLnVudGlsID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChlbmRUeXBlID09PSAnY291bnQnKSB7XG4gICAgICAvLyBTZXQgZGVmYXVsdCBjb3VudCBpZiBub25lIGV4aXN0cywgcmVtb3ZlIHVudGlsXG4gICAgICB1cGRhdGVzLmNvdW50ID0gcnJ1bGVPcHRpb25zPy5jb3VudCB8fCAxXG4gICAgICB1cGRhdGVzLnVudGlsID0gdW5kZWZpbmVkXG4gICAgfSBlbHNlIGlmIChlbmRUeXBlID09PSAndW50aWwnKSB7XG4gICAgICAvLyBTZXQgZGVmYXVsdCB1bnRpbCBkYXRlIGlmIG5vbmUgZXhpc3RzLCByZW1vdmUgY291bnRcbiAgICAgIHVwZGF0ZXMudW50aWwgPVxuICAgICAgICBycnVsZU9wdGlvbnM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuICAgICAgdXBkYXRlcy5jb3VudCA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHVwZGF0ZVJSdWxlKHVwZGF0ZXMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb3VudENoYW5nZSA9IChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGNvdW50ID0gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KGUudGFyZ2V0LnZhbHVlKSB8fCAxKVxuICAgIHVwZGF0ZVJSdWxlKHsgY291bnQgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGNvbnN0IHVudGlsID0gZGF0ZSA/IGRheWpzKGRhdGUpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA6IHVuZGVmaW5lZFxuICAgIHVwZGF0ZVJSdWxlKHsgdW50aWwgfSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURheVRvZ2dsZSA9IChkYXlJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgd2Vla2RheU1hcCA9IFtcbiAgICAgIFJSdWxlLlNVLFxuICAgICAgUlJ1bGUuTU8sXG4gICAgICBSUnVsZS5UVSxcbiAgICAgIFJSdWxlLldFLFxuICAgICAgUlJ1bGUuVEgsXG4gICAgICBSUnVsZS5GUixcbiAgICAgIFJSdWxlLlNBLFxuICAgIF1cbiAgICBjb25zdCBjdXJyZW50V2Vla2RheXMgPSAocnJ1bGVPcHRpb25zPy5ieXdlZWtkYXkgYXMgV2Vla2RheVtdKSB8fCBbXVxuICAgIGNvbnN0IHRhcmdldFdlZWtkYXkgPSB3ZWVrZGF5TWFwW2RheUluZGV4XVxuXG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IGN1cnJlbnRXZWVrZGF5cy5pbmNsdWRlcyh0YXJnZXRXZWVrZGF5KVxuICAgIGxldCBuZXdXZWVrZGF5czogV2Vla2RheVtdXG5cbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgbmV3V2Vla2RheXMgPSBjdXJyZW50V2Vla2RheXMuZmlsdGVyKChkYXkpID0+IGRheSAhPT0gdGFyZ2V0V2Vla2RheSlcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3V2Vla2RheXMgPSBbLi4uY3VycmVudFdlZWtkYXlzLCB0YXJnZXRXZWVrZGF5XVxuICAgIH1cblxuICAgIHVwZGF0ZVJSdWxlKHtcbiAgICAgIGJ5d2Vla2RheTogbmV3V2Vla2RheXMubGVuZ3RoID4gMCA/IG5ld1dlZWtkYXlzIDogdW5kZWZpbmVkLFxuICAgIH0pXG4gIH1cblxuICAvLyBIZWxwZXIgdG8gZGV0ZXJtaW5lIGVuZCB0eXBlIGZyb20gY3VycmVudCBvcHRpb25zXG4gIGNvbnN0IGdldEVuZFR5cGUgPSAoKTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnID0+IHtcbiAgICBpZiAocnJ1bGVPcHRpb25zPy51bnRpbCkge1xuICAgICAgcmV0dXJuICd1bnRpbCdcbiAgICB9XG4gICAgaWYgKHJydWxlT3B0aW9ucz8uY291bnQpIHtcbiAgICAgIHJldHVybiAnY291bnQnXG4gICAgfVxuICAgIHJldHVybiAnbmV2ZXInXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDYXJkIGRhdGEtdGVzdGlkPVwicmVjdXJyZW5jZS1lZGl0b3JcIj5cbiAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInBiLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgIGlkPVwicmVjdXJyaW5nXCJcbiAgICAgICAgICAgIGNoZWNrZWQ9e3Nob3dSZWN1cnJlbmNlfVxuICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXtoYW5kbGVSZWN1cnJlbmNlVG9nZ2xlfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1JlY3VycmVuY2UgJiYgdmFsdWUgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICB7Z2V0UlJ1bGVEZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICApfVxuICAgICAgPC9DYXJkSGVhZGVyPlxuXG4gICAgICB7c2hvd1JlY3VycmVuY2UgJiYgKFxuICAgICAgICA8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHQtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS00XCI+XG4gICAgICAgICAgICB7LyogRnJlcXVlbmN5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZnJlcXVlbmN5XCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAge3QoJ3JlcGVhdHMnKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtnZXRGcmVxdWVuY3lTdHJpbmcocnJ1bGVPcHRpb25zPy5mcmVxID8/IFJSdWxlLkRBSUxZKX1cbiAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e2hhbmRsZUZyZXF1ZW5jeUNoYW5nZX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8U2VsZWN0VHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICBpZD1cImZyZXF1ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOFwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RWYWx1ZSAvPlxuICAgICAgICAgICAgICAgICAgPC9TZWxlY3RUcmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgPFNlbGVjdENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiREFJTFlcIj57dCgnZGFpbHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiV0VFS0xZXCI+e3QoJ3dlZWtseScpfTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdEl0ZW0gdmFsdWU9XCJNT05USExZXCI+e3QoJ21vbnRobHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiWUVBUkxZXCI+e3QoJ3llYXJseScpfTwvU2VsZWN0SXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Q29udGVudD5cbiAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImludGVydmFsXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAge3QoJ2V2ZXJ5Jyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiaW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtycnVsZU9wdGlvbnM/LmludGVydmFsIHx8IDF9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW50ZXJ2YWxDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLThcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBXZWVrbHkgRGF5IFNlbGVjdGlvbiAqL31cbiAgICAgICAgICAgIHtycnVsZU9wdGlvbnM/LmZyZXEgPT09IFJSdWxlLldFRUtMWSAmJiAoXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgncmVwZWF0T24nKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTEgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAge1dFRUtfREFZUy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl3ZWVrZGF5QXJyYXkgPSBBcnJheS5pc0FycmF5KFxuICAgICAgICAgICAgICAgICAgICAgIHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA/IHJydWxlT3B0aW9ucy5ieXdlZWtkYXlcbiAgICAgICAgICAgICAgICAgICAgICA6IHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtycnVsZU9wdGlvbnMuYnl3ZWVrZGF5XVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYnl3ZWVrZGF5QXJyYXkuaW5jbHVkZXMoZGF5LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRGF5VG9nZ2xlKGluZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEZvcj17YGRheS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF5LnNob3J0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgey8qIEVuZCBDb25kaXRpb24gKi99XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdlbmRzJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTIgbXQtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2dldEVuZFR5cGUoKSA9PT0gJ25ldmVyJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBoYW5kbGVFbmRUeXBlQ2hhbmdlKCduZXZlcicpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibmV2ZXJcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCduZXZlcicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZnRlclwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2dldEVuZFR5cGUoKSA9PT0gJ2NvdW50J31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBoYW5kbGVFbmRUeXBlQ2hhbmdlKCdjb3VudCcpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiYWZ0ZXJcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdhZnRlcicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtnZXRFbmRUeXBlKCkgPT09ICdjb3VudCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17cnJ1bGVPcHRpb25zPy5jb3VudCB8fCAxfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDb3VudENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTYgdy0xNiB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNvdW50LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ29jY3VycmVuY2VzJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBpZD1cIm9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Z2V0RW5kVHlwZSgpID09PSAndW50aWwnfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eygpID0+IGhhbmRsZUVuZFR5cGVDaGFuZ2UoJ3VudGlsJyl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJvblwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ29uJyl9XG4gICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAge2dldEVuZFR5cGUoKSA9PT0gJ3VudGlsJyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17cnJ1bGVPcHRpb25zPy51bnRpbH1cbiAgICAgICAgICAgICAgICAgICAgICBzZXREYXRlPXtoYW5kbGVFbmREYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgKX1cbiAgICA8L0NhcmQ+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dEZXNjcmlwdGlvbixcbiAgRGlhbG9nRm9vdGVyLFxuICBEaWFsb2dIZWFkZXIsXG4gIERpYWxvZ1RpdGxlLFxuICBCdXR0b24sXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG4gIGlzT3BlbjogYm9vbGVhblxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG4gIG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG4gIG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG4gIGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuICBpc09wZW4sXG4gIG9uQ2xvc2UsXG4gIG9uQ29uZmlybSxcbiAgb3BlcmF0aW9uVHlwZSxcbiAgZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgb25Db25maXJtKHNjb3BlKVxuICAgIG9uQ2xvc2UoKVxuICB9XG5cbiAgY29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2lzT3Blbn0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cbiAgICAgIDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cbiAgICAgICAgICA8L0RpYWxvZ1RpdGxlPlxuICAgICAgICAgIDxEaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuICAgICAgICAgICAge2lzRWRpdFxuICAgICAgICAgICAgICA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcbiAgICAgICAgICAgICAgOiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG4gICAgICAgICAgPC9EaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgPC9EaWFsb2dIZWFkZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAge2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICB7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICB7dCgnY2FuY2VsJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvRGlhbG9nRm9vdGVyPlxuICAgICAgPC9EaWFsb2dDb250ZW50PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcbiAgY29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgW2RpYWxvZ1N0YXRlLCBzZXREaWFsb2dTdGF0ZV0gPSB1c2VTdGF0ZTx7XG4gICAgaXNPcGVuOiBib29sZWFuXG4gICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcbiAgICBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgICB1cGRhdGVzPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICAgIG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuICB9Pih7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG4gICAgZXZlbnQ6IG51bGwsXG4gIH0pXG5cbiAgY29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcbiAgICAgIHNldERpYWxvZ1N0YXRlKHtcbiAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICBvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgICBvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG4gIClcblxuICBjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG4gIClcblxuICBjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICBpc09wZW46IGZhbHNlLFxuICAgICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuICAgICAgZXZlbnQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybSA9IHVzZUNhbGxiYWNrKFxuICAgIChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuICAgICAgaWYgKGRpYWxvZ1N0YXRlLm9uQ29uZmlybSkge1xuICAgICAgICBkaWFsb2dTdGF0ZS5vbkNvbmZpcm0oc2NvcGUpXG4gICAgICB9XG4gICAgICBjbG9zZURpYWxvZygpXG4gICAgICAvLyBDYWxsIG9uQ29tcGxldGUgdG8gY2xvc2UgdGhlIHBhcmVudCBmb3JtXG4gICAgICBvbkNvbXBsZXRlPy4oKVxuICAgIH0sXG4gICAgW2RpYWxvZ1N0YXRlLCBjbG9zZURpYWxvZywgb25Db21wbGV0ZV1cbiAgKVxuXG4gIHJldHVybiB7XG4gICAgZGlhbG9nU3RhdGUsXG4gICAgb3BlbkVkaXREaWFsb2csXG4gICAgb3BlbkRlbGV0ZURpYWxvZyxcbiAgICBjbG9zZURpYWxvZyxcbiAgICBoYW5kbGVDb25maXJtLFxuICB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG4vKipcbiAqIEV4cG9ydCBjYWxlbmRhciBldmVudHMgdG8gaUNhbGVuZGFyICguaWNhbCkgZm9ybWF0XG4gKiBGdWxseSBSRkMgNTU0NSBjb21wbGlhbnQgaUNhbGVuZGFyIGdlbmVyYXRpb25cbiAqL1xuXG4vKipcbiAqIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gaUNhbGVuZGFyIHRleHQgZmllbGRzXG4gKi9cbmNvbnN0IGVzY2FwZUlDYWxUZXh0ID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJ1xcXFwnLCAnXFxcXFxcXFwnKSAvLyBFc2NhcGUgYmFja3NsYXNoZXNcbiAgICAucmVwbGFjZUFsbCgnOycsICdcXFxcOycpIC8vIEVzY2FwZSBzZW1pY29sb25zXG4gICAgLnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKSAvLyBFc2NhcGUgY29tbWFzXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICdcXFxcbicpIC8vIEVzY2FwZSBuZXdsaW5lc1xuICAgIC5yZXBsYWNlQWxsKCdcXHInLCAnJykgLy8gUmVtb3ZlIGNhcnJpYWdlIHJldHVybnNcbn1cblxuLyoqXG4gKiBGb3JtYXQgZGF0ZSBmb3IgaUNhbGVuZGFyIGZvcm1hdCAoWVlZWU1NRERUSEhNTVNTWiBmb3IgVVRDKVxuICovXG5jb25zdCBmb3JtYXRJQ2FsRGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgYWxsRGF5ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICBpZiAoYWxsRGF5KSB7XG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXG4gIH1cbiAgcmV0dXJuIGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgVUlEIGZvciBhbiBldmVudCBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gKi9cbmNvbnN0IGdlbmVyYXRlVUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcbiAgaWYgKGV2ZW50LnVpZCkge1xuICAgIHJldHVybiBldmVudC51aWRcbiAgfVxuICByZXR1cm4gYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG4vKipcbiAqIENvbnZlcnQgUlJ1bGVPcHRpb25zIHRvIGlDYWxlbmRhciBSUlVMRSBzdHJpbmdcbiAqL1xuY29uc3QgZm9ybWF0UlJ1bGUgPSAocnJ1bGVPcHRpb25zOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgUlJ1bGUgaW5zdGFuY2Ugd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNhc3RpbmdcbiAgICBjb25zdCBydWxlID0gbmV3IFJSdWxlKFxuICAgICAgcnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG4gICAgKVxuICAgIGNvbnN0IHJydWxlU3RyaW5nID0gcnVsZS50b1N0cmluZygpXG4gICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBSUlVMRSBwYXJ0IChyZW1vdmUgRFRTVEFSVCBpZiBwcmVzZW50KVxuICAgIGNvbnN0IHJydWxlUGFydCA9IHJydWxlU3RyaW5nXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKCdSUlVMRTonKSlcbiAgICByZXR1cm4gcnJ1bGVQYXJ0IHx8ICcnXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIHNpbmdsZSBDYWxlbmRhckV2ZW50IHRvIGlDYWxlbmRhciBWRVZFTlQgc3RyaW5nXG4gKi9cbmNvbnN0IGV2ZW50VG9JQ2FsRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZFVkVOVCcpXG5cbiAgLy8gVUlEIChyZXF1aXJlZClcbiAgbGluZXMucHVzaChgVUlEOiR7Z2VuZXJhdGVVSUQoZXZlbnQpfWApXG5cbiAgLy8gRFRTVEFSVCAocmVxdWlyZWQpXG4gIGNvbnN0IGR0c3RhcnQgPSBmb3JtYXRJQ2FsRGF0ZShldmVudC5zdGFydCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRTVEFSVDtWQUxVRT1EQVRFOiR7ZHRzdGFydH1gKVxuICB9IGVsc2Uge1xuICAgIGxpbmVzLnB1c2goYERUU1RBUlQ6JHtkdHN0YXJ0fWApXG4gIH1cblxuICAvLyBEVEVORCAocmVxdWlyZWQgZm9yIGV2ZW50cyB3aXRoIGR1cmF0aW9uKVxuICBjb25zdCBkdGVuZCA9IGZvcm1hdElDYWxEYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ7VkFMVUU9REFURToke2R0ZW5kfWApXG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ6JHtkdGVuZH1gKVxuICB9XG5cbiAgLy8gU1VNTUFSWSAodGl0bGUpXG4gIGxpbmVzLnB1c2goYFNVTU1BUlk6JHtlc2NhcGVJQ2FsVGV4dChldmVudC50aXRsZSl9YClcblxuICAvLyBERVNDUklQVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgIGxpbmVzLnB1c2goYERFU0NSSVBUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQuZGVzY3JpcHRpb24pfWApXG4gIH1cblxuICAvLyBMT0NBVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5sb2NhdGlvbikge1xuICAgIGxpbmVzLnB1c2goYExPQ0FUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQubG9jYXRpb24pfWApXG4gIH1cblxuICAvLyBSUlVMRSAocmVjdXJyZW5jZSBydWxlKVxuICBpZiAoZXZlbnQucnJ1bGUpIHtcbiAgICBjb25zdCBycnVsZVN0cmluZyA9IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKVxuICAgIGlmIChycnVsZVN0cmluZykge1xuICAgICAgbGluZXMucHVzaChycnVsZVN0cmluZylcbiAgICB9XG4gIH1cblxuICAvLyBFWERBVEUgKGV4Y2VwdGlvbiBkYXRlcylcbiAgaWYgKGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXNcbiAgICAgIC5tYXAoKGRhdGVTdHIpID0+IGZvcm1hdElDYWxEYXRlKGRheWpzKGRhdGVTdHIpLCBldmVudC5hbGxEYXkpKVxuICAgICAgLmpvaW4oJywnKVxuICAgIGxpbmVzLnB1c2goYEVYREFURToke2V4ZGF0ZXN9YClcbiAgfVxuXG4gIC8vIFJFQ1VSUkVOQ0UtSUQgKGZvciBtb2RpZmllZCBpbnN0YW5jZXMpXG4gIGlmIChldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICBjb25zdCByZWN1cnJlbmNlSWQgPSBmb3JtYXRJQ2FsRGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG4gICAgbGluZXMucHVzaChgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gKVxuICB9XG5cbiAgLy8gRFRTVEFNUCAocmVxdWlyZWQgLSB3aGVuIHRoaXMgd2FzIGNyZWF0ZWQvbW9kaWZpZWQpXG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG4gIGxpbmVzLnB1c2goYERUU1RBTVA6JHtub3d9YClcblxuICAvLyBDUkVBVEVEICh3aGVuIGV2ZW50IHdhcyBjcmVhdGVkKVxuICBsaW5lcy5wdXNoKGBDUkVBVEVEOiR7bm93fWApXG5cbiAgLy8gTEFTVC1NT0RJRklFRCAod2hlbiBldmVudCB3YXMgbGFzdCBtb2RpZmllZClcbiAgbGluZXMucHVzaChgTEFTVC1NT0RJRklFRDoke25vd31gKVxuXG4gIC8vIFNUQVRVUyAoZGVmYXVsdCB0byBDT05GSVJNRUQpXG4gIGxpbmVzLnB1c2goJ1NUQVRVUzpDT05GSVJNRUQnKVxuXG4gIC8vIFNFUVVFTkNFICh2ZXJzaW9uIG51bWJlciwgZGVmYXVsdCB0byAwKVxuICBsaW5lcy5wdXNoKCdTRVFVRU5DRTowJylcblxuICAvLyBUUkFOU1AgKHRyYW5zcGFyZW5jeSAtIE9QQVFVRSBmb3IgYnVzeSB0aW1lKVxuICBsaW5lcy5wdXNoKCdUUkFOU1A6T1BBUVVFJylcblxuICBsaW5lcy5wdXNoKCdFTkQ6VkVWRU5UJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICogLSBJbmNsdWRlIGJhc2UgcmVjdXJyaW5nIGV2ZW50cyAod2l0aCBSUlVMRSlcbiAqIC0gSW5jbHVkZSBtb2RpZmllZCBpbnN0YW5jZXMgKHdpdGggcmVjdXJyZW5jZUlkKVxuICogLSBJbmNsdWRlIG5vbi1yZWN1cnJpbmcgZXZlbnRzXG4gKiAtIEVYQ0xVREUgZ2VuZXJhdGVkIHJlY3VycmluZyBpbnN0YW5jZXMgKG5vIHJydWxlLCBubyByZWN1cnJlbmNlSWQpXG4gKi9cbmNvbnN0IGZpbHRlckV2ZW50c0ZvckV4cG9ydCA9IChldmVudHM6IENhbGVuZGFyRXZlbnRbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gIGNvbnN0IGV4cG9ydEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cbiAgY29uc3QgcHJvY2Vzc2VkVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAvLyBHZXQgb3IgZ2VuZXJhdGUgVUlEIGZvciB0aGUgZXZlbnRcbiAgICBjb25zdCBldmVudFVJRCA9IGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAvLyBDYXNlIDE6IEJhc2UgcmVjdXJyaW5nIGV2ZW50IChoYXMgUlJVTEUsIG5vIHJlY3VycmVuY2VJZClcbiAgICBpZiAoZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCkge1xuICAgICAgZXhwb3J0RXZlbnRzLnB1c2goZXZlbnQpXG4gICAgICBwcm9jZXNzZWRVSURzLmFkZChldmVudFVJRClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAyOiBNb2RpZmllZCByZWN1cnJpbmcgaW5zdGFuY2UgKGhhcyByZWN1cnJlbmNlSWQsIG5vIFJSVUxFKVxuICAgIGlmIChldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlKSB7XG4gICAgICBleHBvcnRFdmVudHMucHVzaChldmVudClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAzOiBOb24tcmVjdXJyaW5nIGV2ZW50IChubyBSUlVMRSwgbm8gcmVjdXJyZW5jZUlkLCBubyBVSUQgcGF0dGVybilcbiAgICBpZiAoIWV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBnZW5lcmF0ZWQgaW5zdGFuY2UgYnkgVUlEIHBhdHRlcm5cbiAgICAgIGNvbnN0IGlzR2VuZXJhdGVkSW5zdGFuY2UgPSBwcm9jZXNzZWRVSURzLmhhcyhldmVudFVJRClcblxuICAgICAgaWYgKCFpc0dlbmVyYXRlZEluc3RhbmNlKSB7XG4gICAgICAgIGV4cG9ydEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgfVxuICAgICAgLy8gU2tpcCBnZW5lcmF0ZWQgaW5zdGFuY2VzIC0gdGhleSdsbCBiZSByZWNyZWF0ZWQgYnkgUlJVTEVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0RXZlbnRzXG59XG5cbi8qKlxuICogRXhwb3J0IGV2ZW50cyB0byBpQ2FsZW5kYXIgZm9ybWF0XG4gKi9cbmV4cG9ydCBjb25zdCBleHBvcnRUb0lDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgLy8gQ2FsZW5kYXIgaGVhZGVyXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZDQUxFTkRBUicpXG4gIGxpbmVzLnB1c2goJ1ZFUlNJT046Mi4wJylcbiAgbGluZXMucHVzaCgnUFJPRElEOi0vL2lsYW15Ly9pbGFteSBDYWxlbmRhci8vRU4nKVxuICBsaW5lcy5wdXNoKCdDQUxTQ0FMRTpHUkVHT1JJQU4nKVxuICBsaW5lcy5wdXNoKCdNRVRIT0Q6UFVCTElTSCcpXG4gIGxpbmVzLnB1c2goYFgtV1ItQ0FMTkFNRToke2VzY2FwZUlDYWxUZXh0KGNhbGVuZGFyTmFtZSl9YClcbiAgbGluZXMucHVzaChgWC1XUi1DQUxERVNDOiR7ZXNjYXBlSUNhbFRleHQoYEV4cG9ydGVkIGZyb20gJHtjYWxlbmRhck5hbWV9YCl9YClcblxuICAvLyBBZGQgdGltZXpvbmUgaW5mb3JtYXRpb24gKFVUQylcbiAgbGluZXMucHVzaCgnQkVHSU46VlRJTUVaT05FJylcbiAgbGluZXMucHVzaCgnVFpJRDpVVEMnKVxuICBsaW5lcy5wdXNoKCdCRUdJTjpTVEFOREFSRCcpXG4gIGxpbmVzLnB1c2goJ0RUU1RBUlQ6MTk3MDAxMDFUMDAwMDAwJylcbiAgbGluZXMucHVzaCgnVFpOQU1FOlVUQycpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VURlJPTTorMDAwMCcpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VUVE86KzAwMDAnKVxuICBsaW5lcy5wdXNoKCdFTkQ6U1RBTkRBUkQnKVxuICBsaW5lcy5wdXNoKCdFTkQ6VlRJTUVaT05FJylcblxuICAvLyBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICBjb25zdCBmaWx0ZXJlZEV2ZW50cyA9IGZpbHRlckV2ZW50c0ZvckV4cG9ydChldmVudHMpXG5cbiAgLy8gQWRkIGVhY2ggZmlsdGVyZWQgZXZlbnRcbiAgZmlsdGVyZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBsaW5lcy5wdXNoKGV2ZW50VG9JQ2FsRXZlbnQoZXZlbnQpKVxuICB9KVxuXG4gIC8vIENhbGVuZGFyIGZvb3RlclxuICBsaW5lcy5wdXNoKCdFTkQ6VkNBTEVOREFSJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBEb3dubG9hZCBpQ2FsZW5kYXIgZmlsZSB0byB1c2VyJ3MgZGV2aWNlXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZElDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGZpbGVuYW1lID0gJ2NhbGVuZGFyLmljcycsXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHZvaWQgPT4ge1xuICBjb25zdCBpY2FsQ29udGVudCA9IGV4cG9ydFRvSUNhbGVuZGFyKGV2ZW50cywgY2FsZW5kYXJOYW1lKVxuXG4gIC8vIENyZWF0ZSBibG9iIGFuZCBkb3dubG9hZFxuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ljYWxDb250ZW50XSwge1xuICAgIHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuICB9KVxuXG4gIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICBsaW5rLmhyZWYgPSB1cmxcbiAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJykgPyBmaWxlbmFtZSA6IGAke2ZpbGVuYW1lfS5pY3NgXG5cbiAgLy8gVHJpZ2dlciBkb3dubG9hZFxuICBkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuICBsaW5rLmNsaWNrKClcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuXG4gIC8vIENsZWFuIHVwXG4gIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBCdXR0b24sXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBkb3dubG9hZElDYWxlbmRhciB9IGZyb20gJ0AvbGliL2V4cG9ydC1pY2FsJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uLCBEb3dubG9hZCwgTWVudSwgUGx1cyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliJ1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIHNldFZpZXcsXG4gICAgbmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kLFxuICAgIHRvZGF5LFxuICAgIG9wZW5FdmVudEZvcm0sXG4gICAgaGVhZGVyQ29tcG9uZW50LFxuICAgIGhlYWRlckNsYXNzTmFtZSxcbiAgICByYXdFdmVudHMsXG4gICAgdCxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gU3RhdGUgZm9yIG1vYmlsZSBtZW51IHBvcG92ZXJcbiAgY29uc3QgW21vYmlsZVBvcG92ZXJPcGVuLCBzZXRNb2JpbGVQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICAvLyBIYW5kbGUgdmlldyBjaGFuZ2Ugd2l0aCBvcHRpb25hbCBwb3BvdmVyIGNsb3NpbmdcbiAgY29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IChcbiAgICBuZXdWaWV3OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicsXG4gICAgY2xvc2VQb3BvdmVyID0gZmFsc2VcbiAgKSA9PiB7XG4gICAgc2V0VmlldyhuZXdWaWV3KVxuICAgIGlmIChjbG9zZVBvcG92ZXIpIHtcbiAgICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBpQ2FsZW5kYXIgZXhwb3J0XG4gIGNvbnN0IGhhbmRsZUV4cG9ydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG4gICAgZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcbiAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgfSwgW3Jhd0V2ZW50c10pXG5cbiAgLy8gQ2FsbGJhY2sgZm9yIG5hdmlnYXRpb24gdGhhdCBhbHNvIGNsb3NlcyB0aGUgbW9iaWxlIHBvcG92ZXJcbiAgY29uc3QgaGFuZGxlTmF2aWdhdGlvbiA9IHtcbiAgICB0b2RheTogKCkgPT4ge1xuICAgICAgdG9kYXkoKVxuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfSxcbiAgICBwcmV2aW91czogKCkgPT4ge1xuICAgICAgcHJldlBlcmlvZCgpXG4gICAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgICB9LFxuICAgIG5leHQ6ICgpID0+IHtcbiAgICAgIG5leHRQZXJpb2QoKVxuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IE5ld0V2ZW50QnV0dG9uID0gdXNlQ2FsbGJhY2soXG4gICAgKCkgPT4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgKSxcbiAgICBbb3BlbkV2ZW50Rm9ybSwgdF1cbiAgKVxuXG4gIGlmIChoZWFkZXJDb21wb25lbnQpIHtcbiAgICAvLyBSZW5kZXIgY3VzdG9tIGhlYWRlciBjb21wb25lbnQgaWYgcHJvdmlkZWRcbiAgICByZXR1cm4gaGVhZGVyQ29tcG9uZW50XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7LyogQ2FsZW5kYXIgSGVhZGVyIHdpdGggZ3JpZCBsYXlvdXQgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIvYmFzZS1oZWFkZXIgdy1mdWxsXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTIgYm9yZGVyLWInLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgaGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHsvKiBUaXRsZSBhcmVhIC0gTGVmdCBzZWN0aW9uICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuICAgICAgICAgICAgPENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgIDxUaXRsZUNvbnRlbnQgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBOZXcgZXZlbnQgYnV0dG9uIC0gTW9iaWxlICYgRGVza3RvcCAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICB7LyogRGVza3RvcCBjb250cm9scyAtIGNlbnRyYWxpemVkICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRWaWV3fVxuICAgICAgICAgICAgICAgIG9uVG9kYXk9e3RvZGF5fVxuICAgICAgICAgICAgICAgIG9uTmV4dD17bmV4dFBlcmlvZH1cbiAgICAgICAgICAgICAgICBvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG4gICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgey8qIE5ldyBldmVudCBidXR0b24gLSBEZXNrdG9wICovfVxuICAgICAgICAgICAgICA8TmV3RXZlbnRCdXR0b24gLz5cblxuICAgICAgICAgICAgICB7LyogRXhwb3J0IGJ1dHRvbiAtIERlc2t0b3AgKi99XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPlxuICAgICAgICAgICAgICAgICAge3QoJ2V4cG9ydCcpfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIE1vYmlsZSBuYXZpZ2F0aW9uIG1lbnUgYnV0dG9uIC0gUmlnaHQgYWxpZ25lZCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuICAgICAgICAgICAgICB7LyogTmV3IGV2ZW50IGJ1dHRvbiAtIE1vYmlsZSAqL31cbiAgICAgICAgICAgICAgPE5ld0V2ZW50QnV0dG9uIC8+XG5cbiAgICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgICBvcGVuPXttb2JpbGVQb3BvdmVyT3Blbn1cbiAgICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZVBvcG92ZXJPcGVufVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwibWItMSB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgVmlldyAmIE5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmlldykgPT4gaGFuZGxlVmlld0NoYW5nZShuZXdWaWV3LCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBvblRvZGF5PXtoYW5kbGVOYXZpZ2F0aW9uLnRvZGF5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTmV4dD17aGFuZGxlTmF2aWdhdGlvbi5uZXh0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uUHJldmlvdXM9e2hhbmRsZU5hdmlnYXRpb24ucHJldmlvdXN9XG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgIHsvKiBFeHBvcnQgYnV0dG9uIC0gTW9iaWxlICovfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKVxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQge1xuICBCdXR0b24sXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG4vLyBNb250aHMgYXJyYXkgaXMgbm93IGNyZWF0ZWQgZHluYW1pY2FsbHkgaW4gdGhlIGNvbXBvbmVudCB1c2luZyB0cmFuc2xhdGlvbnNcblxuLy8gQW5pbWF0aW9uIHZhcmlhbnRzIGZvciBudW1iZXIgdHJhbnNpdGlvbnNcbmNvbnN0IGFuaW1hdGlvblZhcmlhbnRzID0ge1xuICBpbml0aWFsOiB7IG9wYWNpdHk6IDAsIHk6IDEwIH0sXG4gIGFuaW1hdGU6IHsgb3BhY2l0eTogMSwgeTogMCB9LFxuICBleGl0OiB7IG9wYWNpdHk6IDAsIHk6IC0xMCB9LFxufVxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNldEN1cnJlbnREYXRlLCB0IH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIENyZWF0ZSBtb250aHMgYXJyYXkgdXNpbmcgdHJhbnNsYXRpb25zXG4gIGNvbnN0IG1vbnRocyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgdCgnamFudWFyeScpLFxuICAgICAgdCgnZmVicnVhcnknKSxcbiAgICAgIHQoJ21hcmNoJyksXG4gICAgICB0KCdhcHJpbCcpLFxuICAgICAgdCgnbWF5JyksXG4gICAgICB0KCdqdW5lJyksXG4gICAgICB0KCdqdWx5JyksXG4gICAgICB0KCdhdWd1c3QnKSxcbiAgICAgIHQoJ3NlcHRlbWJlcicpLFxuICAgICAgdCgnb2N0b2JlcicpLFxuICAgICAgdCgnbm92ZW1iZXInKSxcbiAgICAgIHQoJ2RlY2VtYmVyJyksXG4gICAgXSxcbiAgICBbdF1cbiAgKVxuXG4gIC8vIFN0YXRlIGZvciBtb2JpbGUgbWVudSBhbmQgcG9wb3ZlcnNcbiAgY29uc3QgW21vbnRoUG9wb3Zlck9wZW4sIHNldE1vbnRoUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt5ZWFyUG9wb3Zlck9wZW4sIHNldFllYXJQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3dlZWtQb3BvdmVyT3Blbiwgc2V0V2Vla1BvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZGF5UG9wb3Zlck9wZW4sIHNldERheVBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG4gIGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cbiAgLy8gSGFuZGxlIG1vbnRoIGFuZCB5ZWFyIHNlbGVjdGlvblxuICBjb25zdCBoYW5kbGVNb250aENoYW5nZSA9IChtb250aDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLm1vbnRoKG1vbnRoKVxuICAgIHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG4gICAgc2V0TW9udGhQb3BvdmVyT3BlbihmYWxzZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVllYXJDaGFuZ2UgPSAoeWVhcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnllYXIoeWVhcilcbiAgICBzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuICAgIHNldFllYXJQb3BvdmVyT3BlbihmYWxzZSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt2aWV3ICE9PSAneWVhcicgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXttb250aFBvcG92ZXJPcGVufSBvbk9wZW5DaGFuZ2U9e3NldE1vbnRoUG9wb3Zlck9wZW59PlxuICAgICAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgIDxtb3Rpb24uc3BhblxuICAgICAgICAgICAgICAgICAga2V5PXtgbW9udGgtJHtjdXJyZW50RGF0ZS5tb250aCgpfWB9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPVwiaW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50cz17YW5pbWF0aW9uVmFyaWFudHN9XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0nKX1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICAgIHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e21vbnRofVxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGUubW9udGgoKSA9PT0gaW5kZXggJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTW9udGhDaGFuZ2UoaW5kZXgpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHttb250aH1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICA8L1BvcG92ZXI+XG4gICAgICApfVxuXG4gICAgICA8UG9wb3ZlciBvcGVuPXt5ZWFyUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0WWVhclBvcG92ZXJPcGVufT5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAga2V5PXtgeWVhci0ke2N1cnJlbnREYXRlLnllYXIoKX1gfVxuICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpfVxuICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTI0IHAtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICB7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3llYXJ9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgY3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlWWVhckNoYW5nZSh5ZWFyKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt5ZWFyfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgPC9Qb3BvdmVyPlxuXG4gICAgICB7LyogRGlzcGxheSBhZGRpdGlvbmFsIHZpZXctc3BlY2lmaWMgaW5mb3JtYXRpb24gKi99XG4gICAgICB7dmlldyA9PT0gJ3dlZWsnICYmIChcbiAgICAgICAgPFBvcG92ZXIgb3Blbj17d2Vla1BvcG92ZXJPcGVufSBvbk9wZW5DaGFuZ2U9e3NldFdlZWtQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2B3ZWVrLXJhbmdlLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICAgIGV4aXQ9XCJleGl0XCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2Ake2N1cnJlbnREYXRlXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgnTU1NIEQnKX0gLSAke2N1cnJlbnREYXRlXG4gICAgICAgICAgICAgICAgICAgIC5lbmRPZignd2VlaycpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoJ01NTSBEJyl9YH1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cIm1sLTEgaC0zIHctMyBvcGFjaXR5LTcwXCIgLz5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNTYgcC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICAgICAgICB7LyogU2hvdyA3IHdlZWtzICgzIHBhc3QsIGN1cnJlbnQsIDMgZnV0dXJlKSAqL31cbiAgICAgICAgICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IHdlZWtEYXRlLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZE9mV2VlayA9IHdlZWtEYXRlLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBrZXk9e3N0YXJ0T2ZXZWVrLmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudERhdGUoc3RhcnRPZldlZWspXG4gICAgICAgICAgICAgICAgICAgICAgc2V0V2Vla1BvcG92ZXJPcGVuKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57YCR7c3RhcnRPZldlZWsuZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ01NTSBEJ1xuICAgICAgICAgICAgICAgICAgICAgICl9IC0gJHtlbmRPZldlZWsuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge3N0YXJ0T2ZXZWVrLm1vbnRoKCkgIT09IGVuZE9mV2Vlay5tb250aCgpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgb3BhY2l0eS03MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7YCR7c3RhcnRPZldlZWsuZm9ybWF0KCdNTU0nKX0tJHtlbmRPZldlZWsuZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNTU0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICA8L1BvcG92ZXI+XG4gICAgICApfVxuICAgICAge3ZpZXcgPT09ICdkYXknICYmIChcbiAgICAgICAgPFBvcG92ZXIgb3Blbj17ZGF5UG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0RGF5UG9wb3Zlck9wZW59PlxuICAgICAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgIDxtb3Rpb24uc3BhblxuICAgICAgICAgICAgICAgICAga2V5PXtgZGF5LWluZm8tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgICAgYW5pbWF0ZT1cImFuaW1hdGVcIlxuICAgICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBEJyl9XG4gICAgICAgICAgICAgICAgPC9tb3Rpb24uc3Bhbj5cbiAgICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJtbC0xIGgtMyB3LTMgb3BhY2l0eS03MFwiIC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTU2IHAtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgey8qIFNob3cgYWxsIGRheXMgb2YgdGhlIGN1cnJlbnQgbW9udGggKi99XG4gICAgICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEdldCBmaXJzdCBkYXkgb2YgbW9udGggYW5kIGxhc3QgZGF5IG9mIG1vbnRoXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gY3VycmVudERhdGUuZGF5c0luTW9udGgoKVxuXG4gICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgYXJyYXkgb2YgZGF5cyBpbiB0aGUgbW9udGhcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRheURhdGUgPSBmaXJzdERheU9mTW9udGguZGF0ZShpICsgMSkgLy8gaSArIDEgYmVjYXVzZSBkYXlzIHN0YXJ0IGF0IDFcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudERheSA9IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JylcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVG9kYXkgPSBkYXlEYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17ZGF5RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnREYXkgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50RGF0ZShkYXlEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGF5UG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2RheURhdGUuZm9ybWF0KCdkZGRkLCBNTU0gRCcpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1RvZGF5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLXNtIHB4LTEhIHRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgndG9kYXknKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5cbmludGVyZmFjZSBWaWV3Q29udHJvbHNQcm9wcyB7XG4gIGN1cnJlbnRWaWV3OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcidcbiAgb25DaGFuZ2U6ICh2aWV3OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicpID0+IHZvaWRcbiAgb25Ub2RheT86ICgpID0+IHZvaWRcbiAgb25OZXh0PzogKCkgPT4gdm9pZFxuICBvblByZXZpb3VzPzogKCkgPT4gdm9pZFxuICB2YXJpYW50PzogJ2RlZmF1bHQnIHwgJ2dyaWQnXG4gIHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBWaWV3Q29udHJvbHM6IFJlYWN0LkZDPFZpZXdDb250cm9sc1Byb3BzPiA9ICh7XG4gIGN1cnJlbnRWaWV3LFxuICBvbkNoYW5nZSxcbiAgdmFyaWFudCA9ICdkZWZhdWx0JyxcbiAgc2l6ZSA9ICdzbScsXG4gIGNsYXNzTmFtZSxcbiAgb25Ub2RheSxcbiAgb25OZXh0LFxuICBvblByZXZpb3VzLFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXG4gIC8vIEV4dHJhY3QgY29tbW9uIGJ1dHRvbiBjbGFzc05hbWUgbG9naWMgdG8gYSBmdW5jdGlvblxuICBjb25zdCBnZXRCdXR0b25DbGFzc05hbWUgPSAodmlld1R5cGU6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4ge1xuICAgIHJldHVybiBjbihcbiAgICAgIC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG4gICAgICBpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuICAgICAgLy8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuICAgICAgY3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJykgPT4ge1xuICAgIHJldHVybiBjdXJyZW50VmlldyA9PT0gdmlld1R5cGUgPyAnZGVmYXVsdCcgOiAnb3V0bGluZSdcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgaXNHcmlkID8gJ2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTInIDogJ2ZsZXggZ2FwLTEnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvblByZXZpb3VzfSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICA8Q2hldnJvbkxlZnQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b24gb25DbGljaz17b25OZXh0fSB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9e3NpemV9PlxuICAgICAgICA8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ2RheScpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCdkYXknKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ2RheScpfVxuICAgICAgPlxuICAgICAgICB7dCgnZGF5Jyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ3dlZWsnKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgnd2VlaycpfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSgnd2VlaycpfVxuICAgICAgPlxuICAgICAgICB7dCgnd2VlaycpfVxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlKCdtb250aCcpfVxuICAgICAgICB2YXJpYW50PXtnZXRCdG5WYXJpYW50KCdtb250aCcpfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSgnbW9udGgnKX1cbiAgICAgID5cbiAgICAgICAge3QoJ21vbnRoJyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25DaGFuZ2UoJ3llYXInKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgneWVhcicpfVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBjbGFzc05hbWU9e2dldEJ1dHRvbkNsYXNzTmFtZSgneWVhcicpfVxuICAgICAgPlxuICAgICAgICB7dCgneWVhcicpfVxuICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDxCdXR0b24gb25DbGljaz17b25Ub2RheX0gdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPXtzaXplfT5cbiAgICAgICAge3QoJ3RvZGF5Jyl9XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3Q29udHJvbHNcbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcblxuY29uc3QgWWVhclZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB5ZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cbiAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgMTIgbW9udGhzIGZvciB0aGUgY3VycmVudCB5ZWFyXG4gIGNvbnN0IG1vbnRocyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpKSA9PiB7XG4gICAgY29uc3QgbW9udGhEYXRlID0gZGF5anMoKS55ZWFyKHllYXIpLm1vbnRoKGkpLnN0YXJ0T2YoJ21vbnRoJylcbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogbW9udGhEYXRlLFxuICAgICAgbmFtZTogbW9udGhEYXRlLmZvcm1hdCgnTU1NTScpLFxuICAgICAgZGF5c0luTW9udGg6IG1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpLFxuICAgICAgZmlyc3REYXlPZk1vbnRoOiBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5kYXkoKSwgLy8gMC02LCAwIGlzIFN1bmRheVxuICAgIH1cbiAgfSlcblxuICAvLyBDYWxjdWxhdGUgZXZlbnRzIGZvciBlYWNoIG1vbnRoXG4gIGNvbnN0IG1vbnRoc1dpdGhFdmVudENvdW50ID0gbW9udGhzLm1hcCgobW9udGgpID0+IHtcbiAgICBjb25zdCBldmVudHNJbk1vbnRoID0gZXZlbnRzLmZpbHRlcihcbiAgICAgIChldmVudCkgPT5cbiAgICAgICAgZXZlbnQuc3RhcnQueWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgIGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoLmRhdGUubW9udGgoKVxuICAgIClcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tb250aCxcbiAgICAgIGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuICAgIH1cbiAgfSlcblxuICAvLyBIYW5kbGUgbW9udGggY2xpY2sgdG8gbmF2aWdhdGUgdG8gbW9udGggdmlld1xuICBjb25zdCBoYW5kbGVNb250aENsaWNrID0gKGRhdGU6IGRheWpzLkRheWpzKSA9PiB7XG4gICAgc2VsZWN0RGF0ZShkYXRlKVxuICAgIHNldFZpZXcoJ21vbnRoJylcbiAgfVxuXG4gIC8vIEhhbmRsZSBkYXkgY2xpY2sgd2l0aGluIHRoZSBtaW5pIGNhbGVuZGFyXG4gIGNvbnN0IGhhbmRsZURheUNsaWNrID0gKGRhdGU6IGRheWpzLkRheWpzLCBldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIC8vIFByZXZlbnQgdHJpZ2dlcmluZyB0aGUgbW9udGggY2xpY2tcbiAgICBzZWxlY3REYXRlKGRhdGUpXG4gICAgc2V0VmlldygnZGF5JykgLy8gTmF2aWdhdGUgZGlyZWN0bHkgdG8gZGF5IHZpZXcgd2hlbiBjbGlja2luZyBvbiBhIHNwZWNpZmljIGRheVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgZGF5cyBmb3IgbWluaSBjYWxlbmRhciBpbiBlYWNoIG1vbnRoXG4gIGNvbnN0IHJlbmRlck1pbmlDYWxlbmRhciA9IChtb250aDogKHR5cGVvZiBtb250aHNXaXRoRXZlbnRDb3VudClbMF0pID0+IHtcbiAgICAvLyBHZXQgdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGgncyBjYWxlbmRhciAod2hpY2ggY291bGQgYmUgaW4gdGhlIHByZXZpb3VzIG1vbnRoKVxuICAgIGNvbnN0IGZpcnN0RGF5T2ZDYWxlbmRhciA9IG1vbnRoLmRhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuICAgIC8vIENyZWF0ZSA0MiBkYXlzICg2IHJvd3Mgb2YgNyBkYXlzKSBmb3IgY29uc2lzdGVuY3lcbiAgICBjb25zdCBkYXlzQXJyYXkgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA0MiB9LCAoXywgaSkgPT4ge1xuICAgICAgY29uc3QgZGF5ID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChpLCAnZGF5JylcbiAgICAgIGNvbnN0IGlzQ3VycmVudE1vbnRoID0gZGF5Lm1vbnRoKCkgPT09IG1vbnRoLmRhdGUubW9udGgoKVxuICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG4gICAgICBjb25zdCBpc0N1cnJlbnREYXRlID0gZGF5LmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpXG5cbiAgICAgIC8vIEdldCBldmVudHMgZm9yIHRoaXMgZGF5XG4gICAgICBjb25zdCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgZGF5LmVuZE9mKCdkYXknKVxuICAgICAgKVxuICAgICAgY29uc3QgaGFzRXZlbnRzID0gZGF5RXZlbnRzLmxlbmd0aCA+IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF5LFxuICAgICAgICBpc0N1cnJlbnRNb250aCxcbiAgICAgICAgaXNUb2RheSxcbiAgICAgICAgaXNDdXJyZW50RGF0ZSxcbiAgICAgICAgaGFzRXZlbnRzLFxuICAgICAgICBldmVudENvdW50OiBkYXlFdmVudHMubGVuZ3RoLFxuICAgICAgICAvLyBHcm91cCBldmVudHMgYnkgdGhlaXIgY2F0ZWdvcmllcyB0byBzaG93IGRpZmZlcmVudCBjb2xvcnNcbiAgICAgICAgZXZlbnRzOiBkYXlFdmVudHMsXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1taW5pLWNhbGVuZGFyLSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtWzFweF0gdGV4dC1bMC42cmVtXVwiXG4gICAgICA+XG4gICAgICAgIHsvKiBEYXkgbmFtZXMgKi99XG4gICAgICAgIHtbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXS5tYXAoKGRheU5hbWUsIGkpID0+IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2BoZWFkZXItJHtpfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZGF5TmFtZX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG5cbiAgICAgICAgey8qIENhbGVuZGFyIGRheXMgKi99XG4gICAgICAgIHtkYXlzQXJyYXkubWFwKChkYXlJbmZvLCBpKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgZGF5LSR7aX1gfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLWRheS0ke21vbnRoLmRhdGUuZm9ybWF0KCdZWVlZLU1NJyl9LSR7ZGF5SW5mby5kYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBoYW5kbGVEYXlDbGljayhkYXlJbmZvLmRheSwgZSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJyxcbiAgICAgICAgICAgICAgIWRheUluZm8uaXNDdXJyZW50TW9udGggJiYgJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ICYmXG4gICAgICAgICAgICAgICAgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5pc0N1cnJlbnREYXRlICYmXG4gICAgICAgICAgICAgICAgIWRheUluZm8uaXNUb2RheSAmJlxuICAgICAgICAgICAgICAgICdiZy1tdXRlZCByb3VuZGVkLWZ1bGwgZm9udC1ib2xkJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5oYXNFdmVudHMgJiZcbiAgICAgICAgICAgICAgICAhZGF5SW5mby5pc1RvZGF5ICYmXG4gICAgICAgICAgICAgICAgIWRheUluZm8uaXNDdXJyZW50RGF0ZSAmJlxuICAgICAgICAgICAgICAgICdmb250LW1lZGl1bSdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgIGRheUluZm8uaGFzRXZlbnRzXG4gICAgICAgICAgICAgICAgPyBgJHtkYXlJbmZvLmV2ZW50Q291bnR9IGV2ZW50JHtcbiAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5ldmVudENvdW50ID4gMSA/ICdzJyA6ICcnXG4gICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cbiAgICAgICAgICAgICAge2RheUluZm8uZGF5LmRhdGUoKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgey8qIEVuaGFuY2VkIGV2ZW50IGluZGljYXRvciAtIHNob3cgbXVsdGlwbGUgY29sb3JlZCBkb3RzIGZvciBkaWZmZXJlbnQgZXZlbnQgdHlwZXMgKi99XG4gICAgICAgICAgICB7ZGF5SW5mby5oYXNFdmVudHMgJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZSBib3R0b20tMCBmbGV4IHctZnVsbCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LVsxcHhdJyxcbiAgICAgICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSA/ICdib3R0b20tWzFweF0nIDogJydcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgey8qIFNob3cgdXAgdG8gMyBldmVudCBkb3RzIHdpdGggZGlmZmVyZW50IGNvbG9ycyBpZiBhdmFpbGFibGUgKi99XG4gICAgICAgICAgICAgICAge2RheUluZm8uZXZlbnRDb3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAnaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiAnYmctcHJpbWFyeSdcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7ZGF5SW5mby5ldmVudENvdW50ID4gMSAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6ICdiZy1ibHVlLTUwMCdcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7ZGF5SW5mby5ldmVudENvdW50ID4gMiAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6ICdiZy1ncmVlbi01MDAnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCIgY2xhc3NOYW1lPVwiaC1mdWxsXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBhdXRvLXJvd3MtZnIgZ3JpZC1jb2xzLTEgZ2FwLTQgcC00IHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCJcbiAgICAgID5cbiAgICAgICAge21vbnRoc1dpdGhFdmVudENvdW50Lm1hcCgobW9udGgsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXttb250aC5uYW1lfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU1vbnRoQ2xpY2sobW9udGguZGF0ZSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGN1cnNvci1wb2ludGVyIGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaG92ZXI6c2NhbGUtWzEuMDFdIGhvdmVyOnNoYWRvdy1tZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAgICAgIGtleT17YG1vbnRoLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aDNcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC10aXRsZS0ke21vbnRoLmRhdGUuZm9ybWF0KCdNTScpfWB9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7bW9udGgubmFtZX1cbiAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbW9udGgtZXZlbnQtY291bnQtJHttb250aC5kYXRlLmZvcm1hdCgnTU0nKX1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50fXsnICd9XG4gICAgICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuXG4gICAgICAgICAgICB7cmVuZGVyTWluaUNhbGVuZGFyKG1vbnRoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1Njcm9sbEFyZWE+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgWWVhclZpZXdcbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9tb250aC12aWV3L2NvbXBvbmVudHMvdmlldy9tb250aC12aWV3J1xuaW1wb3J0IFdlZWtWaWV3IGZyb20gJ0AvZmVhdHVyZXMvd2Vlay12aWV3L3ZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IERheVZpZXcgZnJvbSAnQC9mZWF0dXJlcy9kYXktdmlldy9jb21wb25lbnRzL3ZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBFdmVudEZvcm0gfSBmcm9tICcuLi9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICcuLi9oZWFkZXInXG5pbXBvcnQgWWVhclZpZXcgZnJvbSAnQC9mZWF0dXJlcy95ZWFyLXZpZXcvdmlldy95ZWFyLXZpZXcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IENhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGVzXG5pbXBvcnQgJ0AvbGliL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFdFRUtfREFZU19OVU1CRVJfTUFQIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplUHVibGljRmFjaW5nQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvbGliJ1xuaW1wb3J0IHR5cGUgeyBJbGFteUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgdmlldyxcbiAgICBpc0V2ZW50Rm9ybU9wZW4sXG4gICAgY2xvc2VFdmVudEZvcm0sXG4gICAgc2VsZWN0ZWRFdmVudCxcbiAgICBzZWxlY3RlZERhdGUsXG4gICAgYWRkRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQsXG4gICAgZGVsZXRlRXZlbnQsXG4gICAgZGF5TWF4RXZlbnRzLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB2aWV3TWFwID0ge1xuICAgIG1vbnRoOiA8TW9udGhWaWV3IGtleT1cIm1vbnRoXCIgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9IC8+LFxuICAgIHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG4gICAgZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcbiAgICB5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuICB9XG5cbiAgY29uc3QgaGFuZGxlT25VcGRhdGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICB1cGRhdGVFdmVudChldmVudC5pZCwgZXZlbnQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPbkRlbGV0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIGRlbGV0ZUV2ZW50KGV2ZW50LmlkKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuICAgICAgPEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXG4gICAgICB7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVQcmVzZW5jZSBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cbiAgICAgIDxDYWxlbmRhckRuZENvbnRleHQ+XG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAga2V5PXt2aWV3fVxuICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB4OiAyMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB4OiAwIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHg6IC0yMCB9fVxuICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4xLCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3ZpZXdNYXBbdmlld119XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgIDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXG4gICAgICB7LyogRXZlbnQgRm9ybSBEaWFsb2cgKi99XG4gICAgICB7aXNFdmVudEZvcm1PcGVuICYmIChcbiAgICAgICAgPEV2ZW50Rm9ybVxuICAgICAgICAgIG9uQ2xvc2U9e2Nsb3NlRXZlbnRGb3JtfVxuICAgICAgICAgIHNlbGVjdGVkRXZlbnQ9e3NlbGVjdGVkRXZlbnR9XG4gICAgICAgICAgc2VsZWN0ZWREYXRlPXtzZWxlY3RlZERhdGV9XG4gICAgICAgICAgb25BZGQ9e2FkZEV2ZW50fVxuICAgICAgICAgIG9uVXBkYXRlPXtoYW5kbGVPblVwZGF0ZX1cbiAgICAgICAgICBvbkRlbGV0ZT17aGFuZGxlT25EZWxldGV9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmNvbnN0IERFRkFVTFRfREFZX01BWF9FVkVOVFMgPSA0XG5leHBvcnQgY29uc3QgSWxhbXlDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlDYWxlbmRhclByb3BzPiA9ICh7XG4gIGV2ZW50cyxcbiAgZmlyc3REYXlPZldlZWsgPSAnc3VuZGF5JyxcbiAgaW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuICByZW5kZXJFdmVudCxcbiAgb25FdmVudENsaWNrLFxuICBvbkNlbGxDbGljayxcbiAgb25WaWV3Q2hhbmdlLFxuICBvbkV2ZW50QWRkLFxuICBvbkV2ZW50VXBkYXRlLFxuICBvbkV2ZW50RGVsZXRlLFxuICBvbkRhdGVDaGFuZ2UsXG4gIGxvY2FsZSxcbiAgdHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdG9yLFxuICB0aW1lem9uZSxcbiAgZGlzYWJsZUNlbGxDbGljayxcbiAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgZGF5TWF4RXZlbnRzID0gREVGQVVMVF9EQVlfTUFYX0VWRU5UUyxcbiAgc3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG4gIHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcbiAgaGVhZGVyQ29tcG9uZW50LFxuICBoZWFkZXJDbGFzc05hbWUsXG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPENhbGVuZGFyUHJvdmlkZXJcbiAgICAgIGV2ZW50cz17bm9ybWFsaXplUHVibGljRmFjaW5nQ2FsZW5kYXJFdmVudChldmVudHMpfVxuICAgICAgZmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cbiAgICAgIGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cbiAgICAgIHJlbmRlckV2ZW50PXtyZW5kZXJFdmVudH1cbiAgICAgIG9uRXZlbnRDbGljaz17b25FdmVudENsaWNrfVxuICAgICAgb25DZWxsQ2xpY2s9e29uQ2VsbENsaWNrfVxuICAgICAgb25WaWV3Q2hhbmdlPXtvblZpZXdDaGFuZ2V9XG4gICAgICBvbkV2ZW50QWRkPXtvbkV2ZW50QWRkfVxuICAgICAgb25FdmVudFVwZGF0ZT17b25FdmVudFVwZGF0ZX1cbiAgICAgIG9uRXZlbnREZWxldGU9e29uRXZlbnREZWxldGV9XG4gICAgICBvbkRhdGVDaGFuZ2U9e29uRGF0ZUNoYW5nZX1cbiAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICB0cmFuc2xhdG9yPXt0cmFuc2xhdG9yfVxuICAgICAgdGltZXpvbmU9e3RpbWV6b25lfVxuICAgICAgZGlzYWJsZUNlbGxDbGljaz17ZGlzYWJsZUNlbGxDbGlja31cbiAgICAgIGRpc2FibGVFdmVudENsaWNrPXtkaXNhYmxlRXZlbnRDbGlja31cbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcD17ZGlzYWJsZURyYWdBbmREcm9wfVxuICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICBzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZT17dmlld0hlYWRlckNsYXNzTmFtZX1cbiAgICAgIGhlYWRlckNvbXBvbmVudD17aGVhZGVyQ29tcG9uZW50fVxuICAgICAgaGVhZGVyQ2xhc3NOYW1lPXtoZWFkZXJDbGFzc05hbWV9XG4gICAgPlxuICAgICAgPENhbGVuZGFyQ29udGVudCAvPlxuICAgIDwvQ2FsZW5kYXJQcm92aWRlcj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBEbmRDb250ZXh0LFxuICBEcmFnT3ZlcmxheSxcbiAgTW91c2VTZW5zb3IsXG4gIHBvaW50ZXJXaXRoaW4sXG4gIFRvdWNoU2Vuc29yLFxuICB1c2VTZW5zb3IsXG4gIHVzZVNlbnNvcnMsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7XG4gIERyYWdDYW5jZWxFdmVudCxcbiAgRHJhZ0VuZEV2ZW50LFxuICBEcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7IHNuYXBDZW50ZXJUb0N1cnNvciB9IGZyb20gJ0BkbmQta2l0L21vZGlmaWVycydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2xpYi9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmludGVyZmFjZSBDYWxlbmRhckRuZENvbnRleHRQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENhbGVuZGFyRG5kQ29udGV4dCh7IGNoaWxkcmVuIH06IENhbGVuZGFyRG5kQ29udGV4dFByb3BzKSB7XG4gIGNvbnN0IHsgdXBkYXRlRXZlbnQsIHVwZGF0ZVJlY3VycmluZ0V2ZW50LCB2aWV3LCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgW2FjdGl2ZUV2ZW50LCBzZXRBY3RpdmVFdmVudF0gPSBSZWFjdC51c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4oXG4gICAgbnVsbFxuICApXG5cbiAgLy8gU3RhdGUgZm9yIHJlY3VycmluZyBldmVudCBkaWFsb2dcbiAgY29uc3QgW3JlY3VycmluZ0RpYWxvZywgc2V0UmVjdXJyaW5nRGlhbG9nXSA9IHVzZVN0YXRlPHtcbiAgICBpc09wZW46IGJvb2xlYW5cbiAgICBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+IHwgbnVsbFxuICB9Pih7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBldmVudDogbnVsbCxcbiAgICB1cGRhdGVzOiBudWxsLFxuICB9KVxuXG4gIC8vIENvbmZpZ3VyZSBzZW5zb3JzIHdpdGggcmVkdWNlZCBhY3RpdmF0aW9uIGNvbnN0cmFpbnRzIGZvciBlYXNpZXIgZHJhZ2dpbmdcbiAgY29uc3QgbW91c2VTZW5zb3IgPSB1c2VTZW5zb3IoTW91c2VTZW5zb3IsIHtcbiAgICAvLyBSZXF1aXJlIG1pbmltYWwgbW92ZW1lbnQgYmVmb3JlIGFjdGl2YXRpbmdcbiAgICBhY3RpdmF0aW9uQ29uc3RyYWludDoge1xuICAgICAgZGlzdGFuY2U6IDIsXG4gICAgfSxcbiAgfSlcblxuICBjb25zdCB0b3VjaFNlbnNvciA9IHVzZVNlbnNvcihUb3VjaFNlbnNvciwge1xuICAgIC8vIFJlZHVjZSBkZWxheSBmb3IgdG91Y2ggZGV2aWNlc1xuICAgIGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG4gICAgICBkZWxheTogMTAwLFxuICAgICAgdG9sZXJhbmNlOiA1LFxuICAgIH0sXG4gIH0pXG5cbiAgY29uc3Qgc2Vuc29ycyA9IHVzZVNlbnNvcnMobW91c2VTZW5zb3IsIHRvdWNoU2Vuc29yKVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBhY3R1YWwgZXZlbnQgdXBkYXRlXG4gIGNvbnN0IHBlcmZvcm1FdmVudFVwZGF0ZSA9IChcbiAgICBldmVudDogQ2FsZW5kYXJFdmVudCxcbiAgICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG4gICkgPT4ge1xuICAgIC8vIFZhbGlkYXRlIGlucHV0c1xuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmlkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcbiAgICAgIC8vIFNob3cgZGlhbG9nIGZvciByZWN1cnJpbmcgZXZlbnRzXG4gICAgICBzZXRSZWN1cnJpbmdEaWFsb2coe1xuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB1cGRhdGVzLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGlyZWN0bHkgdXBkYXRlIHJlZ3VsYXIgZXZlbnRzXG4gICAgICB1cGRhdGVFdmVudChldmVudC5pZCwgdXBkYXRlcylcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjb25maXJtYXRpb25cbiAgY29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgaWYgKCFyZWN1cnJpbmdEaWFsb2cuZXZlbnQgfHwgIXJlY3VycmluZ0RpYWxvZy51cGRhdGVzKSB7XG4gICAgICBzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50KHJlY3VycmluZ0RpYWxvZy5ldmVudCwgcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMsIHtcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGV2ZW50RGF0ZTogcmVjdXJyaW5nRGlhbG9nLmV2ZW50LnN0YXJ0LFxuICAgICAgfSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBlcnJvciBhbmQgcmVzZXQgZGlhbG9nIHN0YXRlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2VcbiAgY29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcbiAgICBzZXRSZWN1cnJpbmdEaWFsb2coeyBpc09wZW46IGZhbHNlLCBldmVudDogbnVsbCwgdXBkYXRlczogbnVsbCB9KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gKGV2ZW50OiBEcmFnU3RhcnRFdmVudCkgPT4ge1xuICAgIGNvbnN0IHsgYWN0aXZlIH0gPSBldmVudFxuXG4gICAgLy8gU2V0IHRoZSBhY3RpdmUgZXZlbnQgYmFzZWQgb24gdGhlIGV2ZW50IGRhdGFcbiAgICBpZiAoYWN0aXZlLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2NhbGVuZGFyLWV2ZW50Jykge1xuICAgICAgc2V0QWN0aXZlRXZlbnQoYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnRW5kID0gKGV2ZW50OiBEcmFnRW5kRXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuICAgIGlmICghYWN0aXZlIHx8ICFvdmVyIHx8ICFhY3RpdmVFdmVudCkge1xuICAgICAgc2V0QWN0aXZlRXZlbnQobnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChvdmVyLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ3RpbWUtY2VsbCcpIHtcbiAgICAgIGNvbnN0IHsgZGF0ZSwgaG91ciA9IDAsIG1pbnV0ZSA9IDAgfSA9IG92ZXIuZGF0YS5jdXJyZW50XG5cbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZXZlbnQgZHVyYXRpb24gaW4gbWludXRlc1xuICAgICAgY29uc3Qgc3RhcnQgPSBhY3RpdmVFdmVudC5zdGFydFxuICAgICAgY29uc3QgZW5kID0gYWN0aXZlRXZlbnQuZW5kXG4gICAgICBjb25zdCBkdXJhdGlvbk1pbnV0ZXMgPSBlbmQuZGlmZihzdGFydCwgJ21pbnV0ZScpXG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgc3RhcnQgdGltZSBiYXNlZCBvbiB0aGUgZHJvcCB0YXJnZXRcbiAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcbiAgICAgICAgLmhvdXIoaG91cilcbiAgICAgICAgLm1pbnV0ZShtaW51dGUgfHwgMClcblxuICAgICAgLy8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG4gICAgICBsZXQgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGR1cmF0aW9uTWludXRlcywgJ21pbnV0ZScpXG4gICAgICBpZiAobmV3RW5kLmlzU2FtZShuZXdFbmQuc3RhcnRPZignZGF5JykpKSB7XG4gICAgICAgIC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuICAgICAgICBuZXdFbmQgPSBuZXdFbmQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzXG4gICAgICBwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHtcbiAgICAgICAgc3RhcnQ6IG5ld1N0YXJ0LFxuICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChvdmVyLmRhdGEuY3VycmVudD8udHlwZSA9PT0gJ2RheS1jZWxsJykge1xuICAgICAgY29uc3QgeyBkYXRlIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuICAgICAgY29uc3QgbmV3RGF0ZSA9IGRheWpzKGRhdGUpXG5cbiAgICAgIC8vIEZvciBtdWx0aS1kYXkgZXZlbnRzLCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBkdXJhdGlvbiBpbiBkYXlzXG4gICAgICBjb25zdCBpc011bHRpRGF5RXZlbnQgPSAhYWN0aXZlRXZlbnQuc3RhcnQuaXNTYW1lKGFjdGl2ZUV2ZW50LmVuZCwgJ2RheScpXG4gICAgICBjb25zdCBzdGFydCA9IGFjdGl2ZUV2ZW50LnN0YXJ0XG4gICAgICBjb25zdCBlbmQgPSBhY3RpdmVFdmVudC5lbmRcblxuICAgICAgaWYgKGlzTXVsdGlEYXlFdmVudCkge1xuICAgICAgICBpZiAodmlldyA9PT0gJ3dlZWsnKSB7XG4gICAgICAgICAgLy8gR2V0IHRpbWUgY29tcG9uZW50cyB0byBwcmVzZXJ2ZVxuICAgICAgICAgIGNvbnN0IHN0YXJ0SG91ciA9IHN0YXJ0LmhvdXIoKVxuICAgICAgICAgIGNvbnN0IHN0YXJ0TWludXRlID0gc3RhcnQubWludXRlKClcbiAgICAgICAgICBjb25zdCBlbmRIb3VyID0gZW5kLmhvdXIoKVxuICAgICAgICAgIGNvbnN0IGVuZE1pbnV0ZSA9IGVuZC5taW51dGUoKVxuXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGR1cmF0aW9uIGluIGRheXMgdG8gcHJlc2VydmVcbiAgICAgICAgICBjb25zdCBkdXJhdGlvbkRheXMgPSBlbmQuZGlmZihzdGFydCwgJ2RheScpXG5cbiAgICAgICAgICAvLyBDcmVhdGUgbmV3IHN0YXJ0IGFuZCBlbmQgZGF0ZXNcbiAgICAgICAgICBjb25zdCBuZXdTdGFydCA9IG5ld0RhdGVcbiAgICAgICAgICAgIC5zdGFydE9mKCdkYXknKVxuICAgICAgICAgICAgLmhvdXIoc3RhcnRIb3VyKVxuICAgICAgICAgICAgLm1pbnV0ZShzdGFydE1pbnV0ZSlcbiAgICAgICAgICBjb25zdCBuZXdFbmQgPSBuZXdTdGFydFxuICAgICAgICAgICAgLmFkZChkdXJhdGlvbkRheXMsICdkYXknKVxuICAgICAgICAgICAgLmhvdXIoZW5kSG91cilcbiAgICAgICAgICAgIC5taW51dGUoZW5kTWludXRlKVxuXG4gICAgICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB7XG4gICAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBvdGhlciB2aWV3cyBsaWtlIG1vbnRoIHZpZXdcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRhdGUgc2hpZnQgKGhvdyBtYW55IGRheXMgd2UncmUgbW92aW5nIHRoZSBldmVudClcbiAgICAgICAgICBjb25zdCBkYXlzRGlmZmVyZW5jZSA9IG5ld0RhdGUuZGlmZihzdGFydC5zdGFydE9mKCdkYXknKSwgJ2RheScpXG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IHN0YXJ0IGFuZCBlbmQgd2hpbGUgcHJlc2VydmluZyB0aW1lIGNvbXBvbmVudHNcbiAgICAgICAgICBjb25zdCBuZXdTdGFydCA9IHN0YXJ0LmFkZChkYXlzRGlmZmVyZW5jZSwgJ2RheScpXG4gICAgICAgICAgY29uc3QgbmV3RW5kID0gZW5kLmFkZChkYXlzRGlmZmVyZW5jZSwgJ2RheScpXG5cbiAgICAgICAgICBwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHtcbiAgICAgICAgICAgIHN0YXJ0OiBuZXdTdGFydCxcbiAgICAgICAgICAgIGVuZDogbmV3RW5kLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBzaW5nbGUtZGF5IGV2ZW50cywgbWFpbnRhaW4gdGhlIHRpbWUgYnV0IGNoYW5nZSB0aGUgZGF0ZVxuICAgICAgICBjb25zdCBuZXdTdGFydCA9IG5ld0RhdGVcbiAgICAgICAgICAuaG91cihhY3RpdmVFdmVudC5zdGFydC5ob3VyKCkpXG4gICAgICAgICAgLm1pbnV0ZShhY3RpdmVFdmVudC5zdGFydC5taW51dGUoKSlcblxuICAgICAgICAvLyBDYWxjdWxhdGUgZXZlbnQgZHVyYXRpb24gYW5kIHNldCBuZXcgZW5kIHRpbWVcbiAgICAgICAgY29uc3QgZHVyYXRpb25NaW51dGVzID0gYWN0aXZlRXZlbnQuZW5kLmRpZmYoXG4gICAgICAgICAgYWN0aXZlRXZlbnQuc3RhcnQsXG4gICAgICAgICAgJ21pbnV0ZSdcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZHVyYXRpb25NaW51dGVzLCAnbWludXRlJylcblxuICAgICAgICBwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHtcbiAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgZW5kOiBuZXdFbmQsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlRXZlbnQobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdDYW5jZWwgPSAoX2V2ZW50OiBEcmFnQ2FuY2VsRXZlbnQpID0+IHtcbiAgICBzZXRBY3RpdmVFdmVudChudWxsKVxuICB9XG5cbiAgLy8gSWYgZHJhZyBhbmQgZHJvcCBpcyBkaXNhYmxlZCwganVzdCByZXR1cm4gY2hpbGRyZW4gd2l0aG91dCBEbmRDb250ZXh0XG4gIGlmIChkaXNhYmxlRHJhZ0FuZERyb3ApIHtcbiAgICByZXR1cm4gY2hpbGRyZW4gYXMgUmVhY3QuUmVhY3RFbGVtZW50XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RG5kQ29udGV4dFxuICAgICAgICBzZW5zb3JzPXtzZW5zb3JzfVxuICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICAgIG9uRHJhZ0NhbmNlbD17aGFuZGxlRHJhZ0NhbmNlbH1cbiAgICAgICAgY29sbGlzaW9uRGV0ZWN0aW9uPXtwb2ludGVyV2l0aGlufVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDxEcmFnT3ZlcmxheSBtb2RpZmllcnM9e1tzbmFwQ2VudGVyVG9DdXJzb3JdfT5cbiAgICAgICAgICB7YWN0aXZlRXZlbnQgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICdjdXJzb3ItZ3JhYiB0cnVuY2F0ZSByb3VuZGVkIGJnLWFtYmVyLTIwMCBwLTIgdGV4dC1bMTBweF0gc2hhZG93LWxnIHNtOnRleHQteHMnLFxuICAgICAgICAgICAgICAgIGFjdGl2ZUV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuICAgICAgICAgICAgICAgIGFjdGl2ZUV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7YWN0aXZlRXZlbnQ/LnRpdGxlfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9EcmFnT3ZlcmxheT5cbiAgICAgIDwvRG5kQ29udGV4dD5cblxuICAgICAgey8qIFJlY3VycmluZyBldmVudCBlZGl0IGRpYWxvZyAqL31cbiAgICAgIDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuICAgICAgICBpc09wZW49e3JlY3VycmluZ0RpYWxvZy5pc09wZW59XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZVJlY3VycmluZ0V2ZW50Q2xvc2V9XG4gICAgICAgIG9uQ29uZmlybT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDb25maXJtfVxuICAgICAgICBvcGVyYXRpb25UeXBlPVwiZWRpdFwiXG4gICAgICAgIGV2ZW50VGl0bGU9e3JlY3VycmluZ0RpYWxvZy5ldmVudD8udGl0bGUgfHwgJyd9XG4gICAgICAvPlxuICAgIDwvPlxuICApXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQge1xuICBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcbiAgdXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuICBkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcblxuaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG4gIGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIGluaXRpYWxWaWV3PzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdE5vZGVcbiAgb25FdmVudENsaWNrPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uQ2VsbENsaWNrPzogKHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIG9uVmlld0NoYW5nZT86ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgb25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIGxvY2FsZT86IHN0cmluZ1xuICB0aW1lem9uZT86IHN0cmluZ1xuICBkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cbiAgZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuICBkYXlNYXhFdmVudHM6IG51bWJlclxuICBzdGlja3lWaWV3SGVhZGVyPzogYm9vbGVhblxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuICBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuICAvLyBUcmFuc2xhdGlvbiBvcHRpb25zIC0gcHJvdmlkZSBlaXRoZXIgdHJhbnNsYXRpb25zIG9iamVjdCBPUiB0cmFuc2xhdG9yIGZ1bmN0aW9uXG4gIHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuICB0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGV2ZW50cyA9IFtdLFxuICBmaXJzdERheU9mV2VlayA9IDAsIC8vIERlZmF1bHQgdG8gU3VuZGF5LFxuICBpbml0aWFsVmlldyA9ICdtb250aCcsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIG9uRXZlbnRBZGQsXG4gIG9uRXZlbnRVcGRhdGUsXG4gIG9uRXZlbnREZWxldGUsXG4gIG9uRGF0ZUNoYW5nZSxcbiAgbG9jYWxlLFxuICB0aW1lem9uZSxcbiAgZGlzYWJsZUNlbGxDbGljayxcbiAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgZGF5TWF4RXZlbnRzLFxuICBzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcbiAgdmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuICBoZWFkZXJDb21wb25lbnQsXG4gIGhlYWRlckNsYXNzTmFtZSxcbiAgdHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdG9yLFxufSkgPT4ge1xuICAvLyBTdGF0ZVxuICBjb25zdCBbY3VycmVudERhdGUsIHNldEN1cnJlbnREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzPihkYXlqcygpKVxuICBjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTwnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcic+KFxuICAgIGluaXRpYWxWaWV3XG4gIClcbiAgY29uc3QgW2N1cnJlbnRFdmVudHMsIHNldEN1cnJlbnRFdmVudHNdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudFtdPihldmVudHMpXG4gIGNvbnN0IFtpc0V2ZW50Rm9ybU9wZW4sIHNldElzRXZlbnRGb3JtT3Blbl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkRXZlbnQsIHNldFNlbGVjdGVkRXZlbnRdID0gdXNlU3RhdGU8Q2FsZW5kYXJFdmVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZWxlY3RlZERhdGUsIHNldFNlbGVjdGVkRGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtjdXJyZW50TG9jYWxlLCBzZXRDdXJyZW50TG9jYWxlXSA9IHVzZVN0YXRlPHN0cmluZz4obG9jYWxlIHx8ICdlbicpXG4gIGNvbnN0IFtjdXJyZW50VGltZXpvbmUsIHNldEN1cnJlbnRUaW1lem9uZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KHRpbWV6b25lIHx8ICcnKVxuXG4gIC8vIENyZWF0ZSB0cmFuc2xhdGlvbiBmdW5jdGlvblxuICBjb25zdCB0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHRyYW5zbGF0b3IpIHtcbiAgICAgIC8vIFVzZSBwcm92aWRlZCB0cmFuc2xhdG9yIGZ1bmN0aW9uXG4gICAgICByZXR1cm4gdHJhbnNsYXRvclxuICAgIH1cblxuICAgIGlmICh0cmFuc2xhdGlvbnMpIHtcbiAgICAgIC8vIFVzZSBwcm92aWRlZCB0cmFuc2xhdGlvbnMgb2JqZWN0XG4gICAgICByZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiB0cmFuc2xhdGlvbnNba2V5XSB8fCBrZXlcbiAgICB9XG4gICAgLy8gVXNlIGRlZmF1bHQgdHJhbnNsYXRpb25zXG4gICAgcmV0dXJuIChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gZGVmYXVsdFRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuICB9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGV2ZW50cyBmb3IgYSBzcGVjaWZpYyBkYXRlIHJhbmdlIChvbi1kZW1hbmQgZ2VuZXJhdGlvbilcbiAgY29uc3QgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgICAgIGNvbnN0IGFsbEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cblxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBjdXJyZW50RXZlbnRzKSB7XG4gICAgICAgIGlmIChldmVudC5ycnVsZSkge1xuICAgICAgICAgIC8vIEdlbmVyYXRlIHJlY3VycmluZyBpbnN0YW5jZXMgZm9yIHRoZSBzcGVjaWZpYyByYW5nZVxuICAgICAgICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50cyA9IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzKHtcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgY3VycmVudEV2ZW50cyxcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgICAgICAgIGVuZERhdGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBhbGxFdmVudHMucHVzaCguLi5yZWN1cnJpbmdFdmVudHMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWRkIG5vbi1yZWN1cnJpbmcgZXZlbnRzIHdpdGggY29tcHJlaGVuc2l2ZSByYW5nZSBjaGVja2luZ1xuICAgICAgICAgIGNvbnN0IGV2ZW50U3RhcnRzSW5SYW5nZSA9XG4gICAgICAgICAgICBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cbiAgICAgICAgICBjb25zdCBldmVudEVuZHNJblJhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcbiAgICAgICAgICAgIGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXG4gICAgICAgICAgY29uc3QgZXZlbnRTcGFuc1JhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzQmVmb3JlKHN0YXJ0RGF0ZSkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kRGF0ZSlcblxuICAgICAgICAgIGlmIChldmVudFN0YXJ0c0luUmFuZ2UgfHwgZXZlbnRFbmRzSW5SYW5nZSB8fCBldmVudFNwYW5zUmFuZ2UpIHtcbiAgICAgICAgICAgIGFsbEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxsRXZlbnRzXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50c11cbiAgKVxuXG4gIC8vIEdldCB0aGUgY3VycmVudCB2aWV3J3MgZGF0ZSByYW5nZSBmb3Igb24tZGVtYW5kIGV2ZW50IGdlbmVyYXRpb25cbiAgY29uc3QgZ2V0Q3VycmVudFZpZXdSYW5nZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGUuZW5kT2YoJ2RheScpLFxuICAgICAgICB9XG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5zdGFydE9mKCd3ZWVrJylcbiAgICAgICAgICAgIC5zdWJ0cmFjdChmaXJzdERheU9mV2VlayA9PT0gMSA/IDEgOiAwLCAnZGF5JyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZVxuICAgICAgICAgICAgLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgIC5hZGQoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICB9XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnREYXRlXG4gICAgICAgICAgICAuc3RhcnRPZignbW9udGgnKVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgLnN1YnRyYWN0KGZpcnN0RGF5T2ZXZWVrID09PSAxID8gMSA6IDAsICdkYXknKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlXG4gICAgICAgICAgICAuZW5kT2YoJ21vbnRoJylcbiAgICAgICAgICAgIC5lbmRPZignd2VlaycpXG4gICAgICAgICAgICAuYWRkKGZpcnN0RGF5T2ZXZWVrID09PSAxID8gMSA6IDAsICdkYXknKSxcbiAgICAgICAgfVxuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3llYXInKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCd5ZWFyJyksXG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZS5lbmRPZignbW9udGgnKSxcbiAgICAgICAgfVxuICAgIH1cbiAgfSwgW2N1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vla10pXG5cbiAgLy8gR2V0IHByb2Nlc3NlZCBldmVudHMgZm9yIHRoZSBjdXJyZW50IHZpZXcgKG9uLWRlbWFuZClcbiAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRDdXJyZW50Vmlld1JhbmdlKClcbiAgICByZXR1cm4gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpXG4gIH0sIFtnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEN1cnJlbnRWaWV3UmFuZ2VdKVxuXG4gIC8vIFVwZGF0ZSBldmVudHMgd2hlbiBldmVudHMgcHJvcCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cyhldmVudHMpXG4gICAgfVxuICB9LCBbZXZlbnRzXSlcblxuICAvLyBDb25maWd1cmUgbG9jYWxlIHdoZW4gbG9jYWxlIHByb3AgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2NhbGUpIHtcbiAgICAgIHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuICAgICAgZGF5anMubG9jYWxlKGxvY2FsZSlcbiAgICB9XG4gIH0sIFtsb2NhbGVdKVxuXG4gIC8vIENvbmZpZ3VyZSB0aW1lem9uZSBmb3IgY3VycmVudERhdGUgd2hlbiB0aW1lem9uZSBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGltZXpvbmUpIHtcbiAgICAgIHNldEN1cnJlbnRUaW1lem9uZSh0aW1lem9uZSlcbiAgICAgIGRheWpzLnR6LnNldERlZmF1bHQodGltZXpvbmUpXG4gICAgfVxuICB9LCBbdGltZXpvbmVdKVxuXG4gIC8vIEhhbmRsZXJzXG4gIGNvbnN0IHNlbGVjdERhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIHNldEN1cnJlbnREYXRlKGRhdGUpXG4gICAgICBvbkRhdGVDaGFuZ2U/LihkYXRlKVxuICAgIH0sXG4gICAgW29uRGF0ZUNoYW5nZV1cbiAgKVxuXG4gIGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBjdXJyZW50RGF0ZS5hZGQoMSwgJ21vbnRoJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgxLCAnd2VlaycpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgxLCAnZGF5JylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgxLCAneWVhcicpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgW3ZpZXcsIG9uRGF0ZUNoYW5nZV0pXG5cbiAgY29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICdtb250aCcpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAnd2VlaycpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICdkYXknKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3llYXInKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH0sIFt2aWV3LCBvbkRhdGVDaGFuZ2VdKVxuXG4gIGNvbnN0IHRvZGF5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5ld0RhdGUgPSBkYXlqcygpXG4gICAgc2V0Q3VycmVudERhdGUobmV3RGF0ZSlcbiAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICB9LCBbb25EYXRlQ2hhbmdlXSlcblxuICBjb25zdCBhZGRFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cygocHJldkV2ZW50cykgPT4gWy4uLnByZXZFdmVudHMsIGV2ZW50XSlcbiAgICAgIG9uRXZlbnRBZGQ/LihldmVudClcbiAgICB9LFxuICAgIFtvbkV2ZW50QWRkXVxuICApXG5cbiAgY29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnRJZDogc3RyaW5nLCB1cGRhdGVkRXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoKHByZXZFdmVudHMpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IHByZXZFdmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5pZCA9PT0gZXZlbnRJZCkge1xuICAgICAgICAgICAgY29uc3QgbmV3RXZlbnQgPSB7IC4uLmV2ZW50LCAuLi51cGRhdGVkRXZlbnQgfVxuICAgICAgICAgICAgb25FdmVudFVwZGF0ZT8uKG5ld0V2ZW50KVxuICAgICAgICAgICAgcmV0dXJuIG5ld0V2ZW50XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBldmVudFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gdXBkYXRlZFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvbkV2ZW50VXBkYXRlXVxuICApXG5cbiAgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBldmVudDogQ2FsZW5kYXJFdmVudCxcbiAgICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG4gICAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgICApID0+IHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgdXBkYXRlZCBldmVudCB3aXRoIHRoZSB1cGRhdGVzIGFwcGxpZWRcbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudCA9IHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfVxuXG4gICAgICAvLyBDYWxsIHRoZSByZWd1bGFyIHVwZGF0ZSBjYWxsYmFjayB3aXRoIHRoZSB1cGRhdGVkIGV2ZW50XG4gICAgICBvbkV2ZW50VXBkYXRlPy4odXBkYXRlZEV2ZW50KVxuXG4gICAgICAvLyBVc2Ugb3VyIGltcGxlbWVudGVkIHJlY3VycmluZyBldmVudCB1cGRhdGUgZnVuY3Rpb25cbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICB0YXJnZXRFdmVudDogZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudEV2ZW50cyh1cGRhdGVkRXZlbnRzKVxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG4gIClcblxuICBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG4gICAgICAvLyBDYWxsIHRoZSByZWd1bGFyIGRlbGV0ZSBjYWxsYmFjayB3aXRoIHRoZSBldmVudCBiZWluZyBkZWxldGVkXG4gICAgICBvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cbiAgICAgIC8vIFVzZSBvdXIgaW1wbGVtZW50ZWQgcmVjdXJyaW5nIGV2ZW50IGRlbGV0ZSBmdW5jdGlvblxuICAgICAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IGRlbGV0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG4gICAgICAgIHRhcmdldEV2ZW50OiBldmVudCxcbiAgICAgICAgY3VycmVudEV2ZW50cyxcbiAgICAgICAgc2NvcGU6IG9wdGlvbnMuc2NvcGUsXG4gICAgICB9KVxuXG4gICAgICBzZXRDdXJyZW50RXZlbnRzKHVwZGF0ZWRFdmVudHMpXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50cywgb25FdmVudERlbGV0ZV1cbiAgKVxuXG4gIGNvbnN0IGRlbGV0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50SWQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cygocHJldkV2ZW50cykgPT4ge1xuICAgICAgICBjb25zdCBldmVudFRvRGVsZXRlID0gcHJldkV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuaWQgPT09IGV2ZW50SWQpXG4gICAgICAgIGlmIChldmVudFRvRGVsZXRlKSB7XG4gICAgICAgICAgb25FdmVudERlbGV0ZT8uKGV2ZW50VG9EZWxldGUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZFdmVudHMuZmlsdGVyKChldmVudCkgPT4gZXZlbnQuaWQgIT09IGV2ZW50SWQpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uRXZlbnREZWxldGVdXG4gIClcblxuICBjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICBzZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuICAgIHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICB9LCBbXSlcblxuICBjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTZWxlY3RlZERhdGUobnVsbClcbiAgICBzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG4gICAgc2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuICB9LCBbXSlcblxuICAvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuICBjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5ld1ZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4ge1xuICAgICAgc2V0VmlldyhuZXdWaWV3KVxuICAgICAgb25WaWV3Q2hhbmdlPy4obmV3VmlldylcbiAgICB9LFxuICAgIFtvblZpZXdDaGFuZ2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChvbkV2ZW50Q2xpY2spIHtcbiAgICAgICAgb25FdmVudENsaWNrKGV2ZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdEV2ZW50KGV2ZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2Rpc2FibGVDZWxsQ2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsIGVuZERhdGU6IGRheWpzLkRheWpzKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKG9uQ2VsbENsaWNrKSB7XG4gICAgICAgIG9uQ2VsbENsaWNrKHN0YXJ0RGF0ZSwgZW5kRGF0ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNlbGVjdGVkRGF0ZShzdGFydERhdGUpXG4gICAgICAgIHNldFNlbGVjdGVkRXZlbnQoe1xuICAgICAgICAgIHRpdGxlOiB0KCduZXdFdmVudCcpLFxuICAgICAgICAgIHN0YXJ0OiBzdGFydERhdGUsXG4gICAgICAgICAgZW5kOiBlbmREYXRlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgICBhbGxEYXk6IGZhbHNlLFxuICAgICAgICB9IGFzIENhbGVuZGFyRXZlbnQpXG4gICAgICAgIHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlT3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRlPzogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgIHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRFdmVudCh7XG4gICAgICAgIHRpdGxlOiB0KCduZXdFdmVudCcpLFxuICAgICAgICBzdGFydDogZGF0ZSA/PyBjdXJyZW50RGF0ZSxcbiAgICAgICAgZW5kOiBkYXRlID8/IGN1cnJlbnREYXRlLmFkZCgxLCAnaG91cicpLFxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgIGFsbERheTogZmFsc2UsXG4gICAgICB9IGFzIENhbGVuZGFyRXZlbnQpXG4gICAgICBzZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcbiAgICB9LFxuICAgIFtjdXJyZW50RGF0ZSwgdF1cbiAgKVxuXG4gIC8vIEZpbmQgcGFyZW50IHJlY3VycmluZyBldmVudCBmb3IgYSBnaXZlbiBldmVudCBpbnN0YW5jZVxuICBjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG4gICAgICAvLyBHZW5lcmF0ZSBVSUQgaWYgbWlzc2luZyAoZm9sbG93aW5nIFJGQyA1NTQ1IGNvbXBsaWFuY2UpXG4gICAgICBjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblxuICAgICAgY29uc3QgcGFyZW50RXZlbnQgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGUpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50VUlEID0gZS51aWQgfHwgYCR7ZS5pZH1AaWxhbXkuY2FsZW5kYXJgXG4gICAgICAgIHJldHVybiBwYXJlbnRVSUQgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gcGFyZW50RXZlbnQgfHwgbnVsbFxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHNdXG4gIClcblxuICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcbiAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgY3VycmVudERhdGUsXG4gICAgICB2aWV3LFxuICAgICAgZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG4gICAgICByYXdFdmVudHM6IGN1cnJlbnRFdmVudHMsXG4gICAgICBjdXJyZW50TG9jYWxlLFxuICAgICAgaXNFdmVudEZvcm1PcGVuLFxuICAgICAgc2VsZWN0ZWRFdmVudCxcbiAgICAgIHNlbGVjdGVkRGF0ZSxcbiAgICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgICAgc2V0Q3VycmVudERhdGUsXG4gICAgICBzZWxlY3REYXRlLFxuICAgICAgc2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcbiAgICAgIG5leHRQZXJpb2QsXG4gICAgICBwcmV2UGVyaW9kLFxuICAgICAgdG9kYXksXG4gICAgICBhZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50LFxuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICBkZWxldGVFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgb3BlbkV2ZW50Rm9ybTogaGFuZGxlT3BlbkV2ZW50Rm9ybSxcbiAgICAgIGNsb3NlRXZlbnRGb3JtLFxuICAgICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuICAgICAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuICAgICAgcmVuZGVyRXZlbnQsXG4gICAgICBvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuICAgICAgbG9jYWxlLFxuICAgICAgdGltZXpvbmU6IGN1cnJlbnRUaW1lem9uZSxcbiAgICAgIGRpc2FibGVDZWxsQ2xpY2ssXG4gICAgICBkaXNhYmxlRXZlbnRDbGljayxcbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgICAgIGRheU1heEV2ZW50cyxcbiAgICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgaGVhZGVyQ29tcG9uZW50LFxuICAgICAgaGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb25cbiAgICAgIHQsXG4gICAgfSksXG4gICAgW1xuICAgICAgY3VycmVudERhdGUsXG4gICAgICB2aWV3LFxuICAgICAgcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgY3VycmVudEV2ZW50cyxcbiAgICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgICBpc0V2ZW50Rm9ybU9wZW4sXG4gICAgICBzZWxlY3RlZEV2ZW50LFxuICAgICAgc2VsZWN0ZWREYXRlLFxuICAgICAgZmlyc3REYXlPZldlZWssXG4gICAgICBzZWxlY3REYXRlLFxuICAgICAgaGFuZGxlVmlld0NoYW5nZSxcbiAgICAgIG5leHRQZXJpb2QsXG4gICAgICBoYW5kbGVPcGVuRXZlbnRGb3JtLFxuICAgICAgcHJldlBlcmlvZCxcbiAgICAgIHRvZGF5LFxuICAgICAgYWRkRXZlbnQsXG4gICAgICB1cGRhdGVFdmVudCxcbiAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgZGVsZXRlRXZlbnQsXG4gICAgICBkZWxldGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIGNsb3NlRXZlbnRGb3JtLFxuICAgICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuICAgICAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuICAgICAgcmVuZGVyRXZlbnQsXG4gICAgICBoYW5kbGVFdmVudENsaWNrLFxuICAgICAgaGFuZGxlRGF0ZUNsaWNrLFxuICAgICAgbG9jYWxlLFxuICAgICAgY3VycmVudFRpbWV6b25lLFxuICAgICAgZGlzYWJsZUNlbGxDbGljayxcbiAgICAgIGRpc2FibGVFdmVudENsaWNrLFxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wLFxuICAgICAgZGF5TWF4RXZlbnRzLFxuICAgICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICBoZWFkZXJDb21wb25lbnQsXG4gICAgICBoZWFkZXJDbGFzc05hbWUsXG4gICAgICAvLyBUcmFuc2xhdGlvbiBkZXBlbmRlbmNpZXNcbiAgICAgIHQsXG4gICAgXVxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8Q2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucyA9IHtcbiAgLy8gQ29tbW9uIGFjdGlvbnNcbiAgdG9kYXk6ICdUb2RheScsXG4gIGNyZWF0ZTogJ0NyZWF0ZScsXG4gIG5ldzogJ05ldycsXG4gIHVwZGF0ZTogJ1VwZGF0ZScsXG4gIGRlbGV0ZTogJ0RlbGV0ZScsXG4gIGNhbmNlbDogJ0NhbmNlbCcsXG4gIGV4cG9ydDogJ0V4cG9ydCcsXG5cbiAgLy8gRXZlbnQgcmVsYXRlZFxuICBldmVudDogJ0V2ZW50JyxcbiAgZXZlbnRzOiAnRXZlbnRzJyxcbiAgbmV3RXZlbnQ6ICdOZXcgRXZlbnQnLFxuICB0aXRsZTogJ1RpdGxlJyxcbiAgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicsXG4gIGxvY2F0aW9uOiAnTG9jYXRpb24nLFxuICBhbGxEYXk6ICdBbGwgZGF5JyxcbiAgc3RhcnREYXRlOiAnU3RhcnQgRGF0ZScsXG4gIGVuZERhdGU6ICdFbmQgRGF0ZScsXG4gIHN0YXJ0VGltZTogJ1N0YXJ0IFRpbWUnLFxuICBlbmRUaW1lOiAnRW5kIFRpbWUnLFxuICBjb2xvcjogJ0NvbG9yJyxcblxuICAvLyBFdmVudCBmb3JtXG4gIGNyZWF0ZUV2ZW50OiAnQ3JlYXRlIEV2ZW50JyxcbiAgZWRpdEV2ZW50OiAnRWRpdCBFdmVudCcsXG4gIGFkZE5ld0V2ZW50OiAnQWRkIGEgbmV3IGV2ZW50IHRvIHlvdXIgY2FsZW5kYXInLFxuICBlZGl0RXZlbnREZXRhaWxzOiAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnLFxuICBldmVudFRpdGxlUGxhY2Vob2xkZXI6ICdFdmVudCB0aXRsZScsXG4gIGV2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuICBldmVudExvY2F0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpJyxcblxuICAvLyBSZWN1cnJlbmNlXG4gIHJlcGVhdDogJ1JlcGVhdCcsXG4gIHJlcGVhdHM6ICdSZXBlYXRzJyxcbiAgY3VzdG9tUmVjdXJyZW5jZTogJ0N1c3RvbSByZWN1cnJlbmNlJyxcbiAgZGFpbHk6ICdEYWlseScsXG4gIHdlZWtseTogJ1dlZWtseScsXG4gIG1vbnRobHk6ICdNb250aGx5JyxcbiAgeWVhcmx5OiAnWWVhcmx5JyxcbiAgaW50ZXJ2YWw6ICdJbnRlcnZhbCcsXG4gIHJlcGVhdE9uOiAnUmVwZWF0IG9uJyxcbiAgbmV2ZXI6ICdOZXZlcicsXG4gIGNvdW50OiAnQ291bnQnLFxuICBldmVyeTogJ0V2ZXJ5JyxcbiAgZW5kczogJ0VuZHMnLFxuICBhZnRlcjogJ0FmdGVyJyxcbiAgb2NjdXJyZW5jZXM6ICdvY2N1cnJlbmNlcycsXG4gIG9uOiAnT24nLFxuXG4gIC8vIFJlY3VycmVuY2UgZWRpdCBkaWFsb2dcbiAgZWRpdFJlY3VycmluZ0V2ZW50OiAnRWRpdCByZWN1cnJpbmcgZXZlbnQnLFxuICBkZWxldGVSZWN1cnJpbmdFdmVudDogJ0RlbGV0ZSByZWN1cnJpbmcgZXZlbnQnLFxuICBlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcbiAgICAnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBlZGl0IGl0PycsXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG4gICAgJ2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZGVsZXRlIGl0PycsXG4gIHRoaXNFdmVudDogJ1RoaXMgZXZlbnQnLFxuICB0aGlzRXZlbnREZXNjcmlwdGlvbjogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIHRoaXNBbmRGb2xsb3dpbmdFdmVudHM6ICdUaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzJyxcbiAgdGhpc0FuZEZvbGxvd2luZ0V2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcbiAgYWxsRXZlbnRzOiAnQWxsIGV2ZW50cycsXG4gIGFsbEV2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuICBvbmx5Q2hhbmdlVGhpczogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIGNoYW5nZVRoaXNBbmRGdXR1cmU6ICdDaGFuZ2UgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG4gIGNoYW5nZUVudGlyZVNlcmllczogJ0NoYW5nZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuICBvbmx5RGVsZXRlVGhpczogJ09ubHkgZGVsZXRlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIGRlbGV0ZVRoaXNBbmRGdXR1cmU6ICdEZWxldGUgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG4gIGRlbGV0ZUVudGlyZVNlcmllczogJ0RlbGV0ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXG4gIC8vIFZpZXcgdHlwZXNcbiAgbW9udGg6ICdNb250aCcsXG4gIHdlZWs6ICdXZWVrJyxcbiAgZGF5OiAnRGF5JyxcbiAgeWVhcjogJ1llYXInLFxuICBtb3JlOiAnbW9yZScsXG5cbiAgLy8gRGF5cyBvZiB3ZWVrXG4gIHN1bmRheTogJ1N1bmRheScsXG4gIG1vbmRheTogJ01vbmRheScsXG4gIHR1ZXNkYXk6ICdUdWVzZGF5JyxcbiAgd2VkbmVzZGF5OiAnV2VkbmVzZGF5JyxcbiAgdGh1cnNkYXk6ICdUaHVyc2RheScsXG4gIGZyaWRheTogJ0ZyaWRheScsXG4gIHNhdHVyZGF5OiAnU2F0dXJkYXknLFxuXG4gIC8vIERheXMgc2hvcnRcbiAgc3VuOiAnU3VuJyxcbiAgbW9uOiAnTW9uJyxcbiAgdHVlOiAnVHVlJyxcbiAgd2VkOiAnV2VkJyxcbiAgdGh1OiAnVGh1JyxcbiAgZnJpOiAnRnJpJyxcbiAgc2F0OiAnU2F0JyxcblxuICAvLyBNb250aHNcbiAgamFudWFyeTogJ0phbnVhcnknLFxuICBmZWJydWFyeTogJ0ZlYnJ1YXJ5JyxcbiAgbWFyY2g6ICdNYXJjaCcsXG4gIGFwcmlsOiAnQXByaWwnLFxuICBtYXk6ICdNYXknLFxuICBqdW5lOiAnSnVuZScsXG4gIGp1bHk6ICdKdWx5JyxcbiAgYXVndXN0OiAnQXVndXN0JyxcbiAgc2VwdGVtYmVyOiAnU2VwdGVtYmVyJyxcbiAgb2N0b2JlcjogJ09jdG9iZXInLFxuICBub3ZlbWJlcjogJ05vdmVtYmVyJyxcbiAgZGVjZW1iZXI6ICdEZWNlbWJlcicsXG59XG4iLAogICAgIi8vIE1haW4gY2FsZW5kYXIgY29tcG9uZW50XG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyL2lsYW15LWNhbGVuZGFyJ1xuXG4vLyBQdWJsaWMgY2FsZW5kYXIgY29udGV4dCBob29rXG5leHBvcnQgeyB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcbiAgZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG4gIGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJy4vbGliL3JlY3VycmVuY2UtaGFuZGxlcidcblxuLy8gRXhwb3J0IHR5cGVzXG5leHBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJy4vbGliL3JlY3VycmVuY2UtaGFuZGxlci90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90eXBlcydcbmV4cG9ydCB0eXBlIHsgSWxhbXlDYWxlbmRhclByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBXZWVrRGF5cyB9IGZyb20gJy4vY29tcG9uZW50cy90eXBlcydcbmV4cG9ydCB0eXBlIHsgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIFJlLWV4cG9ydCBycnVsZS5qcyB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgRnJlcXVlbmN5LCBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG4vLyBUcmFuc2xhdGlvbiBzeXN0ZW1cbmV4cG9ydCB0eXBlIHtcbiAgVHJhbnNsYXRpb25zLFxuICBUcmFuc2xhdGlvbktleSxcbiAgVHJhbnNsYXRvckZ1bmN0aW9uLFxufSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5leHBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsNEJBQVMsNEJBQWlCO0FBQzFCLDRCQUFnQjs7O0FDRWhCO0FBb0RPLElBQU0sa0JBQ1gsY0FBK0MsU0FBUztBQUVuRCxJQUFNLHFCQUFxQixNQUEyQjtBQUFBLEVBQzNELE1BQU0sVUFBVSxXQUFXLGVBQWU7QUFBQSxFQUMxQyxJQUFJLFlBQVksV0FBVztBQUFBLElBQ3pCLE1BQU0sSUFBSSxNQUFNLDJEQUEyRDtBQUFBLEVBQzdFO0FBQUEsRUFDQSxPQUFPO0FBQUE7QUErQkYsSUFBTSwwQkFBMEIsTUFBcUM7QUFBQSxFQUMxRSxNQUFNLFVBQVUsV0FBVyxlQUFlO0FBQUEsRUFDMUMsSUFBSSxZQUFZLFdBQVc7QUFBQSxJQUN6QixNQUFNLElBQUksTUFDUixnRUFDRjtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNMLGFBQWEsUUFBUTtBQUFBLElBQ3JCLE1BQU0sUUFBUTtBQUFBLElBQ2QsUUFBUSxRQUFRO0FBQUEsSUFDaEIsaUJBQWlCLFFBQVE7QUFBQSxJQUN6QixlQUFlLFFBQVE7QUFBQSxJQUN2QixjQUFjLFFBQVE7QUFBQSxJQUN0QixnQkFBZ0IsUUFBUTtBQUFBLElBQ3hCLGdCQUFnQixRQUFRO0FBQUEsSUFDeEIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsU0FBUyxRQUFRO0FBQUEsSUFDakIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsWUFBWSxRQUFRO0FBQUEsSUFDcEIsT0FBTyxRQUFRO0FBQUEsSUFDZixVQUFVLFFBQVE7QUFBQSxJQUNsQixhQUFhLFFBQVE7QUFBQSxJQUNyQixhQUFhLFFBQVE7QUFBQSxJQUNyQixlQUFlLFFBQVE7QUFBQSxJQUN2QixnQkFBZ0IsUUFBUTtBQUFBLEVBQzFCO0FBQUE7OztBQ3hIRjtBQUVBOzs7QUNEQTs7O0FDRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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LEVBQ0EsZUFBZTtBQUFBLEVBQ2YsbUJBQW1CO0FBQUEsRUFDbkIsc0JBQXNCO0FBQUEsRUFDdEI7QUFBQSxFQUNBO0FBQUEsTUFDSTtBQUFBLEVBQ0osdUJBQ0UsTUEwQkUsa0JBMUJGO0FBQUEsSUFDRSxRQUFRLG1DQUFtQyxNQUFNO0FBQUEsSUFDakQsZ0JBQWdCLHFCQUFxQjtBQUFBLElBQ3JDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBdkJGLDBCQXlCRSxNQUFDLGlCQUFELEVBQWlCO0FBQUEsR0FDakI7QUFBQTs7O0FJbEhOLGtCQUFTOyIsCiAgImRlYnVnSWQiOiAiNjEwRDNCNjgxQ0ZGQUEzRDY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=