react-magma-dom 5.1.0-rc.99 → 5.1.0

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/esm/index.js CHANGED
@@ -5,7 +5,7 @@ import { v4 } from 'uuid';
5
5
  import _styled from '@emotion/styled/base';
6
6
  import { AutoAwesomeIcon, CloseIcon, InfoIcon, CheckCircleIcon, WarningIcon, ErrorIcon, ChevronRightIcon, ClearIcon, CheckBoxIcon, CheckBoxOutlineBlankIcon, SortDoubleArrowIcon, SouthIcon, NorthIcon, ArrowDropDownIcon, WestIcon, EastIcon, IndeterminateCheckBoxIcon, KeyboardArrowLeftIcon, KeyboardArrowRightIcon, ArrowBackIcon, KeyboardIcon, ScheduleIcon, EventIcon, ArrowDropUpIcon, ArrowRightIcon, ArrowLeftIcon, CheckIcon, ExpandMoreIcon, ExpandLessIcon, ArrowBackIosIcon, ArrowForwardIosIcon, ArrowForwardIcon, RadioButtonCheckedIcon, RadioButtonUncheckedIcon, SearchIcon, CancelIcon, FolderIcon, ArticleIcon } from 'react-magma-icons';
7
7
  import ReactDOM__default, { flushSync } from 'react-dom';
8
- import { isBefore, isSameDay, isAfter, format as format$1, startOfMonth, subMonths, addMonths, setMonth, setYear, endOfWeek, addDays, addWeeks, startOfWeek, subDays, subWeeks, endOfMonth, getDay, differenceInDays, isSameMonth, getYear, startOfDay, parse, setHours, endOfDay, isMatch, isValid } from 'date-fns';
8
+ import { isBefore, isSameDay, isAfter, format as format$1, startOfMonth, subMonths, addMonths, setMonth, setYear, endOfWeek, addDays, addWeeks, startOfWeek, subDays, subWeeks, endOfMonth, getDay, differenceInDays, isSameMonth, getYear, startOfDay, isValid, parse, setHours, endOfDay, isMatch } from 'date-fns';
9
9
  import { enUS } from 'date-fns/locale';
10
10
  import { useReducedMotion, AnimatePresence, motion } from 'framer-motion';
11
11
  import { useMultipleSelection, useSelect, useCombobox } from 'downshift';
@@ -4287,13 +4287,15 @@ var AppBar = /*#__PURE__*/forwardRef(function (props, ref) {
4287
4287
  }), children));
4288
4288
  });
4289
4289
 
4290
- var _excluded$b = ["children", "isInverse", "onClick", "testId", "variant"];
4290
+ var _excluded$b = ["children", "isInverse", "leftIcon", "onClick", "rightIcon", "testId", "variant", "weight"];
4291
4291
  var BadgeColor;
4292
4292
  (function (BadgeColor) {
4293
4293
  BadgeColor["danger"] = "danger";
4294
+ BadgeColor["info"] = "info";
4294
4295
  BadgeColor["primary"] = "primary";
4295
4296
  BadgeColor["secondary"] = "secondary";
4296
4297
  BadgeColor["success"] = "success";
4298
+ BadgeColor["warning"] = "warning";
4297
4299
  BadgeColor["light"] = "light";
4298
4300
  })(BadgeColor || (BadgeColor = {}));
4299
4301
  var BadgeVariant;
@@ -4301,11 +4303,62 @@ var BadgeVariant;
4301
4303
  BadgeVariant["counter"] = "counter";
4302
4304
  BadgeVariant["label"] = "label";
4303
4305
  })(BadgeVariant || (BadgeVariant = {}));
4306
+ var BadgeWeight;
4307
+ (function (BadgeWeight) {
4308
+ BadgeWeight["default"] = "default";
4309
+ BadgeWeight["light"] = "light";
4310
+ })(BadgeWeight || (BadgeWeight = {}));
4311
+ function buildInverseLightWeightBadgeBackground(props) {
4312
+ switch (props.color) {
4313
+ case BadgeColor.danger:
4314
+ return curriedTransparentize(0.5, props.theme.colors.danger700);
4315
+ case BadgeColor.info:
4316
+ return curriedTransparentize(0.5, props.theme.colors.info700);
4317
+ case BadgeColor.light:
4318
+ return 'transparent';
4319
+ case BadgeColor.secondary:
4320
+ return curriedTransparentize(0.6, props.theme.colors.neutral900);
4321
+ case BadgeColor.success:
4322
+ return curriedTransparentize(0.5, props.theme.colors.success700);
4323
+ case BadgeColor.warning:
4324
+ return curriedTransparentize(0.5, props.theme.colors.warning700);
4325
+ case BadgeColor.primary:
4326
+ default:
4327
+ return curriedTransparentize(0.5, props.theme.colors.primary700);
4328
+ }
4329
+ }
4330
+ function buildLightWeightBadgeBackground(props) {
4331
+ if (props.isInverse) {
4332
+ return buildInverseLightWeightBadgeBackground(props);
4333
+ }
4334
+ switch (props.color) {
4335
+ case BadgeColor.danger:
4336
+ return props.theme.colors.danger100;
4337
+ case BadgeColor.info:
4338
+ return props.theme.colors.info100;
4339
+ case BadgeColor.light:
4340
+ return props.theme.colors.neutral100;
4341
+ case BadgeColor.secondary:
4342
+ return props.theme.colors.neutral200;
4343
+ case BadgeColor.success:
4344
+ return props.theme.colors.success100;
4345
+ case BadgeColor.warning:
4346
+ return props.theme.colors.warning100;
4347
+ case BadgeColor.primary:
4348
+ default:
4349
+ return props.theme.colors.primary100;
4350
+ }
4351
+ }
4304
4352
  function buildBadgeBackground(props) {
4353
+ if (props.weight === BadgeWeight.light) {
4354
+ return buildLightWeightBadgeBackground(props);
4355
+ }
4305
4356
  if (props.isInverse) {
4306
4357
  switch (props.color) {
4307
4358
  case BadgeColor.danger:
4308
4359
  return props.theme.colors.danger200;
4360
+ case BadgeColor.info:
4361
+ return props.theme.colors.info200;
4309
4362
  case BadgeColor.light:
4310
4363
  return 'transparent';
4311
4364
  case BadgeColor.primary:
@@ -4314,6 +4367,8 @@ function buildBadgeBackground(props) {
4314
4367
  return props.theme.colors.neutral100;
4315
4368
  case BadgeColor.success:
4316
4369
  return props.theme.colors.success200;
4370
+ case BadgeColor.warning:
4371
+ return props.theme.colors.warning200;
4317
4372
  default:
4318
4373
  return props.theme.colors.tertiary;
4319
4374
  }
@@ -4321,6 +4376,8 @@ function buildBadgeBackground(props) {
4321
4376
  switch (props.color) {
4322
4377
  case BadgeColor.danger:
4323
4378
  return props.theme.colors.danger;
4379
+ case BadgeColor.info:
4380
+ return props.theme.colors.info500;
4324
4381
  case BadgeColor.light:
4325
4382
  return props.theme.colors.neutral100;
4326
4383
  case BadgeColor.primary:
@@ -4329,15 +4386,61 @@ function buildBadgeBackground(props) {
4329
4386
  return props.theme.colors.neutral700;
4330
4387
  case BadgeColor.success:
4331
4388
  return props.theme.colors.success;
4389
+ case BadgeColor.warning:
4390
+ return props.theme.colors.warning500;
4332
4391
  default:
4333
4392
  return props.theme.colors.primary;
4334
4393
  }
4335
4394
  }
4395
+ function buildInverseLightWeightBadgeTextColor(props) {
4396
+ switch (props.color) {
4397
+ case BadgeColor.danger:
4398
+ return props.theme.colors.danger200;
4399
+ case BadgeColor.info:
4400
+ return props.theme.colors.info200;
4401
+ case BadgeColor.light:
4402
+ case BadgeColor.secondary:
4403
+ return props.theme.colors.neutral100;
4404
+ case BadgeColor.success:
4405
+ return props.theme.colors.success200;
4406
+ case BadgeColor.warning:
4407
+ return props.theme.colors.warning200;
4408
+ case BadgeColor.primary:
4409
+ default:
4410
+ return props.theme.colors.primary200;
4411
+ }
4412
+ }
4413
+ function buildLightWeightBadgeTextColor(props) {
4414
+ if (props.isInverse) {
4415
+ return buildInverseLightWeightBadgeTextColor(props);
4416
+ }
4417
+ switch (props.color) {
4418
+ case BadgeColor.danger:
4419
+ return props.theme.colors.danger500;
4420
+ case BadgeColor.info:
4421
+ return props.theme.colors.info500;
4422
+ case BadgeColor.light:
4423
+ case BadgeColor.secondary:
4424
+ return props.theme.colors.neutral700;
4425
+ case BadgeColor.success:
4426
+ return props.theme.colors.success500;
4427
+ case BadgeColor.warning:
4428
+ return props.theme.colors.warning500;
4429
+ case BadgeColor.primary:
4430
+ default:
4431
+ return props.theme.colors.primary500;
4432
+ }
4433
+ }
4336
4434
  function buildBadgeTextColor(props) {
4435
+ if (props.weight === BadgeWeight.light) {
4436
+ return buildLightWeightBadgeTextColor(props);
4437
+ }
4337
4438
  if (props.isInverse) {
4338
4439
  switch (props.color) {
4339
4440
  case BadgeColor.danger:
4340
4441
  return props.theme.colors.danger700;
4442
+ case BadgeColor.info:
4443
+ return props.theme.colors.info700;
4341
4444
  case BadgeColor.light:
4342
4445
  return props.theme.colors.neutral100;
4343
4446
  case BadgeColor.primary:
@@ -4346,6 +4449,8 @@ function buildBadgeTextColor(props) {
4346
4449
  return props.theme.colors.neutral700;
4347
4450
  case BadgeColor.success:
4348
4451
  return props.theme.colors.success700;
4452
+ case BadgeColor.warning:
4453
+ return props.theme.colors.warning600;
4349
4454
  default:
4350
4455
  return props.theme.colors.primary600;
4351
4456
  }
@@ -4355,7 +4460,51 @@ function buildBadgeTextColor(props) {
4355
4460
  }
4356
4461
  return props.theme.colors.neutral100;
4357
4462
  }
4463
+ function buildInverseLightWeightBadgeBorderColor(props) {
4464
+ switch (props.color) {
4465
+ case BadgeColor.danger:
4466
+ return props.theme.colors.danger600;
4467
+ case BadgeColor.info:
4468
+ return props.theme.colors.info600;
4469
+ case BadgeColor.light:
4470
+ return curriedTransparentize(0.7, props.theme.colors.neutral100);
4471
+ case BadgeColor.success:
4472
+ return props.theme.colors.success600;
4473
+ case BadgeColor.warning:
4474
+ return props.theme.colors.warning600;
4475
+ case BadgeColor.secondary:
4476
+ return 'transparent';
4477
+ case BadgeColor.primary:
4478
+ default:
4479
+ return props.theme.colors.primary400;
4480
+ }
4481
+ }
4482
+ function buildLightWeightBadgeBorderColor(props) {
4483
+ if (props.isInverse) {
4484
+ return buildInverseLightWeightBadgeBorderColor(props);
4485
+ }
4486
+ switch (props.color) {
4487
+ case BadgeColor.danger:
4488
+ return curriedTransparentize(0.85, props.theme.colors.danger500);
4489
+ case BadgeColor.info:
4490
+ return curriedTransparentize(0.85, props.theme.colors.info500);
4491
+ case BadgeColor.light:
4492
+ return props.theme.colors.neutral300;
4493
+ case BadgeColor.success:
4494
+ return curriedTransparentize(0.85, props.theme.colors.success500);
4495
+ case BadgeColor.warning:
4496
+ return curriedTransparentize(0.85, props.theme.colors.warning500);
4497
+ case BadgeColor.secondary:
4498
+ return 'transparent';
4499
+ case BadgeColor.primary:
4500
+ default:
4501
+ return curriedTransparentize(0.85, props.theme.colors.primary500);
4502
+ }
4503
+ }
4358
4504
  function buildBadgeBorderColor(props) {
4505
+ if (props.weight === BadgeWeight.light) {
4506
+ return buildLightWeightBadgeBorderColor(props);
4507
+ }
4359
4508
  if (props.color === BadgeColor.light) {
4360
4509
  if (props.isInverse) {
4361
4510
  return curriedTransparentize(0.3, props.theme.colors.neutral100);
@@ -4365,12 +4514,20 @@ function buildBadgeBorderColor(props) {
4365
4514
  return 'transparent';
4366
4515
  }
4367
4516
  var baseBadgeStyles = function baseBadgeStyles(props) {
4368
- return /*#__PURE__*/css("background:", buildBadgeBackground(props), ";border:1px solid;border-color:", buildBadgeBorderColor(props), ";border-radius:", props.variant === BadgeVariant.counter ? props.theme.spaceScale.spacing06 : props.theme.borderRadiusSmall, ";color:", buildBadgeTextColor(props), ";display:inline-block;font-weight:500;font-size:", props.variant === BadgeVariant.counter ? props.theme.typeScale.size02.fontSize : props.theme.typeScale.size01.fontSize, ";font-family:", props.theme.bodyFont, ";letter-spacing:", props.variant === BadgeVariant.counter ? props.theme.typeScale.size02.letterSpacing : props.theme.typeScale.size01.letterSpacing, ";line-height:", props.variant === BadgeVariant.counter ? props.theme.typeScale.size02.lineHeight : props.theme.typeScale.size01.lineHeight, ";margin:", props.variant === BadgeVariant.counter ? "0 0 0 " + props.theme.spaceScale.spacing03 : "0 " + props.theme.spaceScale.spacing03 + " 0 0", ";max-height:", props.variant === BadgeVariant.counter ? props.theme.spaceScale.spacing06 : 'auto', ";min-width:", props.theme.spaceScale.spacing06, ";padding:", props.variant === BadgeVariant.counter ? "1px " + props.theme.spaceScale.spacing02 : "3px " + props.theme.spaceScale.spacing02, ";text-align:", props.variant == BadgeVariant.counter ? 'center' : 'inherit', ";;label:baseBadgeStyles;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpRjRDIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5leHBvcnQgdmFyIEJhZGdlQ29sb3I7XHJcbihmdW5jdGlvbiAoQmFkZ2VDb2xvcikge1xyXG4gICAgQmFkZ2VDb2xvcltcImRhbmdlclwiXSA9IFwiZGFuZ2VyXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wicHJpbWFyeVwiXSA9IFwicHJpbWFyeVwiO1xyXG4gICAgQmFkZ2VDb2xvcltcInNlY29uZGFyeVwiXSA9IFwic2Vjb25kYXJ5XCI7XHJcbiAgICBCYWRnZUNvbG9yW1wic3VjY2Vzc1wiXSA9IFwic3VjY2Vzc1wiO1xyXG4gICAgQmFkZ2VDb2xvcltcImxpZ2h0XCJdID0gXCJsaWdodFwiO1xyXG59KShCYWRnZUNvbG9yIHx8IChCYWRnZUNvbG9yID0ge30pKTtcclxuZXhwb3J0IHZhciBCYWRnZVZhcmlhbnQ7XHJcbihmdW5jdGlvbiAoQmFkZ2VWYXJpYW50KSB7XHJcbiAgICBCYWRnZVZhcmlhbnRbXCJjb3VudGVyXCJdID0gXCJjb3VudGVyXCI7XHJcbiAgICBCYWRnZVZhcmlhbnRbXCJsYWJlbFwiXSA9IFwibGFiZWxcIjtcclxufSkoQmFkZ2VWYXJpYW50IHx8IChCYWRnZVZhcmlhbnQgPSB7fSkpO1xyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCYWRnZUJhY2tncm91bmQocHJvcHMpIHtcclxuICAgIGlmIChwcm9wcy5pc0ludmVyc2UpIHtcclxuICAgICAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjIwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy50ZXJ0aWFyeTtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3MyMDA7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5O1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCYWRnZVRleHRDb2xvcihwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNzAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NjAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczcwMDtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTYwMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocHJvcHMuY29sb3IgPT09IEJhZGdlQ29sb3IubGlnaHQpIHtcclxuICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDA7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFkZ2VCb3JkZXJDb2xvcihwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLmNvbG9yID09PSBCYWRnZUNvbG9yLmxpZ2h0KSB7XHJcbiAgICAgICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC4zLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9wcy5jb2xvcjtcclxuICAgIH1cclxuICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xyXG59XHJcbmV4cG9ydCBjb25zdCBiYXNlQmFkZ2VTdHlsZXMgPSBwcm9wcyA9PiBjc3MgYFxuICBiYWNrZ3JvdW5kOiAke2J1aWxkQmFkZ2VCYWNrZ3JvdW5kKHByb3BzKX07XG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICR7YnVpbGRCYWRnZUJvcmRlckNvbG9yKHByb3BzKX07XG4gIGJvcmRlci1yYWRpdXM6ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZcclxuICAgIDogcHJvcHMudGhlbWUuYm9yZGVyUmFkaXVzU21hbGx9O1xuICBjb2xvcjogJHtidWlsZEJhZGdlVGV4dENvbG9yKHByb3BzKX07XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIuZm9udFNpemVcclxuICAgIDogcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMS5mb250U2l6ZX07XG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzLnRoZW1lLmJvZHlGb250fTtcbiAgbGV0dGVyLXNwYWNpbmc6ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMi5sZXR0ZXJTcGFjaW5nXHJcbiAgICA6IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDEubGV0dGVyU3BhY2luZ307XG4gIGxpbmUtaGVpZ2h0OiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIubGluZUhlaWdodFxyXG4gICAgOiBwcm9wcy50aGVtZS50eXBlU2NhbGUuc2l6ZTAxLmxpbmVIZWlnaHR9O1xuICBtYXJnaW46ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gYDAgMCAwICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9YFxyXG4gICAgOiBgMCAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfSAwIDBgfTtcbiAgbWF4LWhlaWdodDogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiAnYXV0byd9O1xuICBtaW4td2lkdGg6ICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBwYWRkaW5nOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IGAxcHggJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn1gXHJcbiAgICA6IGAzcHggICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9YH07XG4gIHRleHQtYWxpZ246ICR7cHJvcHMudmFyaWFudCA9PSBCYWRnZVZhcmlhbnQuY291bnRlciA/ICdjZW50ZXInIDogJ2luaGVyaXQnfTtcbmA7XHJcbmNvbnN0IFN0eWxlZFNwYW4gPSBzdHlsZWQuc3BhbiBgXG4gICR7YmFzZUJhZGdlU3R5bGVzfTtcbmA7XHJcbmNvbnN0IFN0eWxlZEJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuICAke2Jhc2VCYWRnZVN0eWxlc307XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAycHggc29saWRcbiAgICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c0ludmVyc2VcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzfTtcbiAgICBvdXRsaW5lLW9mZnNldDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMX07XG4gIH1cbmA7XHJcbmZ1bmN0aW9uIGdldFN0eWxlZEJhZGdlQ29tcG9uZW50KGlzQ2xpY2thYmxlKSB7XHJcbiAgICByZXR1cm4gaXNDbGlja2FibGUgPyBTdHlsZWRCdXR0b24gOiBTdHlsZWRTcGFuO1xyXG59XHJcbmV4cG9ydCBjb25zdCBCYWRnZSA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcclxuICAgIGNvbnN0IHsgY2hpbGRyZW4sIGlzSW52ZXJzZSwgb25DbGljaywgdGVzdElkLCB2YXJpYW50LCAuLi5vdGhlciB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBCYWRnZUNvbXBvbmVudCA9IGdldFN0eWxlZEJhZGdlQ29tcG9uZW50KEJvb2xlYW4ob25DbGljaykpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFkZ2VDb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIG90aGVyLCB7IFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdmFyaWFudDogdmFyaWFudCA/IHZhcmlhbnQgOiBCYWRnZVZhcmlhbnQubGFiZWwsIG9uQ2xpY2s6IG9uQ2xpY2ssIHJlZjogcmVmLCB0aGVtZTogdGhlbWUgfSksIGNoaWxkcmVuKSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXX0= */"));
4517
+ return /*#__PURE__*/css(props.hasIcon && "align-items: center;", " background:", buildBadgeBackground(props), ";border:1px solid;border-color:", buildBadgeBorderColor(props), ";border-radius:", props.variant === BadgeVariant.counter ? props.theme.spaceScale.spacing06 : props.theme.borderRadiusSmall, ";color:", buildBadgeTextColor(props), ";display:", props.hasIcon ? 'inline-flex' : 'inline-block', ";font-weight:500;font-size:", props.variant === BadgeVariant.counter ? props.theme.typeScale.size02.fontSize : props.theme.typeScale.size01.fontSize, ";font-family:", props.theme.bodyFont, ";letter-spacing:", props.variant === BadgeVariant.counter ? props.theme.typeScale.size02.letterSpacing : props.theme.typeScale.size01.letterSpacing, ";line-height:", props.variant === BadgeVariant.counter ? props.theme.typeScale.size02.lineHeight : props.theme.typeScale.size01.lineHeight, ";margin:", props.variant === BadgeVariant.counter ? "0 0 0 " + props.theme.spaceScale.spacing03 : "0 " + props.theme.spaceScale.spacing03 + " 0 0", ";max-height:", props.variant === BadgeVariant.counter ? props.theme.spaceScale.spacing06 : 'auto', ";min-width:", props.theme.spaceScale.spacing06, ";padding:", props.variant === BadgeVariant.counter ? "1px " + props.theme.spaceScale.spacing02 : "3px " + props.theme.spaceScale.spacing02, ";text-align:", props.variant === BadgeVariant.counter ? 'center' : 'inherit', ";", props.hasIcon && "vertical-align: middle;", ";;label:baseBadgeStyles;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzTzRDIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5leHBvcnQgdmFyIEJhZGdlQ29sb3I7XHJcbihmdW5jdGlvbiAoQmFkZ2VDb2xvcikge1xyXG4gICAgQmFkZ2VDb2xvcltcImRhbmdlclwiXSA9IFwiZGFuZ2VyXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wiaW5mb1wiXSA9IFwiaW5mb1wiO1xyXG4gICAgQmFkZ2VDb2xvcltcInByaW1hcnlcIl0gPSBcInByaW1hcnlcIjtcclxuICAgIEJhZGdlQ29sb3JbXCJzZWNvbmRhcnlcIl0gPSBcInNlY29uZGFyeVwiO1xyXG4gICAgQmFkZ2VDb2xvcltcInN1Y2Nlc3NcIl0gPSBcInN1Y2Nlc3NcIjtcclxuICAgIEJhZGdlQ29sb3JbXCJ3YXJuaW5nXCJdID0gXCJ3YXJuaW5nXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wibGlnaHRcIl0gPSBcImxpZ2h0XCI7XHJcbn0pKEJhZGdlQ29sb3IgfHwgKEJhZGdlQ29sb3IgPSB7fSkpO1xyXG5leHBvcnQgdmFyIEJhZGdlVmFyaWFudDtcclxuKGZ1bmN0aW9uIChCYWRnZVZhcmlhbnQpIHtcclxuICAgIEJhZGdlVmFyaWFudFtcImNvdW50ZXJcIl0gPSBcImNvdW50ZXJcIjtcclxuICAgIEJhZGdlVmFyaWFudFtcImxhYmVsXCJdID0gXCJsYWJlbFwiO1xyXG59KShCYWRnZVZhcmlhbnQgfHwgKEJhZGdlVmFyaWFudCA9IHt9KSk7XHJcbmV4cG9ydCB2YXIgQmFkZ2VXZWlnaHQ7XHJcbihmdW5jdGlvbiAoQmFkZ2VXZWlnaHQpIHtcclxuICAgIEJhZGdlV2VpZ2h0W1wiZGVmYXVsdFwiXSA9IFwiZGVmYXVsdFwiO1xyXG4gICAgQmFkZ2VXZWlnaHRbXCJsaWdodFwiXSA9IFwibGlnaHRcIjtcclxufSkoQmFkZ2VXZWlnaHQgfHwgKEJhZGdlV2VpZ2h0ID0ge30pKTtcclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKSB7XHJcbiAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjcwMCk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmluZm86XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjUsIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNzAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjYsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M3MDApO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC41LCBwcm9wcy50aGVtZS5jb2xvcnMud2FybmluZzcwMCk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk3MDApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjEwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmcxMDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlQmFja2dyb3VuZChwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLndlaWdodCA9PT0gQmFkZ2VXZWlnaHQubGlnaHQpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGRMaWdodFdlaWdodEJhZGdlQmFja2dyb3VuZChwcm9wcyk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5kYW5nZXIyMDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5pbmZvOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMjAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczIwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLndhcm5pbmc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmcyMDA7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zdWNjZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLndhcm5pbmc6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMud2FybmluZzUwMDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpIHtcclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iud2FybmluZzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nMjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTIwMDtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMaWdodFdlaWdodEJhZGdlVGV4dENvbG9yKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5pbmZvOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmluZm81MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmc1MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NTAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlVGV4dENvbG9yKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMud2VpZ2h0ID09PSBCYWRnZVdlaWdodC5saWdodCkge1xyXG4gICAgICAgIHJldHVybiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNzAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuaW5mbzcwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTYwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M3MDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nNjAwO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NjAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwcm9wcy5jb2xvciA9PT0gQmFkZ2VDb2xvci5saWdodCkge1xyXG4gICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbnZlcnNlTGlnaHRXZWlnaHRCYWRnZUJvcmRlckNvbG9yKHByb3BzKSB7XHJcbiAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5kYW5nZXI2MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmluZm86XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuaW5mbzYwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmc2MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NDAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VCb3JkZXJDb2xvcihwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHJldHVybiBidWlsZEludmVyc2VMaWdodFdlaWdodEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjg1LCBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iud2FybmluZzpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC44NSwgcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk1MDApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpIHtcclxuICAgIGlmIChwcm9wcy53ZWlnaHQgPT09IEJhZGdlV2VpZ2h0LmxpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGlnaHRXZWlnaHRCYWRnZUJvcmRlckNvbG9yKHByb3BzKTtcclxuICAgIH1cclxuICAgIGlmIChwcm9wcy5jb2xvciA9PT0gQmFkZ2VDb2xvci5saWdodCkge1xyXG4gICAgICAgIGlmIChwcm9wcy5pc0ludmVyc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuMywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcHMuY29sb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxufVxyXG5leHBvcnQgY29uc3QgYmFzZUJhZGdlU3R5bGVzID0gcHJvcHMgPT4gY3NzIGBcbiAgJHtwcm9wcy5oYXNJY29uICYmIGBhbGlnbi1pdGVtczogY2VudGVyO2B9XG4gIGJhY2tncm91bmQ6ICR7YnVpbGRCYWRnZUJhY2tncm91bmQocHJvcHMpfTtcbiAgYm9yZGVyOiAxcHggc29saWQ7XG4gIGJvcmRlci1jb2xvcjogJHtidWlsZEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpfTtcbiAgYm9yZGVyLXJhZGl1czogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiBwcm9wcy50aGVtZS5ib3JkZXJSYWRpdXNTbWFsbH07XG4gIGNvbG9yOiAke2J1aWxkQmFkZ2VUZXh0Q29sb3IocHJvcHMpfTtcbiAgZGlzcGxheTogJHtwcm9wcy5oYXNJY29uID8gJ2lubGluZS1mbGV4JyA6ICdpbmxpbmUtYmxvY2snfTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIuZm9udFNpemVcclxuICAgIDogcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMS5mb250U2l6ZX07XG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzLnRoZW1lLmJvZHlGb250fTtcbiAgbGV0dGVyLXNwYWNpbmc6ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMi5sZXR0ZXJTcGFjaW5nXHJcbiAgICA6IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDEubGV0dGVyU3BhY2luZ307XG4gIGxpbmUtaGVpZ2h0OiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIubGluZUhlaWdodFxyXG4gICAgOiBwcm9wcy50aGVtZS50eXBlU2NhbGUuc2l6ZTAxLmxpbmVIZWlnaHR9O1xuICBtYXJnaW46ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gYDAgMCAwICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9YFxyXG4gICAgOiBgMCAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfSAwIDBgfTtcbiAgbWF4LWhlaWdodDogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiAnYXV0byd9O1xuICBtaW4td2lkdGg6ICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBwYWRkaW5nOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IGAxcHggJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn1gXHJcbiAgICA6IGAzcHggICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9YH07XG4gIHRleHQtYWxpZ246ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXIgPyAnY2VudGVyJyA6ICdpbmhlcml0J307XG4gICR7cHJvcHMuaGFzSWNvbiAmJiBgdmVydGljYWwtYWxpZ246IG1pZGRsZTtgfVxuYDtcclxuY29uc3QgU3R5bGVkSWNvbiA9IHN0eWxlZC5zcGFuIGBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBsaW5lLWhlaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMuaWNvblBvc2l0aW9uID09PSAncmlnaHQnID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDIgOiAwfTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLmljb25Qb3NpdGlvbiA9PT0gJ2xlZnQnID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDIgOiAwfTtcblxuICBzdmcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5gO1xyXG5jb25zdCBTdHlsZWRTcGFuID0gc3R5bGVkLnNwYW4gYFxuICAke2Jhc2VCYWRnZVN0eWxlc307XG5gO1xyXG5jb25zdCBTdHlsZWRCdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcbiAgJHtiYXNlQmFkZ2VTdHlsZXN9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXNJbnZlcnNlXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c307XG4gICAgb3V0bGluZS1vZmZzZXQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDF9O1xuICB9XG5gO1xyXG5mdW5jdGlvbiBnZXRTdHlsZWRCYWRnZUNvbXBvbmVudChpc0NsaWNrYWJsZSkge1xyXG4gICAgcmV0dXJuIGlzQ2xpY2thYmxlID8gU3R5bGVkQnV0dG9uIDogU3R5bGVkU3BhbjtcclxufVxyXG5leHBvcnQgY29uc3QgQmFkZ2UgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuLCBpc0ludmVyc2UsIGxlZnRJY29uLCBvbkNsaWNrLCByaWdodEljb24sIHRlc3RJZCwgdmFyaWFudCwgd2VpZ2h0LCAuLi5vdGhlciB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBCYWRnZUNvbXBvbmVudCA9IGdldFN0eWxlZEJhZGdlQ29tcG9uZW50KEJvb2xlYW4ob25DbGljaykpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICBmdW5jdGlvbiByZW5kZXJCYWRnZUljb24oYmFkZ2VJY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChiYWRnZUljb24sIHtcclxuICAgICAgICAgICAgc2l6ZTogYmFkZ2VJY29uLnByb3BzLnNpemUgfHwgdGhlbWUuaWNvblNpemVzLnhTbWFsbCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlbmRlcmVkTGVmdEljb24gPSBsZWZ0SWNvbiA/IHJlbmRlckJhZGdlSWNvbihsZWZ0SWNvbikgOiBudWxsO1xyXG4gICAgY29uc3QgcmVuZGVyZWRSaWdodEljb24gPSByaWdodEljb24gPyByZW5kZXJCYWRnZUljb24ocmlnaHRJY29uKSA6IG51bGw7XHJcbiAgICBjb25zdCBoYXNJY29uID0gQm9vbGVhbihyZW5kZXJlZExlZnRJY29uIHx8IHJlbmRlcmVkUmlnaHRJY29uKTtcclxuICAgIGZ1bmN0aW9uIHJlbmRlclN0eWxlZEljb24oYmFkZ2VJY29uLCBpY29uUG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSWNvbiwgeyBpY29uUG9zaXRpb246IGljb25Qb3NpdGlvbiwgdGhlbWU6IHRoZW1lIH0sIGJhZGdlSWNvbikpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEJhZGdlQ29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgaGFzSWNvbjogaGFzSWNvbiwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHZhcmlhbnQ6IHZhcmlhbnQgPyB2YXJpYW50IDogQmFkZ2VWYXJpYW50LmxhYmVsLCB3ZWlnaHQ6IHdlaWdodCA/IHdlaWdodCA6IEJhZGdlV2VpZ2h0LmRlZmF1bHQsIG9uQ2xpY2s6IG9uQ2xpY2ssIHJlZjogcmVmLCB0aGVtZTogdGhlbWUgfSksXHJcbiAgICAgICAgcmVuZGVyZWRMZWZ0SWNvbiAmJiByZW5kZXJTdHlsZWRJY29uKHJlbmRlcmVkTGVmdEljb24sICdsZWZ0JyksXHJcbiAgICAgICAgY2hpbGRyZW4sXHJcbiAgICAgICAgcmVuZGVyZWRSaWdodEljb24gJiYgcmVuZGVyU3R5bGVkSWNvbihyZW5kZXJlZFJpZ2h0SWNvbiwgJ3JpZ2h0JykpKTtcclxufSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdfQ== */"));
4369
4518
  };
4519
+ var StyledIcon = /*#__PURE__*/_styled("span", {
4520
+ target: "e6vy9oh2",
4521
+ label: "StyledIcon"
4522
+ })("display:inline-flex;flex-shrink:0;line-height:0;margin-left:", function (props) {
4523
+ return props.iconPosition === 'right' ? props.theme.spaceScale.spacing02 : 0;
4524
+ }, ";margin-right:", function (props) {
4525
+ return props.iconPosition === 'left' ? props.theme.spaceScale.spacing02 : 0;
4526
+ }, ";svg{display:block;}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3UStCIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5leHBvcnQgdmFyIEJhZGdlQ29sb3I7XHJcbihmdW5jdGlvbiAoQmFkZ2VDb2xvcikge1xyXG4gICAgQmFkZ2VDb2xvcltcImRhbmdlclwiXSA9IFwiZGFuZ2VyXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wiaW5mb1wiXSA9IFwiaW5mb1wiO1xyXG4gICAgQmFkZ2VDb2xvcltcInByaW1hcnlcIl0gPSBcInByaW1hcnlcIjtcclxuICAgIEJhZGdlQ29sb3JbXCJzZWNvbmRhcnlcIl0gPSBcInNlY29uZGFyeVwiO1xyXG4gICAgQmFkZ2VDb2xvcltcInN1Y2Nlc3NcIl0gPSBcInN1Y2Nlc3NcIjtcclxuICAgIEJhZGdlQ29sb3JbXCJ3YXJuaW5nXCJdID0gXCJ3YXJuaW5nXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wibGlnaHRcIl0gPSBcImxpZ2h0XCI7XHJcbn0pKEJhZGdlQ29sb3IgfHwgKEJhZGdlQ29sb3IgPSB7fSkpO1xyXG5leHBvcnQgdmFyIEJhZGdlVmFyaWFudDtcclxuKGZ1bmN0aW9uIChCYWRnZVZhcmlhbnQpIHtcclxuICAgIEJhZGdlVmFyaWFudFtcImNvdW50ZXJcIl0gPSBcImNvdW50ZXJcIjtcclxuICAgIEJhZGdlVmFyaWFudFtcImxhYmVsXCJdID0gXCJsYWJlbFwiO1xyXG59KShCYWRnZVZhcmlhbnQgfHwgKEJhZGdlVmFyaWFudCA9IHt9KSk7XHJcbmV4cG9ydCB2YXIgQmFkZ2VXZWlnaHQ7XHJcbihmdW5jdGlvbiAoQmFkZ2VXZWlnaHQpIHtcclxuICAgIEJhZGdlV2VpZ2h0W1wiZGVmYXVsdFwiXSA9IFwiZGVmYXVsdFwiO1xyXG4gICAgQmFkZ2VXZWlnaHRbXCJsaWdodFwiXSA9IFwibGlnaHRcIjtcclxufSkoQmFkZ2VXZWlnaHQgfHwgKEJhZGdlV2VpZ2h0ID0ge30pKTtcclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKSB7XHJcbiAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjcwMCk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmluZm86XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjUsIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNzAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjYsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M3MDApO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC41LCBwcm9wcy50aGVtZS5jb2xvcnMud2FybmluZzcwMCk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk3MDApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjEwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmcxMDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlQmFja2dyb3VuZChwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLndlaWdodCA9PT0gQmFkZ2VXZWlnaHQubGlnaHQpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGRMaWdodFdlaWdodEJhZGdlQmFja2dyb3VuZChwcm9wcyk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5kYW5nZXIyMDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5pbmZvOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMjAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczIwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLndhcm5pbmc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmcyMDA7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zdWNjZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLndhcm5pbmc6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMud2FybmluZzUwMDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpIHtcclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iud2FybmluZzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nMjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTIwMDtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMaWdodFdlaWdodEJhZGdlVGV4dENvbG9yKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5pbmZvOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmluZm81MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmc1MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NTAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlVGV4dENvbG9yKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMud2VpZ2h0ID09PSBCYWRnZVdlaWdodC5saWdodCkge1xyXG4gICAgICAgIHJldHVybiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNzAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuaW5mbzcwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTYwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M3MDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nNjAwO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NjAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwcm9wcy5jb2xvciA9PT0gQmFkZ2VDb2xvci5saWdodCkge1xyXG4gICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbnZlcnNlTGlnaHRXZWlnaHRCYWRnZUJvcmRlckNvbG9yKHByb3BzKSB7XHJcbiAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5kYW5nZXI2MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmluZm86XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuaW5mbzYwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmc2MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NDAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VCb3JkZXJDb2xvcihwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHJldHVybiBidWlsZEludmVyc2VMaWdodFdlaWdodEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjg1LCBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iud2FybmluZzpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC44NSwgcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk1MDApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpIHtcclxuICAgIGlmIChwcm9wcy53ZWlnaHQgPT09IEJhZGdlV2VpZ2h0LmxpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGlnaHRXZWlnaHRCYWRnZUJvcmRlckNvbG9yKHByb3BzKTtcclxuICAgIH1cclxuICAgIGlmIChwcm9wcy5jb2xvciA9PT0gQmFkZ2VDb2xvci5saWdodCkge1xyXG4gICAgICAgIGlmIChwcm9wcy5pc0ludmVyc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuMywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcHMuY29sb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxufVxyXG5leHBvcnQgY29uc3QgYmFzZUJhZGdlU3R5bGVzID0gcHJvcHMgPT4gY3NzIGBcbiAgJHtwcm9wcy5oYXNJY29uICYmIGBhbGlnbi1pdGVtczogY2VudGVyO2B9XG4gIGJhY2tncm91bmQ6ICR7YnVpbGRCYWRnZUJhY2tncm91bmQocHJvcHMpfTtcbiAgYm9yZGVyOiAxcHggc29saWQ7XG4gIGJvcmRlci1jb2xvcjogJHtidWlsZEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpfTtcbiAgYm9yZGVyLXJhZGl1czogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiBwcm9wcy50aGVtZS5ib3JkZXJSYWRpdXNTbWFsbH07XG4gIGNvbG9yOiAke2J1aWxkQmFkZ2VUZXh0Q29sb3IocHJvcHMpfTtcbiAgZGlzcGxheTogJHtwcm9wcy5oYXNJY29uID8gJ2lubGluZS1mbGV4JyA6ICdpbmxpbmUtYmxvY2snfTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIuZm9udFNpemVcclxuICAgIDogcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMS5mb250U2l6ZX07XG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzLnRoZW1lLmJvZHlGb250fTtcbiAgbGV0dGVyLXNwYWNpbmc6ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMi5sZXR0ZXJTcGFjaW5nXHJcbiAgICA6IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDEubGV0dGVyU3BhY2luZ307XG4gIGxpbmUtaGVpZ2h0OiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIubGluZUhlaWdodFxyXG4gICAgOiBwcm9wcy50aGVtZS50eXBlU2NhbGUuc2l6ZTAxLmxpbmVIZWlnaHR9O1xuICBtYXJnaW46ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gYDAgMCAwICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9YFxyXG4gICAgOiBgMCAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfSAwIDBgfTtcbiAgbWF4LWhlaWdodDogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiAnYXV0byd9O1xuICBtaW4td2lkdGg6ICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBwYWRkaW5nOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IGAxcHggJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn1gXHJcbiAgICA6IGAzcHggICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9YH07XG4gIHRleHQtYWxpZ246ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXIgPyAnY2VudGVyJyA6ICdpbmhlcml0J307XG4gICR7cHJvcHMuaGFzSWNvbiAmJiBgdmVydGljYWwtYWxpZ246IG1pZGRsZTtgfVxuYDtcclxuY29uc3QgU3R5bGVkSWNvbiA9IHN0eWxlZC5zcGFuIGBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBsaW5lLWhlaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMuaWNvblBvc2l0aW9uID09PSAncmlnaHQnID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDIgOiAwfTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLmljb25Qb3NpdGlvbiA9PT0gJ2xlZnQnID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDIgOiAwfTtcblxuICBzdmcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5gO1xyXG5jb25zdCBTdHlsZWRTcGFuID0gc3R5bGVkLnNwYW4gYFxuICAke2Jhc2VCYWRnZVN0eWxlc307XG5gO1xyXG5jb25zdCBTdHlsZWRCdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcbiAgJHtiYXNlQmFkZ2VTdHlsZXN9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXNJbnZlcnNlXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c307XG4gICAgb3V0bGluZS1vZmZzZXQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDF9O1xuICB9XG5gO1xyXG5mdW5jdGlvbiBnZXRTdHlsZWRCYWRnZUNvbXBvbmVudChpc0NsaWNrYWJsZSkge1xyXG4gICAgcmV0dXJuIGlzQ2xpY2thYmxlID8gU3R5bGVkQnV0dG9uIDogU3R5bGVkU3BhbjtcclxufVxyXG5leHBvcnQgY29uc3QgQmFkZ2UgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuLCBpc0ludmVyc2UsIGxlZnRJY29uLCBvbkNsaWNrLCByaWdodEljb24sIHRlc3RJZCwgdmFyaWFudCwgd2VpZ2h0LCAuLi5vdGhlciB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBCYWRnZUNvbXBvbmVudCA9IGdldFN0eWxlZEJhZGdlQ29tcG9uZW50KEJvb2xlYW4ob25DbGljaykpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICBmdW5jdGlvbiByZW5kZXJCYWRnZUljb24oYmFkZ2VJY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChiYWRnZUljb24sIHtcclxuICAgICAgICAgICAgc2l6ZTogYmFkZ2VJY29uLnByb3BzLnNpemUgfHwgdGhlbWUuaWNvblNpemVzLnhTbWFsbCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlbmRlcmVkTGVmdEljb24gPSBsZWZ0SWNvbiA/IHJlbmRlckJhZGdlSWNvbihsZWZ0SWNvbikgOiBudWxsO1xyXG4gICAgY29uc3QgcmVuZGVyZWRSaWdodEljb24gPSByaWdodEljb24gPyByZW5kZXJCYWRnZUljb24ocmlnaHRJY29uKSA6IG51bGw7XHJcbiAgICBjb25zdCBoYXNJY29uID0gQm9vbGVhbihyZW5kZXJlZExlZnRJY29uIHx8IHJlbmRlcmVkUmlnaHRJY29uKTtcclxuICAgIGZ1bmN0aW9uIHJlbmRlclN0eWxlZEljb24oYmFkZ2VJY29uLCBpY29uUG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSWNvbiwgeyBpY29uUG9zaXRpb246IGljb25Qb3NpdGlvbiwgdGhlbWU6IHRoZW1lIH0sIGJhZGdlSWNvbikpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEJhZGdlQ29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgaGFzSWNvbjogaGFzSWNvbiwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHZhcmlhbnQ6IHZhcmlhbnQgPyB2YXJpYW50IDogQmFkZ2VWYXJpYW50LmxhYmVsLCB3ZWlnaHQ6IHdlaWdodCA/IHdlaWdodCA6IEJhZGdlV2VpZ2h0LmRlZmF1bHQsIG9uQ2xpY2s6IG9uQ2xpY2ssIHJlZjogcmVmLCB0aGVtZTogdGhlbWUgfSksXHJcbiAgICAgICAgcmVuZGVyZWRMZWZ0SWNvbiAmJiByZW5kZXJTdHlsZWRJY29uKHJlbmRlcmVkTGVmdEljb24sICdsZWZ0JyksXHJcbiAgICAgICAgY2hpbGRyZW4sXHJcbiAgICAgICAgcmVuZGVyZWRSaWdodEljb24gJiYgcmVuZGVyU3R5bGVkSWNvbihyZW5kZXJlZFJpZ2h0SWNvbiwgJ3JpZ2h0JykpKTtcclxufSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdfQ== */"));
4370
4527
  var StyledSpan = /*#__PURE__*/_styled("span", {
4371
4528
  target: "e6vy9oh1",
4372
4529
  label: "StyledSpan"
4373
- })(baseBadgeStyles, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpSCtCIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5leHBvcnQgdmFyIEJhZGdlQ29sb3I7XHJcbihmdW5jdGlvbiAoQmFkZ2VDb2xvcikge1xyXG4gICAgQmFkZ2VDb2xvcltcImRhbmdlclwiXSA9IFwiZGFuZ2VyXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wicHJpbWFyeVwiXSA9IFwicHJpbWFyeVwiO1xyXG4gICAgQmFkZ2VDb2xvcltcInNlY29uZGFyeVwiXSA9IFwic2Vjb25kYXJ5XCI7XHJcbiAgICBCYWRnZUNvbG9yW1wic3VjY2Vzc1wiXSA9IFwic3VjY2Vzc1wiO1xyXG4gICAgQmFkZ2VDb2xvcltcImxpZ2h0XCJdID0gXCJsaWdodFwiO1xyXG59KShCYWRnZUNvbG9yIHx8IChCYWRnZUNvbG9yID0ge30pKTtcclxuZXhwb3J0IHZhciBCYWRnZVZhcmlhbnQ7XHJcbihmdW5jdGlvbiAoQmFkZ2VWYXJpYW50KSB7XHJcbiAgICBCYWRnZVZhcmlhbnRbXCJjb3VudGVyXCJdID0gXCJjb3VudGVyXCI7XHJcbiAgICBCYWRnZVZhcmlhbnRbXCJsYWJlbFwiXSA9IFwibGFiZWxcIjtcclxufSkoQmFkZ2VWYXJpYW50IHx8IChCYWRnZVZhcmlhbnQgPSB7fSkpO1xyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCYWRnZUJhY2tncm91bmQocHJvcHMpIHtcclxuICAgIGlmIChwcm9wcy5pc0ludmVyc2UpIHtcclxuICAgICAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjIwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy50ZXJ0aWFyeTtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3MyMDA7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5O1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCYWRnZVRleHRDb2xvcihwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNzAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NjAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczcwMDtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTYwMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocHJvcHMuY29sb3IgPT09IEJhZGdlQ29sb3IubGlnaHQpIHtcclxuICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDA7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFkZ2VCb3JkZXJDb2xvcihwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLmNvbG9yID09PSBCYWRnZUNvbG9yLmxpZ2h0KSB7XHJcbiAgICAgICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC4zLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9wcy5jb2xvcjtcclxuICAgIH1cclxuICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xyXG59XHJcbmV4cG9ydCBjb25zdCBiYXNlQmFkZ2VTdHlsZXMgPSBwcm9wcyA9PiBjc3MgYFxuICBiYWNrZ3JvdW5kOiAke2J1aWxkQmFkZ2VCYWNrZ3JvdW5kKHByb3BzKX07XG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICR7YnVpbGRCYWRnZUJvcmRlckNvbG9yKHByb3BzKX07XG4gIGJvcmRlci1yYWRpdXM6ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZcclxuICAgIDogcHJvcHMudGhlbWUuYm9yZGVyUmFkaXVzU21hbGx9O1xuICBjb2xvcjogJHtidWlsZEJhZGdlVGV4dENvbG9yKHByb3BzKX07XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIuZm9udFNpemVcclxuICAgIDogcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMS5mb250U2l6ZX07XG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzLnRoZW1lLmJvZHlGb250fTtcbiAgbGV0dGVyLXNwYWNpbmc6ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMi5sZXR0ZXJTcGFjaW5nXHJcbiAgICA6IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDEubGV0dGVyU3BhY2luZ307XG4gIGxpbmUtaGVpZ2h0OiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIubGluZUhlaWdodFxyXG4gICAgOiBwcm9wcy50aGVtZS50eXBlU2NhbGUuc2l6ZTAxLmxpbmVIZWlnaHR9O1xuICBtYXJnaW46ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gYDAgMCAwICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9YFxyXG4gICAgOiBgMCAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfSAwIDBgfTtcbiAgbWF4LWhlaWdodDogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiAnYXV0byd9O1xuICBtaW4td2lkdGg6ICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBwYWRkaW5nOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IGAxcHggJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn1gXHJcbiAgICA6IGAzcHggICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9YH07XG4gIHRleHQtYWxpZ246ICR7cHJvcHMudmFyaWFudCA9PSBCYWRnZVZhcmlhbnQuY291bnRlciA/ICdjZW50ZXInIDogJ2luaGVyaXQnfTtcbmA7XHJcbmNvbnN0IFN0eWxlZFNwYW4gPSBzdHlsZWQuc3BhbiBgXG4gICR7YmFzZUJhZGdlU3R5bGVzfTtcbmA7XHJcbmNvbnN0IFN0eWxlZEJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuICAke2Jhc2VCYWRnZVN0eWxlc307XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAycHggc29saWRcbiAgICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c0ludmVyc2VcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzfTtcbiAgICBvdXRsaW5lLW9mZnNldDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMX07XG4gIH1cbmA7XHJcbmZ1bmN0aW9uIGdldFN0eWxlZEJhZGdlQ29tcG9uZW50KGlzQ2xpY2thYmxlKSB7XHJcbiAgICByZXR1cm4gaXNDbGlja2FibGUgPyBTdHlsZWRCdXR0b24gOiBTdHlsZWRTcGFuO1xyXG59XHJcbmV4cG9ydCBjb25zdCBCYWRnZSA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcclxuICAgIGNvbnN0IHsgY2hpbGRyZW4sIGlzSW52ZXJzZSwgb25DbGljaywgdGVzdElkLCB2YXJpYW50LCAuLi5vdGhlciB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBCYWRnZUNvbXBvbmVudCA9IGdldFN0eWxlZEJhZGdlQ29tcG9uZW50KEJvb2xlYW4ob25DbGljaykpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFkZ2VDb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIG90aGVyLCB7IFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdmFyaWFudDogdmFyaWFudCA/IHZhcmlhbnQgOiBCYWRnZVZhcmlhbnQubGFiZWwsIG9uQ2xpY2s6IG9uQ2xpY2ssIHJlZjogcmVmLCB0aGVtZTogdGhlbWUgfSksIGNoaWxkcmVuKSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXX0= */"));
4530
+ })(baseBadgeStyles, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtUitCIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5leHBvcnQgdmFyIEJhZGdlQ29sb3I7XHJcbihmdW5jdGlvbiAoQmFkZ2VDb2xvcikge1xyXG4gICAgQmFkZ2VDb2xvcltcImRhbmdlclwiXSA9IFwiZGFuZ2VyXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wiaW5mb1wiXSA9IFwiaW5mb1wiO1xyXG4gICAgQmFkZ2VDb2xvcltcInByaW1hcnlcIl0gPSBcInByaW1hcnlcIjtcclxuICAgIEJhZGdlQ29sb3JbXCJzZWNvbmRhcnlcIl0gPSBcInNlY29uZGFyeVwiO1xyXG4gICAgQmFkZ2VDb2xvcltcInN1Y2Nlc3NcIl0gPSBcInN1Y2Nlc3NcIjtcclxuICAgIEJhZGdlQ29sb3JbXCJ3YXJuaW5nXCJdID0gXCJ3YXJuaW5nXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wibGlnaHRcIl0gPSBcImxpZ2h0XCI7XHJcbn0pKEJhZGdlQ29sb3IgfHwgKEJhZGdlQ29sb3IgPSB7fSkpO1xyXG5leHBvcnQgdmFyIEJhZGdlVmFyaWFudDtcclxuKGZ1bmN0aW9uIChCYWRnZVZhcmlhbnQpIHtcclxuICAgIEJhZGdlVmFyaWFudFtcImNvdW50ZXJcIl0gPSBcImNvdW50ZXJcIjtcclxuICAgIEJhZGdlVmFyaWFudFtcImxhYmVsXCJdID0gXCJsYWJlbFwiO1xyXG59KShCYWRnZVZhcmlhbnQgfHwgKEJhZGdlVmFyaWFudCA9IHt9KSk7XHJcbmV4cG9ydCB2YXIgQmFkZ2VXZWlnaHQ7XHJcbihmdW5jdGlvbiAoQmFkZ2VXZWlnaHQpIHtcclxuICAgIEJhZGdlV2VpZ2h0W1wiZGVmYXVsdFwiXSA9IFwiZGVmYXVsdFwiO1xyXG4gICAgQmFkZ2VXZWlnaHRbXCJsaWdodFwiXSA9IFwibGlnaHRcIjtcclxufSkoQmFkZ2VXZWlnaHQgfHwgKEJhZGdlV2VpZ2h0ID0ge30pKTtcclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKSB7XHJcbiAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjcwMCk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmluZm86XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjUsIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNzAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjYsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M3MDApO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC41LCBwcm9wcy50aGVtZS5jb2xvcnMud2FybmluZzcwMCk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk3MDApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjEwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmcxMDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlQmFja2dyb3VuZChwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLndlaWdodCA9PT0gQmFkZ2VXZWlnaHQubGlnaHQpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGRMaWdodFdlaWdodEJhZGdlQmFja2dyb3VuZChwcm9wcyk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5kYW5nZXIyMDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5pbmZvOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMjAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczIwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLndhcm5pbmc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmcyMDA7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zdWNjZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLndhcm5pbmc6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMud2FybmluZzUwMDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpIHtcclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iud2FybmluZzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nMjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTIwMDtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMaWdodFdlaWdodEJhZGdlVGV4dENvbG9yKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5pbmZvOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmluZm81MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmc1MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NTAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlVGV4dENvbG9yKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMud2VpZ2h0ID09PSBCYWRnZVdlaWdodC5saWdodCkge1xyXG4gICAgICAgIHJldHVybiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNzAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuaW5mbzcwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTYwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M3MDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nNjAwO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NjAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwcm9wcy5jb2xvciA9PT0gQmFkZ2VDb2xvci5saWdodCkge1xyXG4gICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbnZlcnNlTGlnaHRXZWlnaHRCYWRnZUJvcmRlckNvbG9yKHByb3BzKSB7XHJcbiAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5kYW5nZXI2MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmluZm86XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuaW5mbzYwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmc2MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NDAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VCb3JkZXJDb2xvcihwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHJldHVybiBidWlsZEludmVyc2VMaWdodFdlaWdodEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjg1LCBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iud2FybmluZzpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC44NSwgcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk1MDApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpIHtcclxuICAgIGlmIChwcm9wcy53ZWlnaHQgPT09IEJhZGdlV2VpZ2h0LmxpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGlnaHRXZWlnaHRCYWRnZUJvcmRlckNvbG9yKHByb3BzKTtcclxuICAgIH1cclxuICAgIGlmIChwcm9wcy5jb2xvciA9PT0gQmFkZ2VDb2xvci5saWdodCkge1xyXG4gICAgICAgIGlmIChwcm9wcy5pc0ludmVyc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuMywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcHMuY29sb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxufVxyXG5leHBvcnQgY29uc3QgYmFzZUJhZGdlU3R5bGVzID0gcHJvcHMgPT4gY3NzIGBcbiAgJHtwcm9wcy5oYXNJY29uICYmIGBhbGlnbi1pdGVtczogY2VudGVyO2B9XG4gIGJhY2tncm91bmQ6ICR7YnVpbGRCYWRnZUJhY2tncm91bmQocHJvcHMpfTtcbiAgYm9yZGVyOiAxcHggc29saWQ7XG4gIGJvcmRlci1jb2xvcjogJHtidWlsZEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpfTtcbiAgYm9yZGVyLXJhZGl1czogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiBwcm9wcy50aGVtZS5ib3JkZXJSYWRpdXNTbWFsbH07XG4gIGNvbG9yOiAke2J1aWxkQmFkZ2VUZXh0Q29sb3IocHJvcHMpfTtcbiAgZGlzcGxheTogJHtwcm9wcy5oYXNJY29uID8gJ2lubGluZS1mbGV4JyA6ICdpbmxpbmUtYmxvY2snfTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIuZm9udFNpemVcclxuICAgIDogcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMS5mb250U2l6ZX07XG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzLnRoZW1lLmJvZHlGb250fTtcbiAgbGV0dGVyLXNwYWNpbmc6ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMi5sZXR0ZXJTcGFjaW5nXHJcbiAgICA6IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDEubGV0dGVyU3BhY2luZ307XG4gIGxpbmUtaGVpZ2h0OiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIubGluZUhlaWdodFxyXG4gICAgOiBwcm9wcy50aGVtZS50eXBlU2NhbGUuc2l6ZTAxLmxpbmVIZWlnaHR9O1xuICBtYXJnaW46ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gYDAgMCAwICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9YFxyXG4gICAgOiBgMCAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfSAwIDBgfTtcbiAgbWF4LWhlaWdodDogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiAnYXV0byd9O1xuICBtaW4td2lkdGg6ICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBwYWRkaW5nOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IGAxcHggJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn1gXHJcbiAgICA6IGAzcHggICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9YH07XG4gIHRleHQtYWxpZ246ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXIgPyAnY2VudGVyJyA6ICdpbmhlcml0J307XG4gICR7cHJvcHMuaGFzSWNvbiAmJiBgdmVydGljYWwtYWxpZ246IG1pZGRsZTtgfVxuYDtcclxuY29uc3QgU3R5bGVkSWNvbiA9IHN0eWxlZC5zcGFuIGBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBsaW5lLWhlaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMuaWNvblBvc2l0aW9uID09PSAncmlnaHQnID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDIgOiAwfTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLmljb25Qb3NpdGlvbiA9PT0gJ2xlZnQnID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDIgOiAwfTtcblxuICBzdmcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5gO1xyXG5jb25zdCBTdHlsZWRTcGFuID0gc3R5bGVkLnNwYW4gYFxuICAke2Jhc2VCYWRnZVN0eWxlc307XG5gO1xyXG5jb25zdCBTdHlsZWRCdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcbiAgJHtiYXNlQmFkZ2VTdHlsZXN9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXNJbnZlcnNlXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c307XG4gICAgb3V0bGluZS1vZmZzZXQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDF9O1xuICB9XG5gO1xyXG5mdW5jdGlvbiBnZXRTdHlsZWRCYWRnZUNvbXBvbmVudChpc0NsaWNrYWJsZSkge1xyXG4gICAgcmV0dXJuIGlzQ2xpY2thYmxlID8gU3R5bGVkQnV0dG9uIDogU3R5bGVkU3BhbjtcclxufVxyXG5leHBvcnQgY29uc3QgQmFkZ2UgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuLCBpc0ludmVyc2UsIGxlZnRJY29uLCBvbkNsaWNrLCByaWdodEljb24sIHRlc3RJZCwgdmFyaWFudCwgd2VpZ2h0LCAuLi5vdGhlciB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBCYWRnZUNvbXBvbmVudCA9IGdldFN0eWxlZEJhZGdlQ29tcG9uZW50KEJvb2xlYW4ob25DbGljaykpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICBmdW5jdGlvbiByZW5kZXJCYWRnZUljb24oYmFkZ2VJY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChiYWRnZUljb24sIHtcclxuICAgICAgICAgICAgc2l6ZTogYmFkZ2VJY29uLnByb3BzLnNpemUgfHwgdGhlbWUuaWNvblNpemVzLnhTbWFsbCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlbmRlcmVkTGVmdEljb24gPSBsZWZ0SWNvbiA/IHJlbmRlckJhZGdlSWNvbihsZWZ0SWNvbikgOiBudWxsO1xyXG4gICAgY29uc3QgcmVuZGVyZWRSaWdodEljb24gPSByaWdodEljb24gPyByZW5kZXJCYWRnZUljb24ocmlnaHRJY29uKSA6IG51bGw7XHJcbiAgICBjb25zdCBoYXNJY29uID0gQm9vbGVhbihyZW5kZXJlZExlZnRJY29uIHx8IHJlbmRlcmVkUmlnaHRJY29uKTtcclxuICAgIGZ1bmN0aW9uIHJlbmRlclN0eWxlZEljb24oYmFkZ2VJY29uLCBpY29uUG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSWNvbiwgeyBpY29uUG9zaXRpb246IGljb25Qb3NpdGlvbiwgdGhlbWU6IHRoZW1lIH0sIGJhZGdlSWNvbikpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEJhZGdlQ29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgaGFzSWNvbjogaGFzSWNvbiwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHZhcmlhbnQ6IHZhcmlhbnQgPyB2YXJpYW50IDogQmFkZ2VWYXJpYW50LmxhYmVsLCB3ZWlnaHQ6IHdlaWdodCA/IHdlaWdodCA6IEJhZGdlV2VpZ2h0LmRlZmF1bHQsIG9uQ2xpY2s6IG9uQ2xpY2ssIHJlZjogcmVmLCB0aGVtZTogdGhlbWUgfSksXHJcbiAgICAgICAgcmVuZGVyZWRMZWZ0SWNvbiAmJiByZW5kZXJTdHlsZWRJY29uKHJlbmRlcmVkTGVmdEljb24sICdsZWZ0JyksXHJcbiAgICAgICAgY2hpbGRyZW4sXHJcbiAgICAgICAgcmVuZGVyZWRSaWdodEljb24gJiYgcmVuZGVyU3R5bGVkSWNvbihyZW5kZXJlZFJpZ2h0SWNvbiwgJ3JpZ2h0JykpKTtcclxufSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdfQ== */"));
4374
4531
  var StyledButton$1 = /*#__PURE__*/_styled("button", {
4375
4532
  target: "e6vy9oh0",
4376
4533
  label: "StyledButton"
@@ -4378,27 +4535,46 @@ var StyledButton$1 = /*#__PURE__*/_styled("button", {
4378
4535
  return props.isInverse ? props.theme.colors.focusInverse : props.theme.colors.focus;
4379
4536
  }, ";outline-offset:", function (props) {
4380
4537
  return props.theme.spaceScale.spacing01;
4381
- }, ";}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvSG1DIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5leHBvcnQgdmFyIEJhZGdlQ29sb3I7XHJcbihmdW5jdGlvbiAoQmFkZ2VDb2xvcikge1xyXG4gICAgQmFkZ2VDb2xvcltcImRhbmdlclwiXSA9IFwiZGFuZ2VyXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wicHJpbWFyeVwiXSA9IFwicHJpbWFyeVwiO1xyXG4gICAgQmFkZ2VDb2xvcltcInNlY29uZGFyeVwiXSA9IFwic2Vjb25kYXJ5XCI7XHJcbiAgICBCYWRnZUNvbG9yW1wic3VjY2Vzc1wiXSA9IFwic3VjY2Vzc1wiO1xyXG4gICAgQmFkZ2VDb2xvcltcImxpZ2h0XCJdID0gXCJsaWdodFwiO1xyXG59KShCYWRnZUNvbG9yIHx8IChCYWRnZUNvbG9yID0ge30pKTtcclxuZXhwb3J0IHZhciBCYWRnZVZhcmlhbnQ7XHJcbihmdW5jdGlvbiAoQmFkZ2VWYXJpYW50KSB7XHJcbiAgICBCYWRnZVZhcmlhbnRbXCJjb3VudGVyXCJdID0gXCJjb3VudGVyXCI7XHJcbiAgICBCYWRnZVZhcmlhbnRbXCJsYWJlbFwiXSA9IFwibGFiZWxcIjtcclxufSkoQmFkZ2VWYXJpYW50IHx8IChCYWRnZVZhcmlhbnQgPSB7fSkpO1xyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCYWRnZUJhY2tncm91bmQocHJvcHMpIHtcclxuICAgIGlmIChwcm9wcy5pc0ludmVyc2UpIHtcclxuICAgICAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjIwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy50ZXJ0aWFyeTtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3MyMDA7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5O1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCYWRnZVRleHRDb2xvcihwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNzAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NjAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczcwMDtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTYwMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocHJvcHMuY29sb3IgPT09IEJhZGdlQ29sb3IubGlnaHQpIHtcclxuICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDA7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFkZ2VCb3JkZXJDb2xvcihwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLmNvbG9yID09PSBCYWRnZUNvbG9yLmxpZ2h0KSB7XHJcbiAgICAgICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC4zLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9wcy5jb2xvcjtcclxuICAgIH1cclxuICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xyXG59XHJcbmV4cG9ydCBjb25zdCBiYXNlQmFkZ2VTdHlsZXMgPSBwcm9wcyA9PiBjc3MgYFxuICBiYWNrZ3JvdW5kOiAke2J1aWxkQmFkZ2VCYWNrZ3JvdW5kKHByb3BzKX07XG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBib3JkZXItY29sb3I6ICR7YnVpbGRCYWRnZUJvcmRlckNvbG9yKHByb3BzKX07XG4gIGJvcmRlci1yYWRpdXM6ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZcclxuICAgIDogcHJvcHMudGhlbWUuYm9yZGVyUmFkaXVzU21hbGx9O1xuICBjb2xvcjogJHtidWlsZEJhZGdlVGV4dENvbG9yKHByb3BzKX07XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIuZm9udFNpemVcclxuICAgIDogcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMS5mb250U2l6ZX07XG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzLnRoZW1lLmJvZHlGb250fTtcbiAgbGV0dGVyLXNwYWNpbmc6ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMi5sZXR0ZXJTcGFjaW5nXHJcbiAgICA6IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDEubGV0dGVyU3BhY2luZ307XG4gIGxpbmUtaGVpZ2h0OiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIubGluZUhlaWdodFxyXG4gICAgOiBwcm9wcy50aGVtZS50eXBlU2NhbGUuc2l6ZTAxLmxpbmVIZWlnaHR9O1xuICBtYXJnaW46ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gYDAgMCAwICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9YFxyXG4gICAgOiBgMCAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfSAwIDBgfTtcbiAgbWF4LWhlaWdodDogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiAnYXV0byd9O1xuICBtaW4td2lkdGg6ICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBwYWRkaW5nOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IGAxcHggJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn1gXHJcbiAgICA6IGAzcHggICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9YH07XG4gIHRleHQtYWxpZ246ICR7cHJvcHMudmFyaWFudCA9PSBCYWRnZVZhcmlhbnQuY291bnRlciA/ICdjZW50ZXInIDogJ2luaGVyaXQnfTtcbmA7XHJcbmNvbnN0IFN0eWxlZFNwYW4gPSBzdHlsZWQuc3BhbiBgXG4gICR7YmFzZUJhZGdlU3R5bGVzfTtcbmA7XHJcbmNvbnN0IFN0eWxlZEJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuICAke2Jhc2VCYWRnZVN0eWxlc307XG4gIGN1cnNvcjogcG9pbnRlcjtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAycHggc29saWRcbiAgICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c0ludmVyc2VcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzfTtcbiAgICBvdXRsaW5lLW9mZnNldDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMX07XG4gIH1cbmA7XHJcbmZ1bmN0aW9uIGdldFN0eWxlZEJhZGdlQ29tcG9uZW50KGlzQ2xpY2thYmxlKSB7XHJcbiAgICByZXR1cm4gaXNDbGlja2FibGUgPyBTdHlsZWRCdXR0b24gOiBTdHlsZWRTcGFuO1xyXG59XHJcbmV4cG9ydCBjb25zdCBCYWRnZSA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcclxuICAgIGNvbnN0IHsgY2hpbGRyZW4sIGlzSW52ZXJzZSwgb25DbGljaywgdGVzdElkLCB2YXJpYW50LCAuLi5vdGhlciB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBCYWRnZUNvbXBvbmVudCA9IGdldFN0eWxlZEJhZGdlQ29tcG9uZW50KEJvb2xlYW4ob25DbGljaykpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQmFkZ2VDb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIG90aGVyLCB7IFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdmFyaWFudDogdmFyaWFudCA/IHZhcmlhbnQgOiBCYWRnZVZhcmlhbnQubGFiZWwsIG9uQ2xpY2s6IG9uQ2xpY2ssIHJlZjogcmVmLCB0aGVtZTogdGhlbWUgfSksIGNoaWxkcmVuKSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXX0= */"));
4538
+ }, ";}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzUm1DIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5leHBvcnQgdmFyIEJhZGdlQ29sb3I7XHJcbihmdW5jdGlvbiAoQmFkZ2VDb2xvcikge1xyXG4gICAgQmFkZ2VDb2xvcltcImRhbmdlclwiXSA9IFwiZGFuZ2VyXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wiaW5mb1wiXSA9IFwiaW5mb1wiO1xyXG4gICAgQmFkZ2VDb2xvcltcInByaW1hcnlcIl0gPSBcInByaW1hcnlcIjtcclxuICAgIEJhZGdlQ29sb3JbXCJzZWNvbmRhcnlcIl0gPSBcInNlY29uZGFyeVwiO1xyXG4gICAgQmFkZ2VDb2xvcltcInN1Y2Nlc3NcIl0gPSBcInN1Y2Nlc3NcIjtcclxuICAgIEJhZGdlQ29sb3JbXCJ3YXJuaW5nXCJdID0gXCJ3YXJuaW5nXCI7XHJcbiAgICBCYWRnZUNvbG9yW1wibGlnaHRcIl0gPSBcImxpZ2h0XCI7XHJcbn0pKEJhZGdlQ29sb3IgfHwgKEJhZGdlQ29sb3IgPSB7fSkpO1xyXG5leHBvcnQgdmFyIEJhZGdlVmFyaWFudDtcclxuKGZ1bmN0aW9uIChCYWRnZVZhcmlhbnQpIHtcclxuICAgIEJhZGdlVmFyaWFudFtcImNvdW50ZXJcIl0gPSBcImNvdW50ZXJcIjtcclxuICAgIEJhZGdlVmFyaWFudFtcImxhYmVsXCJdID0gXCJsYWJlbFwiO1xyXG59KShCYWRnZVZhcmlhbnQgfHwgKEJhZGdlVmFyaWFudCA9IHt9KSk7XHJcbmV4cG9ydCB2YXIgQmFkZ2VXZWlnaHQ7XHJcbihmdW5jdGlvbiAoQmFkZ2VXZWlnaHQpIHtcclxuICAgIEJhZGdlV2VpZ2h0W1wiZGVmYXVsdFwiXSA9IFwiZGVmYXVsdFwiO1xyXG4gICAgQmFkZ2VXZWlnaHRbXCJsaWdodFwiXSA9IFwibGlnaHRcIjtcclxufSkoQmFkZ2VXZWlnaHQgfHwgKEJhZGdlV2VpZ2h0ID0ge30pKTtcclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKSB7XHJcbiAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjcwMCk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmluZm86XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjUsIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNzAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjYsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M3MDApO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC41LCBwcm9wcy50aGVtZS5jb2xvcnMud2FybmluZzcwMCk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuNSwgcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk3MDApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VCYWNrZ3JvdW5kKHByb3BzKTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjEwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmcxMDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlQmFja2dyb3VuZChwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLndlaWdodCA9PT0gQmFkZ2VXZWlnaHQubGlnaHQpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGRMaWdodFdlaWdodEJhZGdlQmFja2dyb3VuZChwcm9wcyk7XHJcbiAgICB9XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5kYW5nZXIyMDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci5pbmZvOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMjAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczIwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLndhcm5pbmc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmcyMDA7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zdWNjZXNzOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLndhcm5pbmc6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMud2FybmluZzUwMDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpIHtcclxuICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuZGFuZ2VyOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmRhbmdlcjIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvMjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5saWdodDpcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuc3VjY2VzczIwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iud2FybmluZzpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nMjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5wcmltYXJ5OlxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTIwMDtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMaWdodFdlaWdodEJhZGdlVGV4dENvbG9yKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMuaXNJbnZlcnNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkSW52ZXJzZUxpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5pbmZvOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLmluZm81MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5zZWNvbmRhcnk6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNTAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmc1MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NTAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlVGV4dENvbG9yKHByb3BzKSB7XHJcbiAgICBpZiAocHJvcHMud2VpZ2h0ID09PSBCYWRnZVdlaWdodC5saWdodCkge1xyXG4gICAgICAgIHJldHVybiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VUZXh0Q29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHN3aXRjaCAocHJvcHMuY29sb3IpIHtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNzAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuaW5mbzcwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmxpZ2h0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwO1xyXG4gICAgICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTYwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgICAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnN1Y2Nlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLnN1Y2Nlc3M3MDA7XHJcbiAgICAgICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nNjAwO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NjAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwcm9wcy5jb2xvciA9PT0gQmFkZ2VDb2xvci5saWdodCkge1xyXG4gICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMDtcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbnZlcnNlTGlnaHRXZWlnaHRCYWRnZUJvcmRlckNvbG9yKHByb3BzKSB7XHJcbiAgICBzd2l0Y2ggKHByb3BzLmNvbG9yKSB7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmRhbmdlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5kYW5nZXI2MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLmluZm86XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMuaW5mbzYwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNjAwO1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci53YXJuaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMudGhlbWUuY29sb3JzLndhcm5pbmc2MDA7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnNlY29uZGFyeTpcclxuICAgICAgICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XHJcbiAgICAgICAgY2FzZSBCYWRnZUNvbG9yLnByaW1hcnk6XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NDAwO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZExpZ2h0V2VpZ2h0QmFkZ2VCb3JkZXJDb2xvcihwcm9wcykge1xyXG4gICAgaWYgKHByb3BzLmlzSW52ZXJzZSkge1xyXG4gICAgICAgIHJldHVybiBidWlsZEludmVyc2VMaWdodFdlaWdodEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoIChwcm9wcy5jb2xvcikge1xyXG4gICAgICAgIGNhc2UgQmFkZ2VDb2xvci5kYW5nZXI6XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc3BhcmVudGl6ZSgwLjg1LCBwcm9wcy50aGVtZS5jb2xvcnMuZGFuZ2VyNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IuaW5mbzpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy5pbmZvNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IubGlnaHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMDtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc3VjY2VzczpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy5zdWNjZXNzNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iud2FybmluZzpcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuODUsIHByb3BzLnRoZW1lLmNvbG9ycy53YXJuaW5nNTAwKTtcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3Iuc2Vjb25kYXJ5OlxyXG4gICAgICAgICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICBjYXNlIEJhZGdlQ29sb3IucHJpbWFyeTpcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUoMC44NSwgcHJvcHMudGhlbWUuY29sb3JzLnByaW1hcnk1MDApO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpIHtcclxuICAgIGlmIChwcm9wcy53ZWlnaHQgPT09IEJhZGdlV2VpZ2h0LmxpZ2h0KSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTGlnaHRXZWlnaHRCYWRnZUJvcmRlckNvbG9yKHByb3BzKTtcclxuICAgIH1cclxuICAgIGlmIChwcm9wcy5jb2xvciA9PT0gQmFkZ2VDb2xvci5saWdodCkge1xyXG4gICAgICAgIGlmIChwcm9wcy5pc0ludmVyc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKDAuMywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvcHMuY29sb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcclxufVxyXG5leHBvcnQgY29uc3QgYmFzZUJhZGdlU3R5bGVzID0gcHJvcHMgPT4gY3NzIGBcbiAgJHtwcm9wcy5oYXNJY29uICYmIGBhbGlnbi1pdGVtczogY2VudGVyO2B9XG4gIGJhY2tncm91bmQ6ICR7YnVpbGRCYWRnZUJhY2tncm91bmQocHJvcHMpfTtcbiAgYm9yZGVyOiAxcHggc29saWQ7XG4gIGJvcmRlci1jb2xvcjogJHtidWlsZEJhZGdlQm9yZGVyQ29sb3IocHJvcHMpfTtcbiAgYm9yZGVyLXJhZGl1czogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiBwcm9wcy50aGVtZS5ib3JkZXJSYWRpdXNTbWFsbH07XG4gIGNvbG9yOiAke2J1aWxkQmFkZ2VUZXh0Q29sb3IocHJvcHMpfTtcbiAgZGlzcGxheTogJHtwcm9wcy5oYXNJY29uID8gJ2lubGluZS1mbGV4JyA6ICdpbmxpbmUtYmxvY2snfTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgZm9udC1zaXplOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIuZm9udFNpemVcclxuICAgIDogcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMS5mb250U2l6ZX07XG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzLnRoZW1lLmJvZHlGb250fTtcbiAgbGV0dGVyLXNwYWNpbmc6ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gcHJvcHMudGhlbWUudHlwZVNjYWxlLnNpemUwMi5sZXR0ZXJTcGFjaW5nXHJcbiAgICA6IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDEubGV0dGVyU3BhY2luZ307XG4gIGxpbmUtaGVpZ2h0OiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IHByb3BzLnRoZW1lLnR5cGVTY2FsZS5zaXplMDIubGluZUhlaWdodFxyXG4gICAgOiBwcm9wcy50aGVtZS50eXBlU2NhbGUuc2l6ZTAxLmxpbmVIZWlnaHR9O1xuICBtYXJnaW46ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXJcclxuICAgID8gYDAgMCAwICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9YFxyXG4gICAgOiBgMCAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfSAwIDBgfTtcbiAgbWF4LWhlaWdodDogJHtwcm9wcy52YXJpYW50ID09PSBCYWRnZVZhcmlhbnQuY291bnRlclxyXG4gICAgPyBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNlxyXG4gICAgOiAnYXV0byd9O1xuICBtaW4td2lkdGg6ICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBwYWRkaW5nOiAke3Byb3BzLnZhcmlhbnQgPT09IEJhZGdlVmFyaWFudC5jb3VudGVyXHJcbiAgICA/IGAxcHggJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn1gXHJcbiAgICA6IGAzcHggICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9YH07XG4gIHRleHQtYWxpZ246ICR7cHJvcHMudmFyaWFudCA9PT0gQmFkZ2VWYXJpYW50LmNvdW50ZXIgPyAnY2VudGVyJyA6ICdpbmhlcml0J307XG4gICR7cHJvcHMuaGFzSWNvbiAmJiBgdmVydGljYWwtYWxpZ246IG1pZGRsZTtgfVxuYDtcclxuY29uc3QgU3R5bGVkSWNvbiA9IHN0eWxlZC5zcGFuIGBcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBsaW5lLWhlaWdodDogMDtcbiAgbWFyZ2luLWxlZnQ6ICR7cHJvcHMgPT4gcHJvcHMuaWNvblBvc2l0aW9uID09PSAncmlnaHQnID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDIgOiAwfTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLmljb25Qb3NpdGlvbiA9PT0gJ2xlZnQnID8gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDIgOiAwfTtcblxuICBzdmcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5gO1xyXG5jb25zdCBTdHlsZWRTcGFuID0gc3R5bGVkLnNwYW4gYFxuICAke2Jhc2VCYWRnZVN0eWxlc307XG5gO1xyXG5jb25zdCBTdHlsZWRCdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcbiAgJHtiYXNlQmFkZ2VTdHlsZXN9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXNJbnZlcnNlXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c307XG4gICAgb3V0bGluZS1vZmZzZXQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDF9O1xuICB9XG5gO1xyXG5mdW5jdGlvbiBnZXRTdHlsZWRCYWRnZUNvbXBvbmVudChpc0NsaWNrYWJsZSkge1xyXG4gICAgcmV0dXJuIGlzQ2xpY2thYmxlID8gU3R5bGVkQnV0dG9uIDogU3R5bGVkU3BhbjtcclxufVxyXG5leHBvcnQgY29uc3QgQmFkZ2UgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuLCBpc0ludmVyc2UsIGxlZnRJY29uLCBvbkNsaWNrLCByaWdodEljb24sIHRlc3RJZCwgdmFyaWFudCwgd2VpZ2h0LCAuLi5vdGhlciB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBCYWRnZUNvbXBvbmVudCA9IGdldFN0eWxlZEJhZGdlQ29tcG9uZW50KEJvb2xlYW4ob25DbGljaykpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICBmdW5jdGlvbiByZW5kZXJCYWRnZUljb24oYmFkZ2VJY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChiYWRnZUljb24sIHtcclxuICAgICAgICAgICAgc2l6ZTogYmFkZ2VJY29uLnByb3BzLnNpemUgfHwgdGhlbWUuaWNvblNpemVzLnhTbWFsbCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlbmRlcmVkTGVmdEljb24gPSBsZWZ0SWNvbiA/IHJlbmRlckJhZGdlSWNvbihsZWZ0SWNvbikgOiBudWxsO1xyXG4gICAgY29uc3QgcmVuZGVyZWRSaWdodEljb24gPSByaWdodEljb24gPyByZW5kZXJCYWRnZUljb24ocmlnaHRJY29uKSA6IG51bGw7XHJcbiAgICBjb25zdCBoYXNJY29uID0gQm9vbGVhbihyZW5kZXJlZExlZnRJY29uIHx8IHJlbmRlcmVkUmlnaHRJY29uKTtcclxuICAgIGZ1bmN0aW9uIHJlbmRlclN0eWxlZEljb24oYmFkZ2VJY29uLCBpY29uUG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSWNvbiwgeyBpY29uUG9zaXRpb246IGljb25Qb3NpdGlvbiwgdGhlbWU6IHRoZW1lIH0sIGJhZGdlSWNvbikpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEJhZGdlQ29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgaGFzSWNvbjogaGFzSWNvbiwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHZhcmlhbnQ6IHZhcmlhbnQgPyB2YXJpYW50IDogQmFkZ2VWYXJpYW50LmxhYmVsLCB3ZWlnaHQ6IHdlaWdodCA/IHdlaWdodCA6IEJhZGdlV2VpZ2h0LmRlZmF1bHQsIG9uQ2xpY2s6IG9uQ2xpY2ssIHJlZjogcmVmLCB0aGVtZTogdGhlbWUgfSksXHJcbiAgICAgICAgcmVuZGVyZWRMZWZ0SWNvbiAmJiByZW5kZXJTdHlsZWRJY29uKHJlbmRlcmVkTGVmdEljb24sICdsZWZ0JyksXHJcbiAgICAgICAgY2hpbGRyZW4sXHJcbiAgICAgICAgcmVuZGVyZWRSaWdodEljb24gJiYgcmVuZGVyU3R5bGVkSWNvbihyZW5kZXJlZFJpZ2h0SWNvbiwgJ3JpZ2h0JykpKTtcclxufSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdfQ== */"));
4382
4539
  function getStyledBadgeComponent(isClickable) {
4383
4540
  return isClickable ? StyledButton$1 : StyledSpan;
4384
4541
  }
4385
4542
  var Badge = /*#__PURE__*/forwardRef(function (props, ref) {
4386
4543
  var children = props.children,
4387
4544
  isInverse = props.isInverse,
4545
+ leftIcon = props.leftIcon,
4388
4546
  onClick = props.onClick,
4547
+ rightIcon = props.rightIcon,
4389
4548
  testId = props.testId,
4390
4549
  variant = props.variant,
4550
+ weight = props.weight,
4391
4551
  other = _objectWithoutPropertiesLoose(props, _excluded$b);
4392
4552
  var BadgeComponent = getStyledBadgeComponent(Boolean(onClick));
4393
4553
  var theme = useContext(ThemeContext);
4554
+ function renderBadgeIcon(badgeIcon) {
4555
+ return /*#__PURE__*/cloneElement(badgeIcon, {
4556
+ size: badgeIcon.props.size || theme.iconSizes.xSmall
4557
+ });
4558
+ }
4559
+ var renderedLeftIcon = leftIcon ? renderBadgeIcon(leftIcon) : null;
4560
+ var renderedRightIcon = rightIcon ? renderBadgeIcon(rightIcon) : null;
4561
+ var hasIcon = Boolean(renderedLeftIcon || renderedRightIcon);
4562
+ function renderStyledIcon(badgeIcon, iconPosition) {
4563
+ return /*#__PURE__*/createElement(StyledIcon, {
4564
+ iconPosition: iconPosition,
4565
+ theme: theme
4566
+ }, badgeIcon);
4567
+ }
4394
4568
  return /*#__PURE__*/createElement(BadgeComponent, Object.assign({}, other, {
4395
4569
  "data-testid": testId,
4570
+ hasIcon: hasIcon,
4396
4571
  isInverse: isInverse,
4397
4572
  variant: variant ? variant : BadgeVariant.label,
4573
+ weight: weight ? weight : BadgeWeight["default"],
4398
4574
  onClick: onClick,
4399
4575
  ref: ref,
4400
4576
  theme: theme
4401
- }), children);
4577
+ }), renderedLeftIcon && renderStyledIcon(renderedLeftIcon, 'left'), children, renderedRightIcon && renderStyledIcon(renderedRightIcon, 'right'));
4402
4578
  });
4403
4579
 
4404
4580
  var _excluded$c = ["actionButtonText", "actionButtonOnClick", "additionalContent", "children", "closeAriaLabel", "isDismissible", "onDismiss", "testId", "variant", "dismissibleButtonRef"];
@@ -6503,7 +6679,7 @@ var StyledInputMessage = /*#__PURE__*/_styled(InputMessage, {
6503
6679
  label: "StyledInputMessage"
6504
6680
  })("font-weight:", buildFontWeight, ";font-family:", function (props) {
6505
6681
  return props.theme.bodyFont;
6506
- }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNoYXJhY3RlckNvdW50ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdCZ0QiLCJmaWxlIjoiQ2hhcmFjdGVyQ291bnRlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IHVzZURldmljZURldGVjdCBmcm9tICcuLi8uLi9ob29rcy91c2VEZXZpY2VEZXRlY3QnO1xyXG5pbXBvcnQgeyBJMThuQ29udGV4dCB9IGZyb20gJy4uLy4uL2kxOG4nO1xyXG5pbXBvcnQgeyBtYWdtYSB9IGZyb20gJy4uLy4uL3RoZW1lL21hZ21hJztcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEhpZGRlbkxhYmVsVGV4dCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5wdXRNZXNzYWdlIH0gZnJvbSAnLi4vSW5wdXQvSW5wdXRNZXNzYWdlJztcclxuLy8gQ2hhbmdlcyB0aGUgZm9udCB3ZWlnaHQgdG8gYm9sZCBiYXNlZCBvbiBtYXhDb3VudC5cclxuZnVuY3Rpb24gYnVpbGRGb250V2VpZ2h0KHByb3BzKSB7XHJcbiAgICBpZiAoKHByb3BzLmlucHV0TGVuZ3RoIDwgcHJvcHMubWF4Q291bnQgJiYgcHJvcHMuaW5wdXRMZW5ndGggPj0gMSkgfHxcclxuICAgICAgICBwcm9wcy5pbnB1dExlbmd0aCA9PT0gcHJvcHMubWF4Q291bnQpIHtcclxuICAgICAgICByZXR1cm4gbWFnbWEudHlwb2dyYXBoeVZpc3VhbFN0eWxlcy5oZWFkaW5nWFNtYWxsLmZvbnRXZWlnaHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ2luaGVyaXQnO1xyXG59XHJcbmNvbnN0IFN0eWxlZElucHV0TWVzc2FnZSA9IHN0eWxlZChJbnB1dE1lc3NhZ2UpIGBcbiAgZm9udC13ZWlnaHQ6ICR7YnVpbGRGb250V2VpZ2h0fTtcbiAgZm9udC1mYW1pbHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm9keUZvbnR9O1xuYDtcclxuZXhwb3J0IGNvbnN0IENoYXJhY3RlckNvdW50ZXIgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuLCBoYXNDaGFyYWN0ZXJDb3VudGVyLCBpZCwgaW5wdXRMZW5ndGgsIG1heENvdW50LCBtYXhMZW5ndGgsIHRlc3RJZCwgaXNJbnZlcnNlLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGkxOG4gPSBSZWFjdC51c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcclxuICAgIC8vIFRlbXBvcmFyeSB3aGlsZSBib3RoICdtYXhMZW5ndGgnIGFuZCAnbWF4Q291bnQnIGFyZSBzdXBwb3J0ZWQuIFRvIGJlIHJlbW92ZWQgaW4gZnV0dXJlIGl0ZXJhdGlvbnMuXHJcbiAgICBjb25zdCBtYXhDaGFyYWN0ZXJzID0gdHlwZW9mIG1heENvdW50ID09PSAnbnVtYmVyJyA/IG1heENvdW50IDogbWF4TGVuZ3RoO1xyXG4gICAgY29uc3QgaXNPdmVyTWF4Q291bnQgPSBpbnB1dExlbmd0aCA+IG1heENoYXJhY3RlcnM7XHJcbiAgICAvLyBHZXRzIHBlcmNlbnRhZ2UgdmFsdWUgb2YgdG90YWwgY2hhcmFjdGVycyB3aXRoaW4gSW5wdXQgdG8gbGV0IGFyaWEtbGl2ZSBoYXZlIGR5bmFtaWMgc3RhdGVzLlxyXG4gICAgY29uc3QgZ2V0UGVyY2VudGFnZSA9IChpbnB1dExlbmd0aCAvIG1heENoYXJhY3RlcnMpICogMTAwO1xyXG4gICAgLy8gUmV0dXJucyBhcmlhLWxpdmUgc3RhdGVzIGJhc2VkIG9uIHBlcmNlbnRhZ2Ugb2YgY2hhcmFjdGVycyB3aXRoaW4gSW5wdXQuXHJcbiAgICBmdW5jdGlvbiBnZXRBcmlhTGl2ZVN0YXRlKCkge1xyXG4gICAgICAgIGlmIChnZXRQZXJjZW50YWdlID4gMTAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYXNzZXJ0aXZlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdwb2xpdGUnO1xyXG4gICAgfVxyXG4gICAgLy8gQXMgdGhlIHVzZXIgdHlwZXMsIHRoaXMgY2FsY3VsYXRlcyB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgc2V0IGJ5IG1heENvdW50IHdoaWNoIGNvdW50cyBkb3duIHRvIHplcm8gdGhlbiBjb3VudHMgdXAgaWYgb3ZlciB0aGUgbGltaXQuXHJcbiAgICBjb25zdCBjaGFyYWN0ZXJMaW1pdCA9IG1heENoYXJhY3RlcnMgPiBpbnB1dExlbmd0aFxyXG4gICAgICAgID8gbWF4Q2hhcmFjdGVycyAtIGlucHV0TGVuZ3RoXHJcbiAgICAgICAgOiBpbnB1dExlbmd0aCAtIG1heENoYXJhY3RlcnM7XHJcbiAgICAvKlxyXG4gICAgICogUmV0dXJucyB0aGUgY2hhcmFjdGVyIGNvdW50ZXIgZGVzY3JpcHRpb24uXHJcbiAgICAgKiBXaGVuIHRoZXJlJ3Mgbm8gaW5wdXRMZW5ndGgsIHJldHVybnMgXCIjIGNoYXJhY3RlcihzKSBhbGxvd2VkXCJcclxuICAgICAqIFdoZW4gaW5wdXRMZW5ndGggPCBtYXhDb3VudCBvciBpbnB1dExlbmd0aCA9PT0gbWF4Q291bnQsIHJldHVybnMgXCIjIGNoYXJhY3RlcihzKSBsZWZ0XCJcclxuICAgICAqIFdoZW4gaW5wdXRMZW5ndGggPiBtYXhDb3VudCwgcmV0dXJucyBcIiMgY2hhcmFjdGVyKHMpIG92ZXIgbGltaXRcIlxyXG4gICAgICovXHJcbiAgICBjb25zdCBjaGFyYWN0ZXJUaXRsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpbnB1dExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0TGVuZ3RoIDwgbWF4Q2hhcmFjdGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0TGVuZ3RoID09PSBtYXhDaGFyYWN0ZXJzIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtjaGFyYWN0ZXJMaW1pdH0gJHtpMThuLmNoYXJhY3RlckNvdW50ZXIuY2hhcmFjdGVyTGVmdH1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmFjdGVyTGltaXQgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2NoYXJhY3RlckxpbWl0fSAke2kxOG4uY2hhcmFjdGVyQ291bnRlci5jaGFyYWN0ZXJzTGVmdH1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbnB1dExlbmd0aCA+IG1heENoYXJhY3RlcnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dExlbmd0aCA9PT0gbWF4Q2hhcmFjdGVycyArIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y2hhcmFjdGVyTGltaXR9ICR7aTE4bi5jaGFyYWN0ZXJDb3VudGVyLmNoYXJhY3Rlck92ZXJ9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtjaGFyYWN0ZXJMaW1pdH0gJHtpMThuLmNoYXJhY3RlckNvdW50ZXIuY2hhcmFjdGVyc092ZXJ9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaW5wdXRMZW5ndGggPT09IG1heENoYXJhY3RlcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgMCAke2kxOG4uY2hhcmFjdGVyQ291bnRlci5jaGFyYWN0ZXJzTGVmdH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobWF4Q2hhcmFjdGVycyA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke21heENoYXJhY3RlcnN9ICR7aTE4bi5jaGFyYWN0ZXJDb3VudGVyLmNoYXJhY3RlckFsbG93ZWR9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYCR7bWF4Q2hhcmFjdGVyc30gJHtpMThuLmNoYXJhY3RlckNvdW50ZXIuY2hhcmFjdGVyc0FsbG93ZWR9YDtcclxuICAgICAgICB9XHJcbiAgICB9LCBbY2hhcmFjdGVyTGltaXQsIGlucHV0TGVuZ3RoLCBpMThuLmNoYXJhY3RlckNvdW50ZXIsIG1heENoYXJhY3RlcnNdKTtcclxuICAgIC8vIFNldHMgdGhlIHNjcmVlbiByZWFkZXIgbWVzc2FnZSB0byBhbm5vdW5jZSB0aGUgY2hhcmFjdGVyIGNvdW50ZXIuXHJcbiAgICBjb25zdCBbc2NyZWVuUmVhZGVyTWVzc2FnZSwgc2V0U2NyZWVuUmVhZGVyTWVzc2FnZV0gPSBSZWFjdC51c2VTdGF0ZSgpO1xyXG4gICAgY29uc3QgZGVib3VuY2VkU2V0U2NyZWVuUmVhZGVyTWVzc2FnZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gZGVib3VuY2UoKHN0YXR1c01lc3NhZ2UpID0+IHtcclxuICAgICAgICBzZXRTY3JlZW5SZWFkZXJNZXNzYWdlKHN0YXR1c01lc3NhZ2UpO1xyXG4gICAgfSwgMzAwMCksIFtdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgZGVib3VuY2VkU2V0U2NyZWVuUmVhZGVyTWVzc2FnZShjaGFyYWN0ZXJUaXRsZSk7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgZGVib3VuY2VkU2V0U2NyZWVuUmVhZGVyTWVzc2FnZS5jbGVhcigpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbaW5wdXRMZW5ndGgsIGRlYm91bmNlZFNldFNjcmVlblJlYWRlck1lc3NhZ2UsIGNoYXJhY3RlclRpdGxlXSk7XHJcbiAgICBjb25zdCB7IGlzTWFjT1MgfSA9IHVzZURldmljZURldGVjdCgpO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHJlZjogcmVmLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCB9LCByZXN0LCB7IGlkOiBpZCB9KSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJbnB1dE1lc3NhZ2UsIHsgXCJhcmlhLWxpdmVcIjogZ2V0QXJpYUxpdmVTdGF0ZSgpLCBoYXNDaGFyYWN0ZXJDb3VudGVyOiBoYXNDaGFyYWN0ZXJDb3VudGVyLCBoYXNFcnJvcjogaXNPdmVyTWF4Q291bnQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBpbnB1dExlbmd0aDogaW5wdXRMZW5ndGgsIG1heENvdW50OiBtYXhDaGFyYWN0ZXJzLCBtYXhMZW5ndGg6IG1heENoYXJhY3RlcnMgfSwgY2hhcmFjdGVyVGl0bGUpLFxyXG4gICAgICAgICAgICBpc01hY09TICYmIHNjcmVlblJlYWRlck1lc3NhZ2UgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSGlkZGVuTGFiZWxUZXh0LCB7IFwiYXJpYS1saXZlXCI6IFwiYXNzZXJ0aXZlXCIsIFwiZGF0YS10ZXN0aWRcIjogXCJzY3JlZW5SZWFkZXJNZXNzYWdlXCIgfSwgc2NyZWVuUmVhZGVyTWVzc2FnZSkpKSkpO1xyXG59KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q2hhcmFjdGVyQ291bnRlci5qcy5tYXAiXX0= */"));
6682
+ }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNoYXJhY3RlckNvdW50ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWdCZ0QiLCJmaWxlIjoiQ2hhcmFjdGVyQ291bnRlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IHVzZURldmljZURldGVjdCBmcm9tICcuLi8uLi9ob29rcy91c2VEZXZpY2VEZXRlY3QnO1xyXG5pbXBvcnQgeyBJMThuQ29udGV4dCB9IGZyb20gJy4uLy4uL2kxOG4nO1xyXG5pbXBvcnQgeyBtYWdtYSB9IGZyb20gJy4uLy4uL3RoZW1lL21hZ21hJztcclxuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEhpZGRlbkxhYmVsVGV4dCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5wdXRNZXNzYWdlIH0gZnJvbSAnLi4vSW5wdXQvSW5wdXRNZXNzYWdlJztcclxuLy8gQ2hhbmdlcyB0aGUgZm9udCB3ZWlnaHQgdG8gYm9sZCBiYXNlZCBvbiBtYXhDb3VudC5cclxuZnVuY3Rpb24gYnVpbGRGb250V2VpZ2h0KHByb3BzKSB7XHJcbiAgICBpZiAoKHByb3BzLmlucHV0TGVuZ3RoIDwgcHJvcHMubWF4Q291bnQgJiYgcHJvcHMuaW5wdXRMZW5ndGggPj0gMSkgfHxcclxuICAgICAgICBwcm9wcy5pbnB1dExlbmd0aCA9PT0gcHJvcHMubWF4Q291bnQpIHtcclxuICAgICAgICByZXR1cm4gbWFnbWEudHlwb2dyYXBoeVZpc3VhbFN0eWxlcy5oZWFkaW5nWFNtYWxsLmZvbnRXZWlnaHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ2luaGVyaXQnO1xyXG59XHJcbmNvbnN0IFN0eWxlZElucHV0TWVzc2FnZSA9IHN0eWxlZChJbnB1dE1lc3NhZ2UpIGBcbiAgZm9udC13ZWlnaHQ6ICR7YnVpbGRGb250V2VpZ2h0fTtcbiAgZm9udC1mYW1pbHk6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm9keUZvbnR9O1xuYDtcclxuZXhwb3J0IGNvbnN0IENoYXJhY3RlckNvdW50ZXIgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgcmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGNoaWxkcmVuLCBoYXNDaGFyYWN0ZXJDb3VudGVyLCBpZCwgaW5wdXRMZW5ndGgsIG1heENvdW50LCBtYXhMZW5ndGgsIHRlc3RJZCwgaXNJbnZlcnNlLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IGkxOG4gPSBSZWFjdC51c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUywgaXNXaW5kb3dzLCBpc0Nocm9tZSB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICAvLyBUZW1wb3Jhcnkgd2hpbGUgYm90aCAnbWF4TGVuZ3RoJyBhbmQgJ21heENvdW50JyBhcmUgc3VwcG9ydGVkLiBUbyBiZSByZW1vdmVkIGluIGZ1dHVyZSBpdGVyYXRpb25zLlxyXG4gICAgY29uc3QgbWF4Q2hhcmFjdGVycyA9IHR5cGVvZiBtYXhDb3VudCA9PT0gJ251bWJlcicgPyBtYXhDb3VudCA6IG1heExlbmd0aDtcclxuICAgIGNvbnN0IGlzT3Zlck1heENvdW50ID0gaW5wdXRMZW5ndGggPiBtYXhDaGFyYWN0ZXJzO1xyXG4gICAgLy8gR2V0cyBwZXJjZW50YWdlIHZhbHVlIG9mIHRvdGFsIGNoYXJhY3RlcnMgd2l0aGluIElucHV0IHRvIGxldCBhcmlhLWxpdmUgaGF2ZSBkeW5hbWljIHN0YXRlcy5cclxuICAgIGNvbnN0IGdldFBlcmNlbnRhZ2UgPSAoaW5wdXRMZW5ndGggLyBtYXhDaGFyYWN0ZXJzKSAqIDEwMDtcclxuICAgIC8vIFJldHVybnMgYXJpYS1saXZlIHN0YXRlcyBiYXNlZCBvbiBwZXJjZW50YWdlIG9mIGNoYXJhY3RlcnMgd2l0aGluIElucHV0LlxyXG4gICAgZnVuY3Rpb24gZ2V0QXJpYUxpdmVTdGF0ZSgpIHtcclxuICAgICAgICBpZiAoaXNXaW5kb3dzICYmIGlzQ2hyb21lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2ZmJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGdldFBlcmNlbnRhZ2UgPiAxMDApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdhc3NlcnRpdmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ3BvbGl0ZSc7XHJcbiAgICB9XHJcbiAgICAvLyBBcyB0aGUgdXNlciB0eXBlcywgdGhpcyBjYWxjdWxhdGVzIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBzZXQgYnkgbWF4Q291bnQgd2hpY2ggY291bnRzIGRvd24gdG8gemVybyB0aGVuIGNvdW50cyB1cCBpZiBvdmVyIHRoZSBsaW1pdC5cclxuICAgIGNvbnN0IGNoYXJhY3RlckxpbWl0ID0gbWF4Q2hhcmFjdGVycyA+IGlucHV0TGVuZ3RoXHJcbiAgICAgICAgPyBtYXhDaGFyYWN0ZXJzIC0gaW5wdXRMZW5ndGhcclxuICAgICAgICA6IGlucHV0TGVuZ3RoIC0gbWF4Q2hhcmFjdGVycztcclxuICAgIC8qXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIgY291bnRlciBkZXNjcmlwdGlvbi5cclxuICAgICAqIFdoZW4gdGhlcmUncyBubyBpbnB1dExlbmd0aCwgcmV0dXJucyBcIiMgY2hhcmFjdGVyKHMpIGFsbG93ZWRcIlxyXG4gICAgICogV2hlbiBpbnB1dExlbmd0aCA8IG1heENvdW50IG9yIGlucHV0TGVuZ3RoID09PSBtYXhDb3VudCwgcmV0dXJucyBcIiMgY2hhcmFjdGVyKHMpIGxlZnRcIlxyXG4gICAgICogV2hlbiBpbnB1dExlbmd0aCA+IG1heENvdW50LCByZXR1cm5zIFwiIyBjaGFyYWN0ZXIocykgb3ZlciBsaW1pdFwiXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IGNoYXJhY3RlclRpdGxlID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRMZW5ndGggPCBtYXhDaGFyYWN0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRMZW5ndGggPT09IG1heENoYXJhY3RlcnMgLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2NoYXJhY3RlckxpbWl0fSAke2kxOG4uY2hhcmFjdGVyQ291bnRlci5jaGFyYWN0ZXJMZWZ0fWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXJMaW1pdCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y2hhcmFjdGVyTGltaXR9ICR7aTE4bi5jaGFyYWN0ZXJDb3VudGVyLmNoYXJhY3RlcnNMZWZ0fWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlucHV0TGVuZ3RoID4gbWF4Q2hhcmFjdGVycykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0TGVuZ3RoID09PSBtYXhDaGFyYWN0ZXJzICsgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtjaGFyYWN0ZXJMaW1pdH0gJHtpMThuLmNoYXJhY3RlckNvdW50ZXIuY2hhcmFjdGVyT3Zlcn1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2NoYXJhY3RlckxpbWl0fSAke2kxOG4uY2hhcmFjdGVyQ291bnRlci5jaGFyYWN0ZXJzT3Zlcn1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbnB1dExlbmd0aCA9PT0gbWF4Q2hhcmFjdGVycykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAwICR7aTE4bi5jaGFyYWN0ZXJDb3VudGVyLmNoYXJhY3RlcnNMZWZ0fWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChtYXhDaGFyYWN0ZXJzID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7bWF4Q2hhcmFjdGVyc30gJHtpMThuLmNoYXJhY3RlckNvdW50ZXIuY2hhcmFjdGVyQWxsb3dlZH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBgJHttYXhDaGFyYWN0ZXJzfSAke2kxOG4uY2hhcmFjdGVyQ291bnRlci5jaGFyYWN0ZXJzQWxsb3dlZH1gO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtjaGFyYWN0ZXJMaW1pdCwgaW5wdXRMZW5ndGgsIGkxOG4uY2hhcmFjdGVyQ291bnRlciwgbWF4Q2hhcmFjdGVyc10pO1xyXG4gICAgLy8gU2V0cyB0aGUgc2NyZWVuIHJlYWRlciBtZXNzYWdlIHRvIGFubm91bmNlIHRoZSBjaGFyYWN0ZXIgY291bnRlci5cclxuICAgIGNvbnN0IFtzY3JlZW5SZWFkZXJNZXNzYWdlLCBzZXRTY3JlZW5SZWFkZXJNZXNzYWdlXSA9IFJlYWN0LnVzZVN0YXRlKCk7XHJcbiAgICBjb25zdCBkZWJvdW5jZWRTZXRTY3JlZW5SZWFkZXJNZXNzYWdlID0gUmVhY3QudXNlTWVtbygoKSA9PiBkZWJvdW5jZSgoc3RhdHVzTWVzc2FnZSkgPT4ge1xyXG4gICAgICAgIHNldFNjcmVlblJlYWRlck1lc3NhZ2Uoc3RhdHVzTWVzc2FnZSk7XHJcbiAgICB9LCAzMDAwKSwgW10pO1xyXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBkZWJvdW5jZWRTZXRTY3JlZW5SZWFkZXJNZXNzYWdlKGNoYXJhY3RlclRpdGxlKTtcclxuICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICBkZWJvdW5jZWRTZXRTY3JlZW5SZWFkZXJNZXNzYWdlLmNsZWFyKCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtpbnB1dExlbmd0aCwgZGVib3VuY2VkU2V0U2NyZWVuUmVhZGVyTWVzc2FnZSwgY2hhcmFjdGVyVGl0bGVdKTtcclxuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIE9iamVjdC5hc3NpZ24oeyByZWY6IHJlZiwgXCJkYXRhLXRlc3RpZFwiOiB0ZXN0SWQgfSwgcmVzdCwgeyBpZDogaWQgfSksXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSW5wdXRNZXNzYWdlLCB7IFwiYXJpYS1saXZlXCI6IGdldEFyaWFMaXZlU3RhdGUoKSwgaGFzQ2hhcmFjdGVyQ291bnRlcjogaGFzQ2hhcmFjdGVyQ291bnRlciwgaGFzRXJyb3I6IGlzT3Zlck1heENvdW50LCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgaW5wdXRMZW5ndGg6IGlucHV0TGVuZ3RoLCBtYXhDb3VudDogbWF4Q2hhcmFjdGVycywgbWF4TGVuZ3RoOiBtYXhDaGFyYWN0ZXJzIH0sIGNoYXJhY3RlclRpdGxlKSxcclxuICAgICAgICAgICAgaXNNYWNPUyAmJiBzY3JlZW5SZWFkZXJNZXNzYWdlICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KEhpZGRlbkxhYmVsVGV4dCwgeyBcImFyaWEtbGl2ZVwiOiBcImFzc2VydGl2ZVwiLCBcImRhdGEtdGVzdGlkXCI6IFwic2NyZWVuUmVhZGVyTWVzc2FnZVwiIH0sIHNjcmVlblJlYWRlck1lc3NhZ2UpKSkpKTtcclxufSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNoYXJhY3RlckNvdW50ZXIuanMubWFwIl19 */"));
6507
6683
  var CharacterCounter = /*#__PURE__*/forwardRef(function (props, ref) {
6508
6684
  var hasCharacterCounter = props.hasCharacterCounter,
6509
6685
  id = props.id,
@@ -6514,6 +6690,10 @@ var CharacterCounter = /*#__PURE__*/forwardRef(function (props, ref) {
6514
6690
  isInverse = props.isInverse,
6515
6691
  rest = _objectWithoutPropertiesLoose(props, _excluded$x);
6516
6692
  var i18n = useContext(I18nContext);
6693
+ var _useDeviceDetect = useDeviceDetect(),
6694
+ isMacOS = _useDeviceDetect.isMacOS,
6695
+ isWindows = _useDeviceDetect.isWindows,
6696
+ isChrome = _useDeviceDetect.isChrome;
6517
6697
  // Temporary while both 'maxLength' and 'maxCount' are supported. To be removed in future iterations.
6518
6698
  var maxCharacters = typeof maxCount === 'number' ? maxCount : maxLength;
6519
6699
  var isOverMaxCount = inputLength > maxCharacters;
@@ -6521,6 +6701,9 @@ var CharacterCounter = /*#__PURE__*/forwardRef(function (props, ref) {
6521
6701
  var getPercentage = inputLength / maxCharacters * 100;
6522
6702
  // Returns aria-live states based on percentage of characters within Input.
6523
6703
  function getAriaLiveState() {
6704
+ if (isWindows && isChrome) {
6705
+ return 'off';
6706
+ }
6524
6707
  if (getPercentage > 100) {
6525
6708
  return 'assertive';
6526
6709
  }
@@ -6574,8 +6757,6 @@ var CharacterCounter = /*#__PURE__*/forwardRef(function (props, ref) {
6574
6757
  debouncedSetScreenReaderMessage.clear();
6575
6758
  };
6576
6759
  }, [inputLength, debouncedSetScreenReaderMessage, characterTitle]);
6577
- var _useDeviceDetect = useDeviceDetect(),
6578
- isMacOS = _useDeviceDetect.isMacOS;
6579
6760
  return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement("div", Object.assign({
6580
6761
  ref: ref,
6581
6762
  "data-testid": testId
@@ -15105,7 +15286,7 @@ var DatePickerContainer = /*#__PURE__*/_styled("div", {
15105
15286
  styles: "position:relative"
15106
15287
  } : {
15107
15288
  name: "bjn8wh",
15108
- styles: "position:relative/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQnVDIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xyXG5pbXBvcnQgeyBhdXRvVXBkYXRlIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3JlYWN0LWRvbSc7XHJcbmltcG9ydCB7IGFkZERheXMsIGVuZE9mRGF5LCBpc0FmdGVyLCBpc0JlZm9yZSwgaXNNYXRjaCwgaXNWYWxpZCwgcGFyc2UsIHNldEhvdXJzLCBzdGFydE9mRGF5LCB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICdwb2xpc2hlZCc7XHJcbmltcG9ydCB7IEV2ZW50SWNvbiB9IGZyb20gJ3JlYWN0LW1hZ21hLWljb25zJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9DYWxlbmRhckNvbnRleHQnO1xyXG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoIH0gZnJvbSAnLi9DYWxlbmRhck1vbnRoJztcclxuaW1wb3J0IHsgdXNlTWFnbWFGbG9hdGluZyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZU1hZ21hRmxvYXRpbmcnO1xyXG5pbXBvcnQgeyBJMThuQ29udGV4dCB9IGZyb20gJy4uLy4uL2kxOG4nO1xyXG5pbXBvcnQgeyBJbnZlcnNlQ29udGV4dCwgdXNlSXNJbnZlcnNlIH0gZnJvbSAnLi4vLi4vaW52ZXJzZSc7XHJcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3RoZW1lL1RoZW1lQ29udGV4dCc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4uL0lucHV0JztcclxuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcclxuaW1wb3J0IHsgVmlzdWFsbHlIaWRkZW4gfSBmcm9tICcuLi9WaXN1YWxseUhpZGRlbic7XHJcbmltcG9ydCB7IERhdGVGaWVsZElucHV0IH0gZnJvbSAnLi9EYXRlRmllbGQvRGF0ZUZpZWxkSW5wdXQnO1xyXG5pbXBvcnQgeyBnZXRDYWxlbmRhck1vbnRoV2Vla3MsIGdldERhdGVGcm9tU3RyaW5nLCBnZXROZXh0TW9udGhGcm9tRGF0ZSwgZ2V0UHJldk1vbnRoRnJvbURhdGUsIGhhbmRsZUtleVByZXNzLCBzZXRNb250aEZvckRhdGUsIHNldFllYXJGb3JEYXRlLCBpMThuRm9ybWF0IGFzIGZvcm1hdCwgaW5EYXRlUmFuZ2UsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IG9taXQsIHVzZUZvcmtlZFJlZiwgdXNlR2VuZXJhdGVJZCB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuY29uc3QgRGF0ZVBpY2tlckNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xyXG5jb25zdCBEYXRlUGlja2VyQ2FsZW5kYXIgPSBzdHlsZWQuZGl2IGBcbiAgYm9yZGVyOiAxcHggc29saWRcbiAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjUsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMH07XG4gIGJvcmRlci1yYWRpdXM6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm9yZGVyUmFkaXVzfTtcbiAgYm94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwfTtcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMub3BlbmVkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBtYXJnaW46ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDF9IDBweDtcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiAocHJvcHMub3BlbmVkID8gJzEnIDogJzAnKX07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dCAwcztcbiAgd2lkdGg6IDMyMHB4O1xuYDtcclxuZXhwb3J0IGNvbnN0IERhdGVQaWNrZXIgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcclxuICAgIGNvbnN0IGkxOG4gPSBSZWFjdC51c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcclxuICAgIGNvbnN0IGljb25SZWYgPSBSZWFjdC51c2VSZWYoKTtcclxuICAgIGNvbnN0IHByZXZpb3VzSWNvblJlZiA9IFJlYWN0LnVzZVJlZigpO1xyXG4gICAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcclxuICAgIGNvbnN0IGxhc3RGb2N1cyA9IFJlYWN0LnVzZVJlZigpO1xyXG4gICAgY29uc3QgaWQgPSB1c2VHZW5lcmF0ZUlkKHByb3BzLmlkKTtcclxuICAgIGNvbnN0IGlzSW52ZXJzZSA9IHVzZUlzSW52ZXJzZShwcm9wcy5pc0ludmVyc2UpO1xyXG4gICAgY29uc3QgbWluRGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKHByb3BzLm1pbkRhdGUpO1xyXG4gICAgY29uc3QgbWF4RGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKHByb3BzLm1heERhdGUpO1xyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IGkxOG4uZGF0ZUZvcm1hdDtcclxuICAgIGNvbnN0IFtoZWxwZXJJbmZvcm1hdGlvblNob3duLCBzZXRIZWxwZXJJbmZvcm1hdGlvblNob3duXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtjYWxlbmRhck9wZW5lZCwgc2V0Q2FsZW5kYXJPcGVuZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2RhdGVGb2N1c2VkLCBzZXREYXRlRm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbZm9jdXNlZERhdGUsIHNldEZvY3VzZWREYXRlXSA9IFJlYWN0LnVzZVN0YXRlKHNldERhdGVGcm9tQ29uc3VtZXIocHJvcHMudmFsdWUgfHwgcHJvcHMuZGVmYXVsdERhdGUpIHx8XHJcbiAgICAgICAgc2V0RGVmYXVsdEZvY3VzZWREYXRlKCkpO1xyXG4gICAgY29uc3QgW2Nob3NlbkRhdGUsIHNldENob3NlbkRhdGVdID0gUmVhY3QudXNlU3RhdGUoc2V0RGF0ZUZyb21Db25zdW1lcihwcm9wcy52YWx1ZSB8fCBwcm9wcy5kZWZhdWx0RGF0ZSkpO1xyXG4gICAgY29uc3QgcmVmID0gdXNlRm9ya2VkUmVmKGZvcndhcmRlZFJlZiwgaW5wdXRSZWYpO1xyXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAocHJvcHMuYXBpUmVmKSB7XHJcbiAgICAgICAgICAgIHByb3BzLmFwaVJlZi5jdXJyZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgY2xvc2VEYXRlUGlja2VyTWFudWFsbHkoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvcGVuRGF0ZVBpY2tlck1hbnVhbGx5KGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2FsZW5kYXJPcGVuZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGVUaW1lUGlja2VyQ29udGVudCAmJlxyXG4gICAgICAgICAgICBjaG9zZW5EYXRlICYmXHJcbiAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50ICYmIHByb3BzLnNldEFkZGl0aW9uYWxJbnB1dENvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLnNldEFkZGl0aW9uYWxJbnB1dENvbnRlbnQoJzEyOjAwIEFNJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUoY2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2Nob3NlbkRhdGVdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFjYWxlbmRhck9wZW5lZCkge1xyXG4gICAgICAgICAgICBzZXREYXRlRm9jdXNlZChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2NhbGVuZGFyT3BlbmVkXSk7XHJcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wcy52YWx1ZSkge1xyXG4gICAgICAgICAgICBzZXRGb2N1c2VkRGF0ZShzZXREYXRlRnJvbUNvbnN1bWVyKHByb3BzLnZhbHVlKSB8fCBzZXREZWZhdWx0Rm9jdXNlZERhdGUoKSk7XHJcbiAgICAgICAgICAgIHNldENob3NlbkRhdGUoc2V0RGF0ZUZyb21Db25zdW1lcihwcm9wcy52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvcHMudmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHNldENob3NlbkRhdGUodW5kZWZpbmVkKTtcclxuICAgIH0sIFtwcm9wcy52YWx1ZV0pO1xyXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBwcmV2aW91c0ljb25SZWYuY3VycmVudCA9IGljb25SZWYuY3VycmVudDtcclxuICAgIH0sIFtdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmb2N1c2VkRGF0ZSB8fCAhbWluRGF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChpc0JlZm9yZShmb2N1c2VkRGF0ZSwgbWluRGF0ZSkgJiYgIWNob3NlbkRhdGUpIHtcclxuICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobWluRGF0ZSk7XHJcbiAgICAgICAgICAgIHNldERhdGVGb2N1c2VkKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtmb2N1c2VkRGF0ZSwgbWluRGF0ZSwgY2hvc2VuRGF0ZV0pO1xyXG4gICAgZnVuY3Rpb24gc2hvd0hlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIGxhc3RGb2N1cy5jdXJyZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgICAgICBzZXRIZWxwZXJJbmZvcm1hdGlvblNob3duKHRydWUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGlkZUhlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIGxhc3RGb2N1cy5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgc2V0SGVscGVySW5mb3JtYXRpb25TaG93bihmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjbG9zZUhlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIHNldEhlbHBlckluZm9ybWF0aW9uU2hvd24oZmFsc2UpO1xyXG4gICAgICAgIGljb25SZWYuY3VycmVudC5mb2N1cygpO1xyXG4gICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNldEZvY3VzZWRUb2RheURhdGUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCBpc0tleWJvYXJkRXZlbnQgPSBldmVudC50eXBlID09PSAna2V5ZG93bic7XHJcbiAgICAgICAgaWYgKChpc0tleWJvYXJkRXZlbnQgJiZcclxuICAgICAgICAgICAgKGV2ZW50LmtleSA9PT0gJyAnIHx8XHJcbiAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdFbnRlcicpKSB8fFxyXG4gICAgICAgICAgICBldmVudC50eXBlID09PSAnY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKHNldERlZmF1bHRGb2N1c2VkRGF0ZSgpKTtcclxuICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIHNldERhdGVGcm9tQ29uc3VtZXIoZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZERhdGUgPSBnZXREYXRlRnJvbVN0cmluZyhkYXRlKTtcclxuICAgICAgICBjb25zdCBjb252ZXJ0ZWRNaW5EYXRlID0gZ2V0RGF0ZUZyb21TdHJpbmcobWluRGF0ZSk7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkTWF4RGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKG1heERhdGUpO1xyXG4gICAgICAgIHJldHVybiBkYXRlICYmXHJcbiAgICAgICAgICAgIGluRGF0ZVJhbmdlKGNvbnZlcnRlZERhdGUsIGNvbnZlcnRlZE1pbkRhdGUsIGNvbnZlcnRlZE1heERhdGUpXHJcbiAgICAgICAgICAgID8gY29udmVydGVkRGF0ZVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXREZWZhdWx0Rm9jdXNlZERhdGUoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkTWluRGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKG1pbkRhdGUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZE1heERhdGUgPSBnZXREYXRlRnJvbVN0cmluZyhtYXhEYXRlKTtcclxuICAgICAgICBpZiAoaW5EYXRlUmFuZ2UobmV3RGF0ZSwgY29udmVydGVkTWluRGF0ZSwgY29udmVydGVkTWF4RGF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKGlzQmVmb3JlKHN0YXJ0T2ZEYXkobmV3RGF0ZSksIGNvbnZlcnRlZE1pbkRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkRGF5cyhuZXdEYXRlLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3RGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29udmVydGVkTWF4RGF0ZSB8fCBjb252ZXJ0ZWRNaW5EYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRNaW5EYXRlID8gY29udmVydGVkTWluRGF0ZSA6IGNvbnZlcnRlZE1heERhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYnVpbGRDYWxlbmRhck1vbnRoKGRhdGUsIGVuYWJsZU91dHNpZGVEYXRlcykge1xyXG4gICAgICAgIGNvbnN0IGRheXMgPSBbXHJcbiAgICAgICAgICAgICdzdW5kYXknLFxyXG4gICAgICAgICAgICAnbW9uZGF5JyxcclxuICAgICAgICAgICAgJ3R1ZXNkYXknLFxyXG4gICAgICAgICAgICAnd2VkbmVzZGF5JyxcclxuICAgICAgICAgICAgJ3RodXJzZGF5JyxcclxuICAgICAgICAgICAgJ2ZyaWRheScsXHJcbiAgICAgICAgICAgICdzYXR1cmRheScsXHJcbiAgICAgICAgXTtcclxuICAgICAgICBjb25zdCB7IHN0YXJ0T2ZXZWVrIH0gPSBpMThuLmRhdGVQaWNrZXI7XHJcbiAgICAgICAgcmV0dXJuIGdldENhbGVuZGFyTW9udGhXZWVrcyhkYXRlLCBlbmFibGVPdXRzaWRlRGF0ZXMsIGRheXMuaW5kZXhPZihzdGFydE9mV2VlaykpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25QcmV2TW9udGhDbGljaygpIHtcclxuICAgICAgICBjb25zdCBuZXdEYXRlID0gZ2V0UHJldk1vbnRoRnJvbURhdGUoZm9jdXNlZERhdGUpO1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25OZXh0TW9udGhDbGljaygpIHtcclxuICAgICAgICBjb25zdCBuZXdEYXRlID0gZ2V0TmV4dE1vbnRoRnJvbURhdGUoZm9jdXNlZERhdGUpO1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0TW9udGhGb2N1c2VkRGF0ZShtb250aE51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBzZXRNb250aEZvckRhdGUoZm9jdXNlZERhdGUsIG1vbnRoTnVtYmVyKTtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShuZXdEYXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldFllYXJGb2N1c2VkRGF0ZSh5ZWFyTnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IHNldFllYXJGb3JEYXRlKGZvY3VzZWREYXRlLCB5ZWFyTnVtYmVyKTtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShuZXdEYXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRGF0ZUNoYW5nZShkYXkpIHtcclxuICAgICAgICBzZXRDaG9zZW5EYXRlKGRheSk7XHJcbiAgICAgICAgaWYgKGRhdGVUaW1lUGlja2VyQ29udGVudClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlc2V0KCkge1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKHNldERlZmF1bHRGb2N1c2VkRGF0ZSgpKTtcclxuICAgICAgICBzZXRDaG9zZW5EYXRlKG51bGwpO1xyXG4gICAgICAgIHNldERhdGVGb2N1c2VkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGlzVmFsaWREYXRlRnJvbVN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlRm9ybWF0ID0gaXNNYXRjaCh2YWx1ZSwgaTE4bi5kYXRlRm9ybWF0KTtcclxuICAgICAgICBjb25zdCBwYXJzZWREYXRlID0gcGFyc2UodmFsdWUsIGkxOG4uZGF0ZUZvcm1hdCwgbmV3IERhdGUoKSk7XHJcbiAgICAgICAgY29uc3QgaXNWYWxpZERhdGUgPSBpc1ZhbGlkKHBhcnNlZERhdGUpO1xyXG4gICAgICAgIHJldHVybiBpc1ZhbGlkRGF0ZUZvcm1hdCAmJiBpc1ZhbGlkRGF0ZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGRheSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgcHJvcHMub25JbnB1dENoYW5nZSAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgcHJvcHMub25JbnB1dENoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbklucHV0Q2hhbmdlKGV2ZW50KTtcclxuICAgICAgICBsZXQgaXNWYWxpZERheTtcclxuICAgICAgICBpZiAoZGF0ZVRpbWVQaWNrZXJDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpWzBdO1xyXG4gICAgICAgICAgICBpc1ZhbGlkRGF5ID0gaXNWYWxpZERhdGVGcm9tU3RyaW5nKHNwbGl0VmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZERheSA9IG5ldyBEYXRlKHNwbGl0VmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gL15cXGR7Mn1cXC9cXGR7Mn1cXC9cXGR7NH0kLztcclxuICAgICAgICAgICAgaWYgKHBhdHRlcm4udGVzdChzcGxpdFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgc2V0Q2hvc2VuRGF0ZSh2YWxpZERheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UoaXNWYWxpZERheSA/IHZhbGlkRGF5LnRvSVNPU3RyaW5nKCkgOiBzcGxpdFZhbHVlLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpc1ZhbGlkRGF5ID0gaXNWYWxpZERhdGVGcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UoaXNWYWxpZERheSA/IGRheS50b0lTT1N0cmluZygpIDogdmFsdWUsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dEZvY3VzKGV2ZW50KSB7XHJcbiAgICAgICAgcHJvcHMub25JbnB1dEZvY3VzICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbklucHV0Rm9jdXMgPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgICAgICAgcHJvcHMub25JbnB1dEZvY3VzKGV2ZW50KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUlucHV0Qmx1cihldmVudCkge1xyXG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGlucHV0UmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2UoZGF0ZVRpbWVQaWNrZXJDb250ZW50ID8gdmFsdWUuc3BsaXQoJyAnKVswXSA6IHZhbHVlLCBpMThuLmRhdGVGb3JtYXQsIG5ldyBEYXRlKCkpO1xyXG4gICAgICAgIGxldCBpc1ZhbGlkRGF5O1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3BsaXRWYWx1ZSA9IHZhbHVlLnNwbGl0KCcgJylbMF07XHJcbiAgICAgICAgICAgIGlzVmFsaWREYXkgPSBpc1ZhbGlkRGF0ZUZyb21TdHJpbmcoc3BsaXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkRGF5ID0gbmV3IERhdGUoc3BsaXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRGF5KSB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRlQ2hhbmdlKHZhbGlkRGF5LCBldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWREYXkgPSBpc1ZhbGlkRGF0ZUZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZERheSkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlRGF0ZUNoYW5nZShkYXksIGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc2V0ICYmIHR5cGVvZiByZXNldCA9PT0gJ2Z1bmN0aW9uJyAmJiByZXNldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BzLm9uSW5wdXRCbHVyICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbklucHV0Qmx1ciA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbklucHV0Qmx1cihldmVudCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dEtleURvd24oZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWNvblJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRlRm9jdXNlZCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmNsb3Nlc3QoJ3RhYmxlJykpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2hvc2VuRGF0ZSA9IGhhbmRsZUtleVByZXNzKGV2ZW50LCBmb2N1c2VkRGF0ZSwgc2V0Q2FsZW5kYXJPcGVuZWQsIHNob3dIZWxwZXJJbmZvcm1hdGlvbiwgb25EYXRlQ2hhbmdlLCBpY29uUmVmKTtcclxuICAgICAgICAgICAgaWYgKG5ld0Nob3NlbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIG1heERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZnRlcihzZXRIb3VycyhuZXdDaG9zZW5EYXRlLCAxMiksIHN0YXJ0T2ZEYXkobWluRGF0ZSkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQmVmb3JlKHNldEhvdXJzKG5ld0Nob3NlbkRhdGUsIDEyKSwgZW5kT2ZEYXkobWF4RGF0ZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0Nob3NlbkRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1pbkRhdGUgJiYgIW1heERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZnRlcihzZXRIb3VycyhuZXdDaG9zZW5EYXRlLCAxMiksIHN0YXJ0T2ZEYXkobWluRGF0ZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0Nob3NlbkRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1heERhdGUgJiYgIW1pbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCZWZvcmUoc2V0SG91cnMobmV3Q2hvc2VuRGF0ZSwgMTIpLCBlbmRPZkRheShtYXhEYXRlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobmV3Q2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobmV3Q2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVEYXRlQ2hhbmdlKGRheSwgZXZlbnQpIHtcclxuICAgICAgICBwcm9wcy5vbkRhdGVDaGFuZ2UgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHByb3BzLm9uRGF0ZUNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbkRhdGVDaGFuZ2UoZGF5LCBldmVudCk7XHJcbiAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHByb3BzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlKGRheT8udG9JU09TdHJpbmcoKSwgZXZlbnQpO1xyXG4gICAgICAgIG9uRGF0ZUNoYW5nZShkYXkpO1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShkYXkpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGFuZGxlRGF5U2VsZWN0aW9uKGRheSwgZXZlbnQpIHtcclxuICAgICAgICBoYW5kbGVEYXRlQ2hhbmdlKGRheSwgZXZlbnQpO1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVDYWxlbmRhckJsdXIoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCB7IGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIC8vIHRpbWVvdXQgbmVlZGVkIGZvciBhY3RpdmUgZWxlbWVudCB0byB1cGRhdGUuIEJyb3dzZXIgYmVoYXZpb3IuXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyMzA3XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSW5DYWxlbmRhciA9IGN1cnJlbnRUYXJnZXQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgICAgIGlmICghaXNJbkNhbGVuZGFyICYmICFoZWxwZXJJbmZvcm1hdGlvblNob3duKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUNsb3NlQnV0dG9uQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoIWljb25SZWYuY3VycmVudCAmJiBwcmV2aW91c0ljb25SZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBpY29uUmVmLmN1cnJlbnQgPSBwcmV2aW91c0ljb25SZWYuY3VycmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWNvblJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgc2V0Q2FsZW5kYXJPcGVuZWQoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdG9nZ2xlQ2FsZW5kYXJPcGVuZWQoKSB7XHJcbiAgICAgICAgc2V0Q2FsZW5kYXJPcGVuZWQob3BlbmVkID0+IHtcclxuICAgICAgICAgICAgLy8gRm9jdXMgb24gdG9kYXkgd2hlbiBvcGVuaW5nIGNhbGVuZGFyIHdpdGhvdXQgYSBjaG9zZW4gZGF0ZVxyXG4gICAgICAgICAgICBpZiAoIW9wZW5lZCAmJiAhY2hvc2VuRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUoc2V0RGVmYXVsdEZvY3VzZWREYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICFvcGVuZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCB0ZXN0SWQsIGRhdGVUaW1lUGlja2VyQ29udGVudCwgLi4ucmVzdCB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBvdGhlciA9IG9taXQoWydvbkRhdGVDaGFuZ2UnLCAnb25JbnB1dENoYW5nZScsICdvbklucHV0Qmx1cicsICdvbklucHV0Rm9jdXMnXSwgcmVzdCk7XHJcbiAgICBjb25zdCBkYXRlRmllbGRWYWx1ZSA9IGRhdGVGb3JtYXQgPT09ICdNTU1NIGQsIHl5eXknICYmIGNob3NlbkRhdGVcclxuICAgICAgICA/IGZvcm1hdChjaG9zZW5EYXRlLCBkYXRlRm9ybWF0KVxyXG4gICAgICAgIDogY2hvc2VuRGF0ZTtcclxuICAgIGNvbnN0IGlucHV0RGF0ZVZhbHVlID0gY2hvc2VuRGF0ZSA/IGZvcm1hdChjaG9zZW5EYXRlLCBkYXRlRm9ybWF0KSA6ICcnO1xyXG4gICAgbGV0IGlucHV0VmFsdWUgPSBwcm9wcy5pc0RhdGVGaWVsZElucHV0ID8gZGF0ZUZpZWxkVmFsdWUgOiBpbnB1dERhdGVWYWx1ZTtcclxuICAgIGlmIChpbnB1dFZhbHVlICYmIHByb3BzLmFkZGl0aW9uYWxJbnB1dENvbnRlbnQpIHtcclxuICAgICAgICBpbnB1dFZhbHVlID0gYCR7aW5wdXRWYWx1ZX0gJHtwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50fWA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50KSB7XHJcbiAgICAgICAgc2V0Q2hvc2VuRGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZmxvYXRpbmdTdHlsZXMsIHJlZnMsIGVsZW1lbnRzLCB1cGRhdGUgfSA9IHVzZU1hZ21hRmxvYXRpbmcoKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlRGF0ZUlucHV0ID0gZWxlbWVudHMucmVmZXJlbmNlO1xyXG4gICAgICAgIGNvbnN0IGZsb2F0aW5nQ2FsZW5kYXIgPSBlbGVtZW50cy5mbG9hdGluZztcclxuICAgICAgICBpZiAoY2FsZW5kYXJPcGVuZWQgJiYgcmVmZXJlbmNlRGF0ZUlucHV0ICYmIGZsb2F0aW5nQ2FsZW5kYXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF1dG9VcGRhdGUocmVmZXJlbmNlRGF0ZUlucHV0LCBmbG9hdGluZ0NhbGVuZGFyLCB1cGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtjYWxlbmRhck9wZW5lZCwgZWxlbWVudHMsIHVwZGF0ZV0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZToge1xyXG4gICAgICAgICAgICBjaG9zZW5EYXRlLFxyXG4gICAgICAgICAgICBmb2N1c2VkRGF0ZSxcclxuICAgICAgICAgICAgZGF0ZUZvY3VzZWQsXHJcbiAgICAgICAgICAgIG1heERhdGUsXHJcbiAgICAgICAgICAgIG1pbkRhdGUsXHJcbiAgICAgICAgICAgIGhlbHBlckluZm9ybWF0aW9uU2hvd24sXHJcbiAgICAgICAgICAgIGlzSW52ZXJzZSxcclxuICAgICAgICAgICAgYnVpbGRDYWxlbmRhck1vbnRoLFxyXG4gICAgICAgICAgICBzaG93SGVscGVySW5mb3JtYXRpb24sXHJcbiAgICAgICAgICAgIGhpZGVIZWxwZXJJbmZvcm1hdGlvbixcclxuICAgICAgICAgICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxyXG4gICAgICAgICAgICBvblByZXZNb250aENsaWNrLFxyXG4gICAgICAgICAgICBvbk5leHRNb250aENsaWNrLFxyXG4gICAgICAgICAgICBvbkRhdGVDaGFuZ2U6IGhhbmRsZURheVNlbGVjdGlvbixcclxuICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQsXHJcbiAgICAgICAgICAgIHNldEZvY3VzZWRUb2RheURhdGUsXHJcbiAgICAgICAgICAgIHNldEZvY3VzZWREYXRlLFxyXG4gICAgICAgICAgICBzZXRNb250aEZvY3VzZWREYXRlLFxyXG4gICAgICAgICAgICBzZXRZZWFyRm9jdXNlZERhdGUsXHJcbiAgICAgICAgICAgIG9uQ2xvc2U6IGNsb3NlSGVscGVySW5mb3JtYXRpb24sXHJcbiAgICAgICAgfSB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBpY2tlckNvbnRhaW5lciwgeyBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgb25CbHVyOiBoYW5kbGVDYWxlbmRhckJsdXIgfSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgY2FsZW5kYXJPcGVuZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsIGkxOG4uZGF0ZVBpY2tlci5jYWxlbmRhck9wZW5Bbm5vdW5jZSkpKSxcclxuICAgICAgICAgICAgcHJvcHMuaXNEYXRlRmllbGRJbnB1dCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KERhdGVGaWVsZElucHV0LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBpZDogaWQsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXQsIGlucHV0VmFsdWU6IGlucHV0VmFsdWUsIG9uSWNvbkNsaWNrOiB0b2dnbGVDYWxlbmRhck9wZW5lZCwgc2V0UmVmZXJlbmNlOiByZWZzLnNldFJlZmVyZW5jZSwgaWNvblJlZjogaWNvblJlZiwgaW5wdXRSZWY6IGlucHV0UmVmLCBoYW5kbGVEYXRlQ2hhbmdlOiBoYW5kbGVEYXRlQ2hhbmdlLCBvbkNsZWFyRGF0ZTogcmVzZXQsIG9uSW5wdXRCbHVyOiBwcm9wcy5vbklucHV0Qmx1ciwgb25JbnB1dEZvY3VzOiBoYW5kbGVJbnB1dEZvY3VzLCBvbkljb25LZXlEb3duOiBoYW5kbGVJbnB1dEtleURvd24gfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBpY29uOiBSZWFjdC5jcmVhdGVFbGVtZW50KEV2ZW50SWNvbiwgbnVsbCksIGljb25BcmlhTGFiZWw6IGkxOG4uZGF0ZVBpY2tlci5jYWxlbmRhckljb25BcmlhTGFiZWwsIGljb25SZWY6IGljb25SZWYsIG9uSWNvbkNsaWNrOiB0b2dnbGVDYWxlbmRhck9wZW5lZCwgb25JY29uS2V5RG93bjogaGFuZGxlSW5wdXRLZXlEb3duLCBpZDogaWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCByZWY6IHJlZiwgb25DaGFuZ2U6IGhhbmRsZUlucHV0Q2hhbmdlLCBvbkJsdXI6IGhhbmRsZUlucHV0Qmx1ciwgb25Gb2N1czogaGFuZGxlSW5wdXRGb2N1cywgb25LZXlEb3duOiBoYW5kbGVJbnB1dEtleURvd24sIG9uRGF0ZUNoYW5nZTogaGFuZGxlRGF0ZUNoYW5nZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBkYXRlRm9ybWF0LnRvTG93ZXJDYXNlKCksIHR5cGU6IElucHV0VHlwZS50ZXh0LCB2YWx1ZTogaW5wdXRWYWx1ZSwgc2V0UmVmZXJlbmNlOiByZWZzLnNldFJlZmVyZW5jZSB9KSkpLFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEludmVyc2VDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiB7IGlzSW52ZXJzZSB9IH0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgcmVmOiBlbCA9PiBjYWxlbmRhck9wZW5lZCAmJiByZWZzLnNldEZsb2F0aW5nKGVsKSwgc3R5bGU6IHsgLi4uZmxvYXRpbmdTdHlsZXMsIHpJbmRleDogJzk5OCcgfSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBpY2tlckNhbGVuZGFyLCB7IFwiZGF0YS10ZXN0aWRcIjogXCJjYWxlbmRhckNvbnRhaW5lclwiLCBvcGVuZWQ6IGNhbGVuZGFyT3BlbmVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FsZW5kYXJNb250aCwgeyBmb2N1c09uT3BlbjogY2FsZW5kYXJPcGVuZWQgJiYgQm9vbGVhbihmb2N1c2VkRGF0ZSksIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrOiBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrLCBjYWxlbmRhck9wZW5lZDogY2FsZW5kYXJPcGVuZWQsIHNldERhdGVGb2N1c2VkOiBzZXREYXRlRm9jdXNlZCwgZGF0ZVRpbWVQaWNrZXJDb250ZW50OiBkYXRlVGltZVBpY2tlckNvbnRlbnQgfSkpKSkpKSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXX0= */",
15289
+ styles: "position:relative/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQnVDIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xyXG5pbXBvcnQgeyBhdXRvVXBkYXRlIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3JlYWN0LWRvbSc7XHJcbmltcG9ydCB7IGFkZERheXMsIGVuZE9mRGF5LCBpc0FmdGVyLCBpc0JlZm9yZSwgaXNNYXRjaCwgaXNWYWxpZCwgcGFyc2UsIHNldEhvdXJzLCBzdGFydE9mRGF5LCB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICdwb2xpc2hlZCc7XHJcbmltcG9ydCB7IEV2ZW50SWNvbiB9IGZyb20gJ3JlYWN0LW1hZ21hLWljb25zJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9DYWxlbmRhckNvbnRleHQnO1xyXG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoIH0gZnJvbSAnLi9DYWxlbmRhck1vbnRoJztcclxuaW1wb3J0IHsgdXNlTWFnbWFGbG9hdGluZyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZU1hZ21hRmxvYXRpbmcnO1xyXG5pbXBvcnQgeyBJMThuQ29udGV4dCB9IGZyb20gJy4uLy4uL2kxOG4nO1xyXG5pbXBvcnQgeyBJbnZlcnNlQ29udGV4dCwgdXNlSXNJbnZlcnNlIH0gZnJvbSAnLi4vLi4vaW52ZXJzZSc7XHJcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3RoZW1lL1RoZW1lQ29udGV4dCc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4uL0lucHV0JztcclxuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcclxuaW1wb3J0IHsgVmlzdWFsbHlIaWRkZW4gfSBmcm9tICcuLi9WaXN1YWxseUhpZGRlbic7XHJcbmltcG9ydCB7IERhdGVGaWVsZElucHV0IH0gZnJvbSAnLi9EYXRlRmllbGQvRGF0ZUZpZWxkSW5wdXQnO1xyXG5pbXBvcnQgeyBnZXRDYWxlbmRhck1vbnRoV2Vla3MsIGdldERhdGVGcm9tU3RyaW5nLCBnZXROZXh0TW9udGhGcm9tRGF0ZSwgZ2V0UHJldk1vbnRoRnJvbURhdGUsIGhhbmRsZUtleVByZXNzLCBzZXRNb250aEZvckRhdGUsIHNldFllYXJGb3JEYXRlLCBpMThuRm9ybWF0IGFzIGZvcm1hdCwgaW5EYXRlUmFuZ2UsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IG9taXQsIHVzZUZvcmtlZFJlZiwgdXNlR2VuZXJhdGVJZCB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuY29uc3QgRGF0ZVBpY2tlckNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xyXG5jb25zdCBEYXRlUGlja2VyQ2FsZW5kYXIgPSBzdHlsZWQuZGl2IGBcbiAgYm9yZGVyOiAxcHggc29saWRcbiAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjUsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMH07XG4gIGJvcmRlci1yYWRpdXM6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm9yZGVyUmFkaXVzfTtcbiAgYm94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwfTtcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMub3BlbmVkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBtYXJnaW46ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDF9IDBweDtcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiAocHJvcHMub3BlbmVkID8gJzEnIDogJzAnKX07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dCAwcztcbiAgd2lkdGg6IDMyMHB4O1xuYDtcclxuZXhwb3J0IGNvbnN0IERhdGVQaWNrZXIgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcclxuICAgIGNvbnN0IGkxOG4gPSBSZWFjdC51c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcclxuICAgIGNvbnN0IGljb25SZWYgPSBSZWFjdC51c2VSZWYoKTtcclxuICAgIGNvbnN0IHByZXZpb3VzSWNvblJlZiA9IFJlYWN0LnVzZVJlZigpO1xyXG4gICAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcclxuICAgIGNvbnN0IGxhc3RGb2N1cyA9IFJlYWN0LnVzZVJlZigpO1xyXG4gICAgY29uc3QgaWQgPSB1c2VHZW5lcmF0ZUlkKHByb3BzLmlkKTtcclxuICAgIGNvbnN0IGlzSW52ZXJzZSA9IHVzZUlzSW52ZXJzZShwcm9wcy5pc0ludmVyc2UpO1xyXG4gICAgY29uc3QgbWluRGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKHByb3BzLm1pbkRhdGUpO1xyXG4gICAgY29uc3QgbWF4RGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKHByb3BzLm1heERhdGUpO1xyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IGkxOG4uZGF0ZUZvcm1hdDtcclxuICAgIGNvbnN0IFtoZWxwZXJJbmZvcm1hdGlvblNob3duLCBzZXRIZWxwZXJJbmZvcm1hdGlvblNob3duXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtjYWxlbmRhck9wZW5lZCwgc2V0Q2FsZW5kYXJPcGVuZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2RhdGVGb2N1c2VkLCBzZXREYXRlRm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbZm9jdXNlZERhdGUsIHNldEZvY3VzZWREYXRlXSA9IFJlYWN0LnVzZVN0YXRlKHNldERhdGVGcm9tQ29uc3VtZXIocHJvcHMudmFsdWUgfHwgcHJvcHMuZGVmYXVsdERhdGUpIHx8XHJcbiAgICAgICAgc2V0RGVmYXVsdEZvY3VzZWREYXRlKCkpO1xyXG4gICAgY29uc3QgW2Nob3NlbkRhdGUsIHNldENob3NlbkRhdGVdID0gUmVhY3QudXNlU3RhdGUoc2V0RGF0ZUZyb21Db25zdW1lcihwcm9wcy52YWx1ZSB8fCBwcm9wcy5kZWZhdWx0RGF0ZSkpO1xyXG4gICAgY29uc3QgcmVmID0gdXNlRm9ya2VkUmVmKGZvcndhcmRlZFJlZiwgaW5wdXRSZWYpO1xyXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAocHJvcHMuYXBpUmVmKSB7XHJcbiAgICAgICAgICAgIHByb3BzLmFwaVJlZi5jdXJyZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgY2xvc2VEYXRlUGlja2VyTWFudWFsbHkoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvcGVuRGF0ZVBpY2tlck1hbnVhbGx5KGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2FsZW5kYXJPcGVuZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGVUaW1lUGlja2VyQ29udGVudCAmJlxyXG4gICAgICAgICAgICBjaG9zZW5EYXRlICYmXHJcbiAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50ICYmIHByb3BzLnNldEFkZGl0aW9uYWxJbnB1dENvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLnNldEFkZGl0aW9uYWxJbnB1dENvbnRlbnQoJzEyOjAwIEFNJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUoY2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2Nob3NlbkRhdGVdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFjYWxlbmRhck9wZW5lZCkge1xyXG4gICAgICAgICAgICBzZXREYXRlRm9jdXNlZChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2NhbGVuZGFyT3BlbmVkXSk7XHJcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wcy52YWx1ZSkge1xyXG4gICAgICAgICAgICBzZXRGb2N1c2VkRGF0ZShzZXREYXRlRnJvbUNvbnN1bWVyKHByb3BzLnZhbHVlKSB8fCBzZXREZWZhdWx0Rm9jdXNlZERhdGUoKSk7XHJcbiAgICAgICAgICAgIHNldENob3NlbkRhdGUoc2V0RGF0ZUZyb21Db25zdW1lcihwcm9wcy52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvcHMudmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHNldENob3NlbkRhdGUodW5kZWZpbmVkKTtcclxuICAgIH0sIFtwcm9wcy52YWx1ZV0pO1xyXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBwcmV2aW91c0ljb25SZWYuY3VycmVudCA9IGljb25SZWYuY3VycmVudDtcclxuICAgIH0sIFtdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmb2N1c2VkRGF0ZSB8fCAhbWluRGF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChpc0JlZm9yZShmb2N1c2VkRGF0ZSwgbWluRGF0ZSkgJiYgIWNob3NlbkRhdGUpIHtcclxuICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobWluRGF0ZSk7XHJcbiAgICAgICAgICAgIHNldERhdGVGb2N1c2VkKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtmb2N1c2VkRGF0ZSwgbWluRGF0ZSwgY2hvc2VuRGF0ZV0pO1xyXG4gICAgZnVuY3Rpb24gc2hvd0hlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIGxhc3RGb2N1cy5jdXJyZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgICAgICBzZXRIZWxwZXJJbmZvcm1hdGlvblNob3duKHRydWUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGlkZUhlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIGxhc3RGb2N1cy5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgc2V0SGVscGVySW5mb3JtYXRpb25TaG93bihmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjbG9zZUhlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIHNldEhlbHBlckluZm9ybWF0aW9uU2hvd24oZmFsc2UpO1xyXG4gICAgICAgIGljb25SZWYuY3VycmVudC5mb2N1cygpO1xyXG4gICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNldEZvY3VzZWRUb2RheURhdGUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCBpc0tleWJvYXJkRXZlbnQgPSBldmVudC50eXBlID09PSAna2V5ZG93bic7XHJcbiAgICAgICAgaWYgKChpc0tleWJvYXJkRXZlbnQgJiZcclxuICAgICAgICAgICAgKGV2ZW50LmtleSA9PT0gJyAnIHx8XHJcbiAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdFbnRlcicpKSB8fFxyXG4gICAgICAgICAgICBldmVudC50eXBlID09PSAnY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKHNldERlZmF1bHRGb2N1c2VkRGF0ZSgpKTtcclxuICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIHNldERhdGVGcm9tQ29uc3VtZXIoZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZERhdGUgPSBnZXREYXRlRnJvbVN0cmluZyhkYXRlKTtcclxuICAgICAgICBjb25zdCBjb252ZXJ0ZWRNaW5EYXRlID0gZ2V0RGF0ZUZyb21TdHJpbmcobWluRGF0ZSk7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkTWF4RGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKG1heERhdGUpO1xyXG4gICAgICAgIHJldHVybiBkYXRlICYmXHJcbiAgICAgICAgICAgIGluRGF0ZVJhbmdlKGNvbnZlcnRlZERhdGUsIGNvbnZlcnRlZE1pbkRhdGUsIGNvbnZlcnRlZE1heERhdGUpXHJcbiAgICAgICAgICAgID8gY29udmVydGVkRGF0ZVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXREZWZhdWx0Rm9jdXNlZERhdGUoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkTWluRGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKG1pbkRhdGUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZE1heERhdGUgPSBnZXREYXRlRnJvbVN0cmluZyhtYXhEYXRlKTtcclxuICAgICAgICBpZiAoaW5EYXRlUmFuZ2UobmV3RGF0ZSwgY29udmVydGVkTWluRGF0ZSwgY29udmVydGVkTWF4RGF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKGlzQmVmb3JlKHN0YXJ0T2ZEYXkobmV3RGF0ZSksIGNvbnZlcnRlZE1pbkRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkRGF5cyhuZXdEYXRlLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3RGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29udmVydGVkTWF4RGF0ZSB8fCBjb252ZXJ0ZWRNaW5EYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRNaW5EYXRlID8gY29udmVydGVkTWluRGF0ZSA6IGNvbnZlcnRlZE1heERhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYnVpbGRDYWxlbmRhck1vbnRoKGRhdGUsIGVuYWJsZU91dHNpZGVEYXRlcykge1xyXG4gICAgICAgIGNvbnN0IGRheXMgPSBbXHJcbiAgICAgICAgICAgICdzdW5kYXknLFxyXG4gICAgICAgICAgICAnbW9uZGF5JyxcclxuICAgICAgICAgICAgJ3R1ZXNkYXknLFxyXG4gICAgICAgICAgICAnd2VkbmVzZGF5JyxcclxuICAgICAgICAgICAgJ3RodXJzZGF5JyxcclxuICAgICAgICAgICAgJ2ZyaWRheScsXHJcbiAgICAgICAgICAgICdzYXR1cmRheScsXHJcbiAgICAgICAgXTtcclxuICAgICAgICBjb25zdCB7IHN0YXJ0T2ZXZWVrIH0gPSBpMThuLmRhdGVQaWNrZXI7XHJcbiAgICAgICAgcmV0dXJuIGdldENhbGVuZGFyTW9udGhXZWVrcyhkYXRlLCBlbmFibGVPdXRzaWRlRGF0ZXMsIGRheXMuaW5kZXhPZihzdGFydE9mV2VlaykpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25QcmV2TW9udGhDbGljaygpIHtcclxuICAgICAgICBjb25zdCBuZXdEYXRlID0gZ2V0UHJldk1vbnRoRnJvbURhdGUoZm9jdXNlZERhdGUpO1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25OZXh0TW9udGhDbGljaygpIHtcclxuICAgICAgICBjb25zdCBuZXdEYXRlID0gZ2V0TmV4dE1vbnRoRnJvbURhdGUoZm9jdXNlZERhdGUpO1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0TW9udGhGb2N1c2VkRGF0ZShtb250aE51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBzZXRNb250aEZvckRhdGUoZm9jdXNlZERhdGUsIG1vbnRoTnVtYmVyKTtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShuZXdEYXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldFllYXJGb2N1c2VkRGF0ZSh5ZWFyTnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IHNldFllYXJGb3JEYXRlKGZvY3VzZWREYXRlLCB5ZWFyTnVtYmVyKTtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShuZXdEYXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRGF0ZUNoYW5nZShkYXkpIHtcclxuICAgICAgICBzZXRDaG9zZW5EYXRlKGRheSk7XHJcbiAgICAgICAgaWYgKGRhdGVUaW1lUGlja2VyQ29udGVudClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlc2V0KCkge1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKHNldERlZmF1bHRGb2N1c2VkRGF0ZSgpKTtcclxuICAgICAgICBzZXRDaG9zZW5EYXRlKG51bGwpO1xyXG4gICAgICAgIHNldERhdGVGb2N1c2VkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGlzVmFsaWREYXRlRnJvbVN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlRm9ybWF0ID0gaXNNYXRjaCh2YWx1ZSwgaTE4bi5kYXRlRm9ybWF0KTtcclxuICAgICAgICBjb25zdCBwYXJzZWREYXRlID0gcGFyc2UodmFsdWUsIGkxOG4uZGF0ZUZvcm1hdCwgbmV3IERhdGUoKSk7XHJcbiAgICAgICAgY29uc3QgaXNWYWxpZERhdGUgPSBpc1ZhbGlkKHBhcnNlZERhdGUpO1xyXG4gICAgICAgIHJldHVybiBpc1ZhbGlkRGF0ZUZvcm1hdCAmJiBpc1ZhbGlkRGF0ZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGRheSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgcHJvcHMub25JbnB1dENoYW5nZSAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgcHJvcHMub25JbnB1dENoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbklucHV0Q2hhbmdlKGV2ZW50KTtcclxuICAgICAgICBsZXQgaXNWYWxpZERheTtcclxuICAgICAgICBpZiAoZGF0ZVRpbWVQaWNrZXJDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpWzBdO1xyXG4gICAgICAgICAgICBpc1ZhbGlkRGF5ID0gaXNWYWxpZERhdGVGcm9tU3RyaW5nKHNwbGl0VmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZERheSA9IG5ldyBEYXRlKHNwbGl0VmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gL15cXGR7Mn1cXC9cXGR7Mn1cXC9cXGR7NH0kLztcclxuICAgICAgICAgICAgaWYgKHBhdHRlcm4udGVzdChzcGxpdFZhbHVlKSAmJiBpc1ZhbGlkKHZhbGlkRGF5KSkge1xyXG4gICAgICAgICAgICAgICAgc2V0Q2hvc2VuRGF0ZSh2YWxpZERheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UoaXNWYWxpZERheSA/IHZhbGlkRGF5LnRvSVNPU3RyaW5nKCkgOiBzcGxpdFZhbHVlLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpc1ZhbGlkRGF5ID0gaXNWYWxpZERhdGVGcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UoaXNWYWxpZERheSA/IGRheS50b0lTT1N0cmluZygpIDogdmFsdWUsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dEZvY3VzKGV2ZW50KSB7XHJcbiAgICAgICAgcHJvcHMub25JbnB1dEZvY3VzICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbklucHV0Rm9jdXMgPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgICAgICAgcHJvcHMub25JbnB1dEZvY3VzKGV2ZW50KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUlucHV0Qmx1cihldmVudCkge1xyXG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGlucHV0UmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2UoZGF0ZVRpbWVQaWNrZXJDb250ZW50ID8gdmFsdWUuc3BsaXQoJyAnKVswXSA6IHZhbHVlLCBpMThuLmRhdGVGb3JtYXQsIG5ldyBEYXRlKCkpO1xyXG4gICAgICAgIGxldCBpc1ZhbGlkRGF5O1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3BsaXRWYWx1ZSA9IHZhbHVlLnNwbGl0KCcgJylbMF07XHJcbiAgICAgICAgICAgIGlzVmFsaWREYXkgPSBpc1ZhbGlkRGF0ZUZyb21TdHJpbmcoc3BsaXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkRGF5ID0gbmV3IERhdGUoc3BsaXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRGF5KSB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRlQ2hhbmdlKHZhbGlkRGF5LCBldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWREYXkgPSBpc1ZhbGlkRGF0ZUZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZERheSkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlRGF0ZUNoYW5nZShkYXksIGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc2V0ICYmIHR5cGVvZiByZXNldCA9PT0gJ2Z1bmN0aW9uJyAmJiByZXNldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BzLm9uSW5wdXRCbHVyICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbklucHV0Qmx1ciA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbklucHV0Qmx1cihldmVudCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dEtleURvd24oZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWNvblJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRlRm9jdXNlZCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmNsb3Nlc3QoJ3RhYmxlJykpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2hvc2VuRGF0ZSA9IGhhbmRsZUtleVByZXNzKGV2ZW50LCBmb2N1c2VkRGF0ZSwgc2V0Q2FsZW5kYXJPcGVuZWQsIHNob3dIZWxwZXJJbmZvcm1hdGlvbiwgb25EYXRlQ2hhbmdlLCBpY29uUmVmKTtcclxuICAgICAgICAgICAgaWYgKG5ld0Nob3NlbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIG1heERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZnRlcihzZXRIb3VycyhuZXdDaG9zZW5EYXRlLCAxMiksIHN0YXJ0T2ZEYXkobWluRGF0ZSkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQmVmb3JlKHNldEhvdXJzKG5ld0Nob3NlbkRhdGUsIDEyKSwgZW5kT2ZEYXkobWF4RGF0ZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0Nob3NlbkRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1pbkRhdGUgJiYgIW1heERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZnRlcihzZXRIb3VycyhuZXdDaG9zZW5EYXRlLCAxMiksIHN0YXJ0T2ZEYXkobWluRGF0ZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0Nob3NlbkRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1heERhdGUgJiYgIW1pbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCZWZvcmUoc2V0SG91cnMobmV3Q2hvc2VuRGF0ZSwgMTIpLCBlbmRPZkRheShtYXhEYXRlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobmV3Q2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobmV3Q2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVEYXRlQ2hhbmdlKGRheSwgZXZlbnQpIHtcclxuICAgICAgICBwcm9wcy5vbkRhdGVDaGFuZ2UgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHByb3BzLm9uRGF0ZUNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbkRhdGVDaGFuZ2UoZGF5LCBldmVudCk7XHJcbiAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHByb3BzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlKGRheT8udG9JU09TdHJpbmcoKSwgZXZlbnQpO1xyXG4gICAgICAgIG9uRGF0ZUNoYW5nZShkYXkpO1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShkYXkpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGFuZGxlRGF5U2VsZWN0aW9uKGRheSwgZXZlbnQpIHtcclxuICAgICAgICBoYW5kbGVEYXRlQ2hhbmdlKGRheSwgZXZlbnQpO1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVDYWxlbmRhckJsdXIoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCB7IGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIC8vIHRpbWVvdXQgbmVlZGVkIGZvciBhY3RpdmUgZWxlbWVudCB0byB1cGRhdGUuIEJyb3dzZXIgYmVoYXZpb3IuXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyMzA3XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSW5DYWxlbmRhciA9IGN1cnJlbnRUYXJnZXQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgICAgIGlmICghaXNJbkNhbGVuZGFyICYmICFoZWxwZXJJbmZvcm1hdGlvblNob3duKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUNsb3NlQnV0dG9uQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoIWljb25SZWYuY3VycmVudCAmJiBwcmV2aW91c0ljb25SZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBpY29uUmVmLmN1cnJlbnQgPSBwcmV2aW91c0ljb25SZWYuY3VycmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWNvblJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgc2V0Q2FsZW5kYXJPcGVuZWQoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdG9nZ2xlQ2FsZW5kYXJPcGVuZWQoKSB7XHJcbiAgICAgICAgc2V0Q2FsZW5kYXJPcGVuZWQob3BlbmVkID0+IHtcclxuICAgICAgICAgICAgLy8gRm9jdXMgb24gdG9kYXkgd2hlbiBvcGVuaW5nIGNhbGVuZGFyIHdpdGhvdXQgYSBjaG9zZW4gZGF0ZVxyXG4gICAgICAgICAgICBpZiAoIW9wZW5lZCAmJiAhY2hvc2VuRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUoc2V0RGVmYXVsdEZvY3VzZWREYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICFvcGVuZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCB0ZXN0SWQsIGRhdGVUaW1lUGlja2VyQ29udGVudCwgLi4ucmVzdCB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBvdGhlciA9IG9taXQoWydvbkRhdGVDaGFuZ2UnLCAnb25JbnB1dENoYW5nZScsICdvbklucHV0Qmx1cicsICdvbklucHV0Rm9jdXMnXSwgcmVzdCk7XHJcbiAgICBjb25zdCBkYXRlRmllbGRWYWx1ZSA9IGRhdGVGb3JtYXQgPT09ICdNTU1NIGQsIHl5eXknICYmIGNob3NlbkRhdGVcclxuICAgICAgICA/IGZvcm1hdChjaG9zZW5EYXRlLCBkYXRlRm9ybWF0KVxyXG4gICAgICAgIDogY2hvc2VuRGF0ZTtcclxuICAgIGNvbnN0IGlucHV0RGF0ZVZhbHVlID0gY2hvc2VuRGF0ZSA/IGZvcm1hdChjaG9zZW5EYXRlLCBkYXRlRm9ybWF0KSA6ICcnO1xyXG4gICAgbGV0IGlucHV0VmFsdWUgPSBwcm9wcy5pc0RhdGVGaWVsZElucHV0ID8gZGF0ZUZpZWxkVmFsdWUgOiBpbnB1dERhdGVWYWx1ZTtcclxuICAgIGlmIChpbnB1dFZhbHVlICYmIHByb3BzLmFkZGl0aW9uYWxJbnB1dENvbnRlbnQpIHtcclxuICAgICAgICBpbnB1dFZhbHVlID0gYCR7aW5wdXRWYWx1ZX0gJHtwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50fWA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50KSB7XHJcbiAgICAgICAgc2V0Q2hvc2VuRGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZmxvYXRpbmdTdHlsZXMsIHJlZnMsIGVsZW1lbnRzLCB1cGRhdGUgfSA9IHVzZU1hZ21hRmxvYXRpbmcoKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlRGF0ZUlucHV0ID0gZWxlbWVudHMucmVmZXJlbmNlO1xyXG4gICAgICAgIGNvbnN0IGZsb2F0aW5nQ2FsZW5kYXIgPSBlbGVtZW50cy5mbG9hdGluZztcclxuICAgICAgICBpZiAoY2FsZW5kYXJPcGVuZWQgJiYgcmVmZXJlbmNlRGF0ZUlucHV0ICYmIGZsb2F0aW5nQ2FsZW5kYXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF1dG9VcGRhdGUocmVmZXJlbmNlRGF0ZUlucHV0LCBmbG9hdGluZ0NhbGVuZGFyLCB1cGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtjYWxlbmRhck9wZW5lZCwgZWxlbWVudHMsIHVwZGF0ZV0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZToge1xyXG4gICAgICAgICAgICBjaG9zZW5EYXRlLFxyXG4gICAgICAgICAgICBmb2N1c2VkRGF0ZSxcclxuICAgICAgICAgICAgZGF0ZUZvY3VzZWQsXHJcbiAgICAgICAgICAgIG1heERhdGUsXHJcbiAgICAgICAgICAgIG1pbkRhdGUsXHJcbiAgICAgICAgICAgIGhlbHBlckluZm9ybWF0aW9uU2hvd24sXHJcbiAgICAgICAgICAgIGlzSW52ZXJzZSxcclxuICAgICAgICAgICAgYnVpbGRDYWxlbmRhck1vbnRoLFxyXG4gICAgICAgICAgICBzaG93SGVscGVySW5mb3JtYXRpb24sXHJcbiAgICAgICAgICAgIGhpZGVIZWxwZXJJbmZvcm1hdGlvbixcclxuICAgICAgICAgICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxyXG4gICAgICAgICAgICBvblByZXZNb250aENsaWNrLFxyXG4gICAgICAgICAgICBvbk5leHRNb250aENsaWNrLFxyXG4gICAgICAgICAgICBvbkRhdGVDaGFuZ2U6IGhhbmRsZURheVNlbGVjdGlvbixcclxuICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQsXHJcbiAgICAgICAgICAgIHNldEZvY3VzZWRUb2RheURhdGUsXHJcbiAgICAgICAgICAgIHNldEZvY3VzZWREYXRlLFxyXG4gICAgICAgICAgICBzZXRNb250aEZvY3VzZWREYXRlLFxyXG4gICAgICAgICAgICBzZXRZZWFyRm9jdXNlZERhdGUsXHJcbiAgICAgICAgICAgIG9uQ2xvc2U6IGNsb3NlSGVscGVySW5mb3JtYXRpb24sXHJcbiAgICAgICAgfSB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBpY2tlckNvbnRhaW5lciwgeyBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgb25CbHVyOiBoYW5kbGVDYWxlbmRhckJsdXIgfSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgY2FsZW5kYXJPcGVuZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsIGkxOG4uZGF0ZVBpY2tlci5jYWxlbmRhck9wZW5Bbm5vdW5jZSkpKSxcclxuICAgICAgICAgICAgcHJvcHMuaXNEYXRlRmllbGRJbnB1dCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KERhdGVGaWVsZElucHV0LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBpZDogaWQsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXQsIGlucHV0VmFsdWU6IGlucHV0VmFsdWUsIG9uSWNvbkNsaWNrOiB0b2dnbGVDYWxlbmRhck9wZW5lZCwgc2V0UmVmZXJlbmNlOiByZWZzLnNldFJlZmVyZW5jZSwgaWNvblJlZjogaWNvblJlZiwgaW5wdXRSZWY6IGlucHV0UmVmLCBoYW5kbGVEYXRlQ2hhbmdlOiBoYW5kbGVEYXRlQ2hhbmdlLCBvbkNsZWFyRGF0ZTogcmVzZXQsIG9uSW5wdXRCbHVyOiBwcm9wcy5vbklucHV0Qmx1ciwgb25JbnB1dEZvY3VzOiBoYW5kbGVJbnB1dEZvY3VzLCBvbkljb25LZXlEb3duOiBoYW5kbGVJbnB1dEtleURvd24gfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBpY29uOiBSZWFjdC5jcmVhdGVFbGVtZW50KEV2ZW50SWNvbiwgbnVsbCksIGljb25BcmlhTGFiZWw6IGkxOG4uZGF0ZVBpY2tlci5jYWxlbmRhckljb25BcmlhTGFiZWwsIGljb25SZWY6IGljb25SZWYsIG9uSWNvbkNsaWNrOiB0b2dnbGVDYWxlbmRhck9wZW5lZCwgb25JY29uS2V5RG93bjogaGFuZGxlSW5wdXRLZXlEb3duLCBpZDogaWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCByZWY6IHJlZiwgb25DaGFuZ2U6IGhhbmRsZUlucHV0Q2hhbmdlLCBvbkJsdXI6IGhhbmRsZUlucHV0Qmx1ciwgb25Gb2N1czogaGFuZGxlSW5wdXRGb2N1cywgb25LZXlEb3duOiBoYW5kbGVJbnB1dEtleURvd24sIG9uRGF0ZUNoYW5nZTogaGFuZGxlRGF0ZUNoYW5nZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBkYXRlRm9ybWF0LnRvTG93ZXJDYXNlKCksIHR5cGU6IElucHV0VHlwZS50ZXh0LCB2YWx1ZTogaW5wdXRWYWx1ZSwgc2V0UmVmZXJlbmNlOiByZWZzLnNldFJlZmVyZW5jZSB9KSkpLFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEludmVyc2VDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiB7IGlzSW52ZXJzZSB9IH0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgcmVmOiBlbCA9PiBjYWxlbmRhck9wZW5lZCAmJiByZWZzLnNldEZsb2F0aW5nKGVsKSwgc3R5bGU6IHsgLi4uZmxvYXRpbmdTdHlsZXMsIHpJbmRleDogJzk5OCcgfSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBpY2tlckNhbGVuZGFyLCB7IFwiZGF0YS10ZXN0aWRcIjogXCJjYWxlbmRhckNvbnRhaW5lclwiLCBvcGVuZWQ6IGNhbGVuZGFyT3BlbmVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FsZW5kYXJNb250aCwgeyBmb2N1c09uT3BlbjogY2FsZW5kYXJPcGVuZWQgJiYgQm9vbGVhbihmb2N1c2VkRGF0ZSksIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrOiBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrLCBjYWxlbmRhck9wZW5lZDogY2FsZW5kYXJPcGVuZWQsIHNldERhdGVGb2N1c2VkOiBzZXREYXRlRm9jdXNlZCwgZGF0ZVRpbWVQaWNrZXJDb250ZW50OiBkYXRlVGltZVBpY2tlckNvbnRlbnQgfSkpKSkpKSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXX0= */",
15109
15290
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__$l
15110
15291
  });
15111
15292
  var DatePickerCalendar = /*#__PURE__*/_styled("div", {
@@ -15123,7 +15304,7 @@ var DatePickerCalendar = /*#__PURE__*/_styled("div", {
15123
15304
  return props.theme.spaceScale.spacing01;
15124
15305
  }, " 0px;opacity:", function (props) {
15125
15306
  return props.opened ? '1' : '0';
15126
- }, ";overflow:hidden;transition:opacity 0.2s ease-in-out 0s;width:320px;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQnNDIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xyXG5pbXBvcnQgeyBhdXRvVXBkYXRlIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3JlYWN0LWRvbSc7XHJcbmltcG9ydCB7IGFkZERheXMsIGVuZE9mRGF5LCBpc0FmdGVyLCBpc0JlZm9yZSwgaXNNYXRjaCwgaXNWYWxpZCwgcGFyc2UsIHNldEhvdXJzLCBzdGFydE9mRGF5LCB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICdwb2xpc2hlZCc7XHJcbmltcG9ydCB7IEV2ZW50SWNvbiB9IGZyb20gJ3JlYWN0LW1hZ21hLWljb25zJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9DYWxlbmRhckNvbnRleHQnO1xyXG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoIH0gZnJvbSAnLi9DYWxlbmRhck1vbnRoJztcclxuaW1wb3J0IHsgdXNlTWFnbWFGbG9hdGluZyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZU1hZ21hRmxvYXRpbmcnO1xyXG5pbXBvcnQgeyBJMThuQ29udGV4dCB9IGZyb20gJy4uLy4uL2kxOG4nO1xyXG5pbXBvcnQgeyBJbnZlcnNlQ29udGV4dCwgdXNlSXNJbnZlcnNlIH0gZnJvbSAnLi4vLi4vaW52ZXJzZSc7XHJcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3RoZW1lL1RoZW1lQ29udGV4dCc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4uL0lucHV0JztcclxuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcclxuaW1wb3J0IHsgVmlzdWFsbHlIaWRkZW4gfSBmcm9tICcuLi9WaXN1YWxseUhpZGRlbic7XHJcbmltcG9ydCB7IERhdGVGaWVsZElucHV0IH0gZnJvbSAnLi9EYXRlRmllbGQvRGF0ZUZpZWxkSW5wdXQnO1xyXG5pbXBvcnQgeyBnZXRDYWxlbmRhck1vbnRoV2Vla3MsIGdldERhdGVGcm9tU3RyaW5nLCBnZXROZXh0TW9udGhGcm9tRGF0ZSwgZ2V0UHJldk1vbnRoRnJvbURhdGUsIGhhbmRsZUtleVByZXNzLCBzZXRNb250aEZvckRhdGUsIHNldFllYXJGb3JEYXRlLCBpMThuRm9ybWF0IGFzIGZvcm1hdCwgaW5EYXRlUmFuZ2UsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IG9taXQsIHVzZUZvcmtlZFJlZiwgdXNlR2VuZXJhdGVJZCB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuY29uc3QgRGF0ZVBpY2tlckNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xyXG5jb25zdCBEYXRlUGlja2VyQ2FsZW5kYXIgPSBzdHlsZWQuZGl2IGBcbiAgYm9yZGVyOiAxcHggc29saWRcbiAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjUsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMH07XG4gIGJvcmRlci1yYWRpdXM6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm9yZGVyUmFkaXVzfTtcbiAgYm94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwfTtcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMub3BlbmVkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBtYXJnaW46ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDF9IDBweDtcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiAocHJvcHMub3BlbmVkID8gJzEnIDogJzAnKX07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dCAwcztcbiAgd2lkdGg6IDMyMHB4O1xuYDtcclxuZXhwb3J0IGNvbnN0IERhdGVQaWNrZXIgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcclxuICAgIGNvbnN0IGkxOG4gPSBSZWFjdC51c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcclxuICAgIGNvbnN0IGljb25SZWYgPSBSZWFjdC51c2VSZWYoKTtcclxuICAgIGNvbnN0IHByZXZpb3VzSWNvblJlZiA9IFJlYWN0LnVzZVJlZigpO1xyXG4gICAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcclxuICAgIGNvbnN0IGxhc3RGb2N1cyA9IFJlYWN0LnVzZVJlZigpO1xyXG4gICAgY29uc3QgaWQgPSB1c2VHZW5lcmF0ZUlkKHByb3BzLmlkKTtcclxuICAgIGNvbnN0IGlzSW52ZXJzZSA9IHVzZUlzSW52ZXJzZShwcm9wcy5pc0ludmVyc2UpO1xyXG4gICAgY29uc3QgbWluRGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKHByb3BzLm1pbkRhdGUpO1xyXG4gICAgY29uc3QgbWF4RGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKHByb3BzLm1heERhdGUpO1xyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IGkxOG4uZGF0ZUZvcm1hdDtcclxuICAgIGNvbnN0IFtoZWxwZXJJbmZvcm1hdGlvblNob3duLCBzZXRIZWxwZXJJbmZvcm1hdGlvblNob3duXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtjYWxlbmRhck9wZW5lZCwgc2V0Q2FsZW5kYXJPcGVuZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2RhdGVGb2N1c2VkLCBzZXREYXRlRm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbZm9jdXNlZERhdGUsIHNldEZvY3VzZWREYXRlXSA9IFJlYWN0LnVzZVN0YXRlKHNldERhdGVGcm9tQ29uc3VtZXIocHJvcHMudmFsdWUgfHwgcHJvcHMuZGVmYXVsdERhdGUpIHx8XHJcbiAgICAgICAgc2V0RGVmYXVsdEZvY3VzZWREYXRlKCkpO1xyXG4gICAgY29uc3QgW2Nob3NlbkRhdGUsIHNldENob3NlbkRhdGVdID0gUmVhY3QudXNlU3RhdGUoc2V0RGF0ZUZyb21Db25zdW1lcihwcm9wcy52YWx1ZSB8fCBwcm9wcy5kZWZhdWx0RGF0ZSkpO1xyXG4gICAgY29uc3QgcmVmID0gdXNlRm9ya2VkUmVmKGZvcndhcmRlZFJlZiwgaW5wdXRSZWYpO1xyXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAocHJvcHMuYXBpUmVmKSB7XHJcbiAgICAgICAgICAgIHByb3BzLmFwaVJlZi5jdXJyZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgY2xvc2VEYXRlUGlja2VyTWFudWFsbHkoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvcGVuRGF0ZVBpY2tlck1hbnVhbGx5KGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2FsZW5kYXJPcGVuZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGVUaW1lUGlja2VyQ29udGVudCAmJlxyXG4gICAgICAgICAgICBjaG9zZW5EYXRlICYmXHJcbiAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50ICYmIHByb3BzLnNldEFkZGl0aW9uYWxJbnB1dENvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLnNldEFkZGl0aW9uYWxJbnB1dENvbnRlbnQoJzEyOjAwIEFNJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUoY2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2Nob3NlbkRhdGVdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFjYWxlbmRhck9wZW5lZCkge1xyXG4gICAgICAgICAgICBzZXREYXRlRm9jdXNlZChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2NhbGVuZGFyT3BlbmVkXSk7XHJcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wcy52YWx1ZSkge1xyXG4gICAgICAgICAgICBzZXRGb2N1c2VkRGF0ZShzZXREYXRlRnJvbUNvbnN1bWVyKHByb3BzLnZhbHVlKSB8fCBzZXREZWZhdWx0Rm9jdXNlZERhdGUoKSk7XHJcbiAgICAgICAgICAgIHNldENob3NlbkRhdGUoc2V0RGF0ZUZyb21Db25zdW1lcihwcm9wcy52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvcHMudmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHNldENob3NlbkRhdGUodW5kZWZpbmVkKTtcclxuICAgIH0sIFtwcm9wcy52YWx1ZV0pO1xyXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBwcmV2aW91c0ljb25SZWYuY3VycmVudCA9IGljb25SZWYuY3VycmVudDtcclxuICAgIH0sIFtdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmb2N1c2VkRGF0ZSB8fCAhbWluRGF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChpc0JlZm9yZShmb2N1c2VkRGF0ZSwgbWluRGF0ZSkgJiYgIWNob3NlbkRhdGUpIHtcclxuICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobWluRGF0ZSk7XHJcbiAgICAgICAgICAgIHNldERhdGVGb2N1c2VkKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtmb2N1c2VkRGF0ZSwgbWluRGF0ZSwgY2hvc2VuRGF0ZV0pO1xyXG4gICAgZnVuY3Rpb24gc2hvd0hlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIGxhc3RGb2N1cy5jdXJyZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgICAgICBzZXRIZWxwZXJJbmZvcm1hdGlvblNob3duKHRydWUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGlkZUhlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIGxhc3RGb2N1cy5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgc2V0SGVscGVySW5mb3JtYXRpb25TaG93bihmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjbG9zZUhlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIHNldEhlbHBlckluZm9ybWF0aW9uU2hvd24oZmFsc2UpO1xyXG4gICAgICAgIGljb25SZWYuY3VycmVudC5mb2N1cygpO1xyXG4gICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNldEZvY3VzZWRUb2RheURhdGUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCBpc0tleWJvYXJkRXZlbnQgPSBldmVudC50eXBlID09PSAna2V5ZG93bic7XHJcbiAgICAgICAgaWYgKChpc0tleWJvYXJkRXZlbnQgJiZcclxuICAgICAgICAgICAgKGV2ZW50LmtleSA9PT0gJyAnIHx8XHJcbiAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdFbnRlcicpKSB8fFxyXG4gICAgICAgICAgICBldmVudC50eXBlID09PSAnY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKHNldERlZmF1bHRGb2N1c2VkRGF0ZSgpKTtcclxuICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIHNldERhdGVGcm9tQ29uc3VtZXIoZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZERhdGUgPSBnZXREYXRlRnJvbVN0cmluZyhkYXRlKTtcclxuICAgICAgICBjb25zdCBjb252ZXJ0ZWRNaW5EYXRlID0gZ2V0RGF0ZUZyb21TdHJpbmcobWluRGF0ZSk7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkTWF4RGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKG1heERhdGUpO1xyXG4gICAgICAgIHJldHVybiBkYXRlICYmXHJcbiAgICAgICAgICAgIGluRGF0ZVJhbmdlKGNvbnZlcnRlZERhdGUsIGNvbnZlcnRlZE1pbkRhdGUsIGNvbnZlcnRlZE1heERhdGUpXHJcbiAgICAgICAgICAgID8gY29udmVydGVkRGF0ZVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXREZWZhdWx0Rm9jdXNlZERhdGUoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkTWluRGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKG1pbkRhdGUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZE1heERhdGUgPSBnZXREYXRlRnJvbVN0cmluZyhtYXhEYXRlKTtcclxuICAgICAgICBpZiAoaW5EYXRlUmFuZ2UobmV3RGF0ZSwgY29udmVydGVkTWluRGF0ZSwgY29udmVydGVkTWF4RGF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKGlzQmVmb3JlKHN0YXJ0T2ZEYXkobmV3RGF0ZSksIGNvbnZlcnRlZE1pbkRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkRGF5cyhuZXdEYXRlLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3RGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29udmVydGVkTWF4RGF0ZSB8fCBjb252ZXJ0ZWRNaW5EYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRNaW5EYXRlID8gY29udmVydGVkTWluRGF0ZSA6IGNvbnZlcnRlZE1heERhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYnVpbGRDYWxlbmRhck1vbnRoKGRhdGUsIGVuYWJsZU91dHNpZGVEYXRlcykge1xyXG4gICAgICAgIGNvbnN0IGRheXMgPSBbXHJcbiAgICAgICAgICAgICdzdW5kYXknLFxyXG4gICAgICAgICAgICAnbW9uZGF5JyxcclxuICAgICAgICAgICAgJ3R1ZXNkYXknLFxyXG4gICAgICAgICAgICAnd2VkbmVzZGF5JyxcclxuICAgICAgICAgICAgJ3RodXJzZGF5JyxcclxuICAgICAgICAgICAgJ2ZyaWRheScsXHJcbiAgICAgICAgICAgICdzYXR1cmRheScsXHJcbiAgICAgICAgXTtcclxuICAgICAgICBjb25zdCB7IHN0YXJ0T2ZXZWVrIH0gPSBpMThuLmRhdGVQaWNrZXI7XHJcbiAgICAgICAgcmV0dXJuIGdldENhbGVuZGFyTW9udGhXZWVrcyhkYXRlLCBlbmFibGVPdXRzaWRlRGF0ZXMsIGRheXMuaW5kZXhPZihzdGFydE9mV2VlaykpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25QcmV2TW9udGhDbGljaygpIHtcclxuICAgICAgICBjb25zdCBuZXdEYXRlID0gZ2V0UHJldk1vbnRoRnJvbURhdGUoZm9jdXNlZERhdGUpO1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25OZXh0TW9udGhDbGljaygpIHtcclxuICAgICAgICBjb25zdCBuZXdEYXRlID0gZ2V0TmV4dE1vbnRoRnJvbURhdGUoZm9jdXNlZERhdGUpO1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0TW9udGhGb2N1c2VkRGF0ZShtb250aE51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBzZXRNb250aEZvckRhdGUoZm9jdXNlZERhdGUsIG1vbnRoTnVtYmVyKTtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShuZXdEYXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldFllYXJGb2N1c2VkRGF0ZSh5ZWFyTnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IHNldFllYXJGb3JEYXRlKGZvY3VzZWREYXRlLCB5ZWFyTnVtYmVyKTtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShuZXdEYXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRGF0ZUNoYW5nZShkYXkpIHtcclxuICAgICAgICBzZXRDaG9zZW5EYXRlKGRheSk7XHJcbiAgICAgICAgaWYgKGRhdGVUaW1lUGlja2VyQ29udGVudClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlc2V0KCkge1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKHNldERlZmF1bHRGb2N1c2VkRGF0ZSgpKTtcclxuICAgICAgICBzZXRDaG9zZW5EYXRlKG51bGwpO1xyXG4gICAgICAgIHNldERhdGVGb2N1c2VkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGlzVmFsaWREYXRlRnJvbVN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlRm9ybWF0ID0gaXNNYXRjaCh2YWx1ZSwgaTE4bi5kYXRlRm9ybWF0KTtcclxuICAgICAgICBjb25zdCBwYXJzZWREYXRlID0gcGFyc2UodmFsdWUsIGkxOG4uZGF0ZUZvcm1hdCwgbmV3IERhdGUoKSk7XHJcbiAgICAgICAgY29uc3QgaXNWYWxpZERhdGUgPSBpc1ZhbGlkKHBhcnNlZERhdGUpO1xyXG4gICAgICAgIHJldHVybiBpc1ZhbGlkRGF0ZUZvcm1hdCAmJiBpc1ZhbGlkRGF0ZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGRheSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgcHJvcHMub25JbnB1dENoYW5nZSAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgcHJvcHMub25JbnB1dENoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbklucHV0Q2hhbmdlKGV2ZW50KTtcclxuICAgICAgICBsZXQgaXNWYWxpZERheTtcclxuICAgICAgICBpZiAoZGF0ZVRpbWVQaWNrZXJDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpWzBdO1xyXG4gICAgICAgICAgICBpc1ZhbGlkRGF5ID0gaXNWYWxpZERhdGVGcm9tU3RyaW5nKHNwbGl0VmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZERheSA9IG5ldyBEYXRlKHNwbGl0VmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gL15cXGR7Mn1cXC9cXGR7Mn1cXC9cXGR7NH0kLztcclxuICAgICAgICAgICAgaWYgKHBhdHRlcm4udGVzdChzcGxpdFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgc2V0Q2hvc2VuRGF0ZSh2YWxpZERheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UoaXNWYWxpZERheSA/IHZhbGlkRGF5LnRvSVNPU3RyaW5nKCkgOiBzcGxpdFZhbHVlLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpc1ZhbGlkRGF5ID0gaXNWYWxpZERhdGVGcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UoaXNWYWxpZERheSA/IGRheS50b0lTT1N0cmluZygpIDogdmFsdWUsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dEZvY3VzKGV2ZW50KSB7XHJcbiAgICAgICAgcHJvcHMub25JbnB1dEZvY3VzICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbklucHV0Rm9jdXMgPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgICAgICAgcHJvcHMub25JbnB1dEZvY3VzKGV2ZW50KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUlucHV0Qmx1cihldmVudCkge1xyXG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGlucHV0UmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2UoZGF0ZVRpbWVQaWNrZXJDb250ZW50ID8gdmFsdWUuc3BsaXQoJyAnKVswXSA6IHZhbHVlLCBpMThuLmRhdGVGb3JtYXQsIG5ldyBEYXRlKCkpO1xyXG4gICAgICAgIGxldCBpc1ZhbGlkRGF5O1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3BsaXRWYWx1ZSA9IHZhbHVlLnNwbGl0KCcgJylbMF07XHJcbiAgICAgICAgICAgIGlzVmFsaWREYXkgPSBpc1ZhbGlkRGF0ZUZyb21TdHJpbmcoc3BsaXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkRGF5ID0gbmV3IERhdGUoc3BsaXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRGF5KSB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRlQ2hhbmdlKHZhbGlkRGF5LCBldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWREYXkgPSBpc1ZhbGlkRGF0ZUZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZERheSkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlRGF0ZUNoYW5nZShkYXksIGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc2V0ICYmIHR5cGVvZiByZXNldCA9PT0gJ2Z1bmN0aW9uJyAmJiByZXNldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BzLm9uSW5wdXRCbHVyICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbklucHV0Qmx1ciA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbklucHV0Qmx1cihldmVudCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dEtleURvd24oZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWNvblJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRlRm9jdXNlZCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmNsb3Nlc3QoJ3RhYmxlJykpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2hvc2VuRGF0ZSA9IGhhbmRsZUtleVByZXNzKGV2ZW50LCBmb2N1c2VkRGF0ZSwgc2V0Q2FsZW5kYXJPcGVuZWQsIHNob3dIZWxwZXJJbmZvcm1hdGlvbiwgb25EYXRlQ2hhbmdlLCBpY29uUmVmKTtcclxuICAgICAgICAgICAgaWYgKG5ld0Nob3NlbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIG1heERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZnRlcihzZXRIb3VycyhuZXdDaG9zZW5EYXRlLCAxMiksIHN0YXJ0T2ZEYXkobWluRGF0ZSkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQmVmb3JlKHNldEhvdXJzKG5ld0Nob3NlbkRhdGUsIDEyKSwgZW5kT2ZEYXkobWF4RGF0ZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0Nob3NlbkRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1pbkRhdGUgJiYgIW1heERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZnRlcihzZXRIb3VycyhuZXdDaG9zZW5EYXRlLCAxMiksIHN0YXJ0T2ZEYXkobWluRGF0ZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0Nob3NlbkRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1heERhdGUgJiYgIW1pbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCZWZvcmUoc2V0SG91cnMobmV3Q2hvc2VuRGF0ZSwgMTIpLCBlbmRPZkRheShtYXhEYXRlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobmV3Q2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobmV3Q2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVEYXRlQ2hhbmdlKGRheSwgZXZlbnQpIHtcclxuICAgICAgICBwcm9wcy5vbkRhdGVDaGFuZ2UgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHByb3BzLm9uRGF0ZUNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbkRhdGVDaGFuZ2UoZGF5LCBldmVudCk7XHJcbiAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHByb3BzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlKGRheT8udG9JU09TdHJpbmcoKSwgZXZlbnQpO1xyXG4gICAgICAgIG9uRGF0ZUNoYW5nZShkYXkpO1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShkYXkpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGFuZGxlRGF5U2VsZWN0aW9uKGRheSwgZXZlbnQpIHtcclxuICAgICAgICBoYW5kbGVEYXRlQ2hhbmdlKGRheSwgZXZlbnQpO1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVDYWxlbmRhckJsdXIoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCB7IGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIC8vIHRpbWVvdXQgbmVlZGVkIGZvciBhY3RpdmUgZWxlbWVudCB0byB1cGRhdGUuIEJyb3dzZXIgYmVoYXZpb3IuXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyMzA3XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSW5DYWxlbmRhciA9IGN1cnJlbnRUYXJnZXQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgICAgIGlmICghaXNJbkNhbGVuZGFyICYmICFoZWxwZXJJbmZvcm1hdGlvblNob3duKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUNsb3NlQnV0dG9uQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoIWljb25SZWYuY3VycmVudCAmJiBwcmV2aW91c0ljb25SZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBpY29uUmVmLmN1cnJlbnQgPSBwcmV2aW91c0ljb25SZWYuY3VycmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWNvblJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgc2V0Q2FsZW5kYXJPcGVuZWQoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdG9nZ2xlQ2FsZW5kYXJPcGVuZWQoKSB7XHJcbiAgICAgICAgc2V0Q2FsZW5kYXJPcGVuZWQob3BlbmVkID0+IHtcclxuICAgICAgICAgICAgLy8gRm9jdXMgb24gdG9kYXkgd2hlbiBvcGVuaW5nIGNhbGVuZGFyIHdpdGhvdXQgYSBjaG9zZW4gZGF0ZVxyXG4gICAgICAgICAgICBpZiAoIW9wZW5lZCAmJiAhY2hvc2VuRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUoc2V0RGVmYXVsdEZvY3VzZWREYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICFvcGVuZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCB0ZXN0SWQsIGRhdGVUaW1lUGlja2VyQ29udGVudCwgLi4ucmVzdCB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBvdGhlciA9IG9taXQoWydvbkRhdGVDaGFuZ2UnLCAnb25JbnB1dENoYW5nZScsICdvbklucHV0Qmx1cicsICdvbklucHV0Rm9jdXMnXSwgcmVzdCk7XHJcbiAgICBjb25zdCBkYXRlRmllbGRWYWx1ZSA9IGRhdGVGb3JtYXQgPT09ICdNTU1NIGQsIHl5eXknICYmIGNob3NlbkRhdGVcclxuICAgICAgICA/IGZvcm1hdChjaG9zZW5EYXRlLCBkYXRlRm9ybWF0KVxyXG4gICAgICAgIDogY2hvc2VuRGF0ZTtcclxuICAgIGNvbnN0IGlucHV0RGF0ZVZhbHVlID0gY2hvc2VuRGF0ZSA/IGZvcm1hdChjaG9zZW5EYXRlLCBkYXRlRm9ybWF0KSA6ICcnO1xyXG4gICAgbGV0IGlucHV0VmFsdWUgPSBwcm9wcy5pc0RhdGVGaWVsZElucHV0ID8gZGF0ZUZpZWxkVmFsdWUgOiBpbnB1dERhdGVWYWx1ZTtcclxuICAgIGlmIChpbnB1dFZhbHVlICYmIHByb3BzLmFkZGl0aW9uYWxJbnB1dENvbnRlbnQpIHtcclxuICAgICAgICBpbnB1dFZhbHVlID0gYCR7aW5wdXRWYWx1ZX0gJHtwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50fWA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50KSB7XHJcbiAgICAgICAgc2V0Q2hvc2VuRGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZmxvYXRpbmdTdHlsZXMsIHJlZnMsIGVsZW1lbnRzLCB1cGRhdGUgfSA9IHVzZU1hZ21hRmxvYXRpbmcoKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlRGF0ZUlucHV0ID0gZWxlbWVudHMucmVmZXJlbmNlO1xyXG4gICAgICAgIGNvbnN0IGZsb2F0aW5nQ2FsZW5kYXIgPSBlbGVtZW50cy5mbG9hdGluZztcclxuICAgICAgICBpZiAoY2FsZW5kYXJPcGVuZWQgJiYgcmVmZXJlbmNlRGF0ZUlucHV0ICYmIGZsb2F0aW5nQ2FsZW5kYXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF1dG9VcGRhdGUocmVmZXJlbmNlRGF0ZUlucHV0LCBmbG9hdGluZ0NhbGVuZGFyLCB1cGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtjYWxlbmRhck9wZW5lZCwgZWxlbWVudHMsIHVwZGF0ZV0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZToge1xyXG4gICAgICAgICAgICBjaG9zZW5EYXRlLFxyXG4gICAgICAgICAgICBmb2N1c2VkRGF0ZSxcclxuICAgICAgICAgICAgZGF0ZUZvY3VzZWQsXHJcbiAgICAgICAgICAgIG1heERhdGUsXHJcbiAgICAgICAgICAgIG1pbkRhdGUsXHJcbiAgICAgICAgICAgIGhlbHBlckluZm9ybWF0aW9uU2hvd24sXHJcbiAgICAgICAgICAgIGlzSW52ZXJzZSxcclxuICAgICAgICAgICAgYnVpbGRDYWxlbmRhck1vbnRoLFxyXG4gICAgICAgICAgICBzaG93SGVscGVySW5mb3JtYXRpb24sXHJcbiAgICAgICAgICAgIGhpZGVIZWxwZXJJbmZvcm1hdGlvbixcclxuICAgICAgICAgICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxyXG4gICAgICAgICAgICBvblByZXZNb250aENsaWNrLFxyXG4gICAgICAgICAgICBvbk5leHRNb250aENsaWNrLFxyXG4gICAgICAgICAgICBvbkRhdGVDaGFuZ2U6IGhhbmRsZURheVNlbGVjdGlvbixcclxuICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQsXHJcbiAgICAgICAgICAgIHNldEZvY3VzZWRUb2RheURhdGUsXHJcbiAgICAgICAgICAgIHNldEZvY3VzZWREYXRlLFxyXG4gICAgICAgICAgICBzZXRNb250aEZvY3VzZWREYXRlLFxyXG4gICAgICAgICAgICBzZXRZZWFyRm9jdXNlZERhdGUsXHJcbiAgICAgICAgICAgIG9uQ2xvc2U6IGNsb3NlSGVscGVySW5mb3JtYXRpb24sXHJcbiAgICAgICAgfSB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBpY2tlckNvbnRhaW5lciwgeyBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgb25CbHVyOiBoYW5kbGVDYWxlbmRhckJsdXIgfSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgY2FsZW5kYXJPcGVuZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsIGkxOG4uZGF0ZVBpY2tlci5jYWxlbmRhck9wZW5Bbm5vdW5jZSkpKSxcclxuICAgICAgICAgICAgcHJvcHMuaXNEYXRlRmllbGRJbnB1dCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KERhdGVGaWVsZElucHV0LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBpZDogaWQsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXQsIGlucHV0VmFsdWU6IGlucHV0VmFsdWUsIG9uSWNvbkNsaWNrOiB0b2dnbGVDYWxlbmRhck9wZW5lZCwgc2V0UmVmZXJlbmNlOiByZWZzLnNldFJlZmVyZW5jZSwgaWNvblJlZjogaWNvblJlZiwgaW5wdXRSZWY6IGlucHV0UmVmLCBoYW5kbGVEYXRlQ2hhbmdlOiBoYW5kbGVEYXRlQ2hhbmdlLCBvbkNsZWFyRGF0ZTogcmVzZXQsIG9uSW5wdXRCbHVyOiBwcm9wcy5vbklucHV0Qmx1ciwgb25JbnB1dEZvY3VzOiBoYW5kbGVJbnB1dEZvY3VzLCBvbkljb25LZXlEb3duOiBoYW5kbGVJbnB1dEtleURvd24gfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBpY29uOiBSZWFjdC5jcmVhdGVFbGVtZW50KEV2ZW50SWNvbiwgbnVsbCksIGljb25BcmlhTGFiZWw6IGkxOG4uZGF0ZVBpY2tlci5jYWxlbmRhckljb25BcmlhTGFiZWwsIGljb25SZWY6IGljb25SZWYsIG9uSWNvbkNsaWNrOiB0b2dnbGVDYWxlbmRhck9wZW5lZCwgb25JY29uS2V5RG93bjogaGFuZGxlSW5wdXRLZXlEb3duLCBpZDogaWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCByZWY6IHJlZiwgb25DaGFuZ2U6IGhhbmRsZUlucHV0Q2hhbmdlLCBvbkJsdXI6IGhhbmRsZUlucHV0Qmx1ciwgb25Gb2N1czogaGFuZGxlSW5wdXRGb2N1cywgb25LZXlEb3duOiBoYW5kbGVJbnB1dEtleURvd24sIG9uRGF0ZUNoYW5nZTogaGFuZGxlRGF0ZUNoYW5nZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBkYXRlRm9ybWF0LnRvTG93ZXJDYXNlKCksIHR5cGU6IElucHV0VHlwZS50ZXh0LCB2YWx1ZTogaW5wdXRWYWx1ZSwgc2V0UmVmZXJlbmNlOiByZWZzLnNldFJlZmVyZW5jZSB9KSkpLFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEludmVyc2VDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiB7IGlzSW52ZXJzZSB9IH0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgcmVmOiBlbCA9PiBjYWxlbmRhck9wZW5lZCAmJiByZWZzLnNldEZsb2F0aW5nKGVsKSwgc3R5bGU6IHsgLi4uZmxvYXRpbmdTdHlsZXMsIHpJbmRleDogJzk5OCcgfSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBpY2tlckNhbGVuZGFyLCB7IFwiZGF0YS10ZXN0aWRcIjogXCJjYWxlbmRhckNvbnRhaW5lclwiLCBvcGVuZWQ6IGNhbGVuZGFyT3BlbmVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FsZW5kYXJNb250aCwgeyBmb2N1c09uT3BlbjogY2FsZW5kYXJPcGVuZWQgJiYgQm9vbGVhbihmb2N1c2VkRGF0ZSksIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrOiBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrLCBjYWxlbmRhck9wZW5lZDogY2FsZW5kYXJPcGVuZWQsIHNldERhdGVGb2N1c2VkOiBzZXREYXRlRm9jdXNlZCwgZGF0ZVRpbWVQaWNrZXJDb250ZW50OiBkYXRlVGltZVBpY2tlckNvbnRlbnQgfSkpKSkpKSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXX0= */"));
15307
+ }, ";overflow:hidden;transition:opacity 0.2s ease-in-out 0s;width:320px;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQnNDIiwiZmlsZSI6ImluZGV4LnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xyXG5pbXBvcnQgeyBhdXRvVXBkYXRlIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3JlYWN0LWRvbSc7XHJcbmltcG9ydCB7IGFkZERheXMsIGVuZE9mRGF5LCBpc0FmdGVyLCBpc0JlZm9yZSwgaXNNYXRjaCwgaXNWYWxpZCwgcGFyc2UsIHNldEhvdXJzLCBzdGFydE9mRGF5LCB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICdwb2xpc2hlZCc7XHJcbmltcG9ydCB7IEV2ZW50SWNvbiB9IGZyb20gJ3JlYWN0LW1hZ21hLWljb25zJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9DYWxlbmRhckNvbnRleHQnO1xyXG5pbXBvcnQgeyBDYWxlbmRhck1vbnRoIH0gZnJvbSAnLi9DYWxlbmRhck1vbnRoJztcclxuaW1wb3J0IHsgdXNlTWFnbWFGbG9hdGluZyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZU1hZ21hRmxvYXRpbmcnO1xyXG5pbXBvcnQgeyBJMThuQ29udGV4dCB9IGZyb20gJy4uLy4uL2kxOG4nO1xyXG5pbXBvcnQgeyBJbnZlcnNlQ29udGV4dCwgdXNlSXNJbnZlcnNlIH0gZnJvbSAnLi4vLi4vaW52ZXJzZSc7XHJcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3RoZW1lL1RoZW1lQ29udGV4dCc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJy4uL0lucHV0JztcclxuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcclxuaW1wb3J0IHsgVmlzdWFsbHlIaWRkZW4gfSBmcm9tICcuLi9WaXN1YWxseUhpZGRlbic7XHJcbmltcG9ydCB7IERhdGVGaWVsZElucHV0IH0gZnJvbSAnLi9EYXRlRmllbGQvRGF0ZUZpZWxkSW5wdXQnO1xyXG5pbXBvcnQgeyBnZXRDYWxlbmRhck1vbnRoV2Vla3MsIGdldERhdGVGcm9tU3RyaW5nLCBnZXROZXh0TW9udGhGcm9tRGF0ZSwgZ2V0UHJldk1vbnRoRnJvbURhdGUsIGhhbmRsZUtleVByZXNzLCBzZXRNb250aEZvckRhdGUsIHNldFllYXJGb3JEYXRlLCBpMThuRm9ybWF0IGFzIGZvcm1hdCwgaW5EYXRlUmFuZ2UsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IG9taXQsIHVzZUZvcmtlZFJlZiwgdXNlR2VuZXJhdGVJZCB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuY29uc3QgRGF0ZVBpY2tlckNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xyXG5jb25zdCBEYXRlUGlja2VyQ2FsZW5kYXIgPSBzdHlsZWQuZGl2IGBcbiAgYm9yZGVyOiAxcHggc29saWRcbiAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjUsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMH07XG4gIGJvcmRlci1yYWRpdXM6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYm9yZGVyUmFkaXVzfTtcbiAgYm94LXNoYWRvdzogMCAycHggNnB4IDAgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsNzAwfTtcbiAgZGlzcGxheTogJHtwcm9wcyA9PiAocHJvcHMub3BlbmVkID8gJ2Jsb2NrJyA6ICdub25lJyl9O1xuICBtYXJnaW46ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDF9IDBweDtcbiAgb3BhY2l0eTogJHtwcm9wcyA9PiAocHJvcHMub3BlbmVkID8gJzEnIDogJzAnKX07XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dCAwcztcbiAgd2lkdGg6IDMyMHB4O1xuYDtcclxuZXhwb3J0IGNvbnN0IERhdGVQaWNrZXIgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB0aGVtZSA9IFJlYWN0LnVzZUNvbnRleHQoVGhlbWVDb250ZXh0KTtcclxuICAgIGNvbnN0IGkxOG4gPSBSZWFjdC51c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcclxuICAgIGNvbnN0IGljb25SZWYgPSBSZWFjdC51c2VSZWYoKTtcclxuICAgIGNvbnN0IHByZXZpb3VzSWNvblJlZiA9IFJlYWN0LnVzZVJlZigpO1xyXG4gICAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcclxuICAgIGNvbnN0IGxhc3RGb2N1cyA9IFJlYWN0LnVzZVJlZigpO1xyXG4gICAgY29uc3QgaWQgPSB1c2VHZW5lcmF0ZUlkKHByb3BzLmlkKTtcclxuICAgIGNvbnN0IGlzSW52ZXJzZSA9IHVzZUlzSW52ZXJzZShwcm9wcy5pc0ludmVyc2UpO1xyXG4gICAgY29uc3QgbWluRGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKHByb3BzLm1pbkRhdGUpO1xyXG4gICAgY29uc3QgbWF4RGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKHByb3BzLm1heERhdGUpO1xyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IGkxOG4uZGF0ZUZvcm1hdDtcclxuICAgIGNvbnN0IFtoZWxwZXJJbmZvcm1hdGlvblNob3duLCBzZXRIZWxwZXJJbmZvcm1hdGlvblNob3duXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtjYWxlbmRhck9wZW5lZCwgc2V0Q2FsZW5kYXJPcGVuZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2RhdGVGb2N1c2VkLCBzZXREYXRlRm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbZm9jdXNlZERhdGUsIHNldEZvY3VzZWREYXRlXSA9IFJlYWN0LnVzZVN0YXRlKHNldERhdGVGcm9tQ29uc3VtZXIocHJvcHMudmFsdWUgfHwgcHJvcHMuZGVmYXVsdERhdGUpIHx8XHJcbiAgICAgICAgc2V0RGVmYXVsdEZvY3VzZWREYXRlKCkpO1xyXG4gICAgY29uc3QgW2Nob3NlbkRhdGUsIHNldENob3NlbkRhdGVdID0gUmVhY3QudXNlU3RhdGUoc2V0RGF0ZUZyb21Db25zdW1lcihwcm9wcy52YWx1ZSB8fCBwcm9wcy5kZWZhdWx0RGF0ZSkpO1xyXG4gICAgY29uc3QgcmVmID0gdXNlRm9ya2VkUmVmKGZvcndhcmRlZFJlZiwgaW5wdXRSZWYpO1xyXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAocHJvcHMuYXBpUmVmKSB7XHJcbiAgICAgICAgICAgIHByb3BzLmFwaVJlZi5jdXJyZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgY2xvc2VEYXRlUGlja2VyTWFudWFsbHkoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvcGVuRGF0ZVBpY2tlck1hbnVhbGx5KGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2FsZW5kYXJPcGVuZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGVUaW1lUGlja2VyQ29udGVudCAmJlxyXG4gICAgICAgICAgICBjaG9zZW5EYXRlICYmXHJcbiAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50ICYmIHByb3BzLnNldEFkZGl0aW9uYWxJbnB1dENvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLnNldEFkZGl0aW9uYWxJbnB1dENvbnRlbnQoJzEyOjAwIEFNJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUoY2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2Nob3NlbkRhdGVdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFjYWxlbmRhck9wZW5lZCkge1xyXG4gICAgICAgICAgICBzZXREYXRlRm9jdXNlZChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2NhbGVuZGFyT3BlbmVkXSk7XHJcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChwcm9wcy52YWx1ZSkge1xyXG4gICAgICAgICAgICBzZXRGb2N1c2VkRGF0ZShzZXREYXRlRnJvbUNvbnN1bWVyKHByb3BzLnZhbHVlKSB8fCBzZXREZWZhdWx0Rm9jdXNlZERhdGUoKSk7XHJcbiAgICAgICAgICAgIHNldENob3NlbkRhdGUoc2V0RGF0ZUZyb21Db25zdW1lcihwcm9wcy52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvcHMudmFsdWUgPT09IG51bGwpXHJcbiAgICAgICAgICAgIHNldENob3NlbkRhdGUodW5kZWZpbmVkKTtcclxuICAgIH0sIFtwcm9wcy52YWx1ZV0pO1xyXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBwcmV2aW91c0ljb25SZWYuY3VycmVudCA9IGljb25SZWYuY3VycmVudDtcclxuICAgIH0sIFtdKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFmb2N1c2VkRGF0ZSB8fCAhbWluRGF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChpc0JlZm9yZShmb2N1c2VkRGF0ZSwgbWluRGF0ZSkgJiYgIWNob3NlbkRhdGUpIHtcclxuICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobWluRGF0ZSk7XHJcbiAgICAgICAgICAgIHNldERhdGVGb2N1c2VkKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtmb2N1c2VkRGF0ZSwgbWluRGF0ZSwgY2hvc2VuRGF0ZV0pO1xyXG4gICAgZnVuY3Rpb24gc2hvd0hlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIGxhc3RGb2N1cy5jdXJyZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgICAgICBzZXRIZWxwZXJJbmZvcm1hdGlvblNob3duKHRydWUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGlkZUhlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIGxhc3RGb2N1cy5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgc2V0SGVscGVySW5mb3JtYXRpb25TaG93bihmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBjbG9zZUhlbHBlckluZm9ybWF0aW9uKCkge1xyXG4gICAgICAgIHNldEhlbHBlckluZm9ybWF0aW9uU2hvd24oZmFsc2UpO1xyXG4gICAgICAgIGljb25SZWYuY3VycmVudC5mb2N1cygpO1xyXG4gICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNldEZvY3VzZWRUb2RheURhdGUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCBpc0tleWJvYXJkRXZlbnQgPSBldmVudC50eXBlID09PSAna2V5ZG93bic7XHJcbiAgICAgICAgaWYgKChpc0tleWJvYXJkRXZlbnQgJiZcclxuICAgICAgICAgICAgKGV2ZW50LmtleSA9PT0gJyAnIHx8XHJcbiAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdFbnRlcicpKSB8fFxyXG4gICAgICAgICAgICBldmVudC50eXBlID09PSAnY2xpY2snKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKHNldERlZmF1bHRGb2N1c2VkRGF0ZSgpKTtcclxuICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIHNldERhdGVGcm9tQ29uc3VtZXIoZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZERhdGUgPSBnZXREYXRlRnJvbVN0cmluZyhkYXRlKTtcclxuICAgICAgICBjb25zdCBjb252ZXJ0ZWRNaW5EYXRlID0gZ2V0RGF0ZUZyb21TdHJpbmcobWluRGF0ZSk7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkTWF4RGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKG1heERhdGUpO1xyXG4gICAgICAgIHJldHVybiBkYXRlICYmXHJcbiAgICAgICAgICAgIGluRGF0ZVJhbmdlKGNvbnZlcnRlZERhdGUsIGNvbnZlcnRlZE1pbkRhdGUsIGNvbnZlcnRlZE1heERhdGUpXHJcbiAgICAgICAgICAgID8gY29udmVydGVkRGF0ZVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXREZWZhdWx0Rm9jdXNlZERhdGUoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkTWluRGF0ZSA9IGdldERhdGVGcm9tU3RyaW5nKG1pbkRhdGUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZE1heERhdGUgPSBnZXREYXRlRnJvbVN0cmluZyhtYXhEYXRlKTtcclxuICAgICAgICBpZiAoaW5EYXRlUmFuZ2UobmV3RGF0ZSwgY29udmVydGVkTWluRGF0ZSwgY29udmVydGVkTWF4RGF0ZSkpIHtcclxuICAgICAgICAgICAgaWYgKGlzQmVmb3JlKHN0YXJ0T2ZEYXkobmV3RGF0ZSksIGNvbnZlcnRlZE1pbkRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkRGF5cyhuZXdEYXRlLCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3RGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29udmVydGVkTWF4RGF0ZSB8fCBjb252ZXJ0ZWRNaW5EYXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZWRNaW5EYXRlID8gY29udmVydGVkTWluRGF0ZSA6IGNvbnZlcnRlZE1heERhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYnVpbGRDYWxlbmRhck1vbnRoKGRhdGUsIGVuYWJsZU91dHNpZGVEYXRlcykge1xyXG4gICAgICAgIGNvbnN0IGRheXMgPSBbXHJcbiAgICAgICAgICAgICdzdW5kYXknLFxyXG4gICAgICAgICAgICAnbW9uZGF5JyxcclxuICAgICAgICAgICAgJ3R1ZXNkYXknLFxyXG4gICAgICAgICAgICAnd2VkbmVzZGF5JyxcclxuICAgICAgICAgICAgJ3RodXJzZGF5JyxcclxuICAgICAgICAgICAgJ2ZyaWRheScsXHJcbiAgICAgICAgICAgICdzYXR1cmRheScsXHJcbiAgICAgICAgXTtcclxuICAgICAgICBjb25zdCB7IHN0YXJ0T2ZXZWVrIH0gPSBpMThuLmRhdGVQaWNrZXI7XHJcbiAgICAgICAgcmV0dXJuIGdldENhbGVuZGFyTW9udGhXZWVrcyhkYXRlLCBlbmFibGVPdXRzaWRlRGF0ZXMsIGRheXMuaW5kZXhPZihzdGFydE9mV2VlaykpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25QcmV2TW9udGhDbGljaygpIHtcclxuICAgICAgICBjb25zdCBuZXdEYXRlID0gZ2V0UHJldk1vbnRoRnJvbURhdGUoZm9jdXNlZERhdGUpO1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25OZXh0TW9udGhDbGljaygpIHtcclxuICAgICAgICBjb25zdCBuZXdEYXRlID0gZ2V0TmV4dE1vbnRoRnJvbURhdGUoZm9jdXNlZERhdGUpO1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0RhdGUpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0TW9udGhGb2N1c2VkRGF0ZShtb250aE51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBzZXRNb250aEZvckRhdGUoZm9jdXNlZERhdGUsIG1vbnRoTnVtYmVyKTtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShuZXdEYXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldFllYXJGb2N1c2VkRGF0ZSh5ZWFyTnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IHNldFllYXJGb3JEYXRlKGZvY3VzZWREYXRlLCB5ZWFyTnVtYmVyKTtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShuZXdEYXRlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRGF0ZUNoYW5nZShkYXkpIHtcclxuICAgICAgICBzZXRDaG9zZW5EYXRlKGRheSk7XHJcbiAgICAgICAgaWYgKGRhdGVUaW1lUGlja2VyQ29udGVudClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHJlc2V0KCkge1xyXG4gICAgICAgIHNldEZvY3VzZWREYXRlKHNldERlZmF1bHRGb2N1c2VkRGF0ZSgpKTtcclxuICAgICAgICBzZXRDaG9zZW5EYXRlKG51bGwpO1xyXG4gICAgICAgIHNldERhdGVGb2N1c2VkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGlzVmFsaWREYXRlRnJvbVN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlRm9ybWF0ID0gaXNNYXRjaCh2YWx1ZSwgaTE4bi5kYXRlRm9ybWF0KTtcclxuICAgICAgICBjb25zdCBwYXJzZWREYXRlID0gcGFyc2UodmFsdWUsIGkxOG4uZGF0ZUZvcm1hdCwgbmV3IERhdGUoKSk7XHJcbiAgICAgICAgY29uc3QgaXNWYWxpZERhdGUgPSBpc1ZhbGlkKHBhcnNlZERhdGUpO1xyXG4gICAgICAgIHJldHVybiBpc1ZhbGlkRGF0ZUZvcm1hdCAmJiBpc1ZhbGlkRGF0ZTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGRheSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgcHJvcHMub25JbnB1dENoYW5nZSAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgcHJvcHMub25JbnB1dENoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbklucHV0Q2hhbmdlKGV2ZW50KTtcclxuICAgICAgICBsZXQgaXNWYWxpZERheTtcclxuICAgICAgICBpZiAoZGF0ZVRpbWVQaWNrZXJDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VmFsdWUgPSB2YWx1ZS5zcGxpdCgnICcpWzBdO1xyXG4gICAgICAgICAgICBpc1ZhbGlkRGF5ID0gaXNWYWxpZERhdGVGcm9tU3RyaW5nKHNwbGl0VmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZERheSA9IG5ldyBEYXRlKHNwbGl0VmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gL15cXGR7Mn1cXC9cXGR7Mn1cXC9cXGR7NH0kLztcclxuICAgICAgICAgICAgaWYgKHBhdHRlcm4udGVzdChzcGxpdFZhbHVlKSAmJiBpc1ZhbGlkKHZhbGlkRGF5KSkge1xyXG4gICAgICAgICAgICAgICAgc2V0Q2hvc2VuRGF0ZSh2YWxpZERheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UoaXNWYWxpZERheSA/IHZhbGlkRGF5LnRvSVNPU3RyaW5nKCkgOiBzcGxpdFZhbHVlLCBldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpc1ZhbGlkRGF5ID0gaXNWYWxpZERhdGVGcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UoaXNWYWxpZERheSA/IGRheS50b0lTT1N0cmluZygpIDogdmFsdWUsIGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dEZvY3VzKGV2ZW50KSB7XHJcbiAgICAgICAgcHJvcHMub25JbnB1dEZvY3VzICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbklucHV0Rm9jdXMgPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgICAgICAgcHJvcHMub25JbnB1dEZvY3VzKGV2ZW50KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUlucHV0Qmx1cihldmVudCkge1xyXG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IGlucHV0UmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2UoZGF0ZVRpbWVQaWNrZXJDb250ZW50ID8gdmFsdWUuc3BsaXQoJyAnKVswXSA6IHZhbHVlLCBpMThuLmRhdGVGb3JtYXQsIG5ldyBEYXRlKCkpO1xyXG4gICAgICAgIGxldCBpc1ZhbGlkRGF5O1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3BsaXRWYWx1ZSA9IHZhbHVlLnNwbGl0KCcgJylbMF07XHJcbiAgICAgICAgICAgIGlzVmFsaWREYXkgPSBpc1ZhbGlkRGF0ZUZyb21TdHJpbmcoc3BsaXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkRGF5ID0gbmV3IERhdGUoc3BsaXRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRGF5KSB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVEYXRlQ2hhbmdlKHZhbGlkRGF5LCBldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlzVmFsaWREYXkgPSBpc1ZhbGlkRGF0ZUZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZERheSkge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlRGF0ZUNoYW5nZShkYXksIGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc2V0ICYmIHR5cGVvZiByZXNldCA9PT0gJ2Z1bmN0aW9uJyAmJiByZXNldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHByb3BzLm9uSW5wdXRCbHVyICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiBwcm9wcy5vbklucHV0Qmx1ciA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbklucHV0Qmx1cihldmVudCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVJbnB1dEtleURvd24oZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldENhbGVuZGFyT3BlbmVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWNvblJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRlRm9jdXNlZCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmNsb3Nlc3QoJ3RhYmxlJykpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2hvc2VuRGF0ZSA9IGhhbmRsZUtleVByZXNzKGV2ZW50LCBmb2N1c2VkRGF0ZSwgc2V0Q2FsZW5kYXJPcGVuZWQsIHNob3dIZWxwZXJJbmZvcm1hdGlvbiwgb25EYXRlQ2hhbmdlLCBpY29uUmVmKTtcclxuICAgICAgICAgICAgaWYgKG5ld0Nob3NlbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIG1heERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZnRlcihzZXRIb3VycyhuZXdDaG9zZW5EYXRlLCAxMiksIHN0YXJ0T2ZEYXkobWluRGF0ZSkpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQmVmb3JlKHNldEhvdXJzKG5ld0Nob3NlbkRhdGUsIDEyKSwgZW5kT2ZEYXkobWF4RGF0ZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0Nob3NlbkRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1pbkRhdGUgJiYgIW1heERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZnRlcihzZXRIb3VycyhuZXdDaG9zZW5EYXRlLCAxMiksIHN0YXJ0T2ZEYXkobWluRGF0ZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWREYXRlKG5ld0Nob3NlbkRhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1heERhdGUgJiYgIW1pbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNCZWZvcmUoc2V0SG91cnMobmV3Q2hvc2VuRGF0ZSwgMTIpLCBlbmRPZkRheShtYXhEYXRlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobmV3Q2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUobmV3Q2hvc2VuRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVEYXRlQ2hhbmdlKGRheSwgZXZlbnQpIHtcclxuICAgICAgICBwcm9wcy5vbkRhdGVDaGFuZ2UgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHByb3BzLm9uRGF0ZUNoYW5nZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgICAgICAgICBwcm9wcy5vbkRhdGVDaGFuZ2UoZGF5LCBldmVudCk7XHJcbiAgICAgICAgcHJvcHMub25DaGFuZ2UgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHByb3BzLm9uQ2hhbmdlID09PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlKGRheT8udG9JU09TdHJpbmcoKSwgZXZlbnQpO1xyXG4gICAgICAgIG9uRGF0ZUNoYW5nZShkYXkpO1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRGb2N1c2VkRGF0ZShkYXkpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGFuZGxlRGF5U2VsZWN0aW9uKGRheSwgZXZlbnQpIHtcclxuICAgICAgICBoYW5kbGVEYXRlQ2hhbmdlKGRheSwgZXZlbnQpO1xyXG4gICAgICAgIGlmIChkYXRlVGltZVBpY2tlckNvbnRlbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpbnB1dFJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVDYWxlbmRhckJsdXIoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCB7IGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIC8vIHRpbWVvdXQgbmVlZGVkIGZvciBhY3RpdmUgZWxlbWVudCB0byB1cGRhdGUuIEJyb3dzZXIgYmVoYXZpb3IuXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUyMzA3XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSW5DYWxlbmRhciA9IGN1cnJlbnRUYXJnZXQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgICAgIGlmICghaXNJbkNhbGVuZGFyICYmICFoZWxwZXJJbmZvcm1hdGlvblNob3duKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRDYWxlbmRhck9wZW5lZChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAwKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUNsb3NlQnV0dG9uQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoIWljb25SZWYuY3VycmVudCAmJiBwcmV2aW91c0ljb25SZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBpY29uUmVmLmN1cnJlbnQgPSBwcmV2aW91c0ljb25SZWYuY3VycmVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWNvblJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgc2V0Q2FsZW5kYXJPcGVuZWQoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gdG9nZ2xlQ2FsZW5kYXJPcGVuZWQoKSB7XHJcbiAgICAgICAgc2V0Q2FsZW5kYXJPcGVuZWQob3BlbmVkID0+IHtcclxuICAgICAgICAgICAgLy8gRm9jdXMgb24gdG9kYXkgd2hlbiBvcGVuaW5nIGNhbGVuZGFyIHdpdGhvdXQgYSBjaG9zZW4gZGF0ZVxyXG4gICAgICAgICAgICBpZiAoIW9wZW5lZCAmJiAhY2hvc2VuRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgc2V0Rm9jdXNlZERhdGUoc2V0RGVmYXVsdEZvY3VzZWREYXRlKCkpO1xyXG4gICAgICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICFvcGVuZWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCB0ZXN0SWQsIGRhdGVUaW1lUGlja2VyQ29udGVudCwgLi4ucmVzdCB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCBvdGhlciA9IG9taXQoWydvbkRhdGVDaGFuZ2UnLCAnb25JbnB1dENoYW5nZScsICdvbklucHV0Qmx1cicsICdvbklucHV0Rm9jdXMnXSwgcmVzdCk7XHJcbiAgICBjb25zdCBkYXRlRmllbGRWYWx1ZSA9IGRhdGVGb3JtYXQgPT09ICdNTU1NIGQsIHl5eXknICYmIGNob3NlbkRhdGVcclxuICAgICAgICA/IGZvcm1hdChjaG9zZW5EYXRlLCBkYXRlRm9ybWF0KVxyXG4gICAgICAgIDogY2hvc2VuRGF0ZTtcclxuICAgIGNvbnN0IGlucHV0RGF0ZVZhbHVlID0gY2hvc2VuRGF0ZSA/IGZvcm1hdChjaG9zZW5EYXRlLCBkYXRlRm9ybWF0KSA6ICcnO1xyXG4gICAgbGV0IGlucHV0VmFsdWUgPSBwcm9wcy5pc0RhdGVGaWVsZElucHV0ID8gZGF0ZUZpZWxkVmFsdWUgOiBpbnB1dERhdGVWYWx1ZTtcclxuICAgIGlmIChpbnB1dFZhbHVlICYmIHByb3BzLmFkZGl0aW9uYWxJbnB1dENvbnRlbnQpIHtcclxuICAgICAgICBpbnB1dFZhbHVlID0gYCR7aW5wdXRWYWx1ZX0gJHtwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50fWA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChwcm9wcy5hZGRpdGlvbmFsSW5wdXRDb250ZW50KSB7XHJcbiAgICAgICAgc2V0Q2hvc2VuRGF0ZShuZXcgRGF0ZSgpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgZmxvYXRpbmdTdHlsZXMsIHJlZnMsIGVsZW1lbnRzLCB1cGRhdGUgfSA9IHVzZU1hZ21hRmxvYXRpbmcoKTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlRGF0ZUlucHV0ID0gZWxlbWVudHMucmVmZXJlbmNlO1xyXG4gICAgICAgIGNvbnN0IGZsb2F0aW5nQ2FsZW5kYXIgPSBlbGVtZW50cy5mbG9hdGluZztcclxuICAgICAgICBpZiAoY2FsZW5kYXJPcGVuZWQgJiYgcmVmZXJlbmNlRGF0ZUlucHV0ICYmIGZsb2F0aW5nQ2FsZW5kYXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGF1dG9VcGRhdGUocmVmZXJlbmNlRGF0ZUlucHV0LCBmbG9hdGluZ0NhbGVuZGFyLCB1cGRhdGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtjYWxlbmRhck9wZW5lZCwgZWxlbWVudHMsIHVwZGF0ZV0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZToge1xyXG4gICAgICAgICAgICBjaG9zZW5EYXRlLFxyXG4gICAgICAgICAgICBmb2N1c2VkRGF0ZSxcclxuICAgICAgICAgICAgZGF0ZUZvY3VzZWQsXHJcbiAgICAgICAgICAgIG1heERhdGUsXHJcbiAgICAgICAgICAgIG1pbkRhdGUsXHJcbiAgICAgICAgICAgIGhlbHBlckluZm9ybWF0aW9uU2hvd24sXHJcbiAgICAgICAgICAgIGlzSW52ZXJzZSxcclxuICAgICAgICAgICAgYnVpbGRDYWxlbmRhck1vbnRoLFxyXG4gICAgICAgICAgICBzaG93SGVscGVySW5mb3JtYXRpb24sXHJcbiAgICAgICAgICAgIGhpZGVIZWxwZXJJbmZvcm1hdGlvbixcclxuICAgICAgICAgICAgb25LZXlEb3duOiBoYW5kbGVLZXlEb3duLFxyXG4gICAgICAgICAgICBvblByZXZNb250aENsaWNrLFxyXG4gICAgICAgICAgICBvbk5leHRNb250aENsaWNrLFxyXG4gICAgICAgICAgICBvbkRhdGVDaGFuZ2U6IGhhbmRsZURheVNlbGVjdGlvbixcclxuICAgICAgICAgICAgc2V0RGF0ZUZvY3VzZWQsXHJcbiAgICAgICAgICAgIHNldEZvY3VzZWRUb2RheURhdGUsXHJcbiAgICAgICAgICAgIHNldEZvY3VzZWREYXRlLFxyXG4gICAgICAgICAgICBzZXRNb250aEZvY3VzZWREYXRlLFxyXG4gICAgICAgICAgICBzZXRZZWFyRm9jdXNlZERhdGUsXHJcbiAgICAgICAgICAgIG9uQ2xvc2U6IGNsb3NlSGVscGVySW5mb3JtYXRpb24sXHJcbiAgICAgICAgfSB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBpY2tlckNvbnRhaW5lciwgeyBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgb25CbHVyOiBoYW5kbGVDYWxlbmRhckJsdXIgfSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgY2FsZW5kYXJPcGVuZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsIGkxOG4uZGF0ZVBpY2tlci5jYWxlbmRhck9wZW5Bbm5vdW5jZSkpKSxcclxuICAgICAgICAgICAgcHJvcHMuaXNEYXRlRmllbGRJbnB1dCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KERhdGVGaWVsZElucHV0LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBpZDogaWQsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXQsIGlucHV0VmFsdWU6IGlucHV0VmFsdWUsIG9uSWNvbkNsaWNrOiB0b2dnbGVDYWxlbmRhck9wZW5lZCwgc2V0UmVmZXJlbmNlOiByZWZzLnNldFJlZmVyZW5jZSwgaWNvblJlZjogaWNvblJlZiwgaW5wdXRSZWY6IGlucHV0UmVmLCBoYW5kbGVEYXRlQ2hhbmdlOiBoYW5kbGVEYXRlQ2hhbmdlLCBvbkNsZWFyRGF0ZTogcmVzZXQsIG9uSW5wdXRCbHVyOiBwcm9wcy5vbklucHV0Qmx1ciwgb25JbnB1dEZvY3VzOiBoYW5kbGVJbnB1dEZvY3VzLCBvbkljb25LZXlEb3duOiBoYW5kbGVJbnB1dEtleURvd24gfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCBPYmplY3QuYXNzaWduKHt9LCBvdGhlciwgeyBpY29uOiBSZWFjdC5jcmVhdGVFbGVtZW50KEV2ZW50SWNvbiwgbnVsbCksIGljb25BcmlhTGFiZWw6IGkxOG4uZGF0ZVBpY2tlci5jYWxlbmRhckljb25BcmlhTGFiZWwsIGljb25SZWY6IGljb25SZWYsIG9uSWNvbkNsaWNrOiB0b2dnbGVDYWxlbmRhck9wZW5lZCwgb25JY29uS2V5RG93bjogaGFuZGxlSW5wdXRLZXlEb3duLCBpZDogaWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCByZWY6IHJlZiwgb25DaGFuZ2U6IGhhbmRsZUlucHV0Q2hhbmdlLCBvbkJsdXI6IGhhbmRsZUlucHV0Qmx1ciwgb25Gb2N1czogaGFuZGxlSW5wdXRGb2N1cywgb25LZXlEb3duOiBoYW5kbGVJbnB1dEtleURvd24sIG9uRGF0ZUNoYW5nZTogaGFuZGxlRGF0ZUNoYW5nZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBkYXRlRm9ybWF0LnRvTG93ZXJDYXNlKCksIHR5cGU6IElucHV0VHlwZS50ZXh0LCB2YWx1ZTogaW5wdXRWYWx1ZSwgc2V0UmVmZXJlbmNlOiByZWZzLnNldFJlZmVyZW5jZSB9KSkpLFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEludmVyc2VDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiB7IGlzSW52ZXJzZSB9IH0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgcmVmOiBlbCA9PiBjYWxlbmRhck9wZW5lZCAmJiByZWZzLnNldEZsb2F0aW5nKGVsKSwgc3R5bGU6IHsgLi4uZmxvYXRpbmdTdHlsZXMsIHpJbmRleDogJzk5OCcgfSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBpY2tlckNhbGVuZGFyLCB7IFwiZGF0YS10ZXN0aWRcIjogXCJjYWxlbmRhckNvbnRhaW5lclwiLCBvcGVuZWQ6IGNhbGVuZGFyT3BlbmVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FsZW5kYXJNb250aCwgeyBmb2N1c09uT3BlbjogY2FsZW5kYXJPcGVuZWQgJiYgQm9vbGVhbihmb2N1c2VkRGF0ZSksIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrOiBoYW5kbGVDbG9zZUJ1dHRvbkNsaWNrLCBjYWxlbmRhck9wZW5lZDogY2FsZW5kYXJPcGVuZWQsIHNldERhdGVGb2N1c2VkOiBzZXREYXRlRm9jdXNlZCwgZGF0ZVRpbWVQaWNrZXJDb250ZW50OiBkYXRlVGltZVBpY2tlckNvbnRlbnQgfSkpKSkpKSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXX0= */"));
15127
15308
  var DatePicker = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
15128
15309
  var theme = useContext(ThemeContext);
15129
15310
  var i18n = useContext(I18nContext);
@@ -15283,7 +15464,7 @@ var DatePicker = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
15283
15464
  isValidDay = isValidDateFromString(splitValue);
15284
15465
  var validDay = new Date(splitValue);
15285
15466
  var pattern = /^\d{2}\/\d{2}\/\d{4}$/;
15286
- if (pattern.test(splitValue)) {
15467
+ if (pattern.test(splitValue) && isValid(validDay)) {
15287
15468
  setChosenDate(validDay);
15288
15469
  }
15289
15470
  props.onChange && typeof props.onChange === 'function' && props.onChange(isValidDay ? validDay.toISOString() : splitValue, event);
@@ -15717,7 +15898,7 @@ var Container$2 = /*#__PURE__*/_styled("div", {
15717
15898
  styles: "display:inline-block;position:relative"
15718
15899
  } : {
15719
15900
  name: "11ffxfj",
15720
- styles: "display:inline-block;position:relative/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRyb3Bkb3duLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQjZCIiwiZmlsZSI6IkRyb3Bkb3duLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IHsgYXV0b1VwZGF0ZSwgZmxpcCwgb2Zmc2V0LCB1c2VGbG9hdGluZywgfSBmcm9tICdAZmxvYXRpbmctdWkvcmVhY3QtZG9tJztcclxuaW1wb3J0IHsgdXNlRGVzY2VuZGFudHMgfSBmcm9tICcuLi8uLi9ob29rcy91c2VEZXNjZW5kYW50cyc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBpc0VsZW1lbnRJbnRlcmFjdGl2ZSwgcmVzb2x2ZVByb3BzLCB1c2VGb3JrZWRSZWYsIHVzZUdlbmVyYXRlSWQsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBCdXR0b25Hcm91cENvbnRleHQgfSBmcm9tICcuLi9CdXR0b25Hcm91cCc7XHJcbmV4cG9ydCB2YXIgRHJvcGRvd25Ecm9wRGlyZWN0aW9uO1xyXG4oZnVuY3Rpb24gKERyb3Bkb3duRHJvcERpcmVjdGlvbikge1xyXG4gICAgRHJvcGRvd25Ecm9wRGlyZWN0aW9uW1wiZG93blwiXSA9IFwiZG93blwiO1xyXG4gICAgRHJvcGRvd25Ecm9wRGlyZWN0aW9uW1wibGVmdFwiXSA9IFwibGVmdFwiO1xyXG4gICAgRHJvcGRvd25Ecm9wRGlyZWN0aW9uW1wicmlnaHRcIl0gPSBcInJpZ2h0XCI7XHJcbiAgICBEcm9wZG93bkRyb3BEaXJlY3Rpb25bXCJ1cFwiXSA9IFwidXBcIjtcclxufSkoRHJvcGRvd25Ecm9wRGlyZWN0aW9uIHx8IChEcm9wZG93bkRyb3BEaXJlY3Rpb24gPSB7fSkpO1xyXG5leHBvcnQgdmFyIERyb3Bkb3duQWxpZ25tZW50O1xyXG4oZnVuY3Rpb24gKERyb3Bkb3duQWxpZ25tZW50KSB7XHJcbiAgICBEcm9wZG93bkFsaWdubWVudFtcInN0YXJ0XCJdID0gXCJzdGFydFwiO1xyXG4gICAgRHJvcGRvd25BbGlnbm1lbnRbXCJlbmRcIl0gPSBcImVuZFwiO1xyXG59KShEcm9wZG93bkFsaWdubWVudCB8fCAoRHJvcGRvd25BbGlnbm1lbnQgPSB7fSkpO1xyXG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xyXG5leHBvcnQgY29uc3QgRHJvcGRvd25Db250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7XHJcbiAgICBpc09wZW46IGZhbHNlLFxyXG4gICAgcmVnaXN0ZXJEcm9wZG93bk1lbnVJdGVtOiAoZWxlbWVudHMsIGVsZW1lbnQpID0+IHsgfSxcclxuICAgIHNldElzT3BlbjogKCkgPT4gZmFsc2UsXHJcbn0pO1xyXG5leHBvcnQgY29uc3QgdXNlRHJvcGRvd25Db250ZXh0ID0gKCkgPT4gUmVhY3QudXNlQ29udGV4dChEcm9wZG93bkNvbnRleHQpO1xyXG5leHBvcnQgY29uc3QgRHJvcGRvd24gPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCBjb250ZXh0UHJvcHMgPSBSZWFjdC51c2VDb250ZXh0KEJ1dHRvbkdyb3VwQ29udGV4dCk7XHJcbiAgICBjb25zdCByZXNvbHZlZFByb3BzID0gcmVzb2x2ZVByb3BzKGNvbnRleHRQcm9wcywgcHJvcHMpO1xyXG4gICAgY29uc3QgeyBhY3RpdmVJbmRleCwgYWxpZ25tZW50LCBjaGlsZHJlbiwgZHJvcERpcmVjdGlvbiwgbWF4SGVpZ2h0LCBvbkNsb3NlLCBvbk9wZW4sIHRlc3RJZCwgd2lkdGgsIC4uLm90aGVyIH0gPSByZXNvbHZlZFByb3BzO1xyXG4gICAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFthY3RpdmVJdGVtSW5kZXgsIHNldEFjdGl2ZUl0ZW1JbmRleF0gPSBSZWFjdC51c2VTdGF0ZShhY3RpdmVJbmRleCB8fCAtMSk7XHJcbiAgICBjb25zdCBvd25SZWYgPSBSZWFjdC51c2VSZWYoKTtcclxuICAgIGNvbnN0IHRvZ2dsZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IG1lbnVSZWYgPSBSZWFjdC51c2VSZWYoW10pO1xyXG4gICAgY29uc3QgZHJvcGRvd25CdXR0b25JZCA9IFJlYWN0LnVzZVJlZignJyk7XHJcbiAgICBjb25zdCByZWYgPSB1c2VGb3JrZWRSZWYoZm9yd2FyZGVkUmVmLCBvd25SZWYpO1xyXG4gICAgY29uc3QgW2l0ZW1SZWZBcnJheSwgcmVnaXN0ZXJEcm9wZG93bk1lbnVJdGVtXSA9IHVzZURlc2NlbmRhbnRzKCk7XHJcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChhY3RpdmVJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1JbmRleChhY3RpdmVJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2FjdGl2ZUluZGV4XSk7XHJcbiAgICBmdW5jdGlvbiBvcGVuRHJvcGRvd24oKSB7XHJcbiAgICAgICAgY29uc3QgW2ZpbHRlcmVkSXRlbXNdID0gZ2V0RmlsdGVyZWRJdGVtKCk7XHJcbiAgICAgICAgc2V0SXNPcGVuKHRydWUpO1xyXG4gICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZEl0ZW1zWzBdPy5jdXJyZW50Py5mb2N1cygpO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbWVudVJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbk9wZW4gJiYgdHlwZW9mIG9uT3BlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBvbk9wZW4oKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNsb3NlRHJvcGRvd24oZXZlbnQpIHtcclxuICAgICAgICBzZXRJc09wZW4oZmFsc2UpO1xyXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnYmx1cicpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XHJcbiAgICAgICAgICAgIGlmICghaXNFbGVtZW50SW50ZXJhY3RpdmUocmVsYXRlZFRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgIHRvZ2dsZVJlZi5jdXJyZW50Py5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9uQ2xvc2UgJiYgdHlwZW9mIG9uQ2xvc2UgPT09ICdmdW5jdGlvbicgJiYgb25DbG9zZShldmVudCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBnZXRGaWx0ZXJlZEl0ZW0oKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IGl0ZW1SZWZBcnJheS5jdXJyZW50LmZpbHRlcihpdGVtUmVmID0+IGl0ZW1SZWYuY3VycmVudCk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRJdGVtSW5kZXggPSBmaWx0ZXJlZEl0ZW1zXHJcbiAgICAgICAgICAgIC5tYXAoZmlsdGVyZWRJdGVtID0+IGZpbHRlcmVkSXRlbS5jdXJyZW50KVxyXG4gICAgICAgICAgICAuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcclxuICAgICAgICByZXR1cm4gW2ZpbHRlcmVkSXRlbXMsIGZpbHRlcmVkSXRlbUluZGV4XTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgY2xvc2VEcm9wZG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHRvZ2dsZVJlZi5jdXJyZW50Py5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgICAgICAgICBjb25zdCBbZmlsdGVyZWRJdGVtcywgZmlsdGVyZWRJdGVtSW5kZXhdID0gZ2V0RmlsdGVyZWRJdGVtKCk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1JbmRleCA9PT0gLTEgfHxcclxuICAgICAgICAgICAgICAgIGZpbHRlcmVkSXRlbUluZGV4ID09PSBmaWx0ZXJlZEl0ZW1zLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcmVkSXRlbXNbMF0uY3VycmVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyZWRJdGVtc1tmaWx0ZXJlZEl0ZW1JbmRleCArIDFdLmN1cnJlbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgICAgICAgICAgY29uc3QgW2ZpbHRlcmVkSXRlbXMsIGZpbHRlcmVkSXRlbUluZGV4XSA9IGdldEZpbHRlcmVkSXRlbSgpO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtSW5kZXggPT09IC0xIHx8IGZpbHRlcmVkSXRlbUluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZEl0ZW1zW2ZpbHRlcmVkSXRlbXMubGVuZ3RoIC0gMV0uY3VycmVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyZWRJdGVtc1tmaWx0ZXJlZEl0ZW1JbmRleCAtIDFdLmN1cnJlbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZURyb3Bkb3duQmx1cihldmVudCkge1xyXG4gICAgICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCwgcmVsYXRlZFRhcmdldCB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgaXNJbk1lbnUgPSByZWxhdGVkVGFyZ2V0ICYmIGN1cnJlbnRUYXJnZXQuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XHJcbiAgICAgICAgaWYgKCFpc0luTWVudSAmJiBpc09wZW4pIHtcclxuICAgICAgICAgICAgY2xvc2VEcm9wZG93bihldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgbWF4SGVpZ2h0U3RyaW5nID0gdHlwZW9mIG1heEhlaWdodCA9PT0gJ251bWJlcicgPyBgJHttYXhIZWlnaHR9cHhgIDogbWF4SGVpZ2h0O1xyXG4gICAgY29uc3Qgd2lkdGhTdHJpbmcgPSB0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInID8gYCR7d2lkdGh9cHhgIDogd2lkdGg7XHJcbiAgICBjb25zdCBpc0ludmVyc2UgPSB1c2VJc0ludmVyc2UocmVzb2x2ZWRQcm9wcy5pc0ludmVyc2UpO1xyXG4gICAgY29uc3QgW3BsYWNlbWVudCwgc2V0UGxhY2VtZW50XSA9IHVzZVN0YXRlKCdib3R0b20tc3RhcnQnKTtcclxuICAgIGRyb3Bkb3duQnV0dG9uSWQuY3VycmVudCA9IHVzZUdlbmVyYXRlSWQoKTtcclxuICAgIGNvbnN0IGNoYW5nZVBsYWNlbWVudCA9IChkcm9wRGlyZWN0aW9uID0gRHJvcGRvd25Ecm9wRGlyZWN0aW9uLmRvd24sIGFsaWdubWVudCA9IERyb3Bkb3duQWxpZ25tZW50LnN0YXJ0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcGxhY2VtZW50TWFwID0gbmV3IE1hcChbXHJcbiAgICAgICAgICAgIFsndXAtc3RhcnQnLCAndG9wLXN0YXJ0J10sXHJcbiAgICAgICAgICAgIFsndXAtZW5kJywgJ3RvcC1lbmQnXSxcclxuICAgICAgICAgICAgWydyaWdodC1zdGFydCcsICdyaWdodC1zdGFydCddLFxyXG4gICAgICAgICAgICBbJ3JpZ2h0LWVuZCcsICdyaWdodC1lbmQnXSxcclxuICAgICAgICAgICAgWydkb3duLWVuZCcsICdib3R0b20tZW5kJ10sXHJcbiAgICAgICAgICAgIFsnbGVmdC1zdGFydCcsICdsZWZ0LXN0YXJ0J10sXHJcbiAgICAgICAgICAgIFsnbGVmdC1lbmQnLCAnbGVmdC1lbmQnXSxcclxuICAgICAgICBdKTtcclxuICAgICAgICAvLyBkcm9wRGlyZWN0aW9uICYgYWxpZ25tZW50IGFyZSBkZXByZWNhdGVkLlxyXG4gICAgICAgIC8vIHRoaXMgZmFsbGJhY2sgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUgcHJvcHMgYXJlIGRlbGV0ZWQuXHJcbiAgICAgICAgY29uc3QgY29udGVudFBvc2l0aW9uID0gYCR7ZHJvcERpcmVjdGlvbn0tJHthbGlnbm1lbnR9YDtcclxuICAgICAgICBzZXRQbGFjZW1lbnQocGxhY2VtZW50TWFwLmdldChjb250ZW50UG9zaXRpb24pID8/ICdib3R0b20tc3RhcnQnKTtcclxuICAgIH07XHJcbiAgICBjb25zdCB7IHJlZnMsIGZsb2F0aW5nU3R5bGVzLCBlbGVtZW50cywgdXBkYXRlIH0gPSB1c2VGbG9hdGluZyh7XHJcbiAgICAgICAgbWlkZGxld2FyZTogW2ZsaXAoKSwgb2Zmc2V0KDIpXSxcclxuICAgICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcclxuICAgICAgICB3aGlsZUVsZW1lbnRzTW91bnRlZDogYXV0b1VwZGF0ZSxcclxuICAgIH0pO1xyXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjaGFuZ2VQbGFjZW1lbnQoZHJvcERpcmVjdGlvbiwgYWxpZ25tZW50KTtcclxuICAgIH0sIFtkcm9wRGlyZWN0aW9uLCBhbGlnbm1lbnRdKTtcclxuICAgIC8vIE5lZWQgY2xlYW51cCBzdGF0ZSB0byBhdm9pZCBtZW1vcnkgbGVha3NcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlRHJvcGRvd25CdXR0b24gPSBlbGVtZW50cy5yZWZlcmVuY2U7XHJcbiAgICAgICAgY29uc3QgZmxvYXRpbmdEcm9wZG93bkNvbnRlbnQgPSBlbGVtZW50cy5mbG9hdGluZztcclxuICAgICAgICBpZiAoaXNPcGVuICYmIHJlZmVyZW5jZURyb3Bkb3duQnV0dG9uICYmIGZsb2F0aW5nRHJvcGRvd25Db250ZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhdXRvVXBkYXRlKHJlZmVyZW5jZURyb3Bkb3duQnV0dG9uLCBmbG9hdGluZ0Ryb3Bkb3duQ29udGVudCwgdXBkYXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaXNPcGVuLCBlbGVtZW50cywgdXBkYXRlXSk7XHJcbiAgICBjb25zdCBjb250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4LFxyXG4gICAgICAgIGFsaWdubWVudCxcclxuICAgICAgICBjbG9zZURyb3Bkb3duLFxyXG4gICAgICAgIGRyb3Bkb3duQnV0dG9uSWQsXHJcbiAgICAgICAgZHJvcERpcmVjdGlvbixcclxuICAgICAgICBmbG9hdGluZ1N0eWxlcyxcclxuICAgICAgICBoYW5kbGVEcm9wZG93bkJsdXIsXHJcbiAgICAgICAgaXRlbVJlZkFycmF5LFxyXG4gICAgICAgIGlzRml4ZWRXaWR0aDogISF3aWR0aCxcclxuICAgICAgICBpc09wZW4sXHJcbiAgICAgICAgaXNJbnZlcnNlLFxyXG4gICAgICAgIG1heEhlaWdodDogbWF4SGVpZ2h0U3RyaW5nLFxyXG4gICAgICAgIG1lbnVSZWYsXHJcbiAgICAgICAgb3BlbkRyb3Bkb3duLFxyXG4gICAgICAgIHJlZ2lzdGVyRHJvcGRvd25NZW51SXRlbSxcclxuICAgICAgICBzZXRBY3RpdmVJdGVtSW5kZXgsXHJcbiAgICAgICAgc2V0SXNPcGVuLFxyXG4gICAgICAgIHNldFJlZmVyZW5jZTogcmVmcy5zZXRSZWZlcmVuY2UsXHJcbiAgICAgICAgc2V0RmxvYXRpbmc6IHJlZnMuc2V0RmxvYXRpbmcsXHJcbiAgICAgICAgdG9nZ2xlUmVmLFxyXG4gICAgICAgIHdpZHRoOiB3aWR0aFN0cmluZyxcclxuICAgIH0pLCBbXHJcbiAgICAgICAgYWN0aXZlSXRlbUluZGV4LFxyXG4gICAgICAgIGFsaWdubWVudCxcclxuICAgICAgICBjbG9zZURyb3Bkb3duLFxyXG4gICAgICAgIGRyb3Bkb3duQnV0dG9uSWQsXHJcbiAgICAgICAgZHJvcERpcmVjdGlvbixcclxuICAgICAgICBmbG9hdGluZ1N0eWxlcyxcclxuICAgICAgICBoYW5kbGVEcm9wZG93bkJsdXIsXHJcbiAgICAgICAgaXRlbVJlZkFycmF5LFxyXG4gICAgICAgIHdpZHRoLFxyXG4gICAgICAgIGlzT3BlbixcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbWF4SGVpZ2h0U3RyaW5nLFxyXG4gICAgICAgIG1lbnVSZWYsXHJcbiAgICAgICAgb3BlbkRyb3Bkb3duLFxyXG4gICAgICAgIHJlZ2lzdGVyRHJvcGRvd25NZW51SXRlbSxcclxuICAgICAgICBzZXRBY3RpdmVJdGVtSW5kZXgsXHJcbiAgICAgICAgc2V0SXNPcGVuLFxyXG4gICAgICAgIHJlZnMuc2V0UmVmZXJlbmNlLFxyXG4gICAgICAgIHJlZnMuc2V0RmxvYXRpbmcsXHJcbiAgICAgICAgdG9nZ2xlUmVmLFxyXG4gICAgICAgIHdpZHRoU3RyaW5nLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcGRvd25Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRhaW5lciwgT2JqZWN0LmFzc2lnbih7fSwgb3RoZXIsIHsgcmVmOiByZWYsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBvbktleURvd246IGlzT3BlbiA/IGhhbmRsZUtleURvd24gOiBudWxsLCBvbkJsdXI6IGhhbmRsZURyb3Bkb3duQmx1ciB9KSwgY2hpbGRyZW4pKSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ecm9wZG93bi5qcy5tYXAiXX0= */",
15901
+ styles: "display:inline-block;position:relative/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRyb3Bkb3duLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQjZCIiwiZmlsZSI6IkRyb3Bkb3duLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IHsgYXV0b1VwZGF0ZSwgZmxpcCwgb2Zmc2V0LCB1c2VGbG9hdGluZywgfSBmcm9tICdAZmxvYXRpbmctdWkvcmVhY3QtZG9tJztcclxuaW1wb3J0IHsgdXNlRGVzY2VuZGFudHMgfSBmcm9tICcuLi8uLi9ob29rcy91c2VEZXNjZW5kYW50cyc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBpc0VsZW1lbnRJbnRlcmFjdGl2ZSwgcmVzb2x2ZVByb3BzLCB1c2VGb3JrZWRSZWYsIHVzZUdlbmVyYXRlSWQsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBCdXR0b25Hcm91cENvbnRleHQgfSBmcm9tICcuLi9CdXR0b25Hcm91cCc7XHJcbmV4cG9ydCB2YXIgRHJvcGRvd25Ecm9wRGlyZWN0aW9uO1xyXG4oZnVuY3Rpb24gKERyb3Bkb3duRHJvcERpcmVjdGlvbikge1xyXG4gICAgRHJvcGRvd25Ecm9wRGlyZWN0aW9uW1wiZG93blwiXSA9IFwiZG93blwiO1xyXG4gICAgRHJvcGRvd25Ecm9wRGlyZWN0aW9uW1wibGVmdFwiXSA9IFwibGVmdFwiO1xyXG4gICAgRHJvcGRvd25Ecm9wRGlyZWN0aW9uW1wicmlnaHRcIl0gPSBcInJpZ2h0XCI7XHJcbiAgICBEcm9wZG93bkRyb3BEaXJlY3Rpb25bXCJ1cFwiXSA9IFwidXBcIjtcclxufSkoRHJvcGRvd25Ecm9wRGlyZWN0aW9uIHx8IChEcm9wZG93bkRyb3BEaXJlY3Rpb24gPSB7fSkpO1xyXG5leHBvcnQgdmFyIERyb3Bkb3duQWxpZ25tZW50O1xyXG4oZnVuY3Rpb24gKERyb3Bkb3duQWxpZ25tZW50KSB7XHJcbiAgICBEcm9wZG93bkFsaWdubWVudFtcInN0YXJ0XCJdID0gXCJzdGFydFwiO1xyXG4gICAgRHJvcGRvd25BbGlnbm1lbnRbXCJlbmRcIl0gPSBcImVuZFwiO1xyXG59KShEcm9wZG93bkFsaWdubWVudCB8fCAoRHJvcGRvd25BbGlnbm1lbnQgPSB7fSkpO1xyXG5jb25zdCBDb250YWluZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5gO1xyXG5leHBvcnQgY29uc3QgRHJvcGRvd25Db250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7XHJcbiAgICBpc09wZW46IGZhbHNlLFxyXG4gICAgcmVnaXN0ZXJEcm9wZG93bk1lbnVJdGVtOiAoZWxlbWVudHMsIGVsZW1lbnQpID0+IHsgfSxcclxuICAgIHNldElzT3BlbjogKCkgPT4gZmFsc2UsXHJcbn0pO1xyXG5leHBvcnQgY29uc3QgdXNlRHJvcGRvd25Db250ZXh0ID0gKCkgPT4gUmVhY3QudXNlQ29udGV4dChEcm9wZG93bkNvbnRleHQpO1xyXG5leHBvcnQgY29uc3QgRHJvcGRvd24gPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCBjb250ZXh0UHJvcHMgPSBSZWFjdC51c2VDb250ZXh0KEJ1dHRvbkdyb3VwQ29udGV4dCk7XHJcbiAgICBjb25zdCByZXNvbHZlZFByb3BzID0gcmVzb2x2ZVByb3BzKGNvbnRleHRQcm9wcywgcHJvcHMpO1xyXG4gICAgY29uc3QgeyBhY3RpdmVJbmRleCwgYWxpZ25tZW50LCBjaGlsZHJlbiwgZHJvcERpcmVjdGlvbiwgbWF4SGVpZ2h0LCBvbkNsb3NlLCBvbk9wZW4sIHRlc3RJZCwgd2lkdGgsIC4uLm90aGVyIH0gPSByZXNvbHZlZFByb3BzO1xyXG4gICAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFthY3RpdmVJdGVtSW5kZXgsIHNldEFjdGl2ZUl0ZW1JbmRleF0gPSBSZWFjdC51c2VTdGF0ZShhY3RpdmVJbmRleCB8fCAtMSk7XHJcbiAgICBjb25zdCBvd25SZWYgPSBSZWFjdC51c2VSZWYoKTtcclxuICAgIGNvbnN0IHRvZ2dsZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IG1lbnVSZWYgPSBSZWFjdC51c2VSZWYoW10pO1xyXG4gICAgY29uc3QgZHJvcGRvd25CdXR0b25JZCA9IFJlYWN0LnVzZVJlZignJyk7XHJcbiAgICBjb25zdCByZWYgPSB1c2VGb3JrZWRSZWYoZm9yd2FyZGVkUmVmLCBvd25SZWYpO1xyXG4gICAgY29uc3QgW2l0ZW1SZWZBcnJheSwgcmVnaXN0ZXJEcm9wZG93bk1lbnVJdGVtXSA9IHVzZURlc2NlbmRhbnRzKCk7XHJcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChhY3RpdmVJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHNldEFjdGl2ZUl0ZW1JbmRleChhY3RpdmVJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2FjdGl2ZUluZGV4XSk7XHJcbiAgICBmdW5jdGlvbiBvcGVuRHJvcGRvd24oKSB7XHJcbiAgICAgICAgY29uc3QgW2ZpbHRlcmVkSXRlbXNdID0gZ2V0RmlsdGVyZWRJdGVtKCk7XHJcbiAgICAgICAgc2V0SXNPcGVuKHRydWUpO1xyXG4gICAgICAgIGlmIChmaWx0ZXJlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZEl0ZW1zWzBdPy5jdXJyZW50Py5mb2N1cygpO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbWVudVJlZi5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbk9wZW4gJiYgdHlwZW9mIG9uT3BlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBvbk9wZW4oKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNsb3NlRHJvcGRvd24oZXZlbnQpIHtcclxuICAgICAgICBzZXRJc09wZW4oZmFsc2UpO1xyXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC50eXBlID09PSAnYmx1cicpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XHJcbiAgICAgICAgICAgIGlmICghaXNFbGVtZW50SW50ZXJhY3RpdmUocmVsYXRlZFRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgIHRvZ2dsZVJlZi5jdXJyZW50Py5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9uQ2xvc2UgJiYgdHlwZW9mIG9uQ2xvc2UgPT09ICdmdW5jdGlvbicgJiYgb25DbG9zZShldmVudCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBnZXRGaWx0ZXJlZEl0ZW0oKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IGl0ZW1SZWZBcnJheS5jdXJyZW50LmZpbHRlcihpdGVtUmVmID0+IGl0ZW1SZWYuY3VycmVudCk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRJdGVtSW5kZXggPSBmaWx0ZXJlZEl0ZW1zXHJcbiAgICAgICAgICAgIC5tYXAoZmlsdGVyZWRJdGVtID0+IGZpbHRlcmVkSXRlbS5jdXJyZW50KVxyXG4gICAgICAgICAgICAuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcclxuICAgICAgICByZXR1cm4gW2ZpbHRlcmVkSXRlbXMsIGZpbHRlcmVkSXRlbUluZGV4XTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGNsb3NlRHJvcGRvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICB0b2dnbGVSZWYuY3VycmVudD8uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgICAgICAgY29uc3QgW2ZpbHRlcmVkSXRlbXMsIGZpbHRlcmVkSXRlbUluZGV4XSA9IGdldEZpbHRlcmVkSXRlbSgpO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyZWRJdGVtSW5kZXggPT09IC0xIHx8XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZEl0ZW1JbmRleCA9PT0gZmlsdGVyZWRJdGVtcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZEl0ZW1zWzBdLmN1cnJlbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcmVkSXRlbXNbZmlsdGVyZWRJdGVtSW5kZXggKyAxXS5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtmaWx0ZXJlZEl0ZW1zLCBmaWx0ZXJlZEl0ZW1JbmRleF0gPSBnZXRGaWx0ZXJlZEl0ZW0oKTtcclxuICAgICAgICAgICAgaWYgKGZpbHRlcmVkSXRlbXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaWYgKGZpbHRlcmVkSXRlbUluZGV4ID09PSAtMSB8fCBmaWx0ZXJlZEl0ZW1JbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyZWRJdGVtc1tmaWx0ZXJlZEl0ZW1zLmxlbmd0aCAtIDFdLmN1cnJlbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcmVkSXRlbXNbZmlsdGVyZWRJdGVtSW5kZXggLSAxXS5jdXJyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVEcm9wZG93bkJsdXIoZXZlbnQpIHtcclxuICAgICAgICBjb25zdCB7IGN1cnJlbnRUYXJnZXQsIHJlbGF0ZWRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzSW5NZW51ID0gcmVsYXRlZFRhcmdldCAmJiBjdXJyZW50VGFyZ2V0LmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpO1xyXG4gICAgICAgIGlmICghaXNJbk1lbnUgJiYgaXNPcGVuKSB7XHJcbiAgICAgICAgICAgIGNsb3NlRHJvcGRvd24oZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IG1heEhlaWdodFN0cmluZyA9IHR5cGVvZiBtYXhIZWlnaHQgPT09ICdudW1iZXInID8gYCR7bWF4SGVpZ2h0fXB4YCA6IG1heEhlaWdodDtcclxuICAgIGNvbnN0IHdpZHRoU3RyaW5nID0gdHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJyA/IGAke3dpZHRofXB4YCA6IHdpZHRoO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKHJlc29sdmVkUHJvcHMuaXNJbnZlcnNlKTtcclxuICAgIGNvbnN0IFtwbGFjZW1lbnQsIHNldFBsYWNlbWVudF0gPSB1c2VTdGF0ZSgnYm90dG9tLXN0YXJ0Jyk7XHJcbiAgICBkcm9wZG93bkJ1dHRvbklkLmN1cnJlbnQgPSB1c2VHZW5lcmF0ZUlkKCk7XHJcbiAgICBjb25zdCBjaGFuZ2VQbGFjZW1lbnQgPSAoZHJvcERpcmVjdGlvbiA9IERyb3Bkb3duRHJvcERpcmVjdGlvbi5kb3duLCBhbGlnbm1lbnQgPSBEcm9wZG93bkFsaWdubWVudC5zdGFydCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBsYWNlbWVudE1hcCA9IG5ldyBNYXAoW1xyXG4gICAgICAgICAgICBbJ3VwLXN0YXJ0JywgJ3RvcC1zdGFydCddLFxyXG4gICAgICAgICAgICBbJ3VwLWVuZCcsICd0b3AtZW5kJ10sXHJcbiAgICAgICAgICAgIFsncmlnaHQtc3RhcnQnLCAncmlnaHQtc3RhcnQnXSxcclxuICAgICAgICAgICAgWydyaWdodC1lbmQnLCAncmlnaHQtZW5kJ10sXHJcbiAgICAgICAgICAgIFsnZG93bi1lbmQnLCAnYm90dG9tLWVuZCddLFxyXG4gICAgICAgICAgICBbJ2xlZnQtc3RhcnQnLCAnbGVmdC1zdGFydCddLFxyXG4gICAgICAgICAgICBbJ2xlZnQtZW5kJywgJ2xlZnQtZW5kJ10sXHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgLy8gZHJvcERpcmVjdGlvbiAmIGFsaWdubWVudCBhcmUgZGVwcmVjYXRlZC5cclxuICAgICAgICAvLyB0aGlzIGZhbGxiYWNrIGNhbiBiZSByZW1vdmVkIHdoZW4gdGhlIHByb3BzIGFyZSBkZWxldGVkLlxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRQb3NpdGlvbiA9IGAke2Ryb3BEaXJlY3Rpb259LSR7YWxpZ25tZW50fWA7XHJcbiAgICAgICAgc2V0UGxhY2VtZW50KHBsYWNlbWVudE1hcC5nZXQoY29udGVudFBvc2l0aW9uKSA/PyAnYm90dG9tLXN0YXJ0Jyk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyByZWZzLCBmbG9hdGluZ1N0eWxlcywgZWxlbWVudHMsIHVwZGF0ZSB9ID0gdXNlRmxvYXRpbmcoe1xyXG4gICAgICAgIG1pZGRsZXdhcmU6IFtmbGlwKCksIG9mZnNldCgyKV0sXHJcbiAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXHJcbiAgICAgICAgd2hpbGVFbGVtZW50c01vdW50ZWQ6IGF1dG9VcGRhdGUsXHJcbiAgICB9KTtcclxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY2hhbmdlUGxhY2VtZW50KGRyb3BEaXJlY3Rpb24sIGFsaWdubWVudCk7XHJcbiAgICB9LCBbZHJvcERpcmVjdGlvbiwgYWxpZ25tZW50XSk7XHJcbiAgICAvLyBOZWVkIGNsZWFudXAgc3RhdGUgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXHJcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZURyb3Bkb3duQnV0dG9uID0gZWxlbWVudHMucmVmZXJlbmNlO1xyXG4gICAgICAgIGNvbnN0IGZsb2F0aW5nRHJvcGRvd25Db250ZW50ID0gZWxlbWVudHMuZmxvYXRpbmc7XHJcbiAgICAgICAgaWYgKGlzT3BlbiAmJiByZWZlcmVuY2VEcm9wZG93bkJ1dHRvbiAmJiBmbG9hdGluZ0Ryb3Bkb3duQ29udGVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXV0b1VwZGF0ZShyZWZlcmVuY2VEcm9wZG93bkJ1dHRvbiwgZmxvYXRpbmdEcm9wZG93bkNvbnRlbnQsIHVwZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzT3BlbiwgZWxlbWVudHMsIHVwZGF0ZV0pO1xyXG4gICAgY29uc3QgY29udGV4dFZhbHVlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xyXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCxcclxuICAgICAgICBhbGlnbm1lbnQsXHJcbiAgICAgICAgY2xvc2VEcm9wZG93bixcclxuICAgICAgICBkcm9wZG93bkJ1dHRvbklkLFxyXG4gICAgICAgIGRyb3BEaXJlY3Rpb24sXHJcbiAgICAgICAgZmxvYXRpbmdTdHlsZXMsXHJcbiAgICAgICAgaGFuZGxlRHJvcGRvd25CbHVyLFxyXG4gICAgICAgIGl0ZW1SZWZBcnJheSxcclxuICAgICAgICBpc0ZpeGVkV2lkdGg6ICEhd2lkdGgsXHJcbiAgICAgICAgaXNPcGVuLFxyXG4gICAgICAgIGlzSW52ZXJzZSxcclxuICAgICAgICBtYXhIZWlnaHQ6IG1heEhlaWdodFN0cmluZyxcclxuICAgICAgICBtZW51UmVmLFxyXG4gICAgICAgIG9wZW5Ecm9wZG93bixcclxuICAgICAgICByZWdpc3RlckRyb3Bkb3duTWVudUl0ZW0sXHJcbiAgICAgICAgc2V0QWN0aXZlSXRlbUluZGV4LFxyXG4gICAgICAgIHNldElzT3BlbixcclxuICAgICAgICBzZXRSZWZlcmVuY2U6IHJlZnMuc2V0UmVmZXJlbmNlLFxyXG4gICAgICAgIHNldEZsb2F0aW5nOiByZWZzLnNldEZsb2F0aW5nLFxyXG4gICAgICAgIHRvZ2dsZVJlZixcclxuICAgICAgICB3aWR0aDogd2lkdGhTdHJpbmcsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCxcclxuICAgICAgICBhbGlnbm1lbnQsXHJcbiAgICAgICAgY2xvc2VEcm9wZG93bixcclxuICAgICAgICBkcm9wZG93bkJ1dHRvbklkLFxyXG4gICAgICAgIGRyb3BEaXJlY3Rpb24sXHJcbiAgICAgICAgZmxvYXRpbmdTdHlsZXMsXHJcbiAgICAgICAgaGFuZGxlRHJvcGRvd25CbHVyLFxyXG4gICAgICAgIGl0ZW1SZWZBcnJheSxcclxuICAgICAgICB3aWR0aCxcclxuICAgICAgICBpc09wZW4sXHJcbiAgICAgICAgaXNJbnZlcnNlLFxyXG4gICAgICAgIG1heEhlaWdodFN0cmluZyxcclxuICAgICAgICBtZW51UmVmLFxyXG4gICAgICAgIG9wZW5Ecm9wZG93bixcclxuICAgICAgICByZWdpc3RlckRyb3Bkb3duTWVudUl0ZW0sXHJcbiAgICAgICAgc2V0QWN0aXZlSXRlbUluZGV4LFxyXG4gICAgICAgIHNldElzT3BlbixcclxuICAgICAgICByZWZzLnNldFJlZmVyZW5jZSxcclxuICAgICAgICByZWZzLnNldEZsb2F0aW5nLFxyXG4gICAgICAgIHRvZ2dsZVJlZixcclxuICAgICAgICB3aWR0aFN0cmluZyxcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KERyb3Bkb3duQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dFZhbHVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChDb250YWluZXIsIE9iamVjdC5hc3NpZ24oe30sIG90aGVyLCB7IHJlZjogcmVmLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgb25LZXlEb3duOiBpc09wZW4gPyBoYW5kbGVLZXlEb3duIDogbnVsbCwgb25CbHVyOiBoYW5kbGVEcm9wZG93bkJsdXIgfSksIGNoaWxkcmVuKSkpO1xyXG59KTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RHJvcGRvd24uanMubWFwIl19 */",
15721
15902
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__$m
15722
15903
  });
15723
15904
  var DropdownContext = /*#__PURE__*/createContext({
@@ -15799,6 +15980,7 @@ var Dropdown = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
15799
15980
  if (event.key === 'Escape') {
15800
15981
  var _toggleRef$current2;
15801
15982
  event.nativeEvent.stopImmediatePropagation();
15983
+ event.stopPropagation();
15802
15984
  closeDropdown(event);
15803
15985
  (_toggleRef$current2 = toggleRef.current) == null || _toggleRef$current2.focus();
15804
15986
  }
@@ -16505,8 +16687,8 @@ function useAccordionItem(props) {
16505
16687
  expandedIndex = _React$useContext.expandedIndex,
16506
16688
  isMulti = _React$useContext.isMulti;
16507
16689
  var idPrefix = useGenerateId(index.toString());
16508
- var buttonId = idPrefix + "_btn";
16509
- var panelId = idPrefix + "_panel";
16690
+ var buttonId = "accordion_" + idPrefix + "_btn";
16691
+ var panelId = "accordion_" + idPrefix + "_panel";
16510
16692
  useEffect(function () {
16511
16693
  var newIsExpanded = isMulti ? Array.isArray(expandedIndex) && expandedIndex.includes(index) : expandedIndex === index;
16512
16694
  setIsExpanded(newIsExpanded);
@@ -17329,7 +17511,7 @@ var StyledPanel = /*#__PURE__*/_styled("div", {
17329
17511
  return props.theme.bodyFont;
17330
17512
  }, ";padding:", function (props) {
17331
17513
  return props.theme.spaceScale.spacing03 + " " + props.theme.spaceScale.spacing05 + " " + props.theme.spaceScale.spacing04;
17332
- }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFjY29yZGlvblBhbmVsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNK0IiLCJmaWxlIjoiQWNjb3JkaW9uUGFuZWwudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IEFjY29yZGlvbkl0ZW1Db250ZXh0IH0gZnJvbSAnLi91c2VBY2NvcmRpb25JdGVtJztcclxuaW1wb3J0IHsgdXNlSXNJbnZlcnNlIH0gZnJvbSAnLi4vLi4vaW52ZXJzZSc7XHJcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3RoZW1lL1RoZW1lQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICcuLi9UcmFuc2l0aW9uJztcclxuY29uc3QgU3R5bGVkUGFuZWwgPSBzdHlsZWQuZGl2IGBcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMFxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMH07XG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmJvZHlGb250fTtcbiAgcGFkZGluZzogJHtwcm9wcyA9PiBgJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM30gJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX0gJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNH1gfTtcbmA7XHJcbmV4cG9ydCBjb25zdCBBY2NvcmRpb25QYW5lbCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcclxuICAgIGNvbnN0IHsgY2hpbGRyZW4sIHRlc3RJZCwgaXNJbnZlcnNlOiBpc0ludmVyc2VQcm9wLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKGlzSW52ZXJzZVByb3ApO1xyXG4gICAgY29uc3QgeyBidXR0b25JZCwgaXNFeHBhbmRlZCwgcGFuZWxJZCB9ID0gUmVhY3QudXNlQ29udGV4dChBY2NvcmRpb25JdGVtQ29udGV4dCk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGlzRXhwYW5kZWQsIGNvbGxhcHNlOiB0cnVlLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRQYW5lbCwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyBcImFyaWEtaGlkZGVuXCI6ICFpc0V4cGFuZGVkLCBcImFyaWEtbGFiZWxsZWRieVwiOiBidXR0b25JZCwgXCJkYXRhLXRlc3RpZFwiOiB0ZXN0SWQsIGlkOiBwYW5lbElkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgcmVmOiByZWYsIHRoZW1lOiB0aGVtZSB9KSwgY2hpbGRyZW4pKSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1BY2NvcmRpb25QYW5lbC5qcy5tYXAiXX0= */"));
17514
+ }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFjY29yZGlvblBhbmVsLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNK0IiLCJmaWxlIjoiQWNjb3JkaW9uUGFuZWwudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IEFjY29yZGlvbkl0ZW1Db250ZXh0IH0gZnJvbSAnLi91c2VBY2NvcmRpb25JdGVtJztcclxuaW1wb3J0IHsgdXNlSXNJbnZlcnNlIH0gZnJvbSAnLi4vLi4vaW52ZXJzZSc7XHJcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3RoZW1lL1RoZW1lQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICcuLi9UcmFuc2l0aW9uJztcclxuY29uc3QgU3R5bGVkUGFuZWwgPSBzdHlsZWQuZGl2IGBcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMFxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMH07XG4gIGZvbnQtZmFtaWx5OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmJvZHlGb250fTtcbiAgcGFkZGluZzogJHtwcm9wcyA9PiBgJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM30gJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX0gJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNH1gfTtcbmA7XHJcbmV4cG9ydCBjb25zdCBBY2NvcmRpb25QYW5lbCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcclxuICAgIGNvbnN0IHsgY2hpbGRyZW4sIHRlc3RJZCwgaXNJbnZlcnNlOiBpc0ludmVyc2VQcm9wLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKGlzSW52ZXJzZVByb3ApO1xyXG4gICAgY29uc3QgeyBidXR0b25JZCwgaXNFeHBhbmRlZCwgcGFuZWxJZCB9ID0gUmVhY3QudXNlQ29udGV4dChBY2NvcmRpb25JdGVtQ29udGV4dCk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGlzRXhwYW5kZWQsIGNvbGxhcHNlOiB0cnVlLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRQYW5lbCwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyBcImFyaWEtaGlkZGVuXCI6ICFpc0V4cGFuZGVkLCBcImFyaWEtbGFiZWxsZWRieVwiOiBidXR0b25JZCwgXCJkYXRhLXRlc3RpZFwiOiB0ZXN0SWQsIGlkOiBwYW5lbElkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgcmVmOiByZWYsIHRoZW1lOiB0aGVtZSwgcm9sZTogXCJyZWdpb25cIiB9KSwgY2hpbGRyZW4pKSk7XHJcbn0pO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1BY2NvcmRpb25QYW5lbC5qcy5tYXAiXX0= */"));
17333
17515
  var AccordionPanel = /*#__PURE__*/forwardRef(function (props, ref) {
17334
17516
  var children = props.children,
17335
17517
  testId = props.testId,
@@ -17352,7 +17534,8 @@ var AccordionPanel = /*#__PURE__*/forwardRef(function (props, ref) {
17352
17534
  id: panelId,
17353
17535
  isInverse: isInverse,
17354
17536
  ref: ref,
17355
- theme: theme
17537
+ theme: theme,
17538
+ role: "region"
17356
17539
  }), children));
17357
17540
  });
17358
17541
 
@@ -18748,7 +18931,7 @@ function getIconMargin(props) {
18748
18931
  return "0 0 " + props.theme.spaceScale.spacing02;
18749
18932
  }
18750
18933
  }
18751
- var StyledIcon = /*#__PURE__*/_styled("span", {
18934
+ var StyledIcon$1 = /*#__PURE__*/_styled("span", {
18752
18935
  target: "e1ym35js0",
18753
18936
  label: "StyledIcon"
18754
18937
  })("display:flex;margin:", function (props) {
@@ -18861,7 +19044,7 @@ var Tab = /*#__PURE__*/React__default.forwardRef(function (props, forwardedRef)
18861
19044
  tabIndex: isActive ? 0 : -1,
18862
19045
  theme: theme,
18863
19046
  textTransform: textTransform
18864
- }), icon && (/*#__PURE__*/React__default.createElement(StyledIcon, {
19047
+ }), icon && (/*#__PURE__*/React__default.createElement(StyledIcon$1, {
18865
19048
  theme: theme,
18866
19049
  iconPosition: tabIconPosition,
18867
19050
  isIconOnly: isIconOnly
@@ -19154,7 +19337,7 @@ var NavTab = /*#__PURE__*/forwardRef(function (props, forwardRef) {
19154
19337
  component: component,
19155
19338
  "data-testid": testId,
19156
19339
  iconPosition: tabIconPosition,
19157
- icon: icon && (/*#__PURE__*/createElement(StyledIcon, {
19340
+ icon: icon && (/*#__PURE__*/createElement(StyledIcon$1, {
19158
19341
  theme: theme,
19159
19342
  iconPosition: tabIconPosition
19160
19343
  }, icon)),
@@ -19179,7 +19362,7 @@ var NavTab = /*#__PURE__*/forwardRef(function (props, forwardRef) {
19179
19362
  theme: theme,
19180
19363
  tabIndex: 0,
19181
19364
  role: "tab"
19182
- }), icon && (/*#__PURE__*/createElement(StyledIcon, {
19365
+ }), icon && (/*#__PURE__*/createElement(StyledIcon$1, {
19183
19366
  theme: theme,
19184
19367
  iconPosition: tabIconPosition,
19185
19368
  isIconOnly: isIconOnly
@@ -19778,16 +19961,20 @@ var PasswordInput = /*#__PURE__*/forwardRef(function (props, ref) {
19778
19961
  var theme = useContext(ThemeContext);
19779
19962
  var isInverse = useIsInverse(props.isInverse);
19780
19963
  var usesDefaultText = SHOW_PASSWORD_BUTTON_TEXT === i18n.password.shown.buttonText && HIDE_PASSWORD_BUTTON_TEXT === i18n.password.hidden.buttonText;
19781
- var buttonRef = useRef();
19964
+ var buttonRef = useRef(null);
19965
+ var _React$useState2 = useState(0),
19966
+ buttonWidth = _React$useState2[0],
19967
+ setButtonWidth = _React$useState2[1];
19968
+ useLayoutEffect(function () {
19969
+ if (buttonRef.current && !usesDefaultText) {
19970
+ setButtonWidth(buttonRef.current.offsetWidth);
19971
+ }
19972
+ }, [usesDefaultText, passwordShown, SHOW_PASSWORD_BUTTON_TEXT, HIDE_PASSWORD_BUTTON_TEXT]);
19782
19973
  var getButtonWidth = function getButtonWidth() {
19783
19974
  if (usesDefaultText) {
19784
- if (inputSize === InputSize.large) {
19785
- return '64px';
19786
- }
19787
- return '54px';
19788
- } else {
19789
- var _buttonRef$current;
19790
- return (buttonRef == null || (_buttonRef$current = buttonRef.current) == null ? void 0 : _buttonRef$current.offsetWidth) + "px";
19975
+ return inputSize === InputSize.large ? '64px' : '54px';
19976
+ } else if (buttonWidth !== 0) {
19977
+ return buttonWidth + "px";
19791
19978
  }
19792
19979
  };
19793
19980
  var getInputStyle = function getInputStyle() {
@@ -19802,9 +19989,9 @@ var PasswordInput = /*#__PURE__*/forwardRef(function (props, ref) {
19802
19989
  width: 'calc(100% - 64px)'
19803
19990
  };
19804
19991
  } else {
19805
- var _buttonRef$current2;
19992
+ // right margin (3px) so input doesn't overflow
19806
19993
  return {
19807
- width: "calc(100% - " + (buttonRef == null || (_buttonRef$current2 = buttonRef.current) == null ? void 0 : _buttonRef$current2.offsetWidth) + "px)"
19994
+ width: "calc(100% - " + (buttonWidth + 3) + "px)"
19808
19995
  };
19809
19996
  }
19810
19997
  };
@@ -24466,7 +24653,7 @@ var StyledListItem$1 = /*#__PURE__*/_styled("li", {
24466
24653
  }, ";list-style-type:", function (props) {
24467
24654
  return props.icon || props.description ? 'none' : 'inherit';
24468
24655
  }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQmlDIiwiZmlsZSI6Ikxpc3RJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IEludmVyc2VDb250ZXh0LCB1c2VJc0ludmVyc2UgfSBmcm9tICcuLi8uLi9pbnZlcnNlJztcclxuaW1wb3J0IHsgVGhlbWVDb250ZXh0IH0gZnJvbSAnLi4vLi4vdGhlbWUvVGhlbWVDb250ZXh0JztcclxuZnVuY3Rpb24gZ2V0TGlzdERpc3BsYXkocHJvcHMpIHtcclxuICAgIGlmIChwcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuICdncmlkJztcclxuICAgIH1cclxuICAgIHJldHVybiAnbGlzdC1pdGVtJztcclxufVxyXG5jb25zdCBJY29uU3R5bGVzID0gcHJvcHMgPT4gY3NzIGBcbiAgYmFja2dyb3VuZDogJHtwcm9wcy5pY29uQmFja2dyb3VuZH07XG4gIGNvbG9yOiAke3Byb3BzLmljb25Db2xvcn07XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBhZGRpbmc6IDEwcHg7XG5gO1xyXG5jb25zdCBTdHlsZWRMaXN0SXRlbSA9IHN0eWxlZC5saSBgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gZ2V0TGlzdERpc3BsYXkocHJvcHMpfTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW4tbGVmdDogJHtwcm9wcyA9PiAocHJvcHMuaWNvbiA/ICdpbmhlcml0JyA6ICcxLjFlbScpfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuZGVzY3JpcHRpb24gJiYgIXByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbFxyXG4gICAgOiAnaW5oZXJpdCd9O1xuICBsaXN0LXN0eWxlLXR5cGU6ICR7cHJvcHMgPT4gcHJvcHMuaWNvbiB8fCBwcm9wcy5kZXNjcmlwdGlvbiA/ICdub25lJyA6ICdpbmhlcml0J307XG5gO1xyXG5jb25zdCBTdHlsZWRJY29uID0gc3R5bGVkLnNwYW4gYFxuICAke0ljb25TdHlsZXN9O1xuYDtcclxuZXhwb3J0IGNvbnN0IExpc3RJdGVtID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xyXG4gICAgY29uc3QgeyBjaGlsZHJlbiwgZGVzY3JpcHRpb24sIGljb24sIGljb25BbGlnbiwgaWNvbkJhY2tncm91bmQsIGljb25Db2xvciwgdGVzdElkLCBpc0ludmVyc2U6IGlzSW52ZXJzZVByb3AsIC4uLnJlc3QgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICBjb25zdCBpc0ludmVyc2UgPSB1c2VJc0ludmVyc2UoaXNJbnZlcnNlUHJvcCk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW52ZXJzZUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IHsgaXNJbnZlcnNlIH0gfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZExpc3RJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IGFzOiBkZXNjcmlwdGlvbiA/ICdwJyA6ICdsaScsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiwgaWNvbjogaWNvbiwgaWNvbkFsaWduOiBpY29uQWxpZ24sIGlzSW52ZXJzZTogaXNJbnZlcnNlLCByZWY6IHJlZiwgdGhlbWU6IHRoZW1lLCB0ZXN0SWQ6IHRlc3RJZCB9KSxcclxuICAgICAgICAgICAgaWNvbiAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJY29uLCB7IGljb25CYWNrZ3JvdW5kOiB0aGVtZS5jb2xvcnNbaWNvbkJhY2tncm91bmRdIHx8IHRoZW1lLmNvbG9ycy5wcmltYXJ5LCBpY29uQ29sb3I6IHRoZW1lLmNvbG9yc1tpY29uQ29sb3JdIHx8IHRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwLCB0aGVtZTogdGhlbWUsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIgfSwgaWNvbikpLFxyXG4gICAgICAgICAgICBjaGlsZHJlbikpKTtcclxufSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUxpc3RJdGVtLmpzLm1hcCJdfQ== */"));
24469
- var StyledIcon$1 = /*#__PURE__*/_styled("span", {
24656
+ var StyledIcon$2 = /*#__PURE__*/_styled("span", {
24470
24657
  target: "e1515b9j0",
24471
24658
  label: "StyledIcon"
24472
24659
  })(IconStyles, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0QitCIiwiZmlsZSI6Ikxpc3RJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IEludmVyc2VDb250ZXh0LCB1c2VJc0ludmVyc2UgfSBmcm9tICcuLi8uLi9pbnZlcnNlJztcclxuaW1wb3J0IHsgVGhlbWVDb250ZXh0IH0gZnJvbSAnLi4vLi4vdGhlbWUvVGhlbWVDb250ZXh0JztcclxuZnVuY3Rpb24gZ2V0TGlzdERpc3BsYXkocHJvcHMpIHtcclxuICAgIGlmIChwcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuICdncmlkJztcclxuICAgIH1cclxuICAgIHJldHVybiAnbGlzdC1pdGVtJztcclxufVxyXG5jb25zdCBJY29uU3R5bGVzID0gcHJvcHMgPT4gY3NzIGBcbiAgYmFja2dyb3VuZDogJHtwcm9wcy5pY29uQmFja2dyb3VuZH07XG4gIGNvbG9yOiAke3Byb3BzLmljb25Db2xvcn07XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBhZGRpbmc6IDEwcHg7XG5gO1xyXG5jb25zdCBTdHlsZWRMaXN0SXRlbSA9IHN0eWxlZC5saSBgXG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gZ2V0TGlzdERpc3BsYXkocHJvcHMpfTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW4tbGVmdDogJHtwcm9wcyA9PiAocHJvcHMuaWNvbiA/ICdpbmhlcml0JyA6ICcxLjFlbScpfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuZGVzY3JpcHRpb24gJiYgIXByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbFxyXG4gICAgOiAnaW5oZXJpdCd9O1xuICBsaXN0LXN0eWxlLXR5cGU6ICR7cHJvcHMgPT4gcHJvcHMuaWNvbiB8fCBwcm9wcy5kZXNjcmlwdGlvbiA/ICdub25lJyA6ICdpbmhlcml0J307XG5gO1xyXG5jb25zdCBTdHlsZWRJY29uID0gc3R5bGVkLnNwYW4gYFxuICAke0ljb25TdHlsZXN9O1xuYDtcclxuZXhwb3J0IGNvbnN0IExpc3RJdGVtID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIHJlZikgPT4ge1xyXG4gICAgY29uc3QgeyBjaGlsZHJlbiwgZGVzY3JpcHRpb24sIGljb24sIGljb25BbGlnbiwgaWNvbkJhY2tncm91bmQsIGljb25Db2xvciwgdGVzdElkLCBpc0ludmVyc2U6IGlzSW52ZXJzZVByb3AsIC4uLnJlc3QgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICBjb25zdCBpc0ludmVyc2UgPSB1c2VJc0ludmVyc2UoaXNJbnZlcnNlUHJvcCk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW52ZXJzZUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IHsgaXNJbnZlcnNlIH0gfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZExpc3RJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IGFzOiBkZXNjcmlwdGlvbiA/ICdwJyA6ICdsaScsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiwgaWNvbjogaWNvbiwgaWNvbkFsaWduOiBpY29uQWxpZ24sIGlzSW52ZXJzZTogaXNJbnZlcnNlLCByZWY6IHJlZiwgdGhlbWU6IHRoZW1lLCB0ZXN0SWQ6IHRlc3RJZCB9KSxcclxuICAgICAgICAgICAgaWNvbiAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJY29uLCB7IGljb25CYWNrZ3JvdW5kOiB0aGVtZS5jb2xvcnNbaWNvbkJhY2tncm91bmRdIHx8IHRoZW1lLmNvbG9ycy5wcmltYXJ5LCBpY29uQ29sb3I6IHRoZW1lLmNvbG9yc1tpY29uQ29sb3JdIHx8IHRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwLCB0aGVtZTogdGhlbWUsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIgfSwgaWNvbikpLFxyXG4gICAgICAgICAgICBjaGlsZHJlbikpKTtcclxufSk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUxpc3RJdGVtLmpzLm1hcCJdfQ== */"));
@@ -24495,7 +24682,7 @@ var ListItem = /*#__PURE__*/forwardRef(function (props, ref) {
24495
24682
  ref: ref,
24496
24683
  theme: theme,
24497
24684
  testId: testId
24498
- }), icon && (/*#__PURE__*/createElement(StyledIcon$1, {
24685
+ }), icon && (/*#__PURE__*/createElement(StyledIcon$2, {
24499
24686
  iconBackground: theme.colors[iconBackground] || theme.colors.primary,
24500
24687
  iconColor: theme.colors[iconColor] || theme.colors.neutral100,
24501
24688
  theme: theme,
@@ -26369,14 +26556,13 @@ function useTreeItem(props, forwardedRef) {
26369
26556
  }
26370
26557
  var focusIndex = getFocusIndex(treeItemRefArray == null ? void 0 : treeItemRefArray.current);
26371
26558
  useEffect(function () {
26372
- treeItemRefArray == null || treeItemRefArray.current.map(function (itemRef) {
26373
- if (!itemRef.current) {
26374
- treeItemRefArray.current = treeItemRefArray.current.filter(function (item) {
26375
- return itemRef.current !== item.current;
26376
- });
26377
- }
26559
+ if (!(treeItemRefArray != null && treeItemRefArray.current)) {
26560
+ return;
26561
+ }
26562
+ treeItemRefArray.current = treeItemRefArray.current.filter(function (itemRef) {
26563
+ return itemRef.current !== null;
26378
26564
  });
26379
- }, [treeItemRefArray]);
26565
+ }, [treeItemRefArray, expandedSet]);
26380
26566
  var focusFirst = function focusFirst() {
26381
26567
  var filteredRefArray = filterNullEntries(treeItemRefArray);
26382
26568
  var curr = filteredRefArray['current'];
@@ -26461,6 +26647,7 @@ function useTreeItem(props, forwardedRef) {
26461
26647
  var filteredRefArray = filterNullEntries(treeItemRefArray);
26462
26648
  var curr = filteredRefArray['current'];
26463
26649
  var arrLength = curr.length;
26650
+ var focusIndex = getFocusIndex(curr);
26464
26651
  if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft', 'Home', 'End', 'Enter', ' '].includes(event.key)) {
26465
26652
  event.preventDefault();
26466
26653
  event.stopPropagation();
@@ -26656,7 +26843,7 @@ var StyledTreeItem = /*#__PURE__*/_styled("li", {
26656
26843
  }, ";padding-right:", function (props) {
26657
26844
  return props.theme.spaceScale.spacing02;
26658
26845
  }, ";", function (props) {
26659
- return props.selected && /*#__PURE__*/css("&:before{position:absolute;background-color:", props.isInverse ? props.theme.colors.tertiary500 : props.theme.colors.primary500, ";block-size:100%;content:'';inline-size:", props.theme.spaceScale.spacing02, ";inset-block-start:0;inset-inline-start:0;};label:StyledTreeItem;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvRVEiLCJmaWxlIjoiVHJlZUl0ZW0udHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICdwb2xpc2hlZCc7XHJcbmltcG9ydCB7IEFydGljbGVJY29uLCBDaGV2cm9uUmlnaHRJY29uLCBFeHBhbmRNb3JlSWNvbiwgRm9sZGVySWNvbiwgfSBmcm9tICdyZWFjdC1tYWdtYS1pY29ucyc7XHJcbmltcG9ydCB7IFRyZWVJdGVtQ29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0IH0gZnJvbSAnLi9UcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0NvbmZpZ0NvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3Q29uZmlnQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdFeHBhbnNpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld1NlbGVjdGlvbkNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld1NlbGVjdGFibGUgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgY2hlY2tlZFN0YXR1c1RvQm9vbGVhbiwgdXNlVHJlZUl0ZW0sIH0gZnJvbSAnLi91c2VUcmVlSXRlbSc7XHJcbmltcG9ydCB7IGNhbGN1bGF0ZU9mZnNldCwgZ2V0VHJlZUl0ZW1MYWJlbENvbG9yLCBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IsIFRyZWVOb2RlVHlwZSwgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSTE4bkNvbnRleHQgfSBmcm9tICcuLi8uLic7XHJcbmltcG9ydCB1c2VEZXZpY2VEZXRlY3QgZnJvbSAnLi4vLi4vaG9va3MvdXNlRGV2aWNlRGV0ZWN0JztcclxuaW1wb3J0IHsgdXNlRm9jdXNMb2NrIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRm9jdXNMb2NrJztcclxuaW1wb3J0IHsgdXNlSXNJbnZlcnNlIH0gZnJvbSAnLi4vLi4vaW52ZXJzZSc7XHJcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3RoZW1lL1RoZW1lQ29udGV4dCc7XHJcbmltcG9ydCB7IG1lcmdlUmVmcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgQW5ub3VuY2UgfSBmcm9tICcuLi9Bbm5vdW5jZSc7XHJcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnLi4vQ2hlY2tib3gnO1xyXG5pbXBvcnQgeyBJbmRldGVybWluYXRlQ2hlY2tib3gsIEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cywgfSBmcm9tICcuLi9JbmRldGVybWluYXRlQ2hlY2tib3gnO1xyXG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAnLi4vVHJhbnNpdGlvbic7XHJcbmltcG9ydCB7IFZpc3VhbGx5SGlkZGVuIH0gZnJvbSAnLi4vVmlzdWFsbHlIaWRkZW4nO1xyXG5jb25zdCBTdHlsZWRUcmVlSXRlbSA9IHN0eWxlZC5saSBgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMFxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMH07XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgY3Vyc29yOiAke3Byb3BzID0+IGdldFRyZWVJdGVtV3JhcHBlckN1cnNvcihwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy5zZWxlY3RhYmxlVHlwZSwgcHJvcHMubm9kZVR5cGUpfTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIGZhbHNlLCBmYWxzZSwgcHJvcHMuaXNWaXJ0dWFsaXplZCl9O1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG5cbiAgICAmID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWRcbiAgICAgICAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXNJbnZlcnNlXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c307XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA+IGRpdjpmaXJzdC1vZi10eXBlIHtcbiAgICBiYWNrZ3JvdW5kOiAke3Byb3BzID0+IHByb3BzLnNlbGVjdGVkICYmIHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKVxyXG4gICAgOiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgICAgIHRyYW5zcGFyZW50aXplKDAuOTIsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKX07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6ICR7cHJvcHMgPT4gY2FsY3VsYXRlT2Zmc2V0KHByb3BzLm5vZGVUeXBlLCBwcm9wcy5kZXB0aCwgdHJ1ZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIHRydWUsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcbiAgICBwYWRkaW5nLWJsb2NrLWVuZDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgcGFkZGluZy1ibG9jay1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgcGFkZGluZy1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG5cbiAgICAke3Byb3BzID0+IHByb3BzLnNlbGVjdGVkICYmXHJcbiAgICBjc3MgYFxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMuaXNJbnZlcnNlXHJcbiAgICAgICAgPyBwcm9wcy50aGVtZS5jb2xvcnMudGVydGlhcnk1MDBcclxuICAgICAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NTAwfTtcbiAgICAgICAgICBibG9jay1zaXplOiAxMDAlO1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIGlubGluZS1zaXplOiAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAyfTtcbiAgICAgICAgICBpbnNldC1ibG9jay1zdGFydDogMDtcbiAgICAgICAgICBpbnNldC1pbmxpbmUtc3RhcnQ6IDA7XG4gICAgICAgIH1cbiAgICAgIGB9XG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAke3Byb3BzID0+IGdldEhvdmVyQmFja2dyb3VuZCh7XHJcbiAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxyXG4gICAgaG92ZXJDb2xvcjogcHJvcHMuaG92ZXJDb2xvcixcclxuICAgIGlzSW52ZXJzZTogcHJvcHMuaXNJbnZlcnNlLFxyXG4gICAgdGhlbWU6IHByb3BzLnRoZW1lLFxyXG59KX07XG4gICAgfVxuICB9XG5gO1xyXG5mdW5jdGlvbiBnZXRIb3ZlckJhY2tncm91bmQoeyBpc0Rpc2FibGVkLCBob3ZlckNvbG9yLCBpc0ludmVyc2UsIHRoZW1lIH0pIHtcclxuICAgIGlmIChpc0Rpc2FibGVkKVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAoaG92ZXJDb2xvcilcclxuICAgICAgICByZXR1cm4gaG92ZXJDb2xvcjtcclxuICAgIGNvbnN0IHRyYW5zcGFyZW5jeSA9IGlzSW52ZXJzZSA/IDAuOCA6IDAuOTU7XHJcbiAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUodHJhbnNwYXJlbmN5LCB0aGVtZS5jb2xvcnMubmV1dHJhbDkwMCk7XHJcbn1cclxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbiBgXG4gIGNvbG9yOiAke3Byb3BzID0+IGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIG1hcmdpbi1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM307XG4gIG1hcmdpbi1sZWZ0OiAwO1xuXG4gIHN2ZyB7XG4gICAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaWNvblNpemVzLm1lZGl1bX1weDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG5gO1xyXG5jb25zdCBTdHlsZWRMYWJlbFdyYXBwZXIgPSBzdHlsZWQuc3BhbiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICB3aWR0aDogMTAwJTtcbmA7XHJcbmNvbnN0IFN0eWxlZEV4cGFuZFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5jb2xvciB8fFxyXG4gICAgZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgd2lkdGg6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG4gIGhlaWdodDogJHsoeyBzaXplLCB0aGVtZSB9KSA9PiBzaXplICE9PSB1bmRlZmluZWQgPyBgJHtzaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fTtcbmA7XHJcbmNvbnN0IEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwOH07XG4gIGJvdHRvbTogMDtcbiAgaW5zZXQtaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IHByb3BzLmd1aWRlTGluZUxlZnR9O1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFZpcnR1YWxpemVkR3VpZGVMaW5lID0gc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAwO1xuICBib3JkZXItaW5saW5lLXN0YXJ0OiAxcHggc29saWRcbiAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMH07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAxO1xuYDtcclxuY29uc3QgU3R5bGVkQ2hlY2tib3hXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIG1hcmdpbi1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM307XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2ZsZXgnIDogJ2lubGluZS1mbGV4Jyl9O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogJHtwcm9wcyA9PiBgY2FsYygxMDAlIC0gJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM30pYH07XG5gO1xyXG5jb25zdCBTdHlsZWRJdGVtV3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogJHtwcm9wcyA9PiAocHJvcHMuaGFzQWRkaXRpb25hbENvbnRlbnQgPyAnY29sdW1uJyA6ICdyb3cnKX07XG4gIGFsaWduLWl0ZW1zOiAke3Byb3BzID0+IChwcm9wcy5oYXNDdXN0b21JY29uU2l6ZSA/ICdjZW50ZXInIDogJ2ZsZXgtc3RhcnQnKX07XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZSwgcHJvcHMubm9kZVR5cGUpfTtcbmA7XHJcbmNvbnN0IEFkZGl0aW9uYWxDb250ZW50V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA1fTtcbmA7XHJcbmV4cG9ydCBjb25zdCBUcmVlSXRlbUNvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcclxuICAgIGNvbnN0IHsgYWRkaXRpb25hbENvbnRlbnQsIGNoaWxkcmVuLCBob3ZlckNvbG9yLCBpY29uLCBpbmRleDogaW5kZXhQcm9wLCBsYWJlbCwgbGFiZWxTdHlsZSwgc3R5bGUsIHRlc3RJZCwgdG9wTGV2ZWw6IHRvcExldmVsUHJvcCwgdHJlZUl0ZW1TdHlsZXMsIC4uLnJlc3QgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICBjb25zdCBpc0ludmVyc2UgPSB1c2VJc0ludmVyc2UoKTtcclxuICAgIC8vIFJlYWQgaGllcmFyY2h5IGluZm9ybWF0aW9uIGZyb20gY29udGV4dCAocmVkdWNlcyBjbG9uZUVsZW1lbnQgb3ZlcmhlYWQpXHJcbiAgICBjb25zdCBoaWVyYXJjaHlDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQpO1xyXG4gICAgLy8gVXNlIGNvbnRleHQgdmFsdWVzIGlmIHByb3BzIGFyZSBub3QgcHJvdmlkZWQgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxyXG4gICAgY29uc3QgaW5kZXggPSBpbmRleFByb3AgIT09IHVuZGVmaW5lZCA/IGluZGV4UHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaW5kZXg7XHJcbiAgICBjb25zdCB0b3BMZXZlbCA9IHRvcExldmVsUHJvcCAhPT0gdW5kZWZpbmVkID8gdG9wTGV2ZWxQcm9wIDogaGllcmFyY2h5Q29udGV4dC5pc1RvcExldmVsO1xyXG4gICAgLy8gQ29uc3VtZSBzcGxpdCBjb250ZXh0cyBmb3IgcmVkdWNlZCByZS1yZW5kZXIgc2NvcGVcclxuICAgIGNvbnN0IHsgaXRlbVRvRm9jdXMgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgaGFuZGxlRXhwYW5kZWRDaGFuZ2UgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdFeHBhbnNpb25Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgZXhwYW5kSWNvblN0eWxlcywgaGFzR3VpZGVMaW5lcywgaGFzSWNvbnMsIGlzVG9wTGV2ZWxTZWxlY3RhYmxlLCBzZWxlY3RhYmxlLCBzZWxlY3RQYXJlbnRzID0gdHJ1ZSwgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdDb25maWdDb250ZXh0KTtcclxuICAgIC8vIFBhc3MgdGhlIHJlc29sdmVkIHZhbHVlcyB0byB1c2VUcmVlSXRlbVxyXG4gICAgY29uc3QgcHJvcHNXaXRoSGllcmFyY2h5ID0ge1xyXG4gICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgIGluZGV4LFxyXG4gICAgICAgIHRvcExldmVsLFxyXG4gICAgICAgIGl0ZW1EZXB0aDogaGllcmFyY2h5Q29udGV4dC5kZXB0aCxcclxuICAgICAgICBwYXJlbnREZXB0aDogaGllcmFyY2h5Q29udGV4dC5wYXJlbnREZXB0aCxcclxuICAgIH07XHJcbiAgICBjb25zdCB7IGNvbnRleHRWYWx1ZSwgaGFuZGxlQ2xpY2ssIGhhbmRsZUtleURvd24gfSA9IHVzZVRyZWVJdGVtKHByb3BzV2l0aEhpZXJhcmNoeSwgZm9yd2FyZGVkUmVmKTtcclxuICAgIGNvbnN0IHsgaXNEaXNhYmxlZCB9ID0gY29udGV4dFZhbHVlO1xyXG4gICAgY29uc3QgeyBpc01hY09TIH0gPSB1c2VEZXZpY2VEZXRlY3QoKTtcclxuICAgIGNvbnN0IGkxOG4gPSBSZWFjdC51c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgY2hlY2tib3hDaGFuZ2VIYW5kbGVyLCBjaGVja2VkU3RhdHVzLCBleHBhbmRlZCwgaGFzT3duVHJlZUl0ZW1zLCBpdGVtRGVwdGgsIGl0ZW1JZCwgcmVmLCBzZWxlY3RlZEl0ZW1zLCB9ID0gY29udGV4dFZhbHVlO1xyXG4gICAgY29uc3Qgbm9kZVR5cGUgPSBoYXNPd25UcmVlSXRlbXMgPyBUcmVlTm9kZVR5cGUuYnJhbmNoIDogVHJlZU5vZGVUeXBlLmxlYWY7XHJcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlXHJcbiAgICAgICAgPyBzZWxlY3RlZEl0ZW1zPy5bMF0/Lml0ZW1JZCA9PT0gaXRlbUlkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgYXJpYUNoZWNrZWRWYWx1ZSA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aVxyXG4gICAgICAgID8gY2hlY2tlZFN0YXR1cyA9PT0gSW5kZXRlcm1pbmF0ZUNoZWNrYm94U3RhdHVzLmluZGV0ZXJtaW5hdGVcclxuICAgICAgICAgICAgPyAnbWl4ZWQnXHJcbiAgICAgICAgICAgIDogY2hlY2tlZFN0YXR1cyA9PT0gSW5kZXRlcm1pbmF0ZUNoZWNrYm94U3RhdHVzLmNoZWNrZWRcclxuICAgICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBbaXNJbnNpZGVUcmVlSXRlbSwgc2V0SXNJbnNpZGVUcmVlSXRlbV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCB0cmVlSXRlbVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGZvY3VzVHJhcEVsZW1lbnQgPSB1c2VGb2N1c0xvY2soaXNJbnNpZGVUcmVlSXRlbSk7XHJcbiAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzID0gJ2J1dHRvbiwgW3JvbGU9XCJidXR0b25cIl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBhW2hyZWZdLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknO1xyXG4gICAgY29uc3QgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyA9IFJlYWN0LnVzZUNhbGxiYWNrKChjb250YWluZXIsIHNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5maWx0ZXIoZWwgPT4gIWVsLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fFxyXG4gICAgICAgICAgICAoZWwudGFiSW5kZXggIT09IHVuZGVmaW5lZCAmJiBlbC50YWJJbmRleCA+PSAwKSk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgbGFiZWwgYW5kIGFkZGl0aW9uYWwgY29udGVudCBvZiBhIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIG5hdmlnYXRlIHRocm91Z2ggaW50ZXJhY3RpdmUgZWxlbWVudHMgdXNpbmcgdGhlIGBUYWJgIGtleSwgYWN0aXZhdGUgdGhlbSB3aXRoIGBFbnRlcmAgb3IgYFNwYWNlYCxcclxuICAgICAqIGFuZCBleGl0IG91dHNpZGUgYW5kIGZvY3VzIHRoZSB3aG9sZSB0cmVlIGl0ZW0gd2l0aCBgRXNjYXBlYC5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3QgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24gPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0LCBzaGlmdEtleSB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSB0YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaXNFbnRlciA9IGtleSA9PT0gJ0VudGVyJztcclxuICAgICAgICBjb25zdCBpc1NwYWNlID0ga2V5ID09PSAnICc7XHJcbiAgICAgICAgY29uc3QgaXNFc2NhcGUgPSBrZXkgPT09ICdFc2NhcGUnO1xyXG4gICAgICAgIGNvbnN0IGlzVGFiID0ga2V5ID09PSAnVGFiJztcclxuICAgICAgICBjb25zdCBpc0FjdGl2YXRpb25LZXkgPSBpc0VudGVyIHx8IGlzU3BhY2U7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdChpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGBUYWJgLCB3ZSBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzVGFiICYmIGlzSW5zaWRlVHJlZUl0ZW0pIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICAvLyBGaWx0ZXIgbGlzdCBvZiBpbnRlcmFjdGl2ZSBlbGVtZW50cyB3aGljaCBhcmUgb25seSBpbmNsdWRlZCBmb3IgY3VycmVudCB0cmVlIGl0ZW1cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0LmZpbHRlcihlbCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZXN0VHJlZUl0ZW0gPSBlbC5jbG9zZXN0KCdbcm9sZT1cInRyZWVpdGVtXCJdJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdFRyZWVJdGVtID09PSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cy5pbmRleE9mKGN1cnJlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc2hpZnRLZXkgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyBkaXJlY3Rpb24gKyB0b3RhbCkgJSB0b3RhbDtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSBjdXJyZW50VHJlZUl0ZW1JbnRlcmFjdGl2ZUVsZW1lbnRzW25leHRJbmRleF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBlbGVtZW50VG9Gb2N1cy5mb2N1cygpLCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFByZXNzaW5nIGBFbnRlcmAgb3IgYFNwYWNlYCBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IHdpbGwgdHJpZ2dlciBpdHMgY2xpY2sgZXZlbnRcclxuICAgICAgICBpZiAoaXNBY3RpdmF0aW9uS2V5ICYmIGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTW92ZXMgZm9jdXMgb3V0c2lkZSB0aGUgdHJlZSBpdGVtIGFuZCBmb2N1c2VzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmIHdoZW4gYEVzY2FwZWAgaXMgcHJlc3NlZFxyXG4gICAgICAgIGlmIChpc0VzY2FwZSkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbShmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtTm9kZSA9IHRyZWVJdGVtUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHRyZWVJdGVtTm9kZS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaXNJbnNpZGVUcmVlSXRlbV0pO1xyXG4gICAgY29uc3QgZGVmYXVsdEljb24gPSBSZWFjdC51c2VNZW1vKCgpID0+IG5vZGVUeXBlID09PSBUcmVlTm9kZVR5cGUuYnJhbmNoID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRm9sZGVySWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXJ0aWNsZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSwgW25vZGVUeXBlXSk7XHJcbiAgICAvLyBNZW1vaXNlIHRoZSBsYWJlbCBKU1ggc28gdGhlIGBjaGVja2JveFByb3BzYCBtZW1vIGJlbG93IGFjdHVhbGx5IGhhc1xyXG4gICAgLy8gYSBzdGFibGUgYGxhYmVsVGV4dGAgcmVmZXJlbmNlIGJldHdlZW4gcmVuZGVycy4gUHJldmlvdXNseSB0aGlzXHJcbiAgICAvLyBlbGVtZW50IHdhcyByZS1jcmVhdGVkIG9uIGV2ZXJ5IHJlbmRlciwgd2hpY2ggZm9yY2VkXHJcbiAgICAvLyBgY2hlY2tib3hQcm9wc2AgdG8gYWxzbyBiZSByZS1jcmVhdGVkIGFuZCBhbnkgZnV0dXJlIFJlYWN0Lm1lbW8gb25cclxuICAgIC8vIENoZWNrYm94L0luZGV0ZXJtaW5hdGVDaGVja2JveCB3b3VsZCBhbHdheXMgYmFpbCBvdXQuXHJcbiAgICBjb25zdCBsYWJlbFRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZExhYmVsV3JhcHBlciwgeyB0aGVtZTogdGhlbWUsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZTogbGFiZWxTdHlsZSwgaWQ6IGAke2l0ZW1JZH0tbGFiZWxgLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWxhYmVsYCB9LFxyXG4gICAgICAgIGhhc0ljb25zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KEljb25XcmFwcGVyLCB7IGlzSW52ZXJzZTogaXNJbnZlcnNlLCB0aGVtZTogdGhlbWUsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0taWNvbmAgfSwgaWNvbiB8fCBkZWZhdWx0SWNvbikpLFxyXG4gICAgICAgIGxhYmVsKSksIFtcclxuICAgICAgICB0aGVtZSxcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIGlzSW52ZXJzZSxcclxuICAgICAgICBsYWJlbFN0eWxlLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICB0ZXN0SWQsXHJcbiAgICAgICAgaGFzSWNvbnMsXHJcbiAgICAgICAgaWNvbixcclxuICAgICAgICBkZWZhdWx0SWNvbixcclxuICAgICAgICBsYWJlbCxcclxuICAgIF0pO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gYWRkaXRpb25hbENvbnRlbnQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpZDogYCR7aXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWFkZGl0aW9uYWxjb250ZW50d3JhcHBlcmAgfSwgYWRkaXRpb25hbENvbnRlbnQpKSA6IG51bGwsIFthZGRpdGlvbmFsQ29udGVudCwgdGhlbWUsIGl0ZW1JZCwgdGVzdElkXSk7XHJcbiAgICAvLyBTdGFibGUgcGVyLWNoaWxkIGhpZXJhcmNoeSB2YWx1ZXMuIFRoZSByZWZlcmVuY2UgbXVzdCBub3QgY2hhbmdlIG9uXHJcbiAgICAvLyByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBUcmVlVmlld1NlbGVjdGlvbkNvbnRleHQsIG90aGVyd2lzZSBldmVyeVxyXG4gICAgLy8gbmVzdGVkIFRyZWVJdGVtIHJlLXJlbmRlcnMgdGhyb3VnaCB0aGUgY29udGV4dCBhbmQgUmVhY3QubWVtbyBpc1xyXG4gICAgLy8gZGVmZWF0ZWQuXHJcbiAgICBjb25zdCBjaGlsZEhpZXJhcmNoaWVzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY291bnQgPSBSZWFjdC5DaGlsZHJlbi5jb3VudChjaGlsZHJlbik7XHJcbiAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KGNvdW50KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgYXJyW2ldID0ge1xyXG4gICAgICAgICAgICAgICAgZGVwdGg6IGl0ZW1EZXB0aCArIDEsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnREZXB0aDogaXRlbURlcHRoLFxyXG4gICAgICAgICAgICAgICAgaXNUb3BMZXZlbDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFycjtcclxuICAgIH0sIFtjaGlsZHJlbiwgaXRlbURlcHRoXSk7XHJcbiAgICAvLyBNZW1vaXplIGlubGluZSBzdHlsZSBvYmplY3RzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xyXG4gICAgY29uc3QgY2hlY2tib3hJbnB1dFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoeyBtYXJnaW5SaWdodDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDMgfSksIFt0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM10pO1xyXG4gICAgY29uc3QgY2hlY2tib3hMYWJlbFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xyXG4gICAgICAgIHBhZGRpbmc6IDAsXHJcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIH0pLCBbXSk7XHJcbiAgICAvLyBQcm9wcyBzaGFyZWQgYnkgQ2hlY2tib3ggYW5kIEluZGV0ZXJtaW5hdGVDaGVja2JveFxyXG4gICAgY29uc3QgY2hlY2tib3hQcm9wcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcclxuICAgICAgICBoaWRlRm9jdXM6IHRydWUsXHJcbiAgICAgICAgaWQ6IGAke2l0ZW1JZH0tY2hlY2tib3hgLFxyXG4gICAgICAgIGlucHV0U3R5bGU6IGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBsYWJlbFN0eWxlOiBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0OiBsYWJlbFRleHQsXHJcbiAgICAgICAgb25DaGFuZ2U6IGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgICAgICB0YWJJbmRleDogLTEsXHJcbiAgICAgICAgdGVzdElkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgIH0pLCBbXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgY2hlY2tib3hJbnB1dFN0eWxlLFxyXG4gICAgICAgIGNoZWNrYm94TGFiZWxTdHlsZSxcclxuICAgICAgICBsYWJlbFRleHQsXHJcbiAgICAgICAgY2hlY2tib3hDaGFuZ2VIYW5kbGVyLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBvbkV4cGFuZGVkQ2xpY2tlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgaGFuZGxlRXhwYW5kZWRDaGFuZ2UoZXZlbnQsIGl0ZW1JZCk7XHJcbiAgICB9LCBbaGFuZGxlRXhwYW5kZWRDaGFuZ2UsIGl0ZW1JZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRXhwYW5kQ2xpY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaXNEaXNhYmxlZCwgb25FeHBhbmRlZENsaWNrZWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZU9uQ2xpY2sgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5jbG9zZXN0KCdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBhW2hyZWZdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3JvbGU9XCJtZW51aXRlbVwiXScpO1xyXG4gICAgICAgIC8vIFByZXZlbnRpbmcgc2VsZWN0aW5nIHRoZSBpdGVtIHdoZW4gY2xpY2tpbmcgb24gaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hlbiBgc2VsZWN0YWJsZWAgaXMgYHNpbmdsZWBcclxuICAgICAgICBpZiAoaW50ZXJhY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHNlbGVjdFBhcmVudHMgaXMgZmFsc2UgYW5kIHRoaXMgaXMgYSBwYXJlbnQgaXRlbSwgaGFuZGxlIGV4cGFuZC9jb2xsYXBzZSBpbnN0ZWFkIG9mIHNlbGVjdGlvblxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlICYmXHJcbiAgICAgICAgICAgICFzZWxlY3RQYXJlbnRzICYmXHJcbiAgICAgICAgICAgIGhhc093blRyZWVJdGVtcykge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
26846
+ return props.selected && /*#__PURE__*/css("&:before{position:absolute;background-color:", props.isInverse ? props.theme.colors.tertiary500 : props.theme.colors.primary500, ";block-size:100%;content:'';inline-size:", props.theme.spaceScale.spacing02, ";inset-block-start:0;inset-inline-start:0;};label:StyledTreeItem;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvRVEiLCJmaWxlIjoiVHJlZUl0ZW0udHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBjc3MgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IHsgdHJhbnNwYXJlbnRpemUgfSBmcm9tICdwb2xpc2hlZCc7XHJcbmltcG9ydCB7IEFydGljbGVJY29uLCBDaGV2cm9uUmlnaHRJY29uLCBFeHBhbmRNb3JlSWNvbiwgRm9sZGVySWNvbiwgfSBmcm9tICdyZWFjdC1tYWdtYS1pY29ucyc7XHJcbmltcG9ydCB7IFRyZWVJdGVtQ29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0IH0gZnJvbSAnLi9UcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0NvbmZpZ0NvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3Q29uZmlnQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdFeHBhbnNpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld1NlbGVjdGlvbkNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld1NlbGVjdGFibGUgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgY2hlY2tlZFN0YXR1c1RvQm9vbGVhbiwgdXNlVHJlZUl0ZW0sIH0gZnJvbSAnLi91c2VUcmVlSXRlbSc7XHJcbmltcG9ydCB7IGNhbGN1bGF0ZU9mZnNldCwgZ2V0VHJlZUl0ZW1MYWJlbENvbG9yLCBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IsIFRyZWVOb2RlVHlwZSwgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSTE4bkNvbnRleHQgfSBmcm9tICcuLi8uLic7XHJcbmltcG9ydCB1c2VEZXZpY2VEZXRlY3QgZnJvbSAnLi4vLi4vaG9va3MvdXNlRGV2aWNlRGV0ZWN0JztcclxuaW1wb3J0IHsgdXNlRm9jdXNMb2NrIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRm9jdXNMb2NrJztcclxuaW1wb3J0IHsgdXNlSXNJbnZlcnNlIH0gZnJvbSAnLi4vLi4vaW52ZXJzZSc7XHJcbmltcG9ydCB7IFRoZW1lQ29udGV4dCB9IGZyb20gJy4uLy4uL3RoZW1lL1RoZW1lQ29udGV4dCc7XHJcbmltcG9ydCB7IG1lcmdlUmVmcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgQW5ub3VuY2UgfSBmcm9tICcuLi9Bbm5vdW5jZSc7XHJcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnLi4vQ2hlY2tib3gnO1xyXG5pbXBvcnQgeyBJbmRldGVybWluYXRlQ2hlY2tib3gsIEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cywgfSBmcm9tICcuLi9JbmRldGVybWluYXRlQ2hlY2tib3gnO1xyXG5pbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAnLi4vVHJhbnNpdGlvbic7XHJcbmltcG9ydCB7IFZpc3VhbGx5SGlkZGVuIH0gZnJvbSAnLi4vVmlzdWFsbHlIaWRkZW4nO1xyXG5jb25zdCBTdHlsZWRUcmVlSXRlbSA9IHN0eWxlZC5saSBgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMFxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDcwMH07XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgY3Vyc29yOiAke3Byb3BzID0+IGdldFRyZWVJdGVtV3JhcHBlckN1cnNvcihwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy5zZWxlY3RhYmxlVHlwZSwgcHJvcHMubm9kZVR5cGUpfTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuXG4gIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIGZhbHNlLCBmYWxzZSwgcHJvcHMuaXNWaXJ0dWFsaXplZCl9O1xuXG4gICY6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG5cbiAgICAmID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWRcbiAgICAgICAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXNJbnZlcnNlXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5mb2N1c307XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICA+IGRpdjpmaXJzdC1vZi10eXBlIHtcbiAgICBiYWNrZ3JvdW5kOiAke3Byb3BzID0+IHByb3BzLnNlbGVjdGVkICYmIHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKVxyXG4gICAgOiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgICAgIHRyYW5zcGFyZW50aXplKDAuOTIsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsOTAwKX07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6ICR7cHJvcHMgPT4gY2FsY3VsYXRlT2Zmc2V0KHByb3BzLm5vZGVUeXBlLCBwcm9wcy5kZXB0aCwgdHJ1ZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcbiAgICBtYXJnaW4taW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIHRydWUsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcbiAgICBwYWRkaW5nLWJsb2NrLWVuZDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgcGFkZGluZy1ibG9jay1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgcGFkZGluZy1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG5cbiAgICAke3Byb3BzID0+IHByb3BzLnNlbGVjdGVkICYmXHJcbiAgICBjc3MgYFxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMuaXNJbnZlcnNlXHJcbiAgICAgICAgPyBwcm9wcy50aGVtZS5jb2xvcnMudGVydGlhcnk1MDBcclxuICAgICAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5wcmltYXJ5NTAwfTtcbiAgICAgICAgICBibG9jay1zaXplOiAxMDAlO1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIGlubGluZS1zaXplOiAke3Byb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAyfTtcbiAgICAgICAgICBpbnNldC1ibG9jay1zdGFydDogMDtcbiAgICAgICAgICBpbnNldC1pbmxpbmUtc3RhcnQ6IDA7XG4gICAgICAgIH1cbiAgICAgIGB9XG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAke3Byb3BzID0+IGdldEhvdmVyQmFja2dyb3VuZCh7XHJcbiAgICBpc0Rpc2FibGVkOiBwcm9wcy5pc0Rpc2FibGVkLFxyXG4gICAgaG92ZXJDb2xvcjogcHJvcHMuaG92ZXJDb2xvcixcclxuICAgIGlzSW52ZXJzZTogcHJvcHMuaXNJbnZlcnNlLFxyXG4gICAgdGhlbWU6IHByb3BzLnRoZW1lLFxyXG59KX07XG4gICAgfVxuICB9XG5gO1xyXG5mdW5jdGlvbiBnZXRIb3ZlckJhY2tncm91bmQoeyBpc0Rpc2FibGVkLCBob3ZlckNvbG9yLCBpc0ludmVyc2UsIHRoZW1lIH0pIHtcclxuICAgIGlmIChpc0Rpc2FibGVkKVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAoaG92ZXJDb2xvcilcclxuICAgICAgICByZXR1cm4gaG92ZXJDb2xvcjtcclxuICAgIGNvbnN0IHRyYW5zcGFyZW5jeSA9IGlzSW52ZXJzZSA/IDAuOCA6IDAuOTU7XHJcbiAgICByZXR1cm4gdHJhbnNwYXJlbnRpemUodHJhbnNwYXJlbmN5LCB0aGVtZS5jb2xvcnMubmV1dHJhbDkwMCk7XHJcbn1cclxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbiBgXG4gIGNvbG9yOiAke3Byb3BzID0+IGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIG1hcmdpbi1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM307XG4gIG1hcmdpbi1sZWZ0OiAwO1xuXG4gIHN2ZyB7XG4gICAgaGVpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgd2lkdGg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuaWNvblNpemVzLm1lZGl1bX1weDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB9XG5gO1xyXG5jb25zdCBTdHlsZWRMYWJlbFdyYXBwZXIgPSBzdHlsZWQuc3BhbiBgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICB3aWR0aDogMTAwJTtcbmA7XHJcbmNvbnN0IFN0eWxlZEV4cGFuZFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5jb2xvciB8fFxyXG4gICAgZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgd2lkdGg6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG4gIGhlaWdodDogJHsoeyBzaXplLCB0aGVtZSB9KSA9PiBzaXplICE9PSB1bmRlZmluZWQgPyBgJHtzaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fTtcbmA7XHJcbmNvbnN0IEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwOH07XG4gIGJvdHRvbTogMDtcbiAgaW5zZXQtaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IHByb3BzLmd1aWRlTGluZUxlZnR9O1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFZpcnR1YWxpemVkR3VpZGVMaW5lID0gc3R5bGVkLmRpdiBgXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAwO1xuICBib3JkZXItaW5saW5lLXN0YXJ0OiAxcHggc29saWRcbiAgICAke3Byb3BzID0+IHByb3BzLmlzSW52ZXJzZVxyXG4gICAgPyB0cmFuc3BhcmVudGl6ZSgwLjcsIHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMTAwKVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDMwMH07XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB6LWluZGV4OiAxO1xuYDtcclxuY29uc3QgU3R5bGVkQ2hlY2tib3hXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIG1hcmdpbi1yaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM307XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGRpc3BsYXk6ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2ZsZXgnIDogJ2lubGluZS1mbGV4Jyl9O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogJHtwcm9wcyA9PiBgY2FsYygxMDAlIC0gJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM30pYH07XG5gO1xyXG5jb25zdCBTdHlsZWRJdGVtV3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogJHtwcm9wcyA9PiAocHJvcHMuaGFzQWRkaXRpb25hbENvbnRlbnQgPyAnY29sdW1uJyA6ICdyb3cnKX07XG4gIGFsaWduLWl0ZW1zOiAke3Byb3BzID0+IChwcm9wcy5oYXNDdXN0b21JY29uU2l6ZSA/ICdjZW50ZXInIDogJ2ZsZXgtc3RhcnQnKX07XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZSwgcHJvcHMubm9kZVR5cGUpfTtcbmA7XHJcbmNvbnN0IEFkZGl0aW9uYWxDb250ZW50V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tYm90dG9tOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA1fTtcbmA7XHJcbmV4cG9ydCBjb25zdCBUcmVlSXRlbUNvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcclxuICAgIGNvbnN0IHsgYWRkaXRpb25hbENvbnRlbnQsIGNoaWxkcmVuLCBob3ZlckNvbG9yLCBpY29uLCBpbmRleDogaW5kZXhQcm9wLCBsYWJlbCwgbGFiZWxTdHlsZSwgc3R5bGUsIHRlc3RJZCwgdG9wTGV2ZWw6IHRvcExldmVsUHJvcCwgdHJlZUl0ZW1TdHlsZXMsIC4uLnJlc3QgfSA9IHByb3BzO1xyXG4gICAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XHJcbiAgICBjb25zdCBpc0ludmVyc2UgPSB1c2VJc0ludmVyc2UoKTtcclxuICAgIC8vIFJlYWQgaGllcmFyY2h5IGluZm9ybWF0aW9uIGZyb20gY29udGV4dCAocmVkdWNlcyBjbG9uZUVsZW1lbnQgb3ZlcmhlYWQpXHJcbiAgICBjb25zdCBoaWVyYXJjaHlDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQpO1xyXG4gICAgLy8gVXNlIGNvbnRleHQgdmFsdWVzIGlmIHByb3BzIGFyZSBub3QgcHJvdmlkZWQgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxyXG4gICAgY29uc3QgaW5kZXggPSBpbmRleFByb3AgIT09IHVuZGVmaW5lZCA/IGluZGV4UHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaW5kZXg7XHJcbiAgICBjb25zdCB0b3BMZXZlbCA9IHRvcExldmVsUHJvcCAhPT0gdW5kZWZpbmVkID8gdG9wTGV2ZWxQcm9wIDogaGllcmFyY2h5Q29udGV4dC5pc1RvcExldmVsO1xyXG4gICAgLy8gQ29uc3VtZSBzcGxpdCBjb250ZXh0cyBmb3IgcmVkdWNlZCByZS1yZW5kZXIgc2NvcGVcclxuICAgIGNvbnN0IHsgaXRlbVRvRm9jdXMgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgaGFuZGxlRXhwYW5kZWRDaGFuZ2UgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdFeHBhbnNpb25Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgZXhwYW5kSWNvblN0eWxlcywgaGFzR3VpZGVMaW5lcywgaGFzSWNvbnMsIGlzVG9wTGV2ZWxTZWxlY3RhYmxlLCBzZWxlY3RhYmxlLCBzZWxlY3RQYXJlbnRzID0gdHJ1ZSwgfSA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZVZpZXdDb25maWdDb250ZXh0KTtcclxuICAgIC8vIFBhc3MgdGhlIHJlc29sdmVkIHZhbHVlcyB0byB1c2VUcmVlSXRlbVxyXG4gICAgY29uc3QgcHJvcHNXaXRoSGllcmFyY2h5ID0ge1xyXG4gICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgIGluZGV4LFxyXG4gICAgICAgIHRvcExldmVsLFxyXG4gICAgICAgIGl0ZW1EZXB0aDogaGllcmFyY2h5Q29udGV4dC5kZXB0aCxcclxuICAgICAgICBwYXJlbnREZXB0aDogaGllcmFyY2h5Q29udGV4dC5wYXJlbnREZXB0aCxcclxuICAgIH07XHJcbiAgICBjb25zdCB7IGNvbnRleHRWYWx1ZSwgaGFuZGxlQ2xpY2ssIGhhbmRsZUtleURvd24gfSA9IHVzZVRyZWVJdGVtKHByb3BzV2l0aEhpZXJhcmNoeSwgZm9yd2FyZGVkUmVmKTtcclxuICAgIGNvbnN0IHsgaXNEaXNhYmxlZCB9ID0gY29udGV4dFZhbHVlO1xyXG4gICAgY29uc3QgeyBpc01hY09TIH0gPSB1c2VEZXZpY2VEZXRlY3QoKTtcclxuICAgIGNvbnN0IGkxOG4gPSBSZWFjdC51c2VDb250ZXh0KEkxOG5Db250ZXh0KTtcclxuICAgIGNvbnN0IHsgY2hlY2tib3hDaGFuZ2VIYW5kbGVyLCBjaGVja2VkU3RhdHVzLCBleHBhbmRlZCwgaGFzT3duVHJlZUl0ZW1zLCBpdGVtRGVwdGgsIGl0ZW1JZCwgcmVmLCBzZWxlY3RlZEl0ZW1zLCB9ID0gY29udGV4dFZhbHVlO1xyXG4gICAgY29uc3Qgbm9kZVR5cGUgPSBoYXNPd25UcmVlSXRlbXMgPyBUcmVlTm9kZVR5cGUuYnJhbmNoIDogVHJlZU5vZGVUeXBlLmxlYWY7XHJcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlXHJcbiAgICAgICAgPyBzZWxlY3RlZEl0ZW1zPy5bMF0/Lml0ZW1JZCA9PT0gaXRlbUlkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgYXJpYUNoZWNrZWRWYWx1ZSA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aVxyXG4gICAgICAgID8gY2hlY2tlZFN0YXR1cyA9PT0gSW5kZXRlcm1pbmF0ZUNoZWNrYm94U3RhdHVzLmluZGV0ZXJtaW5hdGVcclxuICAgICAgICAgICAgPyAnbWl4ZWQnXHJcbiAgICAgICAgICAgIDogY2hlY2tlZFN0YXR1cyA9PT0gSW5kZXRlcm1pbmF0ZUNoZWNrYm94U3RhdHVzLmNoZWNrZWRcclxuICAgICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBbaXNJbnNpZGVUcmVlSXRlbSwgc2V0SXNJbnNpZGVUcmVlSXRlbV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCB0cmVlSXRlbVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGZvY3VzVHJhcEVsZW1lbnQgPSB1c2VGb2N1c0xvY2soaXNJbnNpZGVUcmVlSXRlbSk7XHJcbiAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzID0gJ2J1dHRvbiwgW3JvbGU9XCJidXR0b25cIl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBhW2hyZWZdLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknO1xyXG4gICAgY29uc3QgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyA9IFJlYWN0LnVzZUNhbGxiYWNrKChjb250YWluZXIsIHNlbGVjdG9yKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKS5maWx0ZXIoZWwgPT4gIWVsLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fFxyXG4gICAgICAgICAgICAoZWwudGFiSW5kZXggIT09IHVuZGVmaW5lZCAmJiBlbC50YWJJbmRleCA+PSAwKSk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgbGFiZWwgYW5kIGFkZGl0aW9uYWwgY29udGVudCBvZiBhIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIG5hdmlnYXRlIHRocm91Z2ggaW50ZXJhY3RpdmUgZWxlbWVudHMgdXNpbmcgdGhlIGBUYWJgIGtleSwgYWN0aXZhdGUgdGhlbSB3aXRoIGBFbnRlcmAgb3IgYFNwYWNlYCxcclxuICAgICAqIGFuZCBleGl0IG91dHNpZGUgYW5kIGZvY3VzIHRoZSB3aG9sZSB0cmVlIGl0ZW0gd2l0aCBgRXNjYXBlYC5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3QgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24gPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0LCBzaGlmdEtleSB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSB0YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaXNFbnRlciA9IGtleSA9PT0gJ0VudGVyJztcclxuICAgICAgICBjb25zdCBpc1NwYWNlID0ga2V5ID09PSAnICc7XHJcbiAgICAgICAgY29uc3QgaXNFc2NhcGUgPSBrZXkgPT09ICdFc2NhcGUnO1xyXG4gICAgICAgIGNvbnN0IGlzVGFiID0ga2V5ID09PSAnVGFiJztcclxuICAgICAgICBjb25zdCBpc0FjdGl2YXRpb25LZXkgPSBpc0VudGVyIHx8IGlzU3BhY2U7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdChpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGBUYWJgLCB3ZSBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzVGFiICYmIGlzSW5zaWRlVHJlZUl0ZW0pIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICAvLyBGaWx0ZXIgbGlzdCBvZiBpbnRlcmFjdGl2ZSBlbGVtZW50cyB3aGljaCBhcmUgb25seSBpbmNsdWRlZCBmb3IgY3VycmVudCB0cmVlIGl0ZW1cclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0LmZpbHRlcihlbCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZXN0VHJlZUl0ZW0gPSBlbC5jbG9zZXN0KCdbcm9sZT1cInRyZWVpdGVtXCJdJyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VzdFRyZWVJdGVtID09PSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cy5pbmRleE9mKGN1cnJlbnRFbGVtZW50KTtcclxuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc2hpZnRLZXkgPyAtMSA6IDE7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50cy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyBkaXJlY3Rpb24gKyB0b3RhbCkgJSB0b3RhbDtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSBjdXJyZW50VHJlZUl0ZW1JbnRlcmFjdGl2ZUVsZW1lbnRzW25leHRJbmRleF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBlbGVtZW50VG9Gb2N1cy5mb2N1cygpLCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFByZXNzaW5nIGBFbnRlcmAgb3IgYFNwYWNlYCBvbiBhbiBpbnRlcmFjdGl2ZSBlbGVtZW50IHdpbGwgdHJpZ2dlciBpdHMgY2xpY2sgZXZlbnRcclxuICAgICAgICBpZiAoaXNBY3RpdmF0aW9uS2V5ICYmIGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gTW92ZXMgZm9jdXMgb3V0c2lkZSB0aGUgdHJlZSBpdGVtIGFuZCBmb2N1c2VzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmIHdoZW4gYEVzY2FwZWAgaXMgcHJlc3NlZFxyXG4gICAgICAgIGlmIChpc0VzY2FwZSkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbShmYWxzZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyZWVJdGVtTm9kZSA9IHRyZWVJdGVtUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgIGlmICh0cmVlSXRlbU5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHRyZWVJdGVtTm9kZS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaXNJbnNpZGVUcmVlSXRlbV0pO1xyXG4gICAgY29uc3QgZGVmYXVsdEljb24gPSBSZWFjdC51c2VNZW1vKCgpID0+IG5vZGVUeXBlID09PSBUcmVlTm9kZVR5cGUuYnJhbmNoID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRm9sZGVySWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXJ0aWNsZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSwgW25vZGVUeXBlXSk7XHJcbiAgICAvLyBNZW1vaXNlIHRoZSBsYWJlbCBKU1ggc28gdGhlIGBjaGVja2JveFByb3BzYCBtZW1vIGJlbG93IGFjdHVhbGx5IGhhc1xyXG4gICAgLy8gYSBzdGFibGUgYGxhYmVsVGV4dGAgcmVmZXJlbmNlIGJldHdlZW4gcmVuZGVycy4gUHJldmlvdXNseSB0aGlzXHJcbiAgICAvLyBlbGVtZW50IHdhcyByZS1jcmVhdGVkIG9uIGV2ZXJ5IHJlbmRlciwgd2hpY2ggZm9yY2VkXHJcbiAgICAvLyBgY2hlY2tib3hQcm9wc2AgdG8gYWxzbyBiZSByZS1jcmVhdGVkIGFuZCBhbnkgZnV0dXJlIFJlYWN0Lm1lbW8gb25cclxuICAgIC8vIENoZWNrYm94L0luZGV0ZXJtaW5hdGVDaGVja2JveCB3b3VsZCBhbHdheXMgYmFpbCBvdXQuXHJcbiAgICBjb25zdCBsYWJlbFRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZExhYmVsV3JhcHBlciwgeyB0aGVtZTogdGhlbWUsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZTogbGFiZWxTdHlsZSwgaWQ6IGAke2l0ZW1JZH0tbGFiZWxgLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWxhYmVsYCB9LFxyXG4gICAgICAgIGhhc0ljb25zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KEljb25XcmFwcGVyLCB7IGlzSW52ZXJzZTogaXNJbnZlcnNlLCB0aGVtZTogdGhlbWUsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0taWNvbmAgfSwgaWNvbiB8fCBkZWZhdWx0SWNvbikpLFxyXG4gICAgICAgIGxhYmVsKSksIFtcclxuICAgICAgICB0aGVtZSxcclxuICAgICAgICBpc0Rpc2FibGVkLFxyXG4gICAgICAgIGlzSW52ZXJzZSxcclxuICAgICAgICBsYWJlbFN0eWxlLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICB0ZXN0SWQsXHJcbiAgICAgICAgaGFzSWNvbnMsXHJcbiAgICAgICAgaWNvbixcclxuICAgICAgICBkZWZhdWx0SWNvbixcclxuICAgICAgICBsYWJlbCxcclxuICAgIF0pO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gYWRkaXRpb25hbENvbnRlbnQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpZDogYCR7aXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWFkZGl0aW9uYWxjb250ZW50d3JhcHBlcmAgfSwgYWRkaXRpb25hbENvbnRlbnQpKSA6IG51bGwsIFthZGRpdGlvbmFsQ29udGVudCwgdGhlbWUsIGl0ZW1JZCwgdGVzdElkXSk7XHJcbiAgICAvLyBTdGFibGUgcGVyLWNoaWxkIGhpZXJhcmNoeSB2YWx1ZXMuIFRoZSByZWZlcmVuY2UgbXVzdCBub3QgY2hhbmdlIG9uXHJcbiAgICAvLyByZS1yZW5kZXJzIHRyaWdnZXJlZCBieSBUcmVlVmlld1NlbGVjdGlvbkNvbnRleHQsIG90aGVyd2lzZSBldmVyeVxyXG4gICAgLy8gbmVzdGVkIFRyZWVJdGVtIHJlLXJlbmRlcnMgdGhyb3VnaCB0aGUgY29udGV4dCBhbmQgUmVhY3QubWVtbyBpc1xyXG4gICAgLy8gZGVmZWF0ZWQuXHJcbiAgICBjb25zdCBjaGlsZEhpZXJhcmNoaWVzID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY291bnQgPSBSZWFjdC5DaGlsZHJlbi5jb3VudChjaGlsZHJlbik7XHJcbiAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KGNvdW50KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgYXJyW2ldID0ge1xyXG4gICAgICAgICAgICAgICAgZGVwdGg6IGl0ZW1EZXB0aCArIDEsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnREZXB0aDogaXRlbURlcHRoLFxyXG4gICAgICAgICAgICAgICAgaXNUb3BMZXZlbDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFycjtcclxuICAgIH0sIFtjaGlsZHJlbiwgaXRlbURlcHRoXSk7XHJcbiAgICAvLyBNZW1vaXplIGlubGluZSBzdHlsZSBvYmplY3RzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xyXG4gICAgY29uc3QgY2hlY2tib3hJbnB1dFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoeyBtYXJnaW5SaWdodDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDMgfSksIFt0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwM10pO1xyXG4gICAgY29uc3QgY2hlY2tib3hMYWJlbFN0eWxlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xyXG4gICAgICAgIHBhZGRpbmc6IDAsXHJcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIH0pLCBbXSk7XHJcbiAgICAvLyBQcm9wcyBzaGFyZWQgYnkgQ2hlY2tib3ggYW5kIEluZGV0ZXJtaW5hdGVDaGVja2JveFxyXG4gICAgY29uc3QgY2hlY2tib3hQcm9wcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZCxcclxuICAgICAgICBoaWRlRm9jdXM6IHRydWUsXHJcbiAgICAgICAgaWQ6IGAke2l0ZW1JZH0tY2hlY2tib3hgLFxyXG4gICAgICAgIGlucHV0U3R5bGU6IGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBsYWJlbFN0eWxlOiBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0OiBsYWJlbFRleHQsXHJcbiAgICAgICAgb25DaGFuZ2U6IGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgICAgICB0YWJJbmRleDogLTEsXHJcbiAgICAgICAgdGVzdElkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgIH0pLCBbXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgY2hlY2tib3hJbnB1dFN0eWxlLFxyXG4gICAgICAgIGNoZWNrYm94TGFiZWxTdHlsZSxcclxuICAgICAgICBsYWJlbFRleHQsXHJcbiAgICAgICAgY2hlY2tib3hDaGFuZ2VIYW5kbGVyLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBvbkV4cGFuZGVkQ2xpY2tlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgaGFuZGxlRXhwYW5kZWRDaGFuZ2UoZXZlbnQsIGl0ZW1JZCk7XHJcbiAgICB9LCBbaGFuZGxlRXhwYW5kZWRDaGFuZ2UsIGl0ZW1JZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRXhwYW5kQ2xpY2sgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbaXNEaXNhYmxlZCwgb25FeHBhbmRlZENsaWNrZWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZU9uQ2xpY2sgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5jbG9zZXN0KCdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBhW2hyZWZdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3JvbGU9XCJtZW51aXRlbVwiXScpO1xyXG4gICAgICAgIC8vIFByZXZlbnRpbmcgc2VsZWN0aW5nIHRoZSBpdGVtIHdoZW4gY2xpY2tpbmcgb24gaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hlbiBgc2VsZWN0YWJsZWAgaXMgYHNpbmdsZWBcclxuICAgICAgICBpZiAoaW50ZXJhY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHNlbGVjdFBhcmVudHMgaXMgZmFsc2UgYW5kIHRoaXMgaXMgYSBwYXJlbnQgaXRlbSwgaGFuZGxlIGV4cGFuZC9jb2xsYXBzZSBpbnN0ZWFkIG9mIHNlbGVjdGlvblxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlICYmXHJcbiAgICAgICAgICAgICFzZWxlY3RQYXJlbnRzICYmXHJcbiAgICAgICAgICAgIGhhc093blRyZWVJdGVtcykge1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSW4gc2VsZWN0YWJsZT1vZmYgbW9kZSwgY2xpY2tpbmcgYW55d2hlcmUgb24gYSBwYXJlbnQgaXRlbSB0b2dnbGVzIGV4cGFuZC9jb2xsYXBzZVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUub2ZmICYmIGhhc093blRyZWVJdGVtcykge1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5zaW5nbGUpIHtcclxuICAgICAgICAgICAgaGFuZGxlQ2xpY2soZXZlbnQsIGl0ZW1JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNvbnN0IHRhYkluZGV4ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1Ub0ZvY3VzID09PSBpdGVtSWQgPyAwIDogLTE7XHJcbiAgICB9LCBbaXNEaXNhYmxlZCwgaXRlbVRvRm9jdXMsIGl0ZW1JZF0pO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd0NoZWNrYm94ID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm11bHRpICYmXHJcbiAgICAgICAgKGlzVG9wTGV2ZWxTZWxlY3RhYmxlICE9PSBmYWxzZSB8fCAhdG9wTGV2ZWwpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBQcmVzc2luZyBgQ3RybCArIEVudGVyYCBvciBgQ29tbWFuZCArIEVudGVyYCBmb2N1c2VzIHRoZSBmaXJzdCBpbnRlcmFjdGl2ZSBlbGVtZW50IHdpdGhpbiB0aGUgdHJlZSBpdGVtXHJcbiAgICAgKiBhbmQgbG9ja3MgZm9jdXMgaW5zaWRlIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogSWYgdGhlIGZvY3VzIGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBpdCBoYW5kbGVzIGtleSBldmVudHMgZm9yIGludGVyYWN0aW9uIGVsZW1lbnRzLlxyXG4gICAgICpcclxuICAgICAqIEl0IGFsc28gaGFuZGxlcyB0aGUgb3RoZXIga2V5cyB0byB0cmlnZ2VyIHRoZSBjbGljayBldmVudCBvbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICogKiovXHJcbiAgICBjb25zdCBvbktleURvd25IYW5kbGVyID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCB9ID0gZXZlbnQ7XHJcbiAgICAgICAgY29uc3QgaXNFbnRlciA9IGtleSA9PT0gJ0VudGVyJztcclxuICAgICAgICBjb25zdCBpc0N0cmxPckNvbW1hbmQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsRW50ZXIgPSBpc0N0cmxPckNvbW1hbmQgJiYgaXNFbnRlcjtcclxuICAgICAgICAvLyBJZiB0aGUga2V5IGlzIEN0cmwgKyBFbnRlciBvciBDb21tYW5kICsgRW50ZXIsIGZvY3VzIHRoZSBmaXJzdCBpbnRlcmFjdGl2ZSBlbGVtZW50XHJcbiAgICAgICAgLy8gYW5kIGxvY2sgZm9jdXMgaW5zaWRlIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAoaXNDdHJsRW50ZXIgJiYgdGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0odHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFRvRm9jdXMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdFswXTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRUb0ZvY3VzKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBFbnN1cmUgdmFsaWQgQ1NTIHNlbGVjdG9ycyBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgKGUuZy4sIHBlcmlvZHMgaW4gaXRlbUlkKVxyXG4gICAgICAgIGNvbnN0IHNhZmVJdGVtSWQgPSBDU1MuZXNjYXBlKGl0ZW1JZCk7XHJcbiAgICAgICAgY29uc3QgaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQgPSB0YXJnZXQuY2xvc2VzdChgIyR7c2FmZUl0ZW1JZH0tbGFiZWwsICMke3NhZmVJdGVtSWR9LWFkZGl0aW9uYWxjb250ZW50d3JhcHBlcmApO1xyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGhhbmRsZSBrZXkgZXZlbnRzIGZvciB0aG9zZSBhcmVhc1xyXG4gICAgICAgIGlmIChpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiwgaGFuZGxlIGtleSBkb3duIGZvciB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBoYW5kbGVLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtcclxuICAgICAgICBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duLFxyXG4gICAgICAgIGhhbmRsZUtleURvd24sXHJcbiAgICBdKTtcclxuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGNvbnRleHRWYWx1ZSB9LFxyXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBzdHlsZTogdHJlZUl0ZW1TdHlsZXMgfSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRUcmVlSXRlbSwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyBcImFyaWEtZXhwYW5kZWRcIjogaGFzT3duVHJlZUl0ZW1zID8gZXhwYW5kZWQgOiBudWxsLCBcImFyaWEtc2VsZWN0ZWRcIjogc2VsZWN0ZWRJdGVtLCBcImFyaWEtY2hlY2tlZFwiOiBzaG91bGRTaG93Q2hlY2tib3ggPyBhcmlhQ2hlY2tlZFZhbHVlIDogbnVsbCwgXCJkYXRhLXRlc3RpZFwiOiB0ZXN0SWQsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc093blRyZWVJdGVtczogaGFzT3duVHJlZUl0ZW1zLCBpZDogaXRlbUlkLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgaXNWaXJ0dWFsaXplZDogaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkLCBub2RlVHlwZTogbm9kZVR5cGUsIHJvbGU6IFwidHJlZWl0ZW1cIiwgc2VsZWN0YWJsZVR5cGU6IHNlbGVjdGFibGUsIHNlbGVjdGVkOiBzZWxlY3RlZEl0ZW0sIHRoZW1lOiB0aGVtZSwgdGFiSW5kZXg6IHRhYkluZGV4LCBvbktleURvd246IG9uS2V5RG93bkhhbmRsZXIsIHJlZjogdHJlZUl0ZW1SZWYsIGhvdmVyQ29sb3I6IGhvdmVyQ29sb3IgfSksXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEl0ZW1XcmFwcGVyLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkID8/IGl0ZW1JZH0taXRlbXdyYXBwZXJgLCBkZXB0aDogaXRlbURlcHRoLCBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgaGFzQ3VzdG9tSWNvblNpemU6ICEhZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgaWQ6IGAke2l0ZW1JZH0taXRlbXdyYXBwZXJgLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgbm9kZVR5cGU6IG5vZGVUeXBlLCBzZWxlY3RhYmxlOiBzZWxlY3RhYmxlLCBzdHlsZTogc3R5bGUsIHRoZW1lOiB0aGVtZSwgcmVmOiBtZXJnZVJlZnMocmVmLCBmb2N1c1RyYXBFbGVtZW50KSwgb25DbGljazogaGFuZGxlT25DbGljayB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRFeHBhbmRXcmFwcGVyLCB7IHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUsIGNvbG9yOiBleHBhbmRJY29uU3R5bGVzPy5jb2xvciwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1leHBhbmRgLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgb25DbGljazogaGFuZGxlRXhwYW5kQ2xpY2ssIHRoZW1lOiB0aGVtZSB9LCBleHBhbmRlZCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEV4cGFuZE1vcmVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSwgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSB9KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChDaGV2cm9uUmlnaHRJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSwgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSB9KSkpKSxcclxuICAgICAgICAgICAgICAgICAgICBzaG91bGRTaG93Q2hlY2tib3ggPyAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRDaGVja2JveFdyYXBwZXIsIHsgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lOiB0aGVtZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChJbmRldGVybWluYXRlQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgc3RhdHVzOiBjaGVja2VkU3RhdHVzIH0pKSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBjaGVja2VkOiBjaGVja2VkU3RhdHVzVG9Cb29sZWFuKGNoZWNrZWRTdGF0dXMpIH0pKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQpKSksXHJcbiAgICAgICAgICAgICAgICBoYXNHdWlkZUxpbmVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGl0ZW1EZXB0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20oeyBsZW5ndGg6IGl0ZW1EZXB0aCB9LCAoXywgZCkgPT4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlydHVhbGl6ZWRHdWlkZUxpbmUsIHsga2V5OiBgZ3VpZGVsaW5lLSR7ZH1gLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LXZpcnR1YWxpemVkLWd1aWRlbGluZS0ke2R9YCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXRJbmxpbmVTdGFydDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgZCwgZmFsc2UsIGZhbHNlLCB0cnVlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0pKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBoYXNPd25UcmVlSXRlbXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KEd1aWRlTGluZSwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWd1aWRlbGluZWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGd1aWRlTGluZUxlZnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGl0ZW1EZXB0aCwgZmFsc2UsIGZhbHNlLCBmYWxzZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KSBgIH0pKSksXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIChjaGlsZCwgY2hpbGRJbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZD8udHlwZSAhPT0gVHJlZUl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHN0YWJsZSwgcHJlLW1lbW9pc2VkIHZhbHVlIChzZWUgY2hpbGRIaWVyYXJjaGllcyBhYm92ZSkuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkSGllcmFyY2h5VmFsdWUgPSBjaGlsZEhpZXJhcmNoaWVzW2NoaWxkSW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uLCB7IGlzT3BlbjogZXhwYW5kZWQsIHVubW91bnRPbkV4aXQ6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgcm9sZTogXCJncm91cFwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dC5Qcm92aWRlciwgeyBrZXk6IGNoaWxkLnByb3BzLml0ZW1JZCwgdmFsdWU6IG5lc3RlZEhpZXJhcmNoeVZhbHVlIH0sIGNoaWxkKSkpKTtcclxuICAgICAgICAgICAgICAgIH0pKSxcclxuICAgICAgICAgICAgaXNNYWNPUyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXN1YWxseUhpZGRlbiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5ub3VuY2UsIG51bGwsIGV4cGFuZGVkXHJcbiAgICAgICAgICAgICAgICAgICAgPyBpMThuLmV4cGFuc2lvblN0YXRlLmV4cGFuZGVkXHJcbiAgICAgICAgICAgICAgICAgICAgOiBpMThuLmV4cGFuc2lvblN0YXRlLmNvbGxhcHNlZCkpKSkpKTtcclxufSk7XHJcbi8qKlxyXG4gKiBDdXN0b20gY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgUmVhY3QubWVtb1xyXG4gKiBPbmx5IHJlLXJlbmRlciBUcmVlSXRlbSB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZVxyXG4gKi9cclxuZnVuY3Rpb24gYXJlUHJvcHNFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykge1xyXG4gICAgLy8gQ2hlY2sgaWYgaXRlbUlkIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXRlbUlkICE9PSBuZXh0UHJvcHMuaXRlbUlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgbGFiZWwgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbCAhPT0gbmV4dFByb3BzLmxhYmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgZGlzYWJsZWQgc3RhdGUgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pc0Rpc2FibGVkICE9PSBuZXh0UHJvcHMuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGljb24gY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pY29uICE9PSBuZXh0UHJvcHMuaWNvbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGFkZGl0aW9uYWwgY29udGVudCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmFkZGl0aW9uYWxDb250ZW50ICE9PSBuZXh0UHJvcHMuYWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBob3ZlciBjb2xvciBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmhvdmVyQ29sb3IgIT09IG5leHRQcm9wcy5ob3ZlckNvbG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgY2hpbGRyZW4gY2hhbmdlZCAoZm9yIG5lc3RlZCB0cmVlIGl0ZW1zKVxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2UgY2hpbGRyZW4gY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5jaGlsZHJlbiAhPT0gbmV4dFByb3BzLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgc3R5bGVzIGNoYW5nZWRcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIHN0eWxlIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuc3R5bGUgIT09IG5leHRQcm9wcy5zdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWxTdHlsZSAhPT0gbmV4dFByb3BzLmxhYmVsU3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLnRyZWVJdGVtU3R5bGVzICE9PSBuZXh0UHJvcHMudHJlZUl0ZW1TdHlsZXMpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBBbGwgcmVsZXZhbnQgcHJvcHMgYXJlIGVxdWFsLCBza2lwIHJlLXJlbmRlclxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuLyoqXHJcbiAqIE1lbW9pemVkIFRyZWVJdGVtIGNvbXBvbmVudFxyXG4gKiBPbmx5IHJlLXJlbmRlcnMgd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2UsIGltcHJvdmluZyBwZXJmb3JtYW5jZSBmb3IgbGFyZ2UgdHJlZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCBUcmVlSXRlbSA9IFJlYWN0Lm1lbW8oVHJlZUl0ZW1Db21wb25lbnQsIGFyZVByb3BzRXF1YWwpO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1UcmVlSXRlbS5qcy5tYXAiXX0= */"));
26660
26847
  }, " &:hover{background:", function (props) {
26661
26848
  return getHoverBackground({
26662
26849
  isDisabled: props.isDisabled,
@@ -26664,7 +26851,7 @@ var StyledTreeItem = /*#__PURE__*/_styled("li", {
26664
26851
  isInverse: props.isInverse,
26665
26852
  theme: props.theme
26666
26853
  });
26667
- }, ";}}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3QmlDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSkge1xyXG4gICAgICAgICAgICBoYW5kbGVDbGljayhldmVudCwgaXRlbUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVRvRm9jdXMgPT09IGl0ZW1JZCA/IDAgOiAtMTtcclxuICAgIH0sIFtpc0Rpc2FibGVkLCBpdGVtVG9Gb2N1cywgaXRlbUlkXSk7XHJcbiAgICBjb25zdCBzaG91bGRTaG93Q2hlY2tib3ggPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGkgJiZcclxuICAgICAgICAoaXNUb3BMZXZlbFNlbGVjdGFibGUgIT09IGZhbHNlIHx8ICF0b3BMZXZlbCk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIFByZXNzaW5nIGBDdHJsICsgRW50ZXJgIG9yIGBDb21tYW5kICsgRW50ZXJgIGZvY3VzZXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnQgd2l0aGluIHRoZSB0cmVlIGl0ZW1cclxuICAgICAqIGFuZCBsb2NrcyBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZm9jdXMgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGl0IGhhbmRsZXMga2V5IGV2ZW50cyBmb3IgaW50ZXJhY3Rpb24gZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogSXQgYWxzbyBoYW5kbGVzIHRoZSBvdGhlciBrZXlzIHRvIHRyaWdnZXIgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IG9uS2V5RG93bkhhbmRsZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBpc0VudGVyID0ga2V5ID09PSAnRW50ZXInO1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybE9yQ29tbWFuZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxuICAgICAgICBjb25zdCBpc0N0cmxFbnRlciA9IGlzQ3RybE9yQ29tbWFuZCAmJiBpc0VudGVyO1xyXG4gICAgICAgIC8vIElmIHRoZSBrZXkgaXMgQ3RybCArIEVudGVyIG9yIENvbW1hbmQgKyBFbnRlciwgZm9jdXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnRcclxuICAgICAgICAvLyBhbmQgbG9jayBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc0N0cmxFbnRlciAmJiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbSh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0WzBdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSB2YWxpZCBDU1Mgc2VsZWN0b3JzIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgcGVyaW9kcyBpbiBpdGVtSWQpXHJcbiAgICAgICAgY29uc3Qgc2FmZUl0ZW1JZCA9IENTUy5lc2NhcGUoaXRlbUlkKTtcclxuICAgICAgICBjb25zdCBpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCA9IHRhcmdldC5jbG9zZXN0KGAjJHtzYWZlSXRlbUlkfS1sYWJlbCwgIyR7c2FmZUl0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaGFuZGxlIGtleSBldmVudHMgZm9yIHRob3NlIGFyZWFzXHJcbiAgICAgICAgaWYgKGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmLCBoYW5kbGUga2V5IGRvd24gZm9yIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGdldEludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24sXHJcbiAgICAgICAgaGFuZGxlS2V5RG93bixcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dFZhbHVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB0cmVlSXRlbVN0eWxlcyB9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFRyZWVJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IFwiYXJpYS1leHBhbmRlZFwiOiBoYXNPd25UcmVlSXRlbXMgPyBleHBhbmRlZCA6IG51bGwsIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZEl0ZW0sIFwiYXJpYS1jaGVja2VkXCI6IHNob3VsZFNob3dDaGVja2JveCA/IGFyaWFDaGVja2VkVmFsdWUgOiBudWxsLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzT3duVHJlZUl0ZW1zOiBoYXNPd25UcmVlSXRlbXMsIGlkOiBpdGVtSWQsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBpc1ZpcnR1YWxpemVkOiBoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWQsIG5vZGVUeXBlOiBub2RlVHlwZSwgcm9sZTogXCJ0cmVlaXRlbVwiLCBzZWxlY3RhYmxlVHlwZTogc2VsZWN0YWJsZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbSwgdGhlbWU6IHRoZW1lLCB0YWJJbmRleDogdGFiSW5kZXgsIG9uS2V5RG93bjogb25LZXlEb3duSGFuZGxlciwgcmVmOiB0cmVlSXRlbVJlZiwgaG92ZXJDb2xvcjogaG92ZXJDb2xvciB9KSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbVdyYXBwZXIsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1pdGVtd3JhcHBlcmAsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCBoYXNDdXN0b21JY29uU2l6ZTogISFleHBhbmRJY29uU3R5bGVzPy5zaXplLCBpZDogYCR7aXRlbUlkfS1pdGVtd3JhcHBlcmAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBub2RlVHlwZTogbm9kZVR5cGUsIHNlbGVjdGFibGU6IHNlbGVjdGFibGUsIHN0eWxlOiBzdHlsZSwgdGhlbWU6IHRoZW1lLCByZWY6IG1lcmdlUmVmcyhyZWYsIGZvY3VzVHJhcEVsZW1lbnQpLCBvbkNsaWNrOiBoYW5kbGVPbkNsaWNrIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEV4cGFuZFdyYXBwZXIsIHsgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgY29sb3I6IGV4cGFuZEljb25TdHlsZXM/LmNvbG9yLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWV4cGFuZGAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgdGhlbWU6IHRoZW1lIH0sIGV4cGFuZGVkID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhwYW5kTW9yZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZXZyb25SaWdodEljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3dDaGVja2JveCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENoZWNrYm94V3JhcHBlciwgeyBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEluZGV0ZXJtaW5hdGVDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBzdGF0dXM6IGNoZWNrZWRTdGF0dXMgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IGNoZWNrZWQ6IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4oY2hlY2tlZFN0YXR1cykgfSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpKSxcclxuICAgICAgICAgICAgICAgIGhhc0d1aWRlTGluZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAoaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbURlcHRoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbURlcHRoIH0sIChfLCBkKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXJ0dWFsaXplZEd1aWRlTGluZSwgeyBrZXk6IGBndWlkZWxpbmUtJHtkfWAsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tdmlydHVhbGl6ZWQtZ3VpZGVsaW5lLSR7ZH1gLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNldElubGluZVN0YXJ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBkLCBmYWxzZSwgZmFsc2UsIHRydWUpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweClgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhhc093blRyZWVJdGVtcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3VpZGVMaW5lLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZ3VpZGVsaW5lYCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgZ3VpZGVMaW5lTGVmdDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgaXRlbURlcHRoLCBmYWxzZSwgZmFsc2UsIGZhbHNlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpIGAgfSkpKSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkPy50eXBlICE9PSBUcmVlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc3RhYmxlLCBwcmUtbWVtb2lzZWQgdmFsdWUgKHNlZSBjaGlsZEhpZXJhcmNoaWVzIGFib3ZlKS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSA9IGNoaWxkSGllcmFyY2hpZXNbY2hpbGRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHsgaXNPcGVuOiBleHBhbmRlZCwgdW5tb3VudE9uRXhpdDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyByb2xlOiBcImdyb3VwXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0LlByb3ZpZGVyLCB7IGtleTogY2hpbGQucHJvcHMuaXRlbUlkLCB2YWx1ZTogbmVzdGVkSGllcmFyY2h5VmFsdWUgfSwgY2hpbGQpKSkpO1xyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBpc01hY09TICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFZpc3VhbGx5SGlkZGVuLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGkxOG4uZXhwYW5zaW9uU3RhdGUuZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA6IGkxOG4uZXhwYW5zaW9uU3RhdGUuY29sbGFwc2VkKSkpKSkpO1xyXG59KTtcclxuLyoqXHJcbiAqIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vXHJcbiAqIE9ubHkgcmUtcmVuZGVyIFRyZWVJdGVtIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlXHJcbiAqL1xyXG5mdW5jdGlvbiBhcmVQcm9wc0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XHJcbiAgICAvLyBDaGVjayBpZiBpdGVtSWQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pdGVtSWQgIT09IG5leHRQcm9wcy5pdGVtSWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBsYWJlbCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsICE9PSBuZXh0UHJvcHMubGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmlzRGlzYWJsZWQgIT09IG5leHRQcm9wcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaWNvbiBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmljb24gIT09IG5leHRQcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgYWRkaXRpb25hbCBjb250ZW50IGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuYWRkaXRpb25hbENvbnRlbnQgIT09IG5leHRQcm9wcy5hZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGhvdmVyIGNvbG9yIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaG92ZXJDb2xvciAhPT0gbmV4dFByb3BzLmhvdmVyQ29sb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBjaGlsZHJlbiBjaGFuZ2VkIChmb3IgbmVzdGVkIHRyZWUgaXRlbXMpXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBjaGlsZHJlbiBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLmNoaWxkcmVuICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBzdHlsZXMgY2hhbmdlZFxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2Ugc3R5bGUgY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5zdHlsZSAhPT0gbmV4dFByb3BzLnN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbFN0eWxlICE9PSBuZXh0UHJvcHMubGFiZWxTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMudHJlZUl0ZW1TdHlsZXMgIT09IG5leHRQcm9wcy50cmVlSXRlbVN0eWxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIEFsbCByZWxldmFudCBwcm9wcyBhcmUgZXF1YWwsIHNraXAgcmUtcmVuZGVyXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogTWVtb2l6ZWQgVHJlZUl0ZW0gY29tcG9uZW50XHJcbiAqIE9ubHkgcmUtcmVuZGVycyB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGZvciBsYXJnZSB0cmVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRyZWVJdGVtID0gUmVhY3QubWVtbyhUcmVlSXRlbUNvbXBvbmVudCwgYXJlUHJvcHNFcXVhbCk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyZWVJdGVtLmpzLm1hcCJdfQ== */"));
26854
+ }, ";}}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3QmlDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
26668
26855
  function getHoverBackground(_ref) {
26669
26856
  var isDisabled = _ref.isDisabled,
26670
26857
  hoverColor = _ref.hoverColor,
@@ -26686,13 +26873,13 @@ var IconWrapper$9 = /*#__PURE__*/_styled("span", {
26686
26873
  return props.theme.iconSizes.medium;
26687
26874
  }, "px;width:", function (props) {
26688
26875
  return props.theme.iconSizes.medium;
26689
- }, "px;vertical-align:middle;}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtR2dDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSkge1xyXG4gICAgICAgICAgICBoYW5kbGVDbGljayhldmVudCwgaXRlbUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVRvRm9jdXMgPT09IGl0ZW1JZCA/IDAgOiAtMTtcclxuICAgIH0sIFtpc0Rpc2FibGVkLCBpdGVtVG9Gb2N1cywgaXRlbUlkXSk7XHJcbiAgICBjb25zdCBzaG91bGRTaG93Q2hlY2tib3ggPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGkgJiZcclxuICAgICAgICAoaXNUb3BMZXZlbFNlbGVjdGFibGUgIT09IGZhbHNlIHx8ICF0b3BMZXZlbCk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIFByZXNzaW5nIGBDdHJsICsgRW50ZXJgIG9yIGBDb21tYW5kICsgRW50ZXJgIGZvY3VzZXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnQgd2l0aGluIHRoZSB0cmVlIGl0ZW1cclxuICAgICAqIGFuZCBsb2NrcyBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZm9jdXMgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGl0IGhhbmRsZXMga2V5IGV2ZW50cyBmb3IgaW50ZXJhY3Rpb24gZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogSXQgYWxzbyBoYW5kbGVzIHRoZSBvdGhlciBrZXlzIHRvIHRyaWdnZXIgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IG9uS2V5RG93bkhhbmRsZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBpc0VudGVyID0ga2V5ID09PSAnRW50ZXInO1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybE9yQ29tbWFuZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxuICAgICAgICBjb25zdCBpc0N0cmxFbnRlciA9IGlzQ3RybE9yQ29tbWFuZCAmJiBpc0VudGVyO1xyXG4gICAgICAgIC8vIElmIHRoZSBrZXkgaXMgQ3RybCArIEVudGVyIG9yIENvbW1hbmQgKyBFbnRlciwgZm9jdXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnRcclxuICAgICAgICAvLyBhbmQgbG9jayBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc0N0cmxFbnRlciAmJiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbSh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0WzBdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSB2YWxpZCBDU1Mgc2VsZWN0b3JzIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgcGVyaW9kcyBpbiBpdGVtSWQpXHJcbiAgICAgICAgY29uc3Qgc2FmZUl0ZW1JZCA9IENTUy5lc2NhcGUoaXRlbUlkKTtcclxuICAgICAgICBjb25zdCBpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCA9IHRhcmdldC5jbG9zZXN0KGAjJHtzYWZlSXRlbUlkfS1sYWJlbCwgIyR7c2FmZUl0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaGFuZGxlIGtleSBldmVudHMgZm9yIHRob3NlIGFyZWFzXHJcbiAgICAgICAgaWYgKGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmLCBoYW5kbGUga2V5IGRvd24gZm9yIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGdldEludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24sXHJcbiAgICAgICAgaGFuZGxlS2V5RG93bixcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dFZhbHVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB0cmVlSXRlbVN0eWxlcyB9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFRyZWVJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IFwiYXJpYS1leHBhbmRlZFwiOiBoYXNPd25UcmVlSXRlbXMgPyBleHBhbmRlZCA6IG51bGwsIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZEl0ZW0sIFwiYXJpYS1jaGVja2VkXCI6IHNob3VsZFNob3dDaGVja2JveCA/IGFyaWFDaGVja2VkVmFsdWUgOiBudWxsLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzT3duVHJlZUl0ZW1zOiBoYXNPd25UcmVlSXRlbXMsIGlkOiBpdGVtSWQsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBpc1ZpcnR1YWxpemVkOiBoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWQsIG5vZGVUeXBlOiBub2RlVHlwZSwgcm9sZTogXCJ0cmVlaXRlbVwiLCBzZWxlY3RhYmxlVHlwZTogc2VsZWN0YWJsZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbSwgdGhlbWU6IHRoZW1lLCB0YWJJbmRleDogdGFiSW5kZXgsIG9uS2V5RG93bjogb25LZXlEb3duSGFuZGxlciwgcmVmOiB0cmVlSXRlbVJlZiwgaG92ZXJDb2xvcjogaG92ZXJDb2xvciB9KSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbVdyYXBwZXIsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1pdGVtd3JhcHBlcmAsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCBoYXNDdXN0b21JY29uU2l6ZTogISFleHBhbmRJY29uU3R5bGVzPy5zaXplLCBpZDogYCR7aXRlbUlkfS1pdGVtd3JhcHBlcmAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBub2RlVHlwZTogbm9kZVR5cGUsIHNlbGVjdGFibGU6IHNlbGVjdGFibGUsIHN0eWxlOiBzdHlsZSwgdGhlbWU6IHRoZW1lLCByZWY6IG1lcmdlUmVmcyhyZWYsIGZvY3VzVHJhcEVsZW1lbnQpLCBvbkNsaWNrOiBoYW5kbGVPbkNsaWNrIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEV4cGFuZFdyYXBwZXIsIHsgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgY29sb3I6IGV4cGFuZEljb25TdHlsZXM/LmNvbG9yLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWV4cGFuZGAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgdGhlbWU6IHRoZW1lIH0sIGV4cGFuZGVkID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhwYW5kTW9yZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZXZyb25SaWdodEljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3dDaGVja2JveCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENoZWNrYm94V3JhcHBlciwgeyBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEluZGV0ZXJtaW5hdGVDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBzdGF0dXM6IGNoZWNrZWRTdGF0dXMgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IGNoZWNrZWQ6IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4oY2hlY2tlZFN0YXR1cykgfSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpKSxcclxuICAgICAgICAgICAgICAgIGhhc0d1aWRlTGluZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAoaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbURlcHRoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbURlcHRoIH0sIChfLCBkKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXJ0dWFsaXplZEd1aWRlTGluZSwgeyBrZXk6IGBndWlkZWxpbmUtJHtkfWAsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tdmlydHVhbGl6ZWQtZ3VpZGVsaW5lLSR7ZH1gLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNldElubGluZVN0YXJ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBkLCBmYWxzZSwgZmFsc2UsIHRydWUpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweClgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhhc093blRyZWVJdGVtcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3VpZGVMaW5lLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZ3VpZGVsaW5lYCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgZ3VpZGVMaW5lTGVmdDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgaXRlbURlcHRoLCBmYWxzZSwgZmFsc2UsIGZhbHNlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpIGAgfSkpKSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkPy50eXBlICE9PSBUcmVlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc3RhYmxlLCBwcmUtbWVtb2lzZWQgdmFsdWUgKHNlZSBjaGlsZEhpZXJhcmNoaWVzIGFib3ZlKS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSA9IGNoaWxkSGllcmFyY2hpZXNbY2hpbGRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHsgaXNPcGVuOiBleHBhbmRlZCwgdW5tb3VudE9uRXhpdDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyByb2xlOiBcImdyb3VwXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0LlByb3ZpZGVyLCB7IGtleTogY2hpbGQucHJvcHMuaXRlbUlkLCB2YWx1ZTogbmVzdGVkSGllcmFyY2h5VmFsdWUgfSwgY2hpbGQpKSkpO1xyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBpc01hY09TICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFZpc3VhbGx5SGlkZGVuLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGkxOG4uZXhwYW5zaW9uU3RhdGUuZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA6IGkxOG4uZXhwYW5zaW9uU3RhdGUuY29sbGFwc2VkKSkpKSkpO1xyXG59KTtcclxuLyoqXHJcbiAqIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vXHJcbiAqIE9ubHkgcmUtcmVuZGVyIFRyZWVJdGVtIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlXHJcbiAqL1xyXG5mdW5jdGlvbiBhcmVQcm9wc0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XHJcbiAgICAvLyBDaGVjayBpZiBpdGVtSWQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pdGVtSWQgIT09IG5leHRQcm9wcy5pdGVtSWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBsYWJlbCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsICE9PSBuZXh0UHJvcHMubGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmlzRGlzYWJsZWQgIT09IG5leHRQcm9wcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaWNvbiBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmljb24gIT09IG5leHRQcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgYWRkaXRpb25hbCBjb250ZW50IGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuYWRkaXRpb25hbENvbnRlbnQgIT09IG5leHRQcm9wcy5hZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGhvdmVyIGNvbG9yIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaG92ZXJDb2xvciAhPT0gbmV4dFByb3BzLmhvdmVyQ29sb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBjaGlsZHJlbiBjaGFuZ2VkIChmb3IgbmVzdGVkIHRyZWUgaXRlbXMpXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBjaGlsZHJlbiBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLmNoaWxkcmVuICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBzdHlsZXMgY2hhbmdlZFxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2Ugc3R5bGUgY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5zdHlsZSAhPT0gbmV4dFByb3BzLnN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbFN0eWxlICE9PSBuZXh0UHJvcHMubGFiZWxTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMudHJlZUl0ZW1TdHlsZXMgIT09IG5leHRQcm9wcy50cmVlSXRlbVN0eWxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIEFsbCByZWxldmFudCBwcm9wcyBhcmUgZXF1YWwsIHNraXAgcmUtcmVuZGVyXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogTWVtb2l6ZWQgVHJlZUl0ZW0gY29tcG9uZW50XHJcbiAqIE9ubHkgcmUtcmVuZGVycyB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGZvciBsYXJnZSB0cmVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRyZWVJdGVtID0gUmVhY3QubWVtbyhUcmVlSXRlbUNvbXBvbmVudCwgYXJlUHJvcHNFcXVhbCk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyZWVJdGVtLmpzLm1hcCJdfQ== */"));
26876
+ }, "px;vertical-align:middle;}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtR2dDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
26690
26877
  var StyledLabelWrapper = /*#__PURE__*/_styled("span", {
26691
26878
  target: "e1xiryew6",
26692
26879
  label: "StyledLabelWrapper"
26693
26880
  })("display:flex;align-items:flex-start;color:", function (props) {
26694
26881
  return getTreeItemLabelColor(props.isInverse, props.isDisabled, props.theme);
26695
- }, ";width:100%;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4R3VDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSkge1xyXG4gICAgICAgICAgICBoYW5kbGVDbGljayhldmVudCwgaXRlbUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVRvRm9jdXMgPT09IGl0ZW1JZCA/IDAgOiAtMTtcclxuICAgIH0sIFtpc0Rpc2FibGVkLCBpdGVtVG9Gb2N1cywgaXRlbUlkXSk7XHJcbiAgICBjb25zdCBzaG91bGRTaG93Q2hlY2tib3ggPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGkgJiZcclxuICAgICAgICAoaXNUb3BMZXZlbFNlbGVjdGFibGUgIT09IGZhbHNlIHx8ICF0b3BMZXZlbCk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIFByZXNzaW5nIGBDdHJsICsgRW50ZXJgIG9yIGBDb21tYW5kICsgRW50ZXJgIGZvY3VzZXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnQgd2l0aGluIHRoZSB0cmVlIGl0ZW1cclxuICAgICAqIGFuZCBsb2NrcyBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZm9jdXMgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGl0IGhhbmRsZXMga2V5IGV2ZW50cyBmb3IgaW50ZXJhY3Rpb24gZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogSXQgYWxzbyBoYW5kbGVzIHRoZSBvdGhlciBrZXlzIHRvIHRyaWdnZXIgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IG9uS2V5RG93bkhhbmRsZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBpc0VudGVyID0ga2V5ID09PSAnRW50ZXInO1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybE9yQ29tbWFuZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxuICAgICAgICBjb25zdCBpc0N0cmxFbnRlciA9IGlzQ3RybE9yQ29tbWFuZCAmJiBpc0VudGVyO1xyXG4gICAgICAgIC8vIElmIHRoZSBrZXkgaXMgQ3RybCArIEVudGVyIG9yIENvbW1hbmQgKyBFbnRlciwgZm9jdXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnRcclxuICAgICAgICAvLyBhbmQgbG9jayBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc0N0cmxFbnRlciAmJiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbSh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0WzBdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSB2YWxpZCBDU1Mgc2VsZWN0b3JzIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgcGVyaW9kcyBpbiBpdGVtSWQpXHJcbiAgICAgICAgY29uc3Qgc2FmZUl0ZW1JZCA9IENTUy5lc2NhcGUoaXRlbUlkKTtcclxuICAgICAgICBjb25zdCBpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCA9IHRhcmdldC5jbG9zZXN0KGAjJHtzYWZlSXRlbUlkfS1sYWJlbCwgIyR7c2FmZUl0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaGFuZGxlIGtleSBldmVudHMgZm9yIHRob3NlIGFyZWFzXHJcbiAgICAgICAgaWYgKGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmLCBoYW5kbGUga2V5IGRvd24gZm9yIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGdldEludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24sXHJcbiAgICAgICAgaGFuZGxlS2V5RG93bixcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dFZhbHVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB0cmVlSXRlbVN0eWxlcyB9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFRyZWVJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IFwiYXJpYS1leHBhbmRlZFwiOiBoYXNPd25UcmVlSXRlbXMgPyBleHBhbmRlZCA6IG51bGwsIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZEl0ZW0sIFwiYXJpYS1jaGVja2VkXCI6IHNob3VsZFNob3dDaGVja2JveCA/IGFyaWFDaGVja2VkVmFsdWUgOiBudWxsLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzT3duVHJlZUl0ZW1zOiBoYXNPd25UcmVlSXRlbXMsIGlkOiBpdGVtSWQsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBpc1ZpcnR1YWxpemVkOiBoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWQsIG5vZGVUeXBlOiBub2RlVHlwZSwgcm9sZTogXCJ0cmVlaXRlbVwiLCBzZWxlY3RhYmxlVHlwZTogc2VsZWN0YWJsZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbSwgdGhlbWU6IHRoZW1lLCB0YWJJbmRleDogdGFiSW5kZXgsIG9uS2V5RG93bjogb25LZXlEb3duSGFuZGxlciwgcmVmOiB0cmVlSXRlbVJlZiwgaG92ZXJDb2xvcjogaG92ZXJDb2xvciB9KSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbVdyYXBwZXIsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1pdGVtd3JhcHBlcmAsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCBoYXNDdXN0b21JY29uU2l6ZTogISFleHBhbmRJY29uU3R5bGVzPy5zaXplLCBpZDogYCR7aXRlbUlkfS1pdGVtd3JhcHBlcmAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBub2RlVHlwZTogbm9kZVR5cGUsIHNlbGVjdGFibGU6IHNlbGVjdGFibGUsIHN0eWxlOiBzdHlsZSwgdGhlbWU6IHRoZW1lLCByZWY6IG1lcmdlUmVmcyhyZWYsIGZvY3VzVHJhcEVsZW1lbnQpLCBvbkNsaWNrOiBoYW5kbGVPbkNsaWNrIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEV4cGFuZFdyYXBwZXIsIHsgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgY29sb3I6IGV4cGFuZEljb25TdHlsZXM/LmNvbG9yLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWV4cGFuZGAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgdGhlbWU6IHRoZW1lIH0sIGV4cGFuZGVkID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhwYW5kTW9yZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZXZyb25SaWdodEljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3dDaGVja2JveCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENoZWNrYm94V3JhcHBlciwgeyBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEluZGV0ZXJtaW5hdGVDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBzdGF0dXM6IGNoZWNrZWRTdGF0dXMgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IGNoZWNrZWQ6IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4oY2hlY2tlZFN0YXR1cykgfSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpKSxcclxuICAgICAgICAgICAgICAgIGhhc0d1aWRlTGluZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAoaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbURlcHRoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbURlcHRoIH0sIChfLCBkKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXJ0dWFsaXplZEd1aWRlTGluZSwgeyBrZXk6IGBndWlkZWxpbmUtJHtkfWAsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tdmlydHVhbGl6ZWQtZ3VpZGVsaW5lLSR7ZH1gLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNldElubGluZVN0YXJ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBkLCBmYWxzZSwgZmFsc2UsIHRydWUpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweClgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhhc093blRyZWVJdGVtcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3VpZGVMaW5lLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZ3VpZGVsaW5lYCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgZ3VpZGVMaW5lTGVmdDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgaXRlbURlcHRoLCBmYWxzZSwgZmFsc2UsIGZhbHNlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpIGAgfSkpKSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkPy50eXBlICE9PSBUcmVlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc3RhYmxlLCBwcmUtbWVtb2lzZWQgdmFsdWUgKHNlZSBjaGlsZEhpZXJhcmNoaWVzIGFib3ZlKS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSA9IGNoaWxkSGllcmFyY2hpZXNbY2hpbGRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHsgaXNPcGVuOiBleHBhbmRlZCwgdW5tb3VudE9uRXhpdDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyByb2xlOiBcImdyb3VwXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0LlByb3ZpZGVyLCB7IGtleTogY2hpbGQucHJvcHMuaXRlbUlkLCB2YWx1ZTogbmVzdGVkSGllcmFyY2h5VmFsdWUgfSwgY2hpbGQpKSkpO1xyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBpc01hY09TICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFZpc3VhbGx5SGlkZGVuLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGkxOG4uZXhwYW5zaW9uU3RhdGUuZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA6IGkxOG4uZXhwYW5zaW9uU3RhdGUuY29sbGFwc2VkKSkpKSkpO1xyXG59KTtcclxuLyoqXHJcbiAqIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vXHJcbiAqIE9ubHkgcmUtcmVuZGVyIFRyZWVJdGVtIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlXHJcbiAqL1xyXG5mdW5jdGlvbiBhcmVQcm9wc0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XHJcbiAgICAvLyBDaGVjayBpZiBpdGVtSWQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pdGVtSWQgIT09IG5leHRQcm9wcy5pdGVtSWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBsYWJlbCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsICE9PSBuZXh0UHJvcHMubGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmlzRGlzYWJsZWQgIT09IG5leHRQcm9wcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaWNvbiBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmljb24gIT09IG5leHRQcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgYWRkaXRpb25hbCBjb250ZW50IGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuYWRkaXRpb25hbENvbnRlbnQgIT09IG5leHRQcm9wcy5hZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGhvdmVyIGNvbG9yIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaG92ZXJDb2xvciAhPT0gbmV4dFByb3BzLmhvdmVyQ29sb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBjaGlsZHJlbiBjaGFuZ2VkIChmb3IgbmVzdGVkIHRyZWUgaXRlbXMpXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBjaGlsZHJlbiBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLmNoaWxkcmVuICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBzdHlsZXMgY2hhbmdlZFxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2Ugc3R5bGUgY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5zdHlsZSAhPT0gbmV4dFByb3BzLnN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbFN0eWxlICE9PSBuZXh0UHJvcHMubGFiZWxTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMudHJlZUl0ZW1TdHlsZXMgIT09IG5leHRQcm9wcy50cmVlSXRlbVN0eWxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIEFsbCByZWxldmFudCBwcm9wcyBhcmUgZXF1YWwsIHNraXAgcmUtcmVuZGVyXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogTWVtb2l6ZWQgVHJlZUl0ZW0gY29tcG9uZW50XHJcbiAqIE9ubHkgcmUtcmVuZGVycyB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGZvciBsYXJnZSB0cmVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRyZWVJdGVtID0gUmVhY3QubWVtbyhUcmVlSXRlbUNvbXBvbmVudCwgYXJlUHJvcHNFcXVhbCk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyZWVJdGVtLmpzLm1hcCJdfQ== */"));
26882
+ }, ";width:100%;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4R3VDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
26696
26883
  var StyledExpandWrapper = /*#__PURE__*/_styled("div", {
26697
26884
  target: "e1xiryew5",
26698
26885
  label: "StyledExpandWrapper"
@@ -26708,7 +26895,7 @@ var StyledExpandWrapper = /*#__PURE__*/_styled("div", {
26708
26895
  var size = _ref3.size,
26709
26896
  theme = _ref3.theme;
26710
26897
  return size !== undefined ? size + "px" : theme.spaceScale.spacing06;
26711
- }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvSHVDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSkge1xyXG4gICAgICAgICAgICBoYW5kbGVDbGljayhldmVudCwgaXRlbUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVRvRm9jdXMgPT09IGl0ZW1JZCA/IDAgOiAtMTtcclxuICAgIH0sIFtpc0Rpc2FibGVkLCBpdGVtVG9Gb2N1cywgaXRlbUlkXSk7XHJcbiAgICBjb25zdCBzaG91bGRTaG93Q2hlY2tib3ggPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGkgJiZcclxuICAgICAgICAoaXNUb3BMZXZlbFNlbGVjdGFibGUgIT09IGZhbHNlIHx8ICF0b3BMZXZlbCk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIFByZXNzaW5nIGBDdHJsICsgRW50ZXJgIG9yIGBDb21tYW5kICsgRW50ZXJgIGZvY3VzZXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnQgd2l0aGluIHRoZSB0cmVlIGl0ZW1cclxuICAgICAqIGFuZCBsb2NrcyBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZm9jdXMgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGl0IGhhbmRsZXMga2V5IGV2ZW50cyBmb3IgaW50ZXJhY3Rpb24gZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogSXQgYWxzbyBoYW5kbGVzIHRoZSBvdGhlciBrZXlzIHRvIHRyaWdnZXIgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IG9uS2V5RG93bkhhbmRsZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBpc0VudGVyID0ga2V5ID09PSAnRW50ZXInO1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybE9yQ29tbWFuZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxuICAgICAgICBjb25zdCBpc0N0cmxFbnRlciA9IGlzQ3RybE9yQ29tbWFuZCAmJiBpc0VudGVyO1xyXG4gICAgICAgIC8vIElmIHRoZSBrZXkgaXMgQ3RybCArIEVudGVyIG9yIENvbW1hbmQgKyBFbnRlciwgZm9jdXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnRcclxuICAgICAgICAvLyBhbmQgbG9jayBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc0N0cmxFbnRlciAmJiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbSh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0WzBdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSB2YWxpZCBDU1Mgc2VsZWN0b3JzIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgcGVyaW9kcyBpbiBpdGVtSWQpXHJcbiAgICAgICAgY29uc3Qgc2FmZUl0ZW1JZCA9IENTUy5lc2NhcGUoaXRlbUlkKTtcclxuICAgICAgICBjb25zdCBpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCA9IHRhcmdldC5jbG9zZXN0KGAjJHtzYWZlSXRlbUlkfS1sYWJlbCwgIyR7c2FmZUl0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaGFuZGxlIGtleSBldmVudHMgZm9yIHRob3NlIGFyZWFzXHJcbiAgICAgICAgaWYgKGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmLCBoYW5kbGUga2V5IGRvd24gZm9yIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGdldEludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24sXHJcbiAgICAgICAgaGFuZGxlS2V5RG93bixcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dFZhbHVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB0cmVlSXRlbVN0eWxlcyB9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFRyZWVJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IFwiYXJpYS1leHBhbmRlZFwiOiBoYXNPd25UcmVlSXRlbXMgPyBleHBhbmRlZCA6IG51bGwsIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZEl0ZW0sIFwiYXJpYS1jaGVja2VkXCI6IHNob3VsZFNob3dDaGVja2JveCA/IGFyaWFDaGVja2VkVmFsdWUgOiBudWxsLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzT3duVHJlZUl0ZW1zOiBoYXNPd25UcmVlSXRlbXMsIGlkOiBpdGVtSWQsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBpc1ZpcnR1YWxpemVkOiBoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWQsIG5vZGVUeXBlOiBub2RlVHlwZSwgcm9sZTogXCJ0cmVlaXRlbVwiLCBzZWxlY3RhYmxlVHlwZTogc2VsZWN0YWJsZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbSwgdGhlbWU6IHRoZW1lLCB0YWJJbmRleDogdGFiSW5kZXgsIG9uS2V5RG93bjogb25LZXlEb3duSGFuZGxlciwgcmVmOiB0cmVlSXRlbVJlZiwgaG92ZXJDb2xvcjogaG92ZXJDb2xvciB9KSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbVdyYXBwZXIsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1pdGVtd3JhcHBlcmAsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCBoYXNDdXN0b21JY29uU2l6ZTogISFleHBhbmRJY29uU3R5bGVzPy5zaXplLCBpZDogYCR7aXRlbUlkfS1pdGVtd3JhcHBlcmAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBub2RlVHlwZTogbm9kZVR5cGUsIHNlbGVjdGFibGU6IHNlbGVjdGFibGUsIHN0eWxlOiBzdHlsZSwgdGhlbWU6IHRoZW1lLCByZWY6IG1lcmdlUmVmcyhyZWYsIGZvY3VzVHJhcEVsZW1lbnQpLCBvbkNsaWNrOiBoYW5kbGVPbkNsaWNrIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEV4cGFuZFdyYXBwZXIsIHsgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgY29sb3I6IGV4cGFuZEljb25TdHlsZXM/LmNvbG9yLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWV4cGFuZGAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgdGhlbWU6IHRoZW1lIH0sIGV4cGFuZGVkID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhwYW5kTW9yZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZXZyb25SaWdodEljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3dDaGVja2JveCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENoZWNrYm94V3JhcHBlciwgeyBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEluZGV0ZXJtaW5hdGVDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBzdGF0dXM6IGNoZWNrZWRTdGF0dXMgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IGNoZWNrZWQ6IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4oY2hlY2tlZFN0YXR1cykgfSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpKSxcclxuICAgICAgICAgICAgICAgIGhhc0d1aWRlTGluZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAoaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbURlcHRoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbURlcHRoIH0sIChfLCBkKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXJ0dWFsaXplZEd1aWRlTGluZSwgeyBrZXk6IGBndWlkZWxpbmUtJHtkfWAsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tdmlydHVhbGl6ZWQtZ3VpZGVsaW5lLSR7ZH1gLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNldElubGluZVN0YXJ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBkLCBmYWxzZSwgZmFsc2UsIHRydWUpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweClgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhhc093blRyZWVJdGVtcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3VpZGVMaW5lLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZ3VpZGVsaW5lYCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgZ3VpZGVMaW5lTGVmdDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgaXRlbURlcHRoLCBmYWxzZSwgZmFsc2UsIGZhbHNlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpIGAgfSkpKSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkPy50eXBlICE9PSBUcmVlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc3RhYmxlLCBwcmUtbWVtb2lzZWQgdmFsdWUgKHNlZSBjaGlsZEhpZXJhcmNoaWVzIGFib3ZlKS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSA9IGNoaWxkSGllcmFyY2hpZXNbY2hpbGRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHsgaXNPcGVuOiBleHBhbmRlZCwgdW5tb3VudE9uRXhpdDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyByb2xlOiBcImdyb3VwXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0LlByb3ZpZGVyLCB7IGtleTogY2hpbGQucHJvcHMuaXRlbUlkLCB2YWx1ZTogbmVzdGVkSGllcmFyY2h5VmFsdWUgfSwgY2hpbGQpKSkpO1xyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBpc01hY09TICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFZpc3VhbGx5SGlkZGVuLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGkxOG4uZXhwYW5zaW9uU3RhdGUuZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA6IGkxOG4uZXhwYW5zaW9uU3RhdGUuY29sbGFwc2VkKSkpKSkpO1xyXG59KTtcclxuLyoqXHJcbiAqIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vXHJcbiAqIE9ubHkgcmUtcmVuZGVyIFRyZWVJdGVtIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlXHJcbiAqL1xyXG5mdW5jdGlvbiBhcmVQcm9wc0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XHJcbiAgICAvLyBDaGVjayBpZiBpdGVtSWQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pdGVtSWQgIT09IG5leHRQcm9wcy5pdGVtSWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBsYWJlbCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsICE9PSBuZXh0UHJvcHMubGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmlzRGlzYWJsZWQgIT09IG5leHRQcm9wcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaWNvbiBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmljb24gIT09IG5leHRQcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgYWRkaXRpb25hbCBjb250ZW50IGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuYWRkaXRpb25hbENvbnRlbnQgIT09IG5leHRQcm9wcy5hZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGhvdmVyIGNvbG9yIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaG92ZXJDb2xvciAhPT0gbmV4dFByb3BzLmhvdmVyQ29sb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBjaGlsZHJlbiBjaGFuZ2VkIChmb3IgbmVzdGVkIHRyZWUgaXRlbXMpXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBjaGlsZHJlbiBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLmNoaWxkcmVuICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBzdHlsZXMgY2hhbmdlZFxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2Ugc3R5bGUgY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5zdHlsZSAhPT0gbmV4dFByb3BzLnN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbFN0eWxlICE9PSBuZXh0UHJvcHMubGFiZWxTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMudHJlZUl0ZW1TdHlsZXMgIT09IG5leHRQcm9wcy50cmVlSXRlbVN0eWxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIEFsbCByZWxldmFudCBwcm9wcyBhcmUgZXF1YWwsIHNraXAgcmUtcmVuZGVyXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogTWVtb2l6ZWQgVHJlZUl0ZW0gY29tcG9uZW50XHJcbiAqIE9ubHkgcmUtcmVuZGVycyB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGZvciBsYXJnZSB0cmVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRyZWVJdGVtID0gUmVhY3QubWVtbyhUcmVlSXRlbUNvbXBvbmVudCwgYXJlUHJvcHNFcXVhbCk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyZWVJdGVtLmpzLm1hcCJdfQ== */"));
26898
+ }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvSHVDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
26712
26899
  var GuideLine = /*#__PURE__*/_styled("div", {
26713
26900
  target: "e1xiryew4",
26714
26901
  label: "GuideLine"
@@ -26718,13 +26905,13 @@ var GuideLine = /*#__PURE__*/_styled("div", {
26718
26905
  return props.guideLineLeft;
26719
26906
  }, ";width:0;border-inline-start:1px solid ", function (props) {
26720
26907
  return props.isInverse ? curriedTransparentize(0.7, props.theme.colors.neutral100) : props.theme.colors.neutral300;
26721
- }, ";pointer-events:none;z-index:1;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4SDZCIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSkge1xyXG4gICAgICAgICAgICBoYW5kbGVDbGljayhldmVudCwgaXRlbUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVRvRm9jdXMgPT09IGl0ZW1JZCA/IDAgOiAtMTtcclxuICAgIH0sIFtpc0Rpc2FibGVkLCBpdGVtVG9Gb2N1cywgaXRlbUlkXSk7XHJcbiAgICBjb25zdCBzaG91bGRTaG93Q2hlY2tib3ggPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGkgJiZcclxuICAgICAgICAoaXNUb3BMZXZlbFNlbGVjdGFibGUgIT09IGZhbHNlIHx8ICF0b3BMZXZlbCk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIFByZXNzaW5nIGBDdHJsICsgRW50ZXJgIG9yIGBDb21tYW5kICsgRW50ZXJgIGZvY3VzZXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnQgd2l0aGluIHRoZSB0cmVlIGl0ZW1cclxuICAgICAqIGFuZCBsb2NrcyBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZm9jdXMgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGl0IGhhbmRsZXMga2V5IGV2ZW50cyBmb3IgaW50ZXJhY3Rpb24gZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogSXQgYWxzbyBoYW5kbGVzIHRoZSBvdGhlciBrZXlzIHRvIHRyaWdnZXIgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IG9uS2V5RG93bkhhbmRsZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBpc0VudGVyID0ga2V5ID09PSAnRW50ZXInO1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybE9yQ29tbWFuZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxuICAgICAgICBjb25zdCBpc0N0cmxFbnRlciA9IGlzQ3RybE9yQ29tbWFuZCAmJiBpc0VudGVyO1xyXG4gICAgICAgIC8vIElmIHRoZSBrZXkgaXMgQ3RybCArIEVudGVyIG9yIENvbW1hbmQgKyBFbnRlciwgZm9jdXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnRcclxuICAgICAgICAvLyBhbmQgbG9jayBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc0N0cmxFbnRlciAmJiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbSh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0WzBdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSB2YWxpZCBDU1Mgc2VsZWN0b3JzIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgcGVyaW9kcyBpbiBpdGVtSWQpXHJcbiAgICAgICAgY29uc3Qgc2FmZUl0ZW1JZCA9IENTUy5lc2NhcGUoaXRlbUlkKTtcclxuICAgICAgICBjb25zdCBpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCA9IHRhcmdldC5jbG9zZXN0KGAjJHtzYWZlSXRlbUlkfS1sYWJlbCwgIyR7c2FmZUl0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaGFuZGxlIGtleSBldmVudHMgZm9yIHRob3NlIGFyZWFzXHJcbiAgICAgICAgaWYgKGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmLCBoYW5kbGUga2V5IGRvd24gZm9yIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGdldEludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24sXHJcbiAgICAgICAgaGFuZGxlS2V5RG93bixcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dFZhbHVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB0cmVlSXRlbVN0eWxlcyB9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFRyZWVJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IFwiYXJpYS1leHBhbmRlZFwiOiBoYXNPd25UcmVlSXRlbXMgPyBleHBhbmRlZCA6IG51bGwsIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZEl0ZW0sIFwiYXJpYS1jaGVja2VkXCI6IHNob3VsZFNob3dDaGVja2JveCA/IGFyaWFDaGVja2VkVmFsdWUgOiBudWxsLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzT3duVHJlZUl0ZW1zOiBoYXNPd25UcmVlSXRlbXMsIGlkOiBpdGVtSWQsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBpc1ZpcnR1YWxpemVkOiBoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWQsIG5vZGVUeXBlOiBub2RlVHlwZSwgcm9sZTogXCJ0cmVlaXRlbVwiLCBzZWxlY3RhYmxlVHlwZTogc2VsZWN0YWJsZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbSwgdGhlbWU6IHRoZW1lLCB0YWJJbmRleDogdGFiSW5kZXgsIG9uS2V5RG93bjogb25LZXlEb3duSGFuZGxlciwgcmVmOiB0cmVlSXRlbVJlZiwgaG92ZXJDb2xvcjogaG92ZXJDb2xvciB9KSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbVdyYXBwZXIsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1pdGVtd3JhcHBlcmAsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCBoYXNDdXN0b21JY29uU2l6ZTogISFleHBhbmRJY29uU3R5bGVzPy5zaXplLCBpZDogYCR7aXRlbUlkfS1pdGVtd3JhcHBlcmAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBub2RlVHlwZTogbm9kZVR5cGUsIHNlbGVjdGFibGU6IHNlbGVjdGFibGUsIHN0eWxlOiBzdHlsZSwgdGhlbWU6IHRoZW1lLCByZWY6IG1lcmdlUmVmcyhyZWYsIGZvY3VzVHJhcEVsZW1lbnQpLCBvbkNsaWNrOiBoYW5kbGVPbkNsaWNrIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEV4cGFuZFdyYXBwZXIsIHsgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgY29sb3I6IGV4cGFuZEljb25TdHlsZXM/LmNvbG9yLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWV4cGFuZGAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgdGhlbWU6IHRoZW1lIH0sIGV4cGFuZGVkID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhwYW5kTW9yZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZXZyb25SaWdodEljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3dDaGVja2JveCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENoZWNrYm94V3JhcHBlciwgeyBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEluZGV0ZXJtaW5hdGVDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBzdGF0dXM6IGNoZWNrZWRTdGF0dXMgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IGNoZWNrZWQ6IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4oY2hlY2tlZFN0YXR1cykgfSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpKSxcclxuICAgICAgICAgICAgICAgIGhhc0d1aWRlTGluZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAoaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbURlcHRoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbURlcHRoIH0sIChfLCBkKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXJ0dWFsaXplZEd1aWRlTGluZSwgeyBrZXk6IGBndWlkZWxpbmUtJHtkfWAsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tdmlydHVhbGl6ZWQtZ3VpZGVsaW5lLSR7ZH1gLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNldElubGluZVN0YXJ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBkLCBmYWxzZSwgZmFsc2UsIHRydWUpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweClgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhhc093blRyZWVJdGVtcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3VpZGVMaW5lLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZ3VpZGVsaW5lYCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgZ3VpZGVMaW5lTGVmdDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgaXRlbURlcHRoLCBmYWxzZSwgZmFsc2UsIGZhbHNlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpIGAgfSkpKSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkPy50eXBlICE9PSBUcmVlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc3RhYmxlLCBwcmUtbWVtb2lzZWQgdmFsdWUgKHNlZSBjaGlsZEhpZXJhcmNoaWVzIGFib3ZlKS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSA9IGNoaWxkSGllcmFyY2hpZXNbY2hpbGRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHsgaXNPcGVuOiBleHBhbmRlZCwgdW5tb3VudE9uRXhpdDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyByb2xlOiBcImdyb3VwXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0LlByb3ZpZGVyLCB7IGtleTogY2hpbGQucHJvcHMuaXRlbUlkLCB2YWx1ZTogbmVzdGVkSGllcmFyY2h5VmFsdWUgfSwgY2hpbGQpKSkpO1xyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBpc01hY09TICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFZpc3VhbGx5SGlkZGVuLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGkxOG4uZXhwYW5zaW9uU3RhdGUuZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA6IGkxOG4uZXhwYW5zaW9uU3RhdGUuY29sbGFwc2VkKSkpKSkpO1xyXG59KTtcclxuLyoqXHJcbiAqIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vXHJcbiAqIE9ubHkgcmUtcmVuZGVyIFRyZWVJdGVtIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlXHJcbiAqL1xyXG5mdW5jdGlvbiBhcmVQcm9wc0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XHJcbiAgICAvLyBDaGVjayBpZiBpdGVtSWQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pdGVtSWQgIT09IG5leHRQcm9wcy5pdGVtSWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBsYWJlbCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsICE9PSBuZXh0UHJvcHMubGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmlzRGlzYWJsZWQgIT09IG5leHRQcm9wcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaWNvbiBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmljb24gIT09IG5leHRQcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgYWRkaXRpb25hbCBjb250ZW50IGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuYWRkaXRpb25hbENvbnRlbnQgIT09IG5leHRQcm9wcy5hZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGhvdmVyIGNvbG9yIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaG92ZXJDb2xvciAhPT0gbmV4dFByb3BzLmhvdmVyQ29sb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBjaGlsZHJlbiBjaGFuZ2VkIChmb3IgbmVzdGVkIHRyZWUgaXRlbXMpXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBjaGlsZHJlbiBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLmNoaWxkcmVuICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBzdHlsZXMgY2hhbmdlZFxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2Ugc3R5bGUgY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5zdHlsZSAhPT0gbmV4dFByb3BzLnN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbFN0eWxlICE9PSBuZXh0UHJvcHMubGFiZWxTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMudHJlZUl0ZW1TdHlsZXMgIT09IG5leHRQcm9wcy50cmVlSXRlbVN0eWxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIEFsbCByZWxldmFudCBwcm9wcyBhcmUgZXF1YWwsIHNraXAgcmUtcmVuZGVyXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogTWVtb2l6ZWQgVHJlZUl0ZW0gY29tcG9uZW50XHJcbiAqIE9ubHkgcmUtcmVuZGVycyB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGZvciBsYXJnZSB0cmVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRyZWVJdGVtID0gUmVhY3QubWVtbyhUcmVlSXRlbUNvbXBvbmVudCwgYXJlUHJvcHNFcXVhbCk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyZWVJdGVtLmpzLm1hcCJdfQ== */"));
26908
+ }, ";pointer-events:none;z-index:1;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4SDZCIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
26722
26909
  var VirtualizedGuideLine = /*#__PURE__*/_styled("div", {
26723
26910
  target: "e1xiryew3",
26724
26911
  label: "VirtualizedGuideLine"
26725
26912
  })("position:absolute;top:0;bottom:0;width:0;border-inline-start:1px solid ", function (props) {
26726
26913
  return props.isInverse ? curriedTransparentize(0.7, props.theme.colors.neutral100) : props.theme.colors.neutral300;
26727
- }, ";pointer-events:none;z-index:1;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEySXdDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSkge1xyXG4gICAgICAgICAgICBoYW5kbGVDbGljayhldmVudCwgaXRlbUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVRvRm9jdXMgPT09IGl0ZW1JZCA/IDAgOiAtMTtcclxuICAgIH0sIFtpc0Rpc2FibGVkLCBpdGVtVG9Gb2N1cywgaXRlbUlkXSk7XHJcbiAgICBjb25zdCBzaG91bGRTaG93Q2hlY2tib3ggPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGkgJiZcclxuICAgICAgICAoaXNUb3BMZXZlbFNlbGVjdGFibGUgIT09IGZhbHNlIHx8ICF0b3BMZXZlbCk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIFByZXNzaW5nIGBDdHJsICsgRW50ZXJgIG9yIGBDb21tYW5kICsgRW50ZXJgIGZvY3VzZXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnQgd2l0aGluIHRoZSB0cmVlIGl0ZW1cclxuICAgICAqIGFuZCBsb2NrcyBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZm9jdXMgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGl0IGhhbmRsZXMga2V5IGV2ZW50cyBmb3IgaW50ZXJhY3Rpb24gZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogSXQgYWxzbyBoYW5kbGVzIHRoZSBvdGhlciBrZXlzIHRvIHRyaWdnZXIgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IG9uS2V5RG93bkhhbmRsZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBpc0VudGVyID0ga2V5ID09PSAnRW50ZXInO1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybE9yQ29tbWFuZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxuICAgICAgICBjb25zdCBpc0N0cmxFbnRlciA9IGlzQ3RybE9yQ29tbWFuZCAmJiBpc0VudGVyO1xyXG4gICAgICAgIC8vIElmIHRoZSBrZXkgaXMgQ3RybCArIEVudGVyIG9yIENvbW1hbmQgKyBFbnRlciwgZm9jdXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnRcclxuICAgICAgICAvLyBhbmQgbG9jayBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc0N0cmxFbnRlciAmJiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbSh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0WzBdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSB2YWxpZCBDU1Mgc2VsZWN0b3JzIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgcGVyaW9kcyBpbiBpdGVtSWQpXHJcbiAgICAgICAgY29uc3Qgc2FmZUl0ZW1JZCA9IENTUy5lc2NhcGUoaXRlbUlkKTtcclxuICAgICAgICBjb25zdCBpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCA9IHRhcmdldC5jbG9zZXN0KGAjJHtzYWZlSXRlbUlkfS1sYWJlbCwgIyR7c2FmZUl0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaGFuZGxlIGtleSBldmVudHMgZm9yIHRob3NlIGFyZWFzXHJcbiAgICAgICAgaWYgKGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmLCBoYW5kbGUga2V5IGRvd24gZm9yIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGdldEludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24sXHJcbiAgICAgICAgaGFuZGxlS2V5RG93bixcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dFZhbHVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB0cmVlSXRlbVN0eWxlcyB9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFRyZWVJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IFwiYXJpYS1leHBhbmRlZFwiOiBoYXNPd25UcmVlSXRlbXMgPyBleHBhbmRlZCA6IG51bGwsIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZEl0ZW0sIFwiYXJpYS1jaGVja2VkXCI6IHNob3VsZFNob3dDaGVja2JveCA/IGFyaWFDaGVja2VkVmFsdWUgOiBudWxsLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzT3duVHJlZUl0ZW1zOiBoYXNPd25UcmVlSXRlbXMsIGlkOiBpdGVtSWQsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBpc1ZpcnR1YWxpemVkOiBoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWQsIG5vZGVUeXBlOiBub2RlVHlwZSwgcm9sZTogXCJ0cmVlaXRlbVwiLCBzZWxlY3RhYmxlVHlwZTogc2VsZWN0YWJsZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbSwgdGhlbWU6IHRoZW1lLCB0YWJJbmRleDogdGFiSW5kZXgsIG9uS2V5RG93bjogb25LZXlEb3duSGFuZGxlciwgcmVmOiB0cmVlSXRlbVJlZiwgaG92ZXJDb2xvcjogaG92ZXJDb2xvciB9KSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbVdyYXBwZXIsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1pdGVtd3JhcHBlcmAsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCBoYXNDdXN0b21JY29uU2l6ZTogISFleHBhbmRJY29uU3R5bGVzPy5zaXplLCBpZDogYCR7aXRlbUlkfS1pdGVtd3JhcHBlcmAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBub2RlVHlwZTogbm9kZVR5cGUsIHNlbGVjdGFibGU6IHNlbGVjdGFibGUsIHN0eWxlOiBzdHlsZSwgdGhlbWU6IHRoZW1lLCByZWY6IG1lcmdlUmVmcyhyZWYsIGZvY3VzVHJhcEVsZW1lbnQpLCBvbkNsaWNrOiBoYW5kbGVPbkNsaWNrIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEV4cGFuZFdyYXBwZXIsIHsgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgY29sb3I6IGV4cGFuZEljb25TdHlsZXM/LmNvbG9yLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWV4cGFuZGAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgdGhlbWU6IHRoZW1lIH0sIGV4cGFuZGVkID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhwYW5kTW9yZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZXZyb25SaWdodEljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3dDaGVja2JveCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENoZWNrYm94V3JhcHBlciwgeyBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEluZGV0ZXJtaW5hdGVDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBzdGF0dXM6IGNoZWNrZWRTdGF0dXMgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IGNoZWNrZWQ6IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4oY2hlY2tlZFN0YXR1cykgfSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpKSxcclxuICAgICAgICAgICAgICAgIGhhc0d1aWRlTGluZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAoaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbURlcHRoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbURlcHRoIH0sIChfLCBkKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXJ0dWFsaXplZEd1aWRlTGluZSwgeyBrZXk6IGBndWlkZWxpbmUtJHtkfWAsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tdmlydHVhbGl6ZWQtZ3VpZGVsaW5lLSR7ZH1gLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNldElubGluZVN0YXJ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBkLCBmYWxzZSwgZmFsc2UsIHRydWUpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweClgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhhc093blRyZWVJdGVtcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3VpZGVMaW5lLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZ3VpZGVsaW5lYCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgZ3VpZGVMaW5lTGVmdDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgaXRlbURlcHRoLCBmYWxzZSwgZmFsc2UsIGZhbHNlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpIGAgfSkpKSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkPy50eXBlICE9PSBUcmVlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc3RhYmxlLCBwcmUtbWVtb2lzZWQgdmFsdWUgKHNlZSBjaGlsZEhpZXJhcmNoaWVzIGFib3ZlKS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSA9IGNoaWxkSGllcmFyY2hpZXNbY2hpbGRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHsgaXNPcGVuOiBleHBhbmRlZCwgdW5tb3VudE9uRXhpdDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyByb2xlOiBcImdyb3VwXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0LlByb3ZpZGVyLCB7IGtleTogY2hpbGQucHJvcHMuaXRlbUlkLCB2YWx1ZTogbmVzdGVkSGllcmFyY2h5VmFsdWUgfSwgY2hpbGQpKSkpO1xyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBpc01hY09TICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFZpc3VhbGx5SGlkZGVuLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGkxOG4uZXhwYW5zaW9uU3RhdGUuZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA6IGkxOG4uZXhwYW5zaW9uU3RhdGUuY29sbGFwc2VkKSkpKSkpO1xyXG59KTtcclxuLyoqXHJcbiAqIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vXHJcbiAqIE9ubHkgcmUtcmVuZGVyIFRyZWVJdGVtIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlXHJcbiAqL1xyXG5mdW5jdGlvbiBhcmVQcm9wc0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XHJcbiAgICAvLyBDaGVjayBpZiBpdGVtSWQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pdGVtSWQgIT09IG5leHRQcm9wcy5pdGVtSWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBsYWJlbCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsICE9PSBuZXh0UHJvcHMubGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmlzRGlzYWJsZWQgIT09IG5leHRQcm9wcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaWNvbiBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmljb24gIT09IG5leHRQcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgYWRkaXRpb25hbCBjb250ZW50IGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuYWRkaXRpb25hbENvbnRlbnQgIT09IG5leHRQcm9wcy5hZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGhvdmVyIGNvbG9yIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaG92ZXJDb2xvciAhPT0gbmV4dFByb3BzLmhvdmVyQ29sb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBjaGlsZHJlbiBjaGFuZ2VkIChmb3IgbmVzdGVkIHRyZWUgaXRlbXMpXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBjaGlsZHJlbiBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLmNoaWxkcmVuICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBzdHlsZXMgY2hhbmdlZFxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2Ugc3R5bGUgY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5zdHlsZSAhPT0gbmV4dFByb3BzLnN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbFN0eWxlICE9PSBuZXh0UHJvcHMubGFiZWxTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMudHJlZUl0ZW1TdHlsZXMgIT09IG5leHRQcm9wcy50cmVlSXRlbVN0eWxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIEFsbCByZWxldmFudCBwcm9wcyBhcmUgZXF1YWwsIHNraXAgcmUtcmVuZGVyXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogTWVtb2l6ZWQgVHJlZUl0ZW0gY29tcG9uZW50XHJcbiAqIE9ubHkgcmUtcmVuZGVycyB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGZvciBsYXJnZSB0cmVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRyZWVJdGVtID0gUmVhY3QubWVtbyhUcmVlSXRlbUNvbXBvbmVudCwgYXJlUHJvcHNFcXVhbCk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyZWVJdGVtLmpzLm1hcCJdfQ== */"));
26914
+ }, ";pointer-events:none;z-index:1;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEySXdDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
26728
26915
  var StyledCheckboxWrapper = /*#__PURE__*/_styled("div", {
26729
26916
  target: "e1xiryew2",
26730
26917
  label: "StyledCheckboxWrapper"
@@ -26734,7 +26921,7 @@ var StyledCheckboxWrapper = /*#__PURE__*/_styled("div", {
26734
26921
  return props.hasAdditionalContent ? 'flex' : 'inline-flex';
26735
26922
  }, ";flex-direction:column;width:", function (props) {
26736
26923
  return "calc(100% - " + props.theme.spaceScale.spacing03 + ")";
26737
- }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1SnlDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSkge1xyXG4gICAgICAgICAgICBoYW5kbGVDbGljayhldmVudCwgaXRlbUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVRvRm9jdXMgPT09IGl0ZW1JZCA/IDAgOiAtMTtcclxuICAgIH0sIFtpc0Rpc2FibGVkLCBpdGVtVG9Gb2N1cywgaXRlbUlkXSk7XHJcbiAgICBjb25zdCBzaG91bGRTaG93Q2hlY2tib3ggPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGkgJiZcclxuICAgICAgICAoaXNUb3BMZXZlbFNlbGVjdGFibGUgIT09IGZhbHNlIHx8ICF0b3BMZXZlbCk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIFByZXNzaW5nIGBDdHJsICsgRW50ZXJgIG9yIGBDb21tYW5kICsgRW50ZXJgIGZvY3VzZXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnQgd2l0aGluIHRoZSB0cmVlIGl0ZW1cclxuICAgICAqIGFuZCBsb2NrcyBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZm9jdXMgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGl0IGhhbmRsZXMga2V5IGV2ZW50cyBmb3IgaW50ZXJhY3Rpb24gZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogSXQgYWxzbyBoYW5kbGVzIHRoZSBvdGhlciBrZXlzIHRvIHRyaWdnZXIgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IG9uS2V5RG93bkhhbmRsZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBpc0VudGVyID0ga2V5ID09PSAnRW50ZXInO1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybE9yQ29tbWFuZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxuICAgICAgICBjb25zdCBpc0N0cmxFbnRlciA9IGlzQ3RybE9yQ29tbWFuZCAmJiBpc0VudGVyO1xyXG4gICAgICAgIC8vIElmIHRoZSBrZXkgaXMgQ3RybCArIEVudGVyIG9yIENvbW1hbmQgKyBFbnRlciwgZm9jdXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnRcclxuICAgICAgICAvLyBhbmQgbG9jayBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc0N0cmxFbnRlciAmJiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbSh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0WzBdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSB2YWxpZCBDU1Mgc2VsZWN0b3JzIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgcGVyaW9kcyBpbiBpdGVtSWQpXHJcbiAgICAgICAgY29uc3Qgc2FmZUl0ZW1JZCA9IENTUy5lc2NhcGUoaXRlbUlkKTtcclxuICAgICAgICBjb25zdCBpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCA9IHRhcmdldC5jbG9zZXN0KGAjJHtzYWZlSXRlbUlkfS1sYWJlbCwgIyR7c2FmZUl0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaGFuZGxlIGtleSBldmVudHMgZm9yIHRob3NlIGFyZWFzXHJcbiAgICAgICAgaWYgKGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmLCBoYW5kbGUga2V5IGRvd24gZm9yIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGdldEludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24sXHJcbiAgICAgICAgaGFuZGxlS2V5RG93bixcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dFZhbHVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB0cmVlSXRlbVN0eWxlcyB9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFRyZWVJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IFwiYXJpYS1leHBhbmRlZFwiOiBoYXNPd25UcmVlSXRlbXMgPyBleHBhbmRlZCA6IG51bGwsIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZEl0ZW0sIFwiYXJpYS1jaGVja2VkXCI6IHNob3VsZFNob3dDaGVja2JveCA/IGFyaWFDaGVja2VkVmFsdWUgOiBudWxsLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzT3duVHJlZUl0ZW1zOiBoYXNPd25UcmVlSXRlbXMsIGlkOiBpdGVtSWQsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBpc1ZpcnR1YWxpemVkOiBoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWQsIG5vZGVUeXBlOiBub2RlVHlwZSwgcm9sZTogXCJ0cmVlaXRlbVwiLCBzZWxlY3RhYmxlVHlwZTogc2VsZWN0YWJsZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbSwgdGhlbWU6IHRoZW1lLCB0YWJJbmRleDogdGFiSW5kZXgsIG9uS2V5RG93bjogb25LZXlEb3duSGFuZGxlciwgcmVmOiB0cmVlSXRlbVJlZiwgaG92ZXJDb2xvcjogaG92ZXJDb2xvciB9KSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbVdyYXBwZXIsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1pdGVtd3JhcHBlcmAsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCBoYXNDdXN0b21JY29uU2l6ZTogISFleHBhbmRJY29uU3R5bGVzPy5zaXplLCBpZDogYCR7aXRlbUlkfS1pdGVtd3JhcHBlcmAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBub2RlVHlwZTogbm9kZVR5cGUsIHNlbGVjdGFibGU6IHNlbGVjdGFibGUsIHN0eWxlOiBzdHlsZSwgdGhlbWU6IHRoZW1lLCByZWY6IG1lcmdlUmVmcyhyZWYsIGZvY3VzVHJhcEVsZW1lbnQpLCBvbkNsaWNrOiBoYW5kbGVPbkNsaWNrIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEV4cGFuZFdyYXBwZXIsIHsgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgY29sb3I6IGV4cGFuZEljb25TdHlsZXM/LmNvbG9yLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWV4cGFuZGAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgdGhlbWU6IHRoZW1lIH0sIGV4cGFuZGVkID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhwYW5kTW9yZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZXZyb25SaWdodEljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3dDaGVja2JveCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENoZWNrYm94V3JhcHBlciwgeyBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEluZGV0ZXJtaW5hdGVDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBzdGF0dXM6IGNoZWNrZWRTdGF0dXMgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IGNoZWNrZWQ6IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4oY2hlY2tlZFN0YXR1cykgfSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpKSxcclxuICAgICAgICAgICAgICAgIGhhc0d1aWRlTGluZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAoaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbURlcHRoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbURlcHRoIH0sIChfLCBkKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXJ0dWFsaXplZEd1aWRlTGluZSwgeyBrZXk6IGBndWlkZWxpbmUtJHtkfWAsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tdmlydHVhbGl6ZWQtZ3VpZGVsaW5lLSR7ZH1gLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNldElubGluZVN0YXJ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBkLCBmYWxzZSwgZmFsc2UsIHRydWUpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweClgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhhc093blRyZWVJdGVtcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3VpZGVMaW5lLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZ3VpZGVsaW5lYCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgZ3VpZGVMaW5lTGVmdDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgaXRlbURlcHRoLCBmYWxzZSwgZmFsc2UsIGZhbHNlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpIGAgfSkpKSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkPy50eXBlICE9PSBUcmVlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc3RhYmxlLCBwcmUtbWVtb2lzZWQgdmFsdWUgKHNlZSBjaGlsZEhpZXJhcmNoaWVzIGFib3ZlKS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSA9IGNoaWxkSGllcmFyY2hpZXNbY2hpbGRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHsgaXNPcGVuOiBleHBhbmRlZCwgdW5tb3VudE9uRXhpdDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyByb2xlOiBcImdyb3VwXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0LlByb3ZpZGVyLCB7IGtleTogY2hpbGQucHJvcHMuaXRlbUlkLCB2YWx1ZTogbmVzdGVkSGllcmFyY2h5VmFsdWUgfSwgY2hpbGQpKSkpO1xyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBpc01hY09TICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFZpc3VhbGx5SGlkZGVuLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGkxOG4uZXhwYW5zaW9uU3RhdGUuZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA6IGkxOG4uZXhwYW5zaW9uU3RhdGUuY29sbGFwc2VkKSkpKSkpO1xyXG59KTtcclxuLyoqXHJcbiAqIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vXHJcbiAqIE9ubHkgcmUtcmVuZGVyIFRyZWVJdGVtIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlXHJcbiAqL1xyXG5mdW5jdGlvbiBhcmVQcm9wc0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XHJcbiAgICAvLyBDaGVjayBpZiBpdGVtSWQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pdGVtSWQgIT09IG5leHRQcm9wcy5pdGVtSWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBsYWJlbCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsICE9PSBuZXh0UHJvcHMubGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmlzRGlzYWJsZWQgIT09IG5leHRQcm9wcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaWNvbiBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmljb24gIT09IG5leHRQcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgYWRkaXRpb25hbCBjb250ZW50IGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuYWRkaXRpb25hbENvbnRlbnQgIT09IG5leHRQcm9wcy5hZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGhvdmVyIGNvbG9yIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaG92ZXJDb2xvciAhPT0gbmV4dFByb3BzLmhvdmVyQ29sb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBjaGlsZHJlbiBjaGFuZ2VkIChmb3IgbmVzdGVkIHRyZWUgaXRlbXMpXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBjaGlsZHJlbiBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLmNoaWxkcmVuICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBzdHlsZXMgY2hhbmdlZFxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2Ugc3R5bGUgY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5zdHlsZSAhPT0gbmV4dFByb3BzLnN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbFN0eWxlICE9PSBuZXh0UHJvcHMubGFiZWxTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMudHJlZUl0ZW1TdHlsZXMgIT09IG5leHRQcm9wcy50cmVlSXRlbVN0eWxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIEFsbCByZWxldmFudCBwcm9wcyBhcmUgZXF1YWwsIHNraXAgcmUtcmVuZGVyXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogTWVtb2l6ZWQgVHJlZUl0ZW0gY29tcG9uZW50XHJcbiAqIE9ubHkgcmUtcmVuZGVycyB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGZvciBsYXJnZSB0cmVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRyZWVJdGVtID0gUmVhY3QubWVtbyhUcmVlSXRlbUNvbXBvbmVudCwgYXJlUHJvcHNFcXVhbCk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyZWVJdGVtLmpzLm1hcCJdfQ== */"));
26924
+ }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF1SnlDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
26738
26925
  var StyledItemWrapper = /*#__PURE__*/_styled("div", {
26739
26926
  target: "e1xiryew1",
26740
26927
  label: "StyledItemWrapper"
@@ -26744,13 +26931,13 @@ var StyledItemWrapper = /*#__PURE__*/_styled("div", {
26744
26931
  return props.hasCustomIconSize ? 'center' : 'flex-start';
26745
26932
  }, ";cursor:", function (props) {
26746
26933
  return getTreeItemWrapperCursor(props.isDisabled, props.selectable, props.nodeType);
26747
- }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4SnFDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSkge1xyXG4gICAgICAgICAgICBoYW5kbGVDbGljayhldmVudCwgaXRlbUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVRvRm9jdXMgPT09IGl0ZW1JZCA/IDAgOiAtMTtcclxuICAgIH0sIFtpc0Rpc2FibGVkLCBpdGVtVG9Gb2N1cywgaXRlbUlkXSk7XHJcbiAgICBjb25zdCBzaG91bGRTaG93Q2hlY2tib3ggPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGkgJiZcclxuICAgICAgICAoaXNUb3BMZXZlbFNlbGVjdGFibGUgIT09IGZhbHNlIHx8ICF0b3BMZXZlbCk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIFByZXNzaW5nIGBDdHJsICsgRW50ZXJgIG9yIGBDb21tYW5kICsgRW50ZXJgIGZvY3VzZXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnQgd2l0aGluIHRoZSB0cmVlIGl0ZW1cclxuICAgICAqIGFuZCBsb2NrcyBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZm9jdXMgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGl0IGhhbmRsZXMga2V5IGV2ZW50cyBmb3IgaW50ZXJhY3Rpb24gZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogSXQgYWxzbyBoYW5kbGVzIHRoZSBvdGhlciBrZXlzIHRvIHRyaWdnZXIgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IG9uS2V5RG93bkhhbmRsZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBpc0VudGVyID0ga2V5ID09PSAnRW50ZXInO1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybE9yQ29tbWFuZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxuICAgICAgICBjb25zdCBpc0N0cmxFbnRlciA9IGlzQ3RybE9yQ29tbWFuZCAmJiBpc0VudGVyO1xyXG4gICAgICAgIC8vIElmIHRoZSBrZXkgaXMgQ3RybCArIEVudGVyIG9yIENvbW1hbmQgKyBFbnRlciwgZm9jdXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnRcclxuICAgICAgICAvLyBhbmQgbG9jayBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc0N0cmxFbnRlciAmJiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbSh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0WzBdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSB2YWxpZCBDU1Mgc2VsZWN0b3JzIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgcGVyaW9kcyBpbiBpdGVtSWQpXHJcbiAgICAgICAgY29uc3Qgc2FmZUl0ZW1JZCA9IENTUy5lc2NhcGUoaXRlbUlkKTtcclxuICAgICAgICBjb25zdCBpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCA9IHRhcmdldC5jbG9zZXN0KGAjJHtzYWZlSXRlbUlkfS1sYWJlbCwgIyR7c2FmZUl0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaGFuZGxlIGtleSBldmVudHMgZm9yIHRob3NlIGFyZWFzXHJcbiAgICAgICAgaWYgKGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmLCBoYW5kbGUga2V5IGRvd24gZm9yIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGdldEludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24sXHJcbiAgICAgICAgaGFuZGxlS2V5RG93bixcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dFZhbHVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB0cmVlSXRlbVN0eWxlcyB9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFRyZWVJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IFwiYXJpYS1leHBhbmRlZFwiOiBoYXNPd25UcmVlSXRlbXMgPyBleHBhbmRlZCA6IG51bGwsIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZEl0ZW0sIFwiYXJpYS1jaGVja2VkXCI6IHNob3VsZFNob3dDaGVja2JveCA/IGFyaWFDaGVja2VkVmFsdWUgOiBudWxsLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzT3duVHJlZUl0ZW1zOiBoYXNPd25UcmVlSXRlbXMsIGlkOiBpdGVtSWQsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBpc1ZpcnR1YWxpemVkOiBoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWQsIG5vZGVUeXBlOiBub2RlVHlwZSwgcm9sZTogXCJ0cmVlaXRlbVwiLCBzZWxlY3RhYmxlVHlwZTogc2VsZWN0YWJsZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbSwgdGhlbWU6IHRoZW1lLCB0YWJJbmRleDogdGFiSW5kZXgsIG9uS2V5RG93bjogb25LZXlEb3duSGFuZGxlciwgcmVmOiB0cmVlSXRlbVJlZiwgaG92ZXJDb2xvcjogaG92ZXJDb2xvciB9KSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbVdyYXBwZXIsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1pdGVtd3JhcHBlcmAsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCBoYXNDdXN0b21JY29uU2l6ZTogISFleHBhbmRJY29uU3R5bGVzPy5zaXplLCBpZDogYCR7aXRlbUlkfS1pdGVtd3JhcHBlcmAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBub2RlVHlwZTogbm9kZVR5cGUsIHNlbGVjdGFibGU6IHNlbGVjdGFibGUsIHN0eWxlOiBzdHlsZSwgdGhlbWU6IHRoZW1lLCByZWY6IG1lcmdlUmVmcyhyZWYsIGZvY3VzVHJhcEVsZW1lbnQpLCBvbkNsaWNrOiBoYW5kbGVPbkNsaWNrIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEV4cGFuZFdyYXBwZXIsIHsgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgY29sb3I6IGV4cGFuZEljb25TdHlsZXM/LmNvbG9yLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWV4cGFuZGAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgdGhlbWU6IHRoZW1lIH0sIGV4cGFuZGVkID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhwYW5kTW9yZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZXZyb25SaWdodEljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3dDaGVja2JveCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENoZWNrYm94V3JhcHBlciwgeyBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEluZGV0ZXJtaW5hdGVDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBzdGF0dXM6IGNoZWNrZWRTdGF0dXMgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IGNoZWNrZWQ6IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4oY2hlY2tlZFN0YXR1cykgfSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpKSxcclxuICAgICAgICAgICAgICAgIGhhc0d1aWRlTGluZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAoaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbURlcHRoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbURlcHRoIH0sIChfLCBkKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXJ0dWFsaXplZEd1aWRlTGluZSwgeyBrZXk6IGBndWlkZWxpbmUtJHtkfWAsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tdmlydHVhbGl6ZWQtZ3VpZGVsaW5lLSR7ZH1gLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNldElubGluZVN0YXJ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBkLCBmYWxzZSwgZmFsc2UsIHRydWUpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweClgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhhc093blRyZWVJdGVtcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3VpZGVMaW5lLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZ3VpZGVsaW5lYCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgZ3VpZGVMaW5lTGVmdDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgaXRlbURlcHRoLCBmYWxzZSwgZmFsc2UsIGZhbHNlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpIGAgfSkpKSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkPy50eXBlICE9PSBUcmVlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc3RhYmxlLCBwcmUtbWVtb2lzZWQgdmFsdWUgKHNlZSBjaGlsZEhpZXJhcmNoaWVzIGFib3ZlKS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSA9IGNoaWxkSGllcmFyY2hpZXNbY2hpbGRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHsgaXNPcGVuOiBleHBhbmRlZCwgdW5tb3VudE9uRXhpdDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyByb2xlOiBcImdyb3VwXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0LlByb3ZpZGVyLCB7IGtleTogY2hpbGQucHJvcHMuaXRlbUlkLCB2YWx1ZTogbmVzdGVkSGllcmFyY2h5VmFsdWUgfSwgY2hpbGQpKSkpO1xyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBpc01hY09TICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFZpc3VhbGx5SGlkZGVuLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGkxOG4uZXhwYW5zaW9uU3RhdGUuZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA6IGkxOG4uZXhwYW5zaW9uU3RhdGUuY29sbGFwc2VkKSkpKSkpO1xyXG59KTtcclxuLyoqXHJcbiAqIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vXHJcbiAqIE9ubHkgcmUtcmVuZGVyIFRyZWVJdGVtIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlXHJcbiAqL1xyXG5mdW5jdGlvbiBhcmVQcm9wc0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XHJcbiAgICAvLyBDaGVjayBpZiBpdGVtSWQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pdGVtSWQgIT09IG5leHRQcm9wcy5pdGVtSWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBsYWJlbCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsICE9PSBuZXh0UHJvcHMubGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmlzRGlzYWJsZWQgIT09IG5leHRQcm9wcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaWNvbiBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmljb24gIT09IG5leHRQcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgYWRkaXRpb25hbCBjb250ZW50IGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuYWRkaXRpb25hbENvbnRlbnQgIT09IG5leHRQcm9wcy5hZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGhvdmVyIGNvbG9yIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaG92ZXJDb2xvciAhPT0gbmV4dFByb3BzLmhvdmVyQ29sb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBjaGlsZHJlbiBjaGFuZ2VkIChmb3IgbmVzdGVkIHRyZWUgaXRlbXMpXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBjaGlsZHJlbiBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLmNoaWxkcmVuICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBzdHlsZXMgY2hhbmdlZFxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2Ugc3R5bGUgY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5zdHlsZSAhPT0gbmV4dFByb3BzLnN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbFN0eWxlICE9PSBuZXh0UHJvcHMubGFiZWxTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMudHJlZUl0ZW1TdHlsZXMgIT09IG5leHRQcm9wcy50cmVlSXRlbVN0eWxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIEFsbCByZWxldmFudCBwcm9wcyBhcmUgZXF1YWwsIHNraXAgcmUtcmVuZGVyXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogTWVtb2l6ZWQgVHJlZUl0ZW0gY29tcG9uZW50XHJcbiAqIE9ubHkgcmUtcmVuZGVycyB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGZvciBsYXJnZSB0cmVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRyZWVJdGVtID0gUmVhY3QubWVtbyhUcmVlSXRlbUNvbXBvbmVudCwgYXJlUHJvcHNFcXVhbCk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyZWVJdGVtLmpzLm1hcCJdfQ== */"));
26934
+ }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4SnFDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
26748
26935
  var AdditionalContentWrapper$1 = /*#__PURE__*/_styled("div", {
26749
26936
  target: "e1xiryew0",
26750
26937
  label: "AdditionalContentWrapper"
26751
26938
  })("margin-bottom:", function (props) {
26752
26939
  return props.theme.spaceScale.spacing05;
26753
- }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvSzRDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uRXhwYW5kZWRDbGlja2VkKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSkge1xyXG4gICAgICAgICAgICBoYW5kbGVDbGljayhldmVudCwgaXRlbUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgdGFiSW5kZXggPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbVRvRm9jdXMgPT09IGl0ZW1JZCA/IDAgOiAtMTtcclxuICAgIH0sIFtpc0Rpc2FibGVkLCBpdGVtVG9Gb2N1cywgaXRlbUlkXSk7XHJcbiAgICBjb25zdCBzaG91bGRTaG93Q2hlY2tib3ggPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGkgJiZcclxuICAgICAgICAoaXNUb3BMZXZlbFNlbGVjdGFibGUgIT09IGZhbHNlIHx8ICF0b3BMZXZlbCk7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uIHdpdGhpbiB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIFByZXNzaW5nIGBDdHJsICsgRW50ZXJgIG9yIGBDb21tYW5kICsgRW50ZXJgIGZvY3VzZXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnQgd2l0aGluIHRoZSB0cmVlIGl0ZW1cclxuICAgICAqIGFuZCBsb2NrcyBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbS5cclxuICAgICAqXHJcbiAgICAgKiBJZiB0aGUgZm9jdXMgaXMgd2l0aGluIHRoZSBsYWJlbCBvciBhZGRpdGlvbmFsIGNvbnRlbnQsIGl0IGhhbmRsZXMga2V5IGV2ZW50cyBmb3IgaW50ZXJhY3Rpb24gZWxlbWVudHMuXHJcbiAgICAgKlxyXG4gICAgICogSXQgYWxzbyBoYW5kbGVzIHRoZSBvdGhlciBrZXlzIHRvIHRyaWdnZXIgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IG9uS2V5RG93bkhhbmRsZXIgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBjb25zdCB7IGtleSwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0IH0gPSBldmVudDtcclxuICAgICAgICBjb25zdCBpc0VudGVyID0ga2V5ID09PSAnRW50ZXInO1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybE9yQ29tbWFuZCA9IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleTtcclxuICAgICAgICBjb25zdCBpc0N0cmxFbnRlciA9IGlzQ3RybE9yQ29tbWFuZCAmJiBpc0VudGVyO1xyXG4gICAgICAgIC8vIElmIHRoZSBrZXkgaXMgQ3RybCArIEVudGVyIG9yIENvbW1hbmQgKyBFbnRlciwgZm9jdXMgdGhlIGZpcnN0IGludGVyYWN0aXZlIGVsZW1lbnRcclxuICAgICAgICAvLyBhbmQgbG9jayBmb2N1cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc0N0cmxFbnRlciAmJiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgc2V0SXNJbnNpZGVUcmVlSXRlbSh0cnVlKTtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50c0xpc3QgPSBnZXRJbnRlcmFjdGl2ZUVsZW1lbnRzKGN1cnJlbnRUYXJnZXQsIGludGVyYWN0aXZlRWxlbWVudHMpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IGludGVyYWN0aXZlRWxlbWVudHNMaXN0WzBdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUb0ZvY3VzLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEVuc3VyZSB2YWxpZCBDU1Mgc2VsZWN0b3JzIGJ5IGVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiwgcGVyaW9kcyBpbiBpdGVtSWQpXHJcbiAgICAgICAgY29uc3Qgc2FmZUl0ZW1JZCA9IENTUy5lc2NhcGUoaXRlbUlkKTtcclxuICAgICAgICBjb25zdCBpc1dpdGhpbkxhYmVsT3JBZGRpdGlvbmFsQ29udGVudCA9IHRhcmdldC5jbG9zZXN0KGAjJHtzYWZlSXRlbUlkfS1sYWJlbCwgIyR7c2FmZUl0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCk7XHJcbiAgICAgICAgLy8gSWYgdGhlIHRhcmdldCBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaGFuZGxlIGtleSBldmVudHMgZm9yIHRob3NlIGFyZWFzXHJcbiAgICAgICAgaWYgKGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duKGV2ZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHRoZSB0cmVlIGl0ZW0gaXRzZWxmLCBoYW5kbGUga2V5IGRvd24gZm9yIHRoZSB0cmVlIGl0ZW1cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW1xyXG4gICAgICAgIGdldEludGVyYWN0aXZlRWxlbWVudHMsXHJcbiAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24sXHJcbiAgICAgICAgaGFuZGxlS2V5RG93bixcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyZWVJdGVtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogY29udGV4dFZhbHVlIH0sXHJcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IHN0eWxlOiB0cmVlSXRlbVN0eWxlcyB9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZFRyZWVJdGVtLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IFwiYXJpYS1leHBhbmRlZFwiOiBoYXNPd25UcmVlSXRlbXMgPyBleHBhbmRlZCA6IG51bGwsIFwiYXJpYS1zZWxlY3RlZFwiOiBzZWxlY3RlZEl0ZW0sIFwiYXJpYS1jaGVja2VkXCI6IHNob3VsZFNob3dDaGVja2JveCA/IGFyaWFDaGVja2VkVmFsdWUgOiBudWxsLCBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzT3duVHJlZUl0ZW1zOiBoYXNPd25UcmVlSXRlbXMsIGlkOiBpdGVtSWQsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBpc1ZpcnR1YWxpemVkOiBoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWQsIG5vZGVUeXBlOiBub2RlVHlwZSwgcm9sZTogXCJ0cmVlaXRlbVwiLCBzZWxlY3RhYmxlVHlwZTogc2VsZWN0YWJsZSwgc2VsZWN0ZWQ6IHNlbGVjdGVkSXRlbSwgdGhlbWU6IHRoZW1lLCB0YWJJbmRleDogdGFiSW5kZXgsIG9uS2V5RG93bjogb25LZXlEb3duSGFuZGxlciwgcmVmOiB0cmVlSXRlbVJlZiwgaG92ZXJDb2xvcjogaG92ZXJDb2xvciB9KSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkSXRlbVdyYXBwZXIsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1pdGVtd3JhcHBlcmAsIGRlcHRoOiBpdGVtRGVwdGgsIGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCBoYXNDdXN0b21JY29uU2l6ZTogISFleHBhbmRJY29uU3R5bGVzPy5zaXplLCBpZDogYCR7aXRlbUlkfS1pdGVtd3JhcHBlcmAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBub2RlVHlwZTogbm9kZVR5cGUsIHNlbGVjdGFibGU6IHNlbGVjdGFibGUsIHN0eWxlOiBzdHlsZSwgdGhlbWU6IHRoZW1lLCByZWY6IG1lcmdlUmVmcyhyZWYsIGZvY3VzVHJhcEVsZW1lbnQpLCBvbkNsaWNrOiBoYW5kbGVPbkNsaWNrIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEV4cGFuZFdyYXBwZXIsIHsgc2l6ZTogZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSwgY29sb3I6IGV4cGFuZEljb25TdHlsZXM/LmNvbG9yLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWV4cGFuZGAsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgdGhlbWU6IHRoZW1lIH0sIGV4cGFuZGVkID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRXhwYW5kTW9yZUljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZXZyb25SaWdodEljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlLCBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplIH0pKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFNob3dDaGVja2JveCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZENoZWNrYm94V3JhcHBlciwgeyBoYXNBZGRpdGlvbmFsQ29udGVudDogISFhZGRpdGlvbmFsQ29udGVudCwgdGhlbWU6IHRoZW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc093blRyZWVJdGVtcyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEluZGV0ZXJtaW5hdGVDaGVja2JveCwgT2JqZWN0LmFzc2lnbih7fSwgY2hlY2tib3hQcm9wcywgeyBzdGF0dXM6IGNoZWNrZWRTdGF0dXMgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IGNoZWNrZWQ6IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4oY2hlY2tlZFN0YXR1cykgfSkpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJlZUl0ZW1BZGRpdGlvbmFsQ29udGVudCkpKSxcclxuICAgICAgICAgICAgICAgIGhhc0d1aWRlTGluZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAoaGllcmFyY2h5Q29udGV4dC5pc1ZpcnR1YWxpemVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbURlcHRoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogaXRlbURlcHRoIH0sIChfLCBkKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChWaXJ0dWFsaXplZEd1aWRlTGluZSwgeyBrZXk6IGBndWlkZWxpbmUtJHtkfWAsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tdmlydHVhbGl6ZWQtZ3VpZGVsaW5lLSR7ZH1gLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNldElubGluZVN0YXJ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBkLCBmYWxzZSwgZmFsc2UsIHRydWUpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweClgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhhc093blRyZWVJdGVtcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3VpZGVMaW5lLCB7IFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZ3VpZGVsaW5lYCwgdGhlbWU6IHRoZW1lLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgZ3VpZGVMaW5lTGVmdDogYGNhbGMoJHtjYWxjdWxhdGVPZmZzZXQoVHJlZU5vZGVUeXBlLmJyYW5jaCwgaXRlbURlcHRoLCBmYWxzZSwgZmFsc2UsIGZhbHNlKX0gKyAke2V4cGFuZEljb25TdHlsZXM/LnNpemUgIT09IHVuZGVmaW5lZCA/IGAke2V4cGFuZEljb25TdHlsZXMuc2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn0gLyAyIC0gMC41cHgpIGAgfSkpKSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkPy50eXBlICE9PSBUcmVlSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgc3RhYmxlLCBwcmUtbWVtb2lzZWQgdmFsdWUgKHNlZSBjaGlsZEhpZXJhcmNoaWVzIGFib3ZlKS5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSA9IGNoaWxkSGllcmFyY2hpZXNbY2hpbGRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHsgaXNPcGVuOiBleHBhbmRlZCwgdW5tb3VudE9uRXhpdDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyByb2xlOiBcImdyb3VwXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0LlByb3ZpZGVyLCB7IGtleTogY2hpbGQucHJvcHMuaXRlbUlkLCB2YWx1ZTogbmVzdGVkSGllcmFyY2h5VmFsdWUgfSwgY2hpbGQpKSkpO1xyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBpc01hY09TICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFZpc3VhbGx5SGlkZGVuLCBudWxsLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChBbm5vdW5jZSwgbnVsbCwgZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA/IGkxOG4uZXhwYW5zaW9uU3RhdGUuZXhwYW5kZWRcclxuICAgICAgICAgICAgICAgICAgICA6IGkxOG4uZXhwYW5zaW9uU3RhdGUuY29sbGFwc2VkKSkpKSkpO1xyXG59KTtcclxuLyoqXHJcbiAqIEN1c3RvbSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBSZWFjdC5tZW1vXHJcbiAqIE9ubHkgcmUtcmVuZGVyIFRyZWVJdGVtIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlXHJcbiAqL1xyXG5mdW5jdGlvbiBhcmVQcm9wc0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XHJcbiAgICAvLyBDaGVjayBpZiBpdGVtSWQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5pdGVtSWQgIT09IG5leHRQcm9wcy5pdGVtSWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBsYWJlbCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsICE9PSBuZXh0UHJvcHMubGFiZWwpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBkaXNhYmxlZCBzdGF0ZSBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmlzRGlzYWJsZWQgIT09IG5leHRQcm9wcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaWNvbiBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLmljb24gIT09IG5leHRQcm9wcy5pY29uKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgYWRkaXRpb25hbCBjb250ZW50IGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuYWRkaXRpb25hbENvbnRlbnQgIT09IG5leHRQcm9wcy5hZGRpdGlvbmFsQ29udGVudCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGhvdmVyIGNvbG9yIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaG92ZXJDb2xvciAhPT0gbmV4dFByb3BzLmhvdmVyQ29sb3IpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBjaGlsZHJlbiBjaGFuZ2VkIChmb3IgbmVzdGVkIHRyZWUgaXRlbXMpXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBjaGlsZHJlbiBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLmNoaWxkcmVuICE9PSBuZXh0UHJvcHMuY2hpbGRyZW4pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBzdHlsZXMgY2hhbmdlZFxyXG4gICAgLy8gVXNpbmcgdHlwZSBhc3NlcnRpb24gc2luY2Ugc3R5bGUgY29tZXMgZnJvbSBSZWFjdC5IVE1MQXR0cmlidXRlc1xyXG4gICAgaWYgKHByZXZQcm9wcy5zdHlsZSAhPT0gbmV4dFByb3BzLnN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy5sYWJlbFN0eWxlICE9PSBuZXh0UHJvcHMubGFiZWxTdHlsZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChwcmV2UHJvcHMudHJlZUl0ZW1TdHlsZXMgIT09IG5leHRQcm9wcy50cmVlSXRlbVN0eWxlcykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIEFsbCByZWxldmFudCBwcm9wcyBhcmUgZXF1YWwsIHNraXAgcmUtcmVuZGVyXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG4vKipcclxuICogTWVtb2l6ZWQgVHJlZUl0ZW0gY29tcG9uZW50XHJcbiAqIE9ubHkgcmUtcmVuZGVycyB3aGVuIHJlbGV2YW50IHByb3BzIGNoYW5nZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlIGZvciBsYXJnZSB0cmVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFRyZWVJdGVtID0gUmVhY3QubWVtbyhUcmVlSXRlbUNvbXBvbmVudCwgYXJlUHJvcHNFcXVhbCk7XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRyZWVJdGVtLmpzLm1hcCJdfQ== */"));
26940
+ }, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVJdGVtLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvSzRDIiwiZmlsZSI6IlRyZWVJdGVtLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCB7IHRyYW5zcGFyZW50aXplIH0gZnJvbSAncG9saXNoZWQnO1xyXG5pbXBvcnQgeyBBcnRpY2xlSWNvbiwgQ2hldnJvblJpZ2h0SWNvbiwgRXhwYW5kTW9yZUljb24sIEZvbGRlckljb24sIH0gZnJvbSAncmVhY3QtbWFnbWEtaWNvbnMnO1xyXG5pbXBvcnQgeyBUcmVlSXRlbUNvbnRleHQgfSBmcm9tICcuL1RyZWVJdGVtQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVJdGVtSGllcmFyY2h5Q29udGV4dCB9IGZyb20gJy4vVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdDb25maWdDb250ZXh0IH0gZnJvbSAnLi9UcmVlVmlld0NvbmZpZ0NvbnRleHQnO1xyXG5pbXBvcnQgeyBUcmVlVmlld0V4cGFuc2lvbkNvbnRleHQgfSBmcm9tICcuL1RyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCc7XHJcbmltcG9ydCB7IFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0JztcclxuaW1wb3J0IHsgVHJlZVZpZXdTZWxlY3RhYmxlIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGNoZWNrZWRTdGF0dXNUb0Jvb2xlYW4sIHVzZVRyZWVJdGVtLCB9IGZyb20gJy4vdXNlVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVPZmZzZXQsIGdldFRyZWVJdGVtTGFiZWxDb2xvciwgZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yLCBUcmVlTm9kZVR5cGUsIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IEkxOG5Db250ZXh0IH0gZnJvbSAnLi4vLi4nO1xyXG5pbXBvcnQgdXNlRGV2aWNlRGV0ZWN0IGZyb20gJy4uLy4uL2hvb2tzL3VzZURldmljZURldGVjdCc7XHJcbmltcG9ydCB7IHVzZUZvY3VzTG9jayB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZUZvY3VzTG9jayc7XHJcbmltcG9ydCB7IHVzZUlzSW52ZXJzZSB9IGZyb20gJy4uLy4uL2ludmVyc2UnO1xyXG5pbXBvcnQgeyBUaGVtZUNvbnRleHQgfSBmcm9tICcuLi8uLi90aGVtZS9UaGVtZUNvbnRleHQnO1xyXG5pbXBvcnQgeyBtZXJnZVJlZnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEFubm91bmNlIH0gZnJvbSAnLi4vQW5ub3VuY2UnO1xyXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJy4uL0NoZWNrYm94JztcclxuaW1wb3J0IHsgSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBJbmRldGVybWluYXRlQ2hlY2tib3hTdGF0dXMsIH0gZnJvbSAnLi4vSW5kZXRlcm1pbmF0ZUNoZWNrYm94JztcclxuaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJy4uL1RyYW5zaXRpb24nO1xyXG5pbXBvcnQgeyBWaXN1YWxseUhpZGRlbiB9IGZyb20gJy4uL1Zpc3VhbGx5SGlkZGVuJztcclxuY29uc3QgU3R5bGVkVHJlZUl0ZW0gPSBzdHlsZWQubGkgYFxuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDBcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWw3MDB9O1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGN1cnNvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbVdyYXBwZXJDdXJzb3IocHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMuc2VsZWN0YWJsZVR5cGUsIHByb3BzLm5vZGVUeXBlKX07XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcblxuICBwYWRkaW5nLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCBmYWxzZSwgZmFsc2UsIHByb3BzLmlzVmlydHVhbGl6ZWQpfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiBub25lO1xuXG4gICAgJiA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkXG4gICAgICAgICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gcHJvcHMudGhlbWUuY29sb3JzLmZvY3VzSW52ZXJzZVxyXG4gICAgOiBwcm9wcy50aGVtZS5jb2xvcnMuZm9jdXN9O1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgPiBkaXY6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMClcclxuICAgIDogcHJvcHMuc2VsZWN0ZWQgJiZcclxuICAgICAgICB0cmFuc3BhcmVudGl6ZSgwLjkyLCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDkwMCl9O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAke3Byb3BzID0+IGNhbGN1bGF0ZU9mZnNldChwcm9wcy5ub2RlVHlwZSwgcHJvcHMuZGVwdGgsIHRydWUsIGZhbHNlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBjYWxjdWxhdGVPZmZzZXQocHJvcHMubm9kZVR5cGUsIHByb3BzLmRlcHRoLCB0cnVlLCB0cnVlLCBwcm9wcy5pc1ZpcnR1YWxpemVkKX07XG4gICAgcGFkZGluZy1ibG9jay1lbmQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctYmxvY2stc3RhcnQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuICAgIHBhZGRpbmctcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDJ9O1xuXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5zZWxlY3RlZCAmJlxyXG4gICAgY3NzIGBcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzLmlzSW52ZXJzZVxyXG4gICAgICAgID8gcHJvcHMudGhlbWUuY29sb3JzLnRlcnRpYXJ5NTAwXHJcbiAgICAgICAgOiBwcm9wcy50aGVtZS5jb2xvcnMucHJpbWFyeTUwMH07XG4gICAgICAgICAgYmxvY2stc2l6ZTogMTAwJTtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBpbmxpbmUtc2l6ZTogJHtwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwMn07XG4gICAgICAgICAgaW5zZXQtYmxvY2stc3RhcnQ6IDA7XG4gICAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwO1xuICAgICAgICB9XG4gICAgICBgfVxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJHtwcm9wcyA9PiBnZXRIb3ZlckJhY2tncm91bmQoe1xyXG4gICAgaXNEaXNhYmxlZDogcHJvcHMuaXNEaXNhYmxlZCxcclxuICAgIGhvdmVyQ29sb3I6IHByb3BzLmhvdmVyQ29sb3IsXHJcbiAgICBpc0ludmVyc2U6IHByb3BzLmlzSW52ZXJzZSxcclxuICAgIHRoZW1lOiBwcm9wcy50aGVtZSxcclxufSl9O1xuICAgIH1cbiAgfVxuYDtcclxuZnVuY3Rpb24gZ2V0SG92ZXJCYWNrZ3JvdW5kKHsgaXNEaXNhYmxlZCwgaG92ZXJDb2xvciwgaXNJbnZlcnNlLCB0aGVtZSB9KSB7XHJcbiAgICBpZiAoaXNEaXNhYmxlZClcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKGhvdmVyQ29sb3IpXHJcbiAgICAgICAgcmV0dXJuIGhvdmVyQ29sb3I7XHJcbiAgICBjb25zdCB0cmFuc3BhcmVuY3kgPSBpc0ludmVyc2UgPyAwLjggOiAwLjk1O1xyXG4gICAgcmV0dXJuIHRyYW5zcGFyZW50aXplKHRyYW5zcGFyZW5jeSwgdGhlbWUuY29sb3JzLm5ldXRyYWw5MDApO1xyXG59XHJcbmNvbnN0IEljb25XcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBjb2xvcjogJHtwcm9wcyA9PiBnZXRUcmVlSXRlbUxhYmVsQ29sb3IocHJvcHMuaXNJbnZlcnNlLCBwcm9wcy5pc0Rpc2FibGVkLCBwcm9wcy50aGVtZSl9O1xuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICBtYXJnaW4tbGVmdDogMDtcblxuICBzdmcge1xuICAgIGhlaWdodDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pY29uU2l6ZXMubWVkaXVtfXB4O1xuICAgIHdpZHRoOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmljb25TaXplcy5tZWRpdW19cHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgfVxuYDtcclxuY29uc3QgU3R5bGVkTGFiZWxXcmFwcGVyID0gc3R5bGVkLnNwYW4gYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1MYWJlbENvbG9yKHByb3BzLmlzSW52ZXJzZSwgcHJvcHMuaXNEaXNhYmxlZCwgcHJvcHMudGhlbWUpfTtcbiAgd2lkdGg6IDEwMCU7XG5gO1xyXG5jb25zdCBTdHlsZWRFeHBhbmRXcmFwcGVyID0gc3R5bGVkLmRpdiBgXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgbWFyZ2luLXJpZ2h0OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzfTtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMuY29sb3IgfHxcclxuICAgIGdldFRyZWVJdGVtTGFiZWxDb2xvcihwcm9wcy5pc0ludmVyc2UsIHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnRoZW1lKX07XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHdpZHRoOiAkeyh7IHNpemUsIHRoZW1lIH0pID0+IHNpemUgIT09IHVuZGVmaW5lZCA/IGAke3NpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9O1xuICBoZWlnaHQ6ICR7KHsgc2l6ZSwgdGhlbWUgfSkgPT4gc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7c2l6ZX1weGAgOiB0aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNn07XG5gO1xyXG5jb25zdCBHdWlkZUxpbmUgPSBzdHlsZWQuZGl2IGBcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDh9O1xuICBib3R0b206IDA7XG4gIGluc2V0LWlubGluZS1zdGFydDogJHtwcm9wcyA9PiBwcm9wcy5ndWlkZUxpbmVMZWZ0fTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1pbmxpbmUtc3RhcnQ6IDFweCBzb2xpZFxuICAgICR7cHJvcHMgPT4gcHJvcHMuaXNJbnZlcnNlXHJcbiAgICA/IHRyYW5zcGFyZW50aXplKDAuNywgcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwxMDApXHJcbiAgICA6IHByb3BzLnRoZW1lLmNvbG9ycy5uZXV0cmFsMzAwfTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDE7XG5gO1xyXG5jb25zdCBWaXJ0dWFsaXplZEd1aWRlTGluZSA9IHN0eWxlZC5kaXYgYFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgYm90dG9tOiAwO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWlubGluZS1zdGFydDogMXB4IHNvbGlkXG4gICAgJHtwcm9wcyA9PiBwcm9wcy5pc0ludmVyc2VcclxuICAgID8gdHJhbnNwYXJlbnRpemUoMC43LCBwcm9wcy50aGVtZS5jb2xvcnMubmV1dHJhbDEwMClcclxuICAgIDogcHJvcHMudGhlbWUuY29sb3JzLm5ldXRyYWwzMDB9O1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogMTtcbmA7XHJcbmNvbnN0IFN0eWxlZENoZWNrYm94V3JhcHBlciA9IHN0eWxlZC5kaXYgYFxuICBtYXJnaW4tcmlnaHQ6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBkaXNwbGF5OiAke3Byb3BzID0+IChwcm9wcy5oYXNBZGRpdGlvbmFsQ29udGVudCA/ICdmbGV4JyA6ICdpbmxpbmUtZmxleCcpfTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6ICR7cHJvcHMgPT4gYGNhbGMoMTAwJSAtICR7cHJvcHMudGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDN9KWB9O1xuYDtcclxuY29uc3QgU3R5bGVkSXRlbVdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246ICR7cHJvcHMgPT4gKHByb3BzLmhhc0FkZGl0aW9uYWxDb250ZW50ID8gJ2NvbHVtbicgOiAncm93Jyl9O1xuICBhbGlnbi1pdGVtczogJHtwcm9wcyA9PiAocHJvcHMuaGFzQ3VzdG9tSWNvblNpemUgPyAnY2VudGVyJyA6ICdmbGV4LXN0YXJ0Jyl9O1xuICBjdXJzb3I6ICR7cHJvcHMgPT4gZ2V0VHJlZUl0ZW1XcmFwcGVyQ3Vyc29yKHByb3BzLmlzRGlzYWJsZWQsIHByb3BzLnNlbGVjdGFibGUsIHByb3BzLm5vZGVUeXBlKX07XG5gO1xyXG5jb25zdCBBZGRpdGlvbmFsQ29udGVudFdyYXBwZXIgPSBzdHlsZWQuZGl2IGBcbiAgbWFyZ2luLWJvdHRvbTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zcGFjZVNjYWxlLnNwYWNpbmcwNX07XG5gO1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW1Db21wb25lbnQgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFkZGl0aW9uYWxDb250ZW50LCBjaGlsZHJlbiwgaG92ZXJDb2xvciwgaWNvbiwgaW5kZXg6IGluZGV4UHJvcCwgbGFiZWwsIGxhYmVsU3R5bGUsIHN0eWxlLCB0ZXN0SWQsIHRvcExldmVsOiB0b3BMZXZlbFByb3AsIHRyZWVJdGVtU3R5bGVzLCAuLi5yZXN0IH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNJbnZlcnNlID0gdXNlSXNJbnZlcnNlKCk7XHJcbiAgICAvLyBSZWFkIGhpZXJhcmNoeSBpbmZvcm1hdGlvbiBmcm9tIGNvbnRleHQgKHJlZHVjZXMgY2xvbmVFbGVtZW50IG92ZXJoZWFkKVxyXG4gICAgY29uc3QgaGllcmFyY2h5Q29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoVHJlZUl0ZW1IaWVyYXJjaHlDb250ZXh0KTtcclxuICAgIC8vIFVzZSBjb250ZXh0IHZhbHVlcyBpZiBwcm9wcyBhcmUgbm90IHByb3ZpZGVkIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcclxuICAgIGNvbnN0IGluZGV4ID0gaW5kZXhQcm9wICE9PSB1bmRlZmluZWQgPyBpbmRleFByb3AgOiBoaWVyYXJjaHlDb250ZXh0LmluZGV4O1xyXG4gICAgY29uc3QgdG9wTGV2ZWwgPSB0b3BMZXZlbFByb3AgIT09IHVuZGVmaW5lZCA/IHRvcExldmVsUHJvcCA6IGhpZXJhcmNoeUNvbnRleHQuaXNUb3BMZXZlbDtcclxuICAgIC8vIENvbnN1bWUgc3BsaXQgY29udGV4dHMgZm9yIHJlZHVjZWQgcmUtcmVuZGVyIHNjb3BlXHJcbiAgICBjb25zdCB7IGl0ZW1Ub0ZvY3VzIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3U2VsZWN0aW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGhhbmRsZUV4cGFuZGVkQ2hhbmdlIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3RXhwYW5zaW9uQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGV4cGFuZEljb25TdHlsZXMsIGhhc0d1aWRlTGluZXMsIGhhc0ljb25zLCBpc1RvcExldmVsU2VsZWN0YWJsZSwgc2VsZWN0YWJsZSwgc2VsZWN0UGFyZW50cyA9IHRydWUsIH0gPSBSZWFjdC51c2VDb250ZXh0KFRyZWVWaWV3Q29uZmlnQ29udGV4dCk7XHJcbiAgICAvLyBQYXNzIHRoZSByZXNvbHZlZCB2YWx1ZXMgdG8gdXNlVHJlZUl0ZW1cclxuICAgIGNvbnN0IHByb3BzV2l0aEhpZXJhcmNoeSA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICBpbmRleCxcclxuICAgICAgICB0b3BMZXZlbCxcclxuICAgICAgICBpdGVtRGVwdGg6IGhpZXJhcmNoeUNvbnRleHQuZGVwdGgsXHJcbiAgICAgICAgcGFyZW50RGVwdGg6IGhpZXJhcmNoeUNvbnRleHQucGFyZW50RGVwdGgsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgeyBjb250ZXh0VmFsdWUsIGhhbmRsZUNsaWNrLCBoYW5kbGVLZXlEb3duIH0gPSB1c2VUcmVlSXRlbShwcm9wc1dpdGhIaWVyYXJjaHksIGZvcndhcmRlZFJlZik7XHJcbiAgICBjb25zdCB7IGlzRGlzYWJsZWQgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IHsgaXNNYWNPUyB9ID0gdXNlRGV2aWNlRGV0ZWN0KCk7XHJcbiAgICBjb25zdCBpMThuID0gUmVhY3QudXNlQ29udGV4dChJMThuQ29udGV4dCk7XHJcbiAgICBjb25zdCB7IGNoZWNrYm94Q2hhbmdlSGFuZGxlciwgY2hlY2tlZFN0YXR1cywgZXhwYW5kZWQsIGhhc093blRyZWVJdGVtcywgaXRlbURlcHRoLCBpdGVtSWQsIHJlZiwgc2VsZWN0ZWRJdGVtcywgfSA9IGNvbnRleHRWYWx1ZTtcclxuICAgIGNvbnN0IG5vZGVUeXBlID0gaGFzT3duVHJlZUl0ZW1zID8gVHJlZU5vZGVUeXBlLmJyYW5jaCA6IFRyZWVOb2RlVHlwZS5sZWFmO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZVxyXG4gICAgICAgID8gc2VsZWN0ZWRJdGVtcz8uWzBdPy5pdGVtSWQgPT09IGl0ZW1JZFxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IGFyaWFDaGVja2VkVmFsdWUgPSBzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUubXVsdGlcclxuICAgICAgICA/IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5pbmRldGVybWluYXRlXHJcbiAgICAgICAgICAgID8gJ21peGVkJ1xyXG4gICAgICAgICAgICA6IGNoZWNrZWRTdGF0dXMgPT09IEluZGV0ZXJtaW5hdGVDaGVja2JveFN0YXR1cy5jaGVja2VkXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgY29uc3QgW2lzSW5zaWRlVHJlZUl0ZW0sIHNldElzSW5zaWRlVHJlZUl0ZW1dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgdHJlZUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBmb2N1c1RyYXBFbGVtZW50ID0gdXNlRm9jdXNMb2NrKGlzSW5zaWRlVHJlZUl0ZW0pO1xyXG4gICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9ICdidXR0b24sIFtyb2xlPVwiYnV0dG9uXCJdLCBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYVtocmVmXSwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcclxuICAgIGNvbnN0IGdldEludGVyYWN0aXZlRWxlbWVudHMgPSBSZWFjdC51c2VDYWxsYmFjaygoY29udGFpbmVyLCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkuZmlsdGVyKGVsID0+ICFlbC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHxcclxuICAgICAgICAgICAgKGVsLnRhYkluZGV4ICE9PSB1bmRlZmluZWQgJiYgZWwudGFiSW5kZXggPj0gMCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiB3aXRoaW4gdGhlIGxhYmVsIGFuZCBhZGRpdGlvbmFsIGNvbnRlbnQgb2YgYSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiBuYXZpZ2F0ZSB0aHJvdWdoIGludGVyYWN0aXZlIGVsZW1lbnRzIHVzaW5nIHRoZSBgVGFiYCBrZXksIGFjdGl2YXRlIHRoZW0gd2l0aCBgRW50ZXJgIG9yIGBTcGFjZWAsXHJcbiAgICAgKiBhbmQgZXhpdCBvdXRzaWRlIGFuZCBmb2N1cyB0aGUgd2hvbGUgdHJlZSBpdGVtIHdpdGggYEVzY2FwZWAuXHJcbiAgICAgKiAqKi9cclxuICAgIGNvbnN0IGhhbmRsZUxhYmVsQW5kQWRkaXRpb25hbENvbnRlbnRLZXlEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBrZXksIHRhcmdldCwgY3VycmVudFRhcmdldCwgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTcGFjZSA9IGtleSA9PT0gJyAnO1xyXG4gICAgICAgIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSAnRXNjYXBlJztcclxuICAgICAgICBjb25zdCBpc1RhYiA9IGtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgY29uc3QgaXNBY3RpdmF0aW9uS2V5ID0gaXNFbnRlciB8fCBpc1NwYWNlO1xyXG4gICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LmNsb3Nlc3QoaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBgVGFiYCwgd2UgbmF2aWdhdGUgdGhyb3VnaCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbnNpZGUgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmIChpc1RhYiAmJiBpc0luc2lkZVRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVyYWN0aXZlRWxlbWVudHNMaXN0ID0gZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyhjdXJyZW50VGFyZ2V0LCBpbnRlcmFjdGl2ZUVsZW1lbnRzKTtcclxuICAgICAgICAgICAgLy8gRmlsdGVyIGxpc3Qgb2YgaW50ZXJhY3RpdmUgZWxlbWVudHMgd2hpY2ggYXJlIG9ubHkgaW5jbHVkZWQgZm9yIGN1cnJlbnQgdHJlZSBpdGVtXHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMgPSBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdC5maWx0ZXIoZWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2xvc2VzdFRyZWVJdGVtID0gZWwuY2xvc2VzdCgnW3JvbGU9XCJ0cmVlaXRlbVwiXScpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsb3Nlc3RUcmVlSXRlbSA9PT0gdHJlZUl0ZW1SZWYuY3VycmVudDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMuaW5kZXhPZihjdXJyZW50RWxlbWVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHNoaWZ0S2V5ID8gLTEgOiAxO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IGN1cnJlbnRUcmVlSXRlbUludGVyYWN0aXZlRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgdG90YWwpICUgdG90YWw7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gY3VycmVudFRyZWVJdGVtSW50ZXJhY3RpdmVFbGVtZW50c1tuZXh0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBQcmVzc2luZyBgRW50ZXJgIG9yIGBTcGFjZWAgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHRyaWdnZXIgaXRzIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgaWYgKGlzQWN0aXZhdGlvbktleSAmJiBpbnRlcmFjdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaW50ZXJhY3RpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE1vdmVzIGZvY3VzIG91dHNpZGUgdGhlIHRyZWUgaXRlbSBhbmQgZm9jdXNlcyB0aGUgdHJlZSBpdGVtIGl0c2VsZiB3aGVuIGBFc2NhcGVgIGlzIHByZXNzZWRcclxuICAgICAgICBpZiAoaXNFc2NhcGUpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHNldElzSW5zaWRlVHJlZUl0ZW0oZmFsc2UpO1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlSXRlbU5vZGUgPSB0cmVlSXRlbVJlZi5jdXJyZW50O1xyXG4gICAgICAgICAgICBpZiAodHJlZUl0ZW1Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0cmVlSXRlbU5vZGUuZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzSW5zaWRlVHJlZUl0ZW1dKTtcclxuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gUmVhY3QudXNlTWVtbygoKSA9PiBub2RlVHlwZSA9PT0gVHJlZU5vZGVUeXBlLmJyYW5jaCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KEZvbGRlckljb24sIHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0pKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KEFydGljbGVJY29uLCB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9KSksIFtub2RlVHlwZV0pO1xyXG4gICAgLy8gTWVtb2lzZSB0aGUgbGFiZWwgSlNYIHNvIHRoZSBgY2hlY2tib3hQcm9wc2AgbWVtbyBiZWxvdyBhY3R1YWxseSBoYXNcclxuICAgIC8vIGEgc3RhYmxlIGBsYWJlbFRleHRgIHJlZmVyZW5jZSBiZXR3ZWVuIHJlbmRlcnMuIFByZXZpb3VzbHkgdGhpc1xyXG4gICAgLy8gZWxlbWVudCB3YXMgcmUtY3JlYXRlZCBvbiBldmVyeSByZW5kZXIsIHdoaWNoIGZvcmNlZFxyXG4gICAgLy8gYGNoZWNrYm94UHJvcHNgIHRvIGFsc28gYmUgcmUtY3JlYXRlZCBhbmQgYW55IGZ1dHVyZSBSZWFjdC5tZW1vIG9uXHJcbiAgICAvLyBDaGVja2JveC9JbmRldGVybWluYXRlQ2hlY2tib3ggd291bGQgYWx3YXlzIGJhaWwgb3V0LlxyXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRMYWJlbFdyYXBwZXIsIHsgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBpc0ludmVyc2U6IGlzSW52ZXJzZSwgc3R5bGU6IGxhYmVsU3R5bGUsIGlkOiBgJHtpdGVtSWR9LWxhYmVsYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1sYWJlbGAgfSxcclxuICAgICAgICBoYXNJY29ucyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChJY29uV3JhcHBlciwgeyBpc0ludmVyc2U6IGlzSW52ZXJzZSwgdGhlbWU6IHRoZW1lLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCB8fCBpdGVtSWR9LWljb25gIH0sIGljb24gfHwgZGVmYXVsdEljb24pKSxcclxuICAgICAgICBsYWJlbCkpLCBbXHJcbiAgICAgICAgdGhlbWUsXHJcbiAgICAgICAgaXNEaXNhYmxlZCxcclxuICAgICAgICBpc0ludmVyc2UsXHJcbiAgICAgICAgbGFiZWxTdHlsZSxcclxuICAgICAgICBpdGVtSWQsXHJcbiAgICAgICAgdGVzdElkLFxyXG4gICAgICAgIGhhc0ljb25zLFxyXG4gICAgICAgIGljb24sXHJcbiAgICAgICAgZGVmYXVsdEljb24sXHJcbiAgICAgICAgbGFiZWwsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IHRyZWVJdGVtQWRkaXRpb25hbENvbnRlbnQgPSBSZWFjdC51c2VNZW1vKCgpID0+IGFkZGl0aW9uYWxDb250ZW50ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkaXRpb25hbENvbnRlbnRXcmFwcGVyLCB7IHRoZW1lOiB0aGVtZSwgaWQ6IGAke2l0ZW1JZH0tYWRkaXRpb25hbGNvbnRlbnR3cmFwcGVyYCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgPz8gaXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgIH0sIGFkZGl0aW9uYWxDb250ZW50KSkgOiBudWxsLCBbYWRkaXRpb25hbENvbnRlbnQsIHRoZW1lLCBpdGVtSWQsIHRlc3RJZF0pO1xyXG4gICAgLy8gU3RhYmxlIHBlci1jaGlsZCBoaWVyYXJjaHkgdmFsdWVzLiBUaGUgcmVmZXJlbmNlIG11c3Qgbm90IGNoYW5nZSBvblxyXG4gICAgLy8gcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgVHJlZVZpZXdTZWxlY3Rpb25Db250ZXh0LCBvdGhlcndpc2UgZXZlcnlcclxuICAgIC8vIG5lc3RlZCBUcmVlSXRlbSByZS1yZW5kZXJzIHRocm91Z2ggdGhlIGNvbnRleHQgYW5kIFJlYWN0Lm1lbW8gaXNcclxuICAgIC8vIGRlZmVhdGVkLlxyXG4gICAgY29uc3QgY2hpbGRIaWVyYXJjaGllcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvdW50ID0gUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheShjb3VudCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGFycltpXSA9IHtcclxuICAgICAgICAgICAgICAgIGRlcHRoOiBpdGVtRGVwdGggKyAxLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50RGVwdGg6IGl0ZW1EZXB0aCxcclxuICAgICAgICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhcnI7XHJcbiAgICB9LCBbY2hpbGRyZW4sIGl0ZW1EZXB0aF0pO1xyXG4gICAgLy8gTWVtb2l6ZSBpbmxpbmUgc3R5bGUgb2JqZWN0cyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcclxuICAgIGNvbnN0IGNoZWNrYm94SW5wdXRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHsgbWFyZ2luUmlnaHQ6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzAzIH0pLCBbdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDNdKTtcclxuICAgIGNvbnN0IGNoZWNrYm94TGFiZWxTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICB9KSwgW10pO1xyXG4gICAgLy8gUHJvcHMgc2hhcmVkIGJ5IENoZWNrYm94IGFuZCBJbmRldGVybWluYXRlQ2hlY2tib3hcclxuICAgIGNvbnN0IGNoZWNrYm94UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XHJcbiAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaGlkZUZvY3VzOiB0cnVlLFxyXG4gICAgICAgIGlkOiBgJHtpdGVtSWR9LWNoZWNrYm94YCxcclxuICAgICAgICBpbnB1dFN0eWxlOiBjaGVja2JveElucHV0U3R5bGUsXHJcbiAgICAgICAgbGFiZWxTdHlsZTogY2hlY2tib3hMYWJlbFN0eWxlLFxyXG4gICAgICAgIGxhYmVsVGV4dDogbGFiZWxUZXh0LFxyXG4gICAgICAgIG9uQ2hhbmdlOiBjaGVja2JveENoYW5nZUhhbmRsZXIsXHJcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxyXG4gICAgICAgIHRlc3RJZDogYCR7aXRlbUlkfS1jaGVja2JveGAsXHJcbiAgICB9KSwgW1xyXG4gICAgICAgIGlzRGlzYWJsZWQsXHJcbiAgICAgICAgaXRlbUlkLFxyXG4gICAgICAgIGNoZWNrYm94SW5wdXRTdHlsZSxcclxuICAgICAgICBjaGVja2JveExhYmVsU3R5bGUsXHJcbiAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgIGNoZWNrYm94Q2hhbmdlSGFuZGxlcixcclxuICAgIF0pO1xyXG4gICAgY29uc3Qgb25FeHBhbmRlZENsaWNrZWQgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGhhbmRsZUV4cGFuZGVkQ2hhbmdlKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgfSwgW2hhbmRsZUV4cGFuZGVkQ2hhbmdlLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IGhhbmRsZUV4cGFuZENsaWNrID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkV4cGFuZGVkQ2xpY2tlZChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2lzRGlzYWJsZWQsIG9uRXhwYW5kZWRDbGlja2VkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVPbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50ID0gY3VycmVudEVsZW1lbnQuY2xvc2VzdCgnYnV0dG9uLCBbcm9sZT1cImJ1dHRvblwiXSwgYVtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFtyb2xlPVwibWVudWl0ZW1cIl0nKTtcclxuICAgICAgICAvLyBQcmV2ZW50aW5nIHNlbGVjdGluZyB0aGUgaXRlbSB3aGVuIGNsaWNraW5nIG9uIGludGVyYWN0aXZlIGVsZW1lbnRzIHdoZW4gYHNlbGVjdGFibGVgIGlzIGBzaW5nbGVgXHJcbiAgICAgICAgaWYgKGludGVyYWN0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBJZiBzZWxlY3RQYXJlbnRzIGlzIGZhbHNlIGFuZCB0aGlzIGlzIGEgcGFyZW50IGl0ZW0sIGhhbmRsZSBleHBhbmQvY29sbGFwc2UgaW5zdGVhZCBvZiBzZWxlY3Rpb25cclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLnNpbmdsZSAmJlxyXG4gICAgICAgICAgICAhc2VsZWN0UGFyZW50cyAmJlxyXG4gICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEluIHNlbGVjdGFibGU9b2ZmIG1vZGUsIGNsaWNraW5nIGFueXdoZXJlIG9uIGEgcGFyZW50IGl0ZW0gdG9nZ2xlcyBleHBhbmQvY29sbGFwc2VcclxuICAgICAgICBpZiAoc2VsZWN0YWJsZSA9PT0gVHJlZVZpZXdTZWxlY3RhYmxlLm9mZiAmJiBoYXNPd25UcmVlSXRlbXMpIHtcclxuICAgICAgICAgICAgb25FeHBhbmRlZENsaWNrZWQoZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWxlY3RhYmxlID09PSBUcmVlVmlld1NlbGVjdGFibGUuc2luZ2xlKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZUNsaWNrKGV2ZW50LCBpdGVtSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCB0YWJJbmRleCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtVG9Gb2N1cyA9PT0gaXRlbUlkID8gMCA6IC0xO1xyXG4gICAgfSwgW2lzRGlzYWJsZWQsIGl0ZW1Ub0ZvY3VzLCBpdGVtSWRdKTtcclxuICAgIGNvbnN0IHNob3VsZFNob3dDaGVja2JveCA9IHNlbGVjdGFibGUgPT09IFRyZWVWaWV3U2VsZWN0YWJsZS5tdWx0aSAmJlxyXG4gICAgICAgIChpc1RvcExldmVsU2VsZWN0YWJsZSAhPT0gZmFsc2UgfHwgIXRvcExldmVsKTtcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gd2l0aGluIHRoZSB0cmVlIGl0ZW0uXHJcbiAgICAgKlxyXG4gICAgICogUHJlc3NpbmcgYEN0cmwgKyBFbnRlcmAgb3IgYENvbW1hbmQgKyBFbnRlcmAgZm9jdXNlcyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudCB3aXRoaW4gdGhlIHRyZWUgaXRlbVxyXG4gICAgICogYW5kIGxvY2tzIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtLlxyXG4gICAgICpcclxuICAgICAqIElmIHRoZSBmb2N1cyBpcyB3aXRoaW4gdGhlIGxhYmVsIG9yIGFkZGl0aW9uYWwgY29udGVudCwgaXQgaGFuZGxlcyBrZXkgZXZlbnRzIGZvciBpbnRlcmFjdGlvbiBlbGVtZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBJdCBhbHNvIGhhbmRsZXMgdGhlIG90aGVyIGtleXMgdG8gdHJpZ2dlciB0aGUgY2xpY2sgZXZlbnQgb24gdGhlIHRyZWUgaXRlbS5cclxuICAgICAqICoqL1xyXG4gICAgY29uc3Qgb25LZXlEb3duSGFuZGxlciA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsga2V5LCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xyXG4gICAgICAgIGNvbnN0IGlzRW50ZXIgPSBrZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNDdHJsT3JDb21tYW5kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xyXG4gICAgICAgIGNvbnN0IGlzQ3RybEVudGVyID0gaXNDdHJsT3JDb21tYW5kICYmIGlzRW50ZXI7XHJcbiAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBDdHJsICsgRW50ZXIgb3IgQ29tbWFuZCArIEVudGVyLCBmb2N1cyB0aGUgZmlyc3QgaW50ZXJhY3RpdmUgZWxlbWVudFxyXG4gICAgICAgIC8vIGFuZCBsb2NrIGZvY3VzIGluc2lkZSB0aGUgdHJlZSBpdGVtXHJcbiAgICAgICAgaWYgKGlzQ3RybEVudGVyICYmIHRhcmdldCA9PT0gY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgICBzZXRJc0luc2lkZVRyZWVJdGVtKHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcmFjdGl2ZUVsZW1lbnRzTGlzdCA9IGdldEludGVyYWN0aXZlRWxlbWVudHMoY3VycmVudFRhcmdldCwgaW50ZXJhY3RpdmVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRUb0ZvY3VzID0gaW50ZXJhY3RpdmVFbGVtZW50c0xpc3RbMF07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50VG9Gb2N1cykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFRvRm9jdXMuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRW5zdXJlIHZhbGlkIENTUyBzZWxlY3RvcnMgYnkgZXNjYXBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBwZXJpb2RzIGluIGl0ZW1JZClcclxuICAgICAgICBjb25zdCBzYWZlSXRlbUlkID0gQ1NTLmVzY2FwZShpdGVtSWQpO1xyXG4gICAgICAgIGNvbnN0IGlzV2l0aGluTGFiZWxPckFkZGl0aW9uYWxDb250ZW50ID0gdGFyZ2V0LmNsb3Nlc3QoYCMke3NhZmVJdGVtSWR9LWxhYmVsLCAjJHtzYWZlSXRlbUlkfS1hZGRpdGlvbmFsY29udGVudHdyYXBwZXJgKTtcclxuICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IGlzIHdpdGhpbiB0aGUgbGFiZWwgb3IgYWRkaXRpb25hbCBjb250ZW50LCBoYW5kbGUga2V5IGV2ZW50cyBmb3IgdGhvc2UgYXJlYXNcclxuICAgICAgICBpZiAoaXNXaXRoaW5MYWJlbE9yQWRkaXRpb25hbENvbnRlbnQpIHtcclxuICAgICAgICAgICAgaGFuZGxlTGFiZWxBbmRBZGRpdGlvbmFsQ29udGVudEtleURvd24oZXZlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIElmIHRoZSB0YXJnZXQgaXMgdGhlIHRyZWUgaXRlbSBpdHNlbGYsIGhhbmRsZSBrZXkgZG93biBmb3IgdGhlIHRyZWUgaXRlbVxyXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQpIHtcclxuICAgICAgICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9LCBbXHJcbiAgICAgICAgZ2V0SW50ZXJhY3RpdmVFbGVtZW50cyxcclxuICAgICAgICBpbnRlcmFjdGl2ZUVsZW1lbnRzLFxyXG4gICAgICAgIGl0ZW1JZCxcclxuICAgICAgICBoYW5kbGVMYWJlbEFuZEFkZGl0aW9uYWxDb250ZW50S2V5RG93bixcclxuICAgICAgICBoYW5kbGVLZXlEb3duLFxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJlZUl0ZW1Db250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBjb250ZXh0VmFsdWUgfSxcclxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgc3R5bGU6IHRyZWVJdGVtU3R5bGVzIH0sXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkVHJlZUl0ZW0sIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgXCJhcmlhLWV4cGFuZGVkXCI6IGhhc093blRyZWVJdGVtcyA/IGV4cGFuZGVkIDogbnVsbCwgXCJhcmlhLXNlbGVjdGVkXCI6IHNlbGVjdGVkSXRlbSwgXCJhcmlhLWNoZWNrZWRcIjogc2hvdWxkU2hvd0NoZWNrYm94ID8gYXJpYUNoZWNrZWRWYWx1ZSA6IG51bGwsIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLCBkZXB0aDogaXRlbURlcHRoLCBoYXNPd25UcmVlSXRlbXM6IGhhc093blRyZWVJdGVtcywgaWQ6IGl0ZW1JZCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIGlzVmlydHVhbGl6ZWQ6IGhpZXJhcmNoeUNvbnRleHQuaXNWaXJ0dWFsaXplZCwgbm9kZVR5cGU6IG5vZGVUeXBlLCByb2xlOiBcInRyZWVpdGVtXCIsIHNlbGVjdGFibGVUeXBlOiBzZWxlY3RhYmxlLCBzZWxlY3RlZDogc2VsZWN0ZWRJdGVtLCB0aGVtZTogdGhlbWUsIHRhYkluZGV4OiB0YWJJbmRleCwgb25LZXlEb3duOiBvbktleURvd25IYW5kbGVyLCByZWY6IHRyZWVJdGVtUmVmLCBob3ZlckNvbG9yOiBob3ZlckNvbG9yIH0pLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTdHlsZWRJdGVtV3JhcHBlciwgeyBcImRhdGEtdGVzdGlkXCI6IGAke3Rlc3RJZCA/PyBpdGVtSWR9LWl0ZW13cmFwcGVyYCwgZGVwdGg6IGl0ZW1EZXB0aCwgaGFzQWRkaXRpb25hbENvbnRlbnQ6ICEhYWRkaXRpb25hbENvbnRlbnQsIGhhc0N1c3RvbUljb25TaXplOiAhIWV4cGFuZEljb25TdHlsZXM/LnNpemUsIGlkOiBgJHtpdGVtSWR9LWl0ZW13cmFwcGVyYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG5vZGVUeXBlOiBub2RlVHlwZSwgc2VsZWN0YWJsZTogc2VsZWN0YWJsZSwgc3R5bGU6IHN0eWxlLCB0aGVtZTogdGhlbWUsIHJlZjogbWVyZ2VSZWZzKHJlZiwgZm9jdXNUcmFwRWxlbWVudCksIG9uQ2xpY2s6IGhhbmRsZU9uQ2xpY2sgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNPd25UcmVlSXRlbXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkRXhwYW5kV3JhcHBlciwgeyBzaXplOiBleHBhbmRJY29uU3R5bGVzPy5zaXplLCBjb2xvcjogZXhwYW5kSWNvblN0eWxlcz8uY29sb3IsIFwiZGF0YS10ZXN0aWRcIjogYCR7dGVzdElkIHx8IGl0ZW1JZH0tZXhwYW5kYCwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIG9uQ2xpY2s6IGhhbmRsZUV4cGFuZENsaWNrLCB0aGVtZTogdGhlbWUgfSwgZXhwYW5kZWQgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChFeHBhbmRNb3JlSWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hldnJvblJpZ2h0SWNvbiwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUsIHNpemU6IGV4cGFuZEljb25TdHlsZXM/LnNpemUgfSkpKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2hvd0NoZWNrYm94ID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkQ2hlY2tib3hXcmFwcGVyLCB7IGhhc0FkZGl0aW9uYWxDb250ZW50OiAhIWFkZGl0aW9uYWxDb250ZW50LCB0aGVtZTogdGhlbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3duVHJlZUl0ZW1zID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoSW5kZXRlcm1pbmF0ZUNoZWNrYm94LCBPYmplY3QuYXNzaWduKHt9LCBjaGVja2JveFByb3BzLCB7IHN0YXR1czogY2hlY2tlZFN0YXR1cyB9KSkpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tib3gsIE9iamVjdC5hc3NpZ24oe30sIGNoZWNrYm94UHJvcHMsIHsgY2hlY2tlZDogY2hlY2tlZFN0YXR1c1RvQm9vbGVhbihjaGVja2VkU3RhdHVzKSB9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlSXRlbUFkZGl0aW9uYWxDb250ZW50KSkpLFxyXG4gICAgICAgICAgICAgICAgaGFzR3VpZGVMaW5lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIChoaWVyYXJjaHlDb250ZXh0LmlzVmlydHVhbGl6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpdGVtRGVwdGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBpdGVtRGVwdGggfSwgKF8sIGQpID0+IChSZWFjdC5jcmVhdGVFbGVtZW50KFZpcnR1YWxpemVkR3VpZGVMaW5lLCB7IGtleTogYGd1aWRlbGluZS0ke2R9YCwgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS12aXJ0dWFsaXplZC1ndWlkZWxpbmUtJHtkfWAsIHRoZW1lOiB0aGVtZSwgaXNJbnZlcnNlOiBpc0ludmVyc2UsIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0SW5saW5lU3RhcnQ6IGBjYWxjKCR7Y2FsY3VsYXRlT2Zmc2V0KFRyZWVOb2RlVHlwZS5icmFuY2gsIGQsIGZhbHNlLCBmYWxzZSwgdHJ1ZSl9ICsgJHtleHBhbmRJY29uU3R5bGVzPy5zaXplICE9PSB1bmRlZmluZWQgPyBgJHtleHBhbmRJY29uU3R5bGVzLnNpemV9cHhgIDogdGhlbWUuc3BhY2VTY2FsZS5zcGFjaW5nMDZ9IC8gMiAtIDAuNXB4KWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9KSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaGFzT3duVHJlZUl0ZW1zICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChHdWlkZUxpbmUsIHsgXCJkYXRhLXRlc3RpZFwiOiBgJHt0ZXN0SWQgfHwgaXRlbUlkfS1ndWlkZWxpbmVgLCB0aGVtZTogdGhlbWUsIGlzSW52ZXJzZTogaXNJbnZlcnNlLCBndWlkZUxpbmVMZWZ0OiBgY2FsYygke2NhbGN1bGF0ZU9mZnNldChUcmVlTm9kZVR5cGUuYnJhbmNoLCBpdGVtRGVwdGgsIGZhbHNlLCBmYWxzZSwgZmFsc2UpfSArICR7ZXhwYW5kSWNvblN0eWxlcz8uc2l6ZSAhPT0gdW5kZWZpbmVkID8gYCR7ZXhwYW5kSWNvblN0eWxlcy5zaXplfXB4YCA6IHRoZW1lLnNwYWNlU2NhbGUuc3BhY2luZzA2fSAvIDIgLSAwLjVweCkgYCB9KSkpLFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCAoY2hpbGQsIGNoaWxkSW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQ/LnR5cGUgIT09IFRyZWVJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBzdGFibGUsIHByZS1tZW1vaXNlZCB2YWx1ZSAoc2VlIGNoaWxkSGllcmFyY2hpZXMgYWJvdmUpLlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZEhpZXJhcmNoeVZhbHVlID0gY2hpbGRIaWVyYXJjaGllc1tjaGlsZEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgeyBpc09wZW46IGV4cGFuZGVkLCB1bm1vdW50T25FeGl0OiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IHJvbGU6IFwiZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmVlSXRlbUhpZXJhcmNoeUNvbnRleHQuUHJvdmlkZXIsIHsga2V5OiBjaGlsZC5wcm9wcy5pdGVtSWQsIHZhbHVlOiBuZXN0ZWRIaWVyYXJjaHlWYWx1ZSB9LCBjaGlsZCkpKSk7XHJcbiAgICAgICAgICAgICAgICB9KSksXHJcbiAgICAgICAgICAgIGlzTWFjT1MgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsbHlIaWRkZW4sIG51bGwsXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEFubm91bmNlLCBudWxsLCBleHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgID8gaTE4bi5leHBhbnNpb25TdGF0ZS5leHBhbmRlZFxyXG4gICAgICAgICAgICAgICAgICAgIDogaTE4bi5leHBhbnNpb25TdGF0ZS5jb2xsYXBzZWQpKSkpKSk7XHJcbn0pO1xyXG4vKipcclxuICogQ3VzdG9tIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIFJlYWN0Lm1lbW9cclxuICogT25seSByZS1yZW5kZXIgVHJlZUl0ZW0gd2hlbiByZWxldmFudCBwcm9wcyBjaGFuZ2VcclxuICovXHJcbmZ1bmN0aW9uIGFyZVByb3BzRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcclxuICAgIC8vIENoZWNrIGlmIGl0ZW1JZCBjaGFuZ2VkXHJcbiAgICBpZiAocHJldlByb3BzLml0ZW1JZCAhPT0gbmV4dFByb3BzLml0ZW1JZCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGxhYmVsIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMubGFiZWwgIT09IG5leHRQcm9wcy5sYWJlbCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGRpc2FibGVkIHN0YXRlIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaXNEaXNhYmxlZCAhPT0gbmV4dFByb3BzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBpY29uIGNoYW5nZWRcclxuICAgIGlmIChwcmV2UHJvcHMuaWNvbiAhPT0gbmV4dFByb3BzLmljb24pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBhZGRpdGlvbmFsIGNvbnRlbnQgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5hZGRpdGlvbmFsQ29udGVudCAhPT0gbmV4dFByb3BzLmFkZGl0aW9uYWxDb250ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgaG92ZXIgY29sb3IgY2hhbmdlZFxyXG4gICAgaWYgKHByZXZQcm9wcy5ob3ZlckNvbG9yICE9PSBuZXh0UHJvcHMuaG92ZXJDb2xvcikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGNoaWxkcmVuIGNoYW5nZWQgKGZvciBuZXN0ZWQgdHJlZSBpdGVtcylcclxuICAgIC8vIFVzaW5nIHR5cGUgYXNzZXJ0aW9uIHNpbmNlIGNoaWxkcmVuIGNvbWVzIGZyb20gUmVhY3QuSFRNTEF0dHJpYnV0ZXNcclxuICAgIGlmIChwcmV2UHJvcHMuY2hpbGRyZW4gIT09IG5leHRQcm9wcy5jaGlsZHJlbikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHN0eWxlcyBjaGFuZ2VkXHJcbiAgICAvLyBVc2luZyB0eXBlIGFzc2VydGlvbiBzaW5jZSBzdHlsZSBjb21lcyBmcm9tIFJlYWN0LkhUTUxBdHRyaWJ1dGVzXHJcbiAgICBpZiAocHJldlByb3BzLnN0eWxlICE9PSBuZXh0UHJvcHMuc3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAocHJldlByb3BzLmxhYmVsU3R5bGUgIT09IG5leHRQcm9wcy5sYWJlbFN0eWxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHByZXZQcm9wcy50cmVlSXRlbVN0eWxlcyAhPT0gbmV4dFByb3BzLnRyZWVJdGVtU3R5bGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gQWxsIHJlbGV2YW50IHByb3BzIGFyZSBlcXVhbCwgc2tpcCByZS1yZW5kZXJcclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbi8qKlxyXG4gKiBNZW1vaXplZCBUcmVlSXRlbSBjb21wb25lbnRcclxuICogT25seSByZS1yZW5kZXJzIHdoZW4gcmVsZXZhbnQgcHJvcHMgY2hhbmdlLCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgZm9yIGxhcmdlIHRyZWVzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVHJlZUl0ZW0gPSBSZWFjdC5tZW1vKFRyZWVJdGVtQ29tcG9uZW50LCBhcmVQcm9wc0VxdWFsKTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VHJlZUl0ZW0uanMubWFwIl19 */"));
26754
26941
  var TreeItemComponent = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
26755
26942
  var _selectedItems$;
26756
26943
  var additionalContent = props.additionalContent,
@@ -26981,8 +27168,11 @@ var TreeItemComponent = /*#__PURE__*/forwardRef(function (props, forwardedRef) {
26981
27168
  }
26982
27169
  // If selectParents is false and this is a parent item, handle expand/collapse instead of selection
26983
27170
  if (selectable === TreeViewSelectable.single && !selectParents && hasOwnTreeItems) {
26984
- event.preventDefault();
26985
- event.stopPropagation();
27171
+ onExpandedClicked(event);
27172
+ return;
27173
+ }
27174
+ // In selectable=off mode, clicking anywhere on a parent item toggles expand/collapse
27175
+ if (selectable === TreeViewSelectable.off && hasOwnTreeItems) {
26986
27176
  onExpandedClicked(event);
26987
27177
  return;
26988
27178
  }
@@ -28311,5 +28501,5 @@ var Fieldset = /*#__PURE__*/forwardRef(function (props, ref) {
28311
28501
  }, legend), children));
28312
28502
  });
28313
28503
 
28314
- export { AIButton, AIButtonShape, AIButtonSize, AIButtonTextTransform, AIButtonType, AIButtonVariant, Accordion, AccordionButton, AccordionContext, AccordionIconPosition, AccordionItem, AccordionItemContext, AccordionPanel, Alert, AlertVariant, Announce, AppBar, AppBarPosition, Badge, BadgeColor, BadgeVariant, Banner, BlockQuote, BlockQuoteItem, Breadcrumb, BreadcrumbItem, Breakpoint, BreakpointScreenSize, BreakpointsContainer, Button, ButtonColor, ButtonGroup, ButtonGroupAlignment, ButtonGroupContext, ButtonGroupOrientation, ButtonIconPosition, ButtonShape, ButtonSize, ButtonTextTransform, ButtonType, ButtonVariant, Card, CardAlignment, CardBody, CardCalloutType, CardHeading, CharacterCounter, Checkbox, CheckboxTextPosition, Combobox, ComboboxStateChangeTypes, Container$1 as Container, CustomTab, Datagrid, DatePicker, DateTimePicker, DefinitionList, DefinitionListItem, DefinitionListType, Drawer, DrawerPosition, Dropdown, DropdownAlignment, DropdownButton, DropdownContent, DropdownDivider, DropdownDropDirection, DropdownExpandableMenuButton, DropdownExpandableMenuGroup, DropdownExpandableMenuItem, DropdownExpandableMenuListItem, DropdownExpandableMenuPanel, DropdownHeader, DropdownMenuGroup, DropdownMenuItem, DropdownMenuNavItem, DropdownSplitButton, EmptyState, EnumTooltipPosition, Fieldset, Flex, FlexAlignContent, FlexAlignItems, FlexBehavior, FlexDirection, FlexJustify, FlexWrap, Form, FormFieldContainer, FormGroup, GlobalStyles, Grid, GridAlignContent, GridAlignItems, GridAutoFlow, GridDisplay, GridItem, GridItemAlignSelf, GridItemJustifySelf, GridJustifyContent, GridJustifyItems, Heading, HideAtBreakpoint, HideAtBreakpointDisplayType, Hyperlink, HyperlinkIconPosition, I18nContext, IconAlignment, IconButton, IconSizes, IndeterminateCheckbox, IndeterminateCheckboxStatus, Input, InputBase, InputIconPosition, InputMessage, InputSize, InputType, InverseContext, Label, LabelPosition, List$1 as List, ListItem, LoadingIndicator, LoadingIndicatorType, Modal, ModalSize, MultipleSelectionStateChangeTypes, NativeSelect, NavTab, NavTabs, PageButtonSize, Pagination, PaginationType, Paragraph, PasswordInput, Popover, PopoverAlignment, PopoverContent, PopoverFooter, PopoverHeader, PopoverPosition, PopoverTrigger, ProgressBar, ProgressBarColor, ProgressRing, Radio, RadioGroup, RadioTextPosition, ResponsiveStepperContainer, Search, Select$1 as Select, SelectStateChangeTypes, SkipLink, SkipLinkContent, Spacer, SpacerAxis, Spinner, Step, Stepper, StepperLayout, StepperOrientation, StyledTooltip, Tab, TabPanel, TabPanelsContainer, TabScrollSpyPanel, Table, TableBody, TableCell, TableCellAlign, TableContext, TableDensity, TableHead, TableHeaderCell, TableHeaderCellScope, TablePagination, TableRow, TableRowColor, TableSortDirection, Tabs, TabsAlignment, TabsBorderPosition, TabsContainer, TabsIconPosition, TabsOrientation, TabsScrollSpyContainer, TabsTextTransform, Tag, TagColor, TagSize, Textarea, ThemeContext, TimePicker, Toast, ToastsContainer, Toggle, ToggleButton, ToggleButtonGroup, ToggleButtonGroupContext, ToggleButtonStyles, ToggleTextPosition, Tooltip, TooltipArrow, TooltipPosition, Transition, TreeItem, TreeItemComponent, TreeNodeType, TreeView, TreeViewConfigContext, TreeViewExpansionContext, TreeViewSelectable, TreeViewSelectionContext, TypographyColor, TypographyContextVariant, TypographyVisualStyle, VisuallyHidden, blockQuoteStyles, calculateOffset, checkedStatusToBoolean, defaultI18n, filterNullEntries, getChildrenIds, getChildrenItemIds, getChildrenItemIdsFlat, getDateFromString, getIconSizes, getInitialExpandedIds, getInitialItems, getListAlignment, getTreeItemLabelColor, getTreeItemWrapperCursor, inDateRange, isEqualArrays, isSelectedItemsChanged, magma, olListType, selectSingle, setBackgroundColor, setIconWidth, toggleAllMulti, toggleMulti, ulListType, useAccordion, useAccordionButton, useAccordionItem, useDataPagination, useDescendants, useDeviceDetect, useFocusLock, useForceUpdate, useGenerateId, useIsInverse, useMediaQuery, usePagination, useTreeItem, useTreeView };
28504
+ export { AIButton, AIButtonShape, AIButtonSize, AIButtonTextTransform, AIButtonType, AIButtonVariant, Accordion, AccordionButton, AccordionContext, AccordionIconPosition, AccordionItem, AccordionItemContext, AccordionPanel, Alert, AlertVariant, Announce, AppBar, AppBarPosition, Badge, BadgeColor, BadgeVariant, BadgeWeight, Banner, BlockQuote, BlockQuoteItem, Breadcrumb, BreadcrumbItem, Breakpoint, BreakpointScreenSize, BreakpointsContainer, Button, ButtonColor, ButtonGroup, ButtonGroupAlignment, ButtonGroupContext, ButtonGroupOrientation, ButtonIconPosition, ButtonShape, ButtonSize, ButtonTextTransform, ButtonType, ButtonVariant, Card, CardAlignment, CardBody, CardCalloutType, CardHeading, CharacterCounter, Checkbox, CheckboxTextPosition, Combobox, ComboboxStateChangeTypes, Container$1 as Container, CustomTab, Datagrid, DatePicker, DateTimePicker, DefinitionList, DefinitionListItem, DefinitionListType, Drawer, DrawerPosition, Dropdown, DropdownAlignment, DropdownButton, DropdownContent, DropdownDivider, DropdownDropDirection, DropdownExpandableMenuButton, DropdownExpandableMenuGroup, DropdownExpandableMenuItem, DropdownExpandableMenuListItem, DropdownExpandableMenuPanel, DropdownHeader, DropdownMenuGroup, DropdownMenuItem, DropdownMenuNavItem, DropdownSplitButton, EmptyState, EnumTooltipPosition, Fieldset, Flex, FlexAlignContent, FlexAlignItems, FlexBehavior, FlexDirection, FlexJustify, FlexWrap, Form, FormFieldContainer, FormGroup, GlobalStyles, Grid, GridAlignContent, GridAlignItems, GridAutoFlow, GridDisplay, GridItem, GridItemAlignSelf, GridItemJustifySelf, GridJustifyContent, GridJustifyItems, Heading, HideAtBreakpoint, HideAtBreakpointDisplayType, Hyperlink, HyperlinkIconPosition, I18nContext, IconAlignment, IconButton, IconSizes, IndeterminateCheckbox, IndeterminateCheckboxStatus, Input, InputBase, InputIconPosition, InputMessage, InputSize, InputType, InverseContext, Label, LabelPosition, List$1 as List, ListItem, LoadingIndicator, LoadingIndicatorType, Modal, ModalSize, MultipleSelectionStateChangeTypes, NativeSelect, NavTab, NavTabs, PageButtonSize, Pagination, PaginationType, Paragraph, PasswordInput, Popover, PopoverAlignment, PopoverContent, PopoverFooter, PopoverHeader, PopoverPosition, PopoverTrigger, ProgressBar, ProgressBarColor, ProgressRing, Radio, RadioGroup, RadioTextPosition, ResponsiveStepperContainer, Search, Select$1 as Select, SelectStateChangeTypes, SkipLink, SkipLinkContent, Spacer, SpacerAxis, Spinner, Step, Stepper, StepperLayout, StepperOrientation, StyledTooltip, Tab, TabPanel, TabPanelsContainer, TabScrollSpyPanel, Table, TableBody, TableCell, TableCellAlign, TableContext, TableDensity, TableHead, TableHeaderCell, TableHeaderCellScope, TablePagination, TableRow, TableRowColor, TableSortDirection, Tabs, TabsAlignment, TabsBorderPosition, TabsContainer, TabsIconPosition, TabsOrientation, TabsScrollSpyContainer, TabsTextTransform, Tag, TagColor, TagSize, Textarea, ThemeContext, TimePicker, Toast, ToastsContainer, Toggle, ToggleButton, ToggleButtonGroup, ToggleButtonGroupContext, ToggleButtonStyles, ToggleTextPosition, Tooltip, TooltipArrow, TooltipPosition, Transition, TreeItem, TreeItemComponent, TreeNodeType, TreeView, TreeViewConfigContext, TreeViewExpansionContext, TreeViewSelectable, TreeViewSelectionContext, TypographyColor, TypographyContextVariant, TypographyVisualStyle, VisuallyHidden, blockQuoteStyles, calculateOffset, checkedStatusToBoolean, defaultI18n, filterNullEntries, getChildrenIds, getChildrenItemIds, getChildrenItemIdsFlat, getDateFromString, getIconSizes, getInitialExpandedIds, getInitialItems, getListAlignment, getTreeItemLabelColor, getTreeItemWrapperCursor, inDateRange, isEqualArrays, isSelectedItemsChanged, magma, olListType, selectSingle, setBackgroundColor, setIconWidth, toggleAllMulti, toggleMulti, ulListType, useAccordion, useAccordionButton, useAccordionItem, useDataPagination, useDescendants, useDeviceDetect, useFocusLock, useForceUpdate, useGenerateId, useIsInverse, useMediaQuery, usePagination, useTreeItem, useTreeView };
28315
28505
  //# sourceMappingURL=index.js.map